合 PostgreSQL高可用之repmgr(1主2从+1witness)+Pgpool-II实现主从切换+读写分离+负载均衡
Tags: PG高可用Pgpool-II负载均衡读写分离pgpoolAdminrepmgr主从流复制主从切换witness
一、总体架构
本文最终需要实现的目标:
1、1主2从流复制
2、读写分离+负载均衡(pgpool-II)
3、主从自动切换(repmgr)
所有的节点:安装操作系统、创建PG用户目录、安装PG软件、安装repmgr
主库:只初始化主库、启动主库归档
二、环境申请
先申请4台机器,6.66节点最后再申请,反正docker容器都是即开即用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | -- 主库 docker rm -f lhrrepmgr64361 docker run -d --name lhrrepmgr64361 -h lhrrepmgr64361 \ --net=pg-network --ip 172.72.6.61 \ -p 64361:5432 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrpgall:1.0 \ /usr/sbin/init docker network connect bridge lhrrepmgr64361 -- 从库1 docker rm -f lhrrepmgr64362 docker run -d --name lhrrepmgr64362 -h lhrrepmgr64362 \ --net=pg-network --ip 172.72.6.62 \ -p 64362:5432 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrpgall:1.0 \ /usr/sbin/init docker network connect bridge lhrrepmgr64362 -- 从库2 docker rm -f lhrrepmgr64363 docker run -d --name lhrrepmgr64363 -h lhrrepmgr64363 \ --net=pg-network --ip 172.72.6.63 \ -p 64363:5432 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrpgall:1.0 \ /usr/sbin/init docker network connect bridge lhrrepmgr64363 -- Witness库 docker rm -f lhrrepmgr64364 docker run -d --name lhrrepmgr64364 -h lhrrepmgr64364 \ --net=pg-network --ip 172.72.6.64 \ -p 64364:5432 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrpgall:1.0 \ /usr/sbin/init docker network connect bridge lhrrepmgr64364 -- 重启4台机器 docker restart lhrrepmgr64361 lhrrepmgr64362 lhrrepmgr64363 lhrrepmgr64364 [root@docker35 ~]# docker ps | grep repmgr 31d3d31c1073 lhrbest/lhrpgall:1.0 "/usr/sbin/init" 41 hours ago Up 41 hours 5433-5435/tcp, 0.0.0.0:64364->5432/tcp lhrrepmgr64364 572d4ea2c072 lhrbest/lhrpgall:1.0 "/usr/sbin/init" 41 hours ago Up 41 hours 5433-5435/tcp, 0.0.0.0:64363->5432/tcp lhrrepmgr64363 6ded416b2016 lhrbest/lhrpgall:1.0 "/usr/sbin/init" 41 hours ago Up 41 hours 5433-5435/tcp, 0.0.0.0:64362->5432/tcp lhrrepmgr64362 fa38b58b8f3d lhrbest/lhrpgall:1.0 "/usr/sbin/init" 41 hours ago Up 41 hours 5433-5435/tcp, 0.0.0.0:64361->5432/tcp lhrrepmgr64361 [root@docker35 ~]# |
? 注意:
1、镜像lhrbest/lhrpgall:1.0中,申请的4台主机均已安装好PG 13和repmgr软件
2、PG安装方式为编译安装,数据库已初始化完成,用户为pg13
3、该镜像里已安装了PG13、PG12、PG11、PG10和PG9.6这几个版本,均为编译安装,本文使用PG13来操作
三、配置4台主机之间的互信
1 2 3 4 5 6 | -- 只在主库61节点上,以root用户执行: chmod +x sshUserSetup.sh ./sshUserSetup.sh -user pg13 -hosts "172.72.6.61 172.72.6.62 172.72.6.63 172.72.6.64" -advanced exverify -confirm -- 在每台主机修改权限,否则报错:Bad owner or permissions on /home/pg13/.ssh/config chmod 600 /home/pg13/.ssh/config |
依次输入:yes,回车和密码即可。
脚本下载:https://share.weiyun.com/57HUxNi
验证:
1 2 3 4 | ssh pg13@lhrrepmgr64361 date ssh pg13@lhrrepmgr64362 date ssh pg13@lhrrepmgr64363 date ssh pg13@lhrrepmgr64364 date |
第二次执行时不再提示输入yes,并且可以成功执行命令,则表示SSH对等性配置成功。
执行过程:
1 2 3 4 5 6 7 8 9 | [pg13@lhrrepmgr64361 /]# ssh pg13@lhrrepmgr64362 date Tue Apr 27 17:15:04 CST 2021 [root@lhrrepmgr64361 /]# [pg13@lhrrepmgr64361 /]# ssh pg13@lhrrepmgr64363 date Tue Apr 27 17:15:08 CST 2021 [root@lhrrepmgr64361 /]# [pg13@lhrrepmgr64361 /]# ssh pg13@lhrrepmgr64364 date Tue Apr 27 17:15:13 CST 2021 [pg13@lhrrepmgr64361 /]# |
四、配置repmgr
4.1、主库修改pg_hba.conf参数文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -- 进入主库 docker exec -it lhrrepmgr64361 bash su - pg13 cat >> /pg13/pgdata/pg_hba.conf <<"EOF" local repmgr repmgr md5 host repmgr repmgr 127.0.0.1/32 md5 host repmgr repmgr 172.72.6.0/24 md5 local replication repmgr md5 host replication repmgr 127.0.0.1/32 md5 host replication repmgr 172.72.6.0/24 md5 EOF |