PG高可用集群之Patroni + etcd + HAProxy + keepalived + Prometheus + Grafana监控 部署

1    2923    14

Tags:

👉 本文共约11541个字,系统预计阅读时间或需44分钟。

高可用测试

1. 高可用测试 Keepalived

注意:可以将2个节点的state都配置为backup,将priority都配置为100来避免自动来回切换,而影响客户体验。

测试类型测试方式测试命令测试结果
进程故障1. 主端killall进程killall keepalivedVIP从主端自动转移到备端,5000端口和5001端口连接正常
--systemctl start keepalivedVIP从备端自动转移到主端,5000端口和5001端口连接正常。
-2. 备端killall进程systemctl stop keepalivedVIP在主端正常运行,5000端口和5001端口连接正常
--systemctl start keepalivedVIP在主端正常运行,5000端口和5001端口连接正常
-3. 主端同时kill所有进程-主端VIP未卸掉,备端也启动VIP,此时主备端均存在VIP(异常现象),5000端口和5001端口连接正常
--systemctl start keepalivedVIP转移到主端正常运行,备端无VIP,5000端口和5001端口连接正常
-4. 主端只kill主进程kill -9VIP从主端自动转移到备端,VIP只在备端启动,5000端口和5001端口连接正常
--systemctl start keepalivedVIP转移到主端正常运行,备端无VIP,5000端口和5001端口连接正常
-5. 主端只kill子进程-VIP从主端自动转移到备端,等待主进程自动生成子进程后,VIP从备端自动转移到主端,5000端口和5001端口连接正常
-6. 备端kill 进程-IP在主端正常运行,5000端口和5001端口连接正常
网卡故障1. 主端down网卡ifdown eth0VIP从主端自动转移到备端,PostgreSQL发生故障转移到其中一个备库,5000端口和5001端口连接正常,patroni和etcd均不显示故障节点
-2. 主端up网卡ifup eth0VIP从备端自动转移到主端,故障节点以备库角色添加到集群,patroni和etcd节点状态显示正常,5000端口和5001端口连接正常
-3. 备端down网卡ifdown eth0VIP在主端正常运行,5000端口和5001端口连接正常,patroni和etcd均不显示故障节点,故障节点上的各个进程还在运行
-4. 备端up网卡ifup eth0patroni和etcd节点状态显示正常

2. 高可用测试 HAProxy

测试类型测试方式测试命令测试结果
进程故障1. 主端killall进程killall haproxykeepalived 未检测 haproxy 进程,自动将VIP从主端转移到备端,5000端口和5001端口连接正常
--systemctl start haproxykeepalived 检测到 haproxy 进程,自动将VIP从备端转移到主端,5000端口和5001端口连接正常
-2. 备端killall进程killall haproxyVIP在主端正常运行,5000端口和5001端口连接正常
--systemctl start haproxyVIP在主端正常运行,5000端口和5001端口连接正常
-3. 主端同时kill所有进程-keepalived 未检测 haproxy 进程,自动将VIP从主端转移到备端,5000端口和5001端口连接正常
--systemctl start haproxykeepalived 检测到 haproxy 进程,自动将VIP从备端转移到主端,5000端口和5001端口连接正常
-4. 主端只kill主进程-keepalived 未检测 haproxy 进程,自动将VIP从主端转移到备端,5000端口和5001端口连接正常
--systemctl start haproxykeepalived 检测到 haproxy 进程,自动将VIP从备端转移到主端,5000端口和5001端口连接正常
-5. 主端只kill子进程-haproxy 的所有进程都死了,keepalived 未检测 haproxy 进程,自动将VIP从主端转移到备端,5000端口和5001端口连接正常
--systemctl start haproxykeepalived 检测到 haproxy 进程,自动将VIP从备端转移到主端,5000端口和5001端口连接正常

3. 高可用测试 Patroni

以下是在Patroni开启了auto failover的情况下进行测试

测试类型测试方式测试命令测试结果
进程故障1. 主端killall进程killall patroni1. 触发故障切换到备库其中一个节点,备库另一个节点同步新主库,切换时间在30秒内 2. 原主库(pgtest1)的 PostgreSQL 被关闭 3. etcd haproxy keepalived 在原主库正常运行,VIP 运行在原主库 4. VIP + 5000端口连接切换后的新主库,VIP + 5001端口连接另一个备库
--systemctl start patroni原主库(pgtest1)变成新主库(pgtest2)的备库
-2. 主库kill patroni 进程kill -91. 触发故障切换到备库其中一个节点,备库另一个节点同步新主库,切换时间在30秒内 2. 原主库(pgtest1)的 PostgreSQL 还在运行,并且是读写模式 3. etcd haproxy keepalived 在原主库正常运行,VIP 运行在原主库 4. VIP + 5000端口连接切换后的新主库,VIP + 5001端口连接另一个备库
--systemctl start patroni原主库(pgtest1)被 pg_rewind 成新主库(pgtest2)的备库
-3. 一个备库kill patroni 进程-1. 使用killall,将会同时关闭备库,使用kill,此备库的 PostgreSQL 还在以只读模式运行,且与主库正常同步数据 2. VIP + 5000端口正常连接主库,VIP+5001端口不能连接此备库,可以连接另一个备库 3. 主库与另一个备库不受影响 4. 此备库上的 etcd haproxy keepalived 正常运行
--systemctl start patroni自动恢复正常状态,与主库保持同步
-4. 两个备库kill patroni 进程-1. 使用killall,将会同时关闭备库,使用kill,两个备库的 PostgreSQL 还在以只读模式运行,且与主库正常同步数据 2. VIP + 5000端口只连接主库,VIP + 5001端口连接失败 3. 主库不受影响 4. 备库上的 etcd haproxy keepalived 正常运行
--systemctl start patroni自动恢复正常状态,与主库保持同步

4. 高可用测试 etcd

测试类型测试方式测试命令测试结果
进程故障1. 主库kill etcd 进程-不影响主库和备库, patroni 会连接其它节点上的etcd,VIP+5000/5001端口连接正常
-2. 一个备库停止 etcd 进程-不影响主库和备库, patroni 会连接其它节点上的etcd,VIP+5000/5001端口连接正常
-3. 两个备库停止 etcd 进程-此时超过了etcd的最大允许故障节点数,主备库3个节点均以只读模式运行,VIP + 5000端口连接失败,VIP + 5001端口轮询连接主备库3个节点
--先启动第一个备库的 etcd 进程主库从只读模式切换成读写模式,主从数据同步恢复正常,VIP + 5000/5001端口连接正常
--再启动第二个备库的 etcd 进程自动恢复正常状态,与主库保持同步

5. 高可用测试 PostgreSQL

测试类型测试方式测试命令测试结果
-停主库PostgreSQL实例-主库被Patroni自动拉起,VIP + 5000/5001端口连接正常
-停备库PostgreSQL实例-备库被Patroni自动拉起,VIP + 5000/5001端口连接正常

6. 高可用测试 操作系统

测试类型测试方式测试命令测试结果
-停PostgreSQL主库主机(同时是haproxy + keepalived 的主机)reboot1. 触发故障切换到备库其中一个节点,备库另一个节点同步新主库,切换时间在30秒内 2. VIP漂移到备库 3. VIP + 5000端口连接切换后的新主库,VIP + 5001端口连接另一个备库
--启动原主库(pgtest1)变成新主库(pgtest2)的备库,VIP从keepalived的备端自动转移到主端,5000端口和5001端口连接正常
-停备库的主机就不测试了--

7. 读写分离+负载均衡测试

通过 5000 端口提供读写服务,通过 5001 端口提供只读服务。

可以看出,5000是读写,而5001是只读+负载均衡。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

1 条回复

  1. Avatar photo xiaopengfei说道:

    笔耕不辍,我辈学习楷模。

发表回复