在 Docker 中实现 PostgreSQL 16 主从同步:详细教程及常见问题解答

前言 🌟

在分布式数据库架构中,主从同步(Master-Slave Replication)是常见的数据高可用方案之一。本文将手把手教你如何在 Docker 中配置 PostgreSQL 16 主从同步环境。本文会详细介绍各步骤,并解答一些常见问题,让您能够快速部署一个高效的数据库同步环境。

图片[1]-在 Docker 中实现 PostgreSQL 16 主从同步:详细教程及常见问题解答-连界优站

环境准备 🛠️

1. 安装 Docker 和 Docker Compose

如果尚未安装 Docker,请前往 Docker 官方网站 进行安装,并确保 Docker 和 Docker Compose 已配置成功:

bashCopy codedocker --version
docker-compose --version

2. 获取 PostgreSQL Docker 镜像

我们将使用 PostgreSQL 16 的 Docker 官方镜像,确保安装最新版本:

bashCopy codedocker pull postgres:16

设置 PostgreSQL 主从环境配置文件 📜

在 Docker 中实现主从同步需要配置两个实例:主节点和从节点。我们将分别为这两个节点创建不同的配置。

3. 创建数据卷 📁

为了持久化数据,我们需要为主从节点各自创建数据卷:

bashCopy codedocker volume create pgdata_master
docker volume create pgdata_slave

4. 编写 Docker Compose 配置文件 📝

新建一个 docker-compose.yml 文件,并在其中定义主从节点:

yamlCopy codeversion: '3'
services:
  postgres_master:
    image: postgres:16
    environment:
      POSTGRES_USER: masteruser
      POSTGRES_PASSWORD: masterpass
    volumes:
      - pgdata_master:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - pgnet

  postgres_slave:
    image: postgres:16
    environment:
      POSTGRES_USER: slaveuser
      POSTGRES_PASSWORD: slavepass
      POSTGRES_MASTER_HOST: postgres_master
    volumes:
      - pgdata_slave:/var/lib/postgresql/data
    networks:
      - pgnet

networks:
  pgnet:
    driver: bridge
volumes:
  pgdata_master:
  pgdata_slave:

配置主节点的同步设置 🔧

主从同步的关键在于主节点的 postgresql.confpg_hba.conf 文件配置。

5. 修改 postgresql.conf

在主节点中,我们需要启用日志流复制,将配置文件调整如下:

bashCopy codewal_level = replica
max_wal_senders = 5

6. 配置 pg_hba.conf 允许从节点访问

pg_hba.conf 中添加以下配置:

plaintextCopy codehost replication all 0.0.0.0/0 md5

💡 提示:请务必使用安全的访问控制,建议在生产环境中指定具体的 IP 地址范围。


配置从节点的同步设置 🔄

在从节点上,我们需要配置 recovery.conf 来指定主节点的连接信息。以下是示例配置:

bashCopy codestandby_mode = 'on'
primary_conninfo = 'host=postgres_master port=5432 user=replication_user password=replication_pass'

启动服务 🚀

完成所有配置后,运行以下命令启动 Docker 服务:

bashCopy codedocker-compose up -d

服务启动后,可以通过 docker logs <container_id> 查看容器的启动日志,以确保主从节点正常启动。


验证主从同步是否成功 🕵️‍♂️

  1. 登录主节点:bashCopy codedocker exec -it <master_container_id> psql -U masteruser
  2. 创建一个测试数据库:sqlCopy codeCREATE DATABASE test_db;
  3. 登录从节点并检查同步状态:bashCopy codedocker exec -it <slave_container_id> psql -U slaveuser -c "\l"

如果同步成功,从节点应该可以看到 test_db 数据库的存在。


常见问题及解决方法 💡

问题 1:无法连接到从节点

解决方法:检查 pg_hba.conf 和主从节点的网络配置是否正确,并确保防火墙未阻止连接。

问题 2:主节点重启后从节点不同步

解决方法:确认从节点的 recovery.conf 配置正确,必要时手动重启从节点,确保它能重新连接到主节点。

问题 3:数据同步延迟较大

解决方法:增加主节点的 max_wal_senders 配置或考虑增加从节点缓存大小,以减小延迟。


总结 📌

通过本文的教程,我们成功地在 Docker 中配置了 PostgreSQL 16 的主从同步环境,并解决了一些常见问题。掌握了这些技能后,您可以更轻松地部署可靠的数据库同步架构,进一步提升数据的高可用性。希望本文对您有所帮助,欢迎留言交流问题!

© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容