Docker实现postgresql的热备与自动切换

新需求新需求,老板又整新活啦,具体如下:

给某厂开发了一套管理软件,部署在他们的机房。一共两台服务器,做灾备和应急切换。两台服务器上都会部署web服务,数据库一主一从。数据库用的是postgresql,网上相关的资料有很多,这边会使用docker来简单部署,只有简单的几条命令!!!

注意:下文中server-0、server-1代表两台宿主服务器,pg-0、pg-1代表postgresql容器

试验中,192.168.77.102为server-0的ip,192.168.77.103为server-1的ip,在下列命令中出现时,需要替换为实际地址

第1步:修改server-0、server-1的hosts文件

server-0中的hosts添加:

127.0.0.1             pg-0
192.168.77.103  pg-1

server-1中的hosts添加:

127.0.0.1            pg-1
192.168.77.102  pg-0

第2步:安装postgresql

这边使用的镜像为bitnami/postgresql-repmgr,有兴趣的可自行查看

server-0中运行

docker run -dit --restart always --name pg-0 \
  --net=host \
  --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=repmgrpass \
  --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \
  --env POSTGRESQL_USERNAME=customuser \
  --env POSTGRESQL_PASSWORD=custompassword \
  --env POSTGRESQL_DATABASE=customdatabase \
  -v /root/postgresql/data:/bitnami/postgresql/ \
  -v /root/postgresql/custom-conf/:/bitnami/repmgr/conf/ \
  -v /root/postgresql/conf:/opt/bitnami/postgresql/conf \
  bitnami/postgresql-repmgr:14

server-1中运行

docker run -dit --restart always --name pg-1 \
  --net=host \
  --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=repmgrpass \
  --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \
  --env POSTGRESQL_USERNAME=customuser \
  --env POSTGRESQL_PASSWORD=custompassword \
  --env POSTGRESQL_DATABASE=customdatabase \
  -v /root/postgresql/data:/bitnami/postgresql/ \
  -v /root/postgresql/custom-conf/:/bitnami/repmgr/conf/ \
  -v /root/postgresql/conf:/opt/bitnami/postgresql/conf \
  bitnami/postgresql-repmgr:14

这步完成之后,其实已经实现了热备与故障自动切换的功能了,有兴趣的同学可自行尝试验证

第3步:安装 pgpool

server-0和server-1中运行

docker run -dit --restart always --name pgpool \
--env PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 \
--env PGPOOL_SR_CHECK_USER=customuser \
--env PGPOOL_SR_CHECK_PASSWORD=custompassword \
--env PGPOOL_ENABLE_LDAP=no \
--env PGPOOL_POSTGRES_USERNAME=postgres \
--env PGPOOL_POSTGRES_PASSWORD=adminpassword \
--env PGPOOL_ADMIN_USERNAME=admin \
--env PGPOOL_ADMIN_PASSWORD=adminpassword \
--add-host=pg-0:192.168.77.102 \
--add-host=pg-1:192.168.77.103 \
-p 9999:5432 \
bitnami/pgpool:4

这里要注意的是两个--add-host

END,大功告成

之后,无论server-0还是server-1中的服务都可以用127.0.0.1:9999的地址访问数据库,并且自动读写分离

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容