postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换),在postgresql官网看了pgpool-II的文档,发现部署比较麻烦,为了方便快捷还是使用docker部署。
一、简介
bitnami/postgresql-repmgr
是PostgreSQL HA
对应的docker镜像,PostgreSQL HA
是 PostgreSQL 集群解决方案,其中包括 PostgreSQL 复制管理器,这是一个用于管理 PostgreSQL 集群上的复制和故障转移的开源工具。
bitnami/pgpool
是Pgpool-II
对应的docker镜像,是 PostgreSQL 代理。它位于 PostgreSQL 服务器和它们的客户端之间,提供连接池、负载平衡、自动故障转移和复制。
二、部署环境
- 系统:CentOS Linux release 7.9.2009 (Core)
- postgresql Version:postgresql-repmgr:14
- pgpool Version:latest
- Docker Version:20.10.21
1. 拉取docker镜像
稳妥起见,这里选用了postgresql 14版本,其次如果遭遇docker镜像拉取网络问题,可以参考我的这篇博文打造属于自己的Docker Hub镜像代理网站,或者在镜像前加入私有镜像站。
docker pull bitnami/postgresql-repmgr:14
docker pull bitnami/pgpool:latest
#私有镜像站eg
docker pull hub-mirror.c.163.com/bitnami/postgresql-repmgr:14
docker pull hub-mirror.c.163.com/bitnami/pgpool:latest
2. 启动pgsql数据库
- 创建文件夹并授权
cd /
mkdir data
cd data
mkdir repmgr1
mkdir repmgr2
chmod 777 /data/repmgr1
chmod 777 /data/repmgr2
- 创建docker网络
docker network create pg-network
- 启动数据库
为了数据持久化,我们把/bitnami/postgresql目录挂载到/data/repmgr1目录下。以下两条命令可以自行做成bash脚本启动。
#pg-0数据库启动
docker run -v /data/repmgr1:/bitnami/postgresql --detach --restart always --name pg-0 -p 30350:5432 --network pg-network --env REPMGR_PARTNER_NODES=pg-0,pg-1 --env REPMGR_NODE_NAME=pg-0 --env REPMGR_NODE_NETWORK_NAME=pg-0 --env REPMGR_PRIMARY_HOST=pg-0 --env REPMGR_PASSWORD=123456 --env POSTGRESQL_PASSWORD=123456 bitnami/postgresql-repmgr:14
#pg-1数据库启动
docker run -v /data/repmgr2:/bitnami/postgresql --detach --restart always --name pg-1 -p 30351:5432 --network pg-network --env REPMGR_PARTNER_NODES=pg-0,pg-1 --env REPMGR_NODE_NAME=pg-1 --env REPMGR_NODE_NETWORK_NAME=pg-1 --env REPMGR_PRIMARY_HOST=pg-0 --env REPMGR_PASSWORD=123456 --env POSTGRESQL_PASSWORD=123456 bitnami/postgresql-repmgr:14
- 查看启动状态
docker ps
3. 启动Pgpool
注意,这里的--add-host
参数对应的IP是你本地的宿主机IP,请自行修改。
docker run --detach --restart always --name pgpool -p 9999:5432 \
--env PGPOOL_BACKEND_NODES=0:pg-0:30350,1:pg-1:30351 \
--env PGPOOL_SR_CHECK_USER=postgres \
--env PGPOOL_SR_CHECK_PASSWORD=123456 \
--env PGPOOL_ENABLE_LDAP=no \
--env PGPOOL_POSTGRES_USERNAME=postgres \
--env PGPOOL_POSTGRES_PASSWORD=123456 \
--env PGPOOL_ADMIN_USERNAME=postgres \
--env PGPOOL_ADMIN_PASSWORD=123456 \
--add-host=pg-0:192.168.1.204 \
--add-host=pg-1:192.168.1.204 \
bitnami/pgpool:latest
启动成功后,查看pgpool日志,通过pgpool可以实现数据库的负载均衡和读写分离。
4. 测试验证
- navicat连接pgpool,创建user表并插入数据,看看
pg-0
及pg-1
是否同步插入。
pgpool
创建user
表,插入数据
- 验证:
pg-0
、pg-1
同步插入
以上方法非常简单,最后程序直接访问9999端口即可实现读写分离。
缺点:
只能再一个宿主机上执行,不能跨主机。Pgpool和Pgsql有更多的高可用方法,后续还可以深入,多服务器部署及新增组件等。
参考地址:
官网WIKI
postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)
pgpool-II 4.3 中文手册
Postgresql通过docker进行高可用部署
使用docker部署pg集群(postgresql+postgis+pgrouting+pgpool)