内容目录
- • 前言 🌟
- • 环境准备 🛠️
- —— 1. 安装 Docker 和 Docker Compose
- —— 2. 获取 PostgreSQL Docker 镜像
- • 设置 PostgreSQL 主从环境配置文件 📜
- —— 3. 创建数据卷 📁
- —— 4. 编写 Docker Compose 配置文件 📝
- • 配置主节点的同步设置 🔧
- —— 5. 修改 postgresql.conf
- —— 6. 配置 pg_hba.conf 允许从节点访问
- • 配置从节点的同步设置 🔄
- • 启动服务 🚀
- • 验证主从同步是否成功 🕵️♂️
- • 常见问题及解决方法 💡
- —— 问题 1:无法连接到从节点
- —— 问题 2:主节点重启后从节点不同步
- —— 问题 3:数据同步延迟较大
- • 总结 📌
前言 🌟
在分布式数据库架构中,主从同步(Master-Slave Replication)是常见的数据高可用方案之一。本文将手把手教你如何在 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.conf
和 pg_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>
查看容器的启动日志,以确保主从节点正常启动。
验证主从同步是否成功 🕵️♂️
- 登录主节点:bashCopy code
docker exec -it <master_container_id> psql -U masteruser
- 创建一个测试数据库:sqlCopy code
CREATE DATABASE test_db;
- 登录从节点并检查同步状态:bashCopy code
docker 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 的主从同步环境,并解决了一些常见问题。掌握了这些技能后,您可以更轻松地部署可靠的数据库同步架构,进一步提升数据的高可用性。希望本文对您有所帮助,欢迎留言交流问题!
暂无评论内容