谁说postgresql 没有靠谱的高可用 (5)_数据

接上期(如果刚刚看到这期的,可能看上去会有点晕,建议从头看,才看的明白)

关于IP 切换的方法,有不少,但还是愿意从简单的方式来,这里高可用涉及的问题有两个 1 主机的关闭  2 PostgreSQL 服务DOWN  ,至于怪异的一些例如PG 服务在,但无响应,这样的问题,不在考虑的范围内。

以下的方案仅仅适合双机方案(如果是三台机器,也可以仿照MHA 中priority,调整其中一台不参加切换)

这里使用的是keepalived的方式进行IP 的切换,之前几期是有包含repmgrd 自动切换从到主的方式,所以剩下的就是IP的切换问题。原因俩字,方便。

keepalived 的安装和配置这里就不讲了,主要的原理画一个图

谁说postgresql 没有靠谱的高可用 (5)_IP_02

就是主和从进行切换,而这里的witness可以不要,主要还是看需求(如果不知道,可以看前几期)。废话少说,以下几点是需要注意的

1 POSTGRESQL.CONF  监听地址要怎么设

2 当主机失败后,又启动了,怎么办的问题

问题 1 当然listen 要设置成 0.0.0.0 而不是本机的IP 了

问题 2 当然不能失败的主机启动后就抢回VIP,那正常工作的新主怎么办,更可怕的是那数据的一致性这个问题就要出问题,这可是不能马虎的,否则离,被离职就不远了。

处理这个问题就需要 keepalived 要设置 nopreempt 防止失败的主,再次启动后,抢占VIP,另外两个KEEPALIVED.conf中都要设置成 backup的状态,通过priority 来判断当前那个是主,另外priority 之间的差距不要设置的太大,否则你就可能会等待一段时间才能VIP 切换,当然很可能由于VIP 切换过快,导致 regmgr 还未将从库promote ,程序可能会报错,但这总比下面的情况要好,例如主库失败,又重启了,但你的promote 已经做完,这时如果VIP 没有切换,则数据就会出现不一致,所以VIP 切换还是快点好,哪怕promote 没有做完。

下面是一些KEEPALIVED 的配置

谁说postgresql 没有靠谱的高可用 (5)_IP_03

下面我们就做一下,看看这样灵不灵

1 目前有 21  22 两台机器 ,VIP 23

目前主库是在22上,关掉22的POSTGRESQL 的服务,等待REPMGRD 切换主从,于此同时通过KEEPALIVED来检测 PG的服务,然后进行切换IP 的工作。

1  正常状态 21 从库

谁说postgresql 没有靠谱的高可用 (5)_数据_04

2 关闭 22 ,22 已经无法连接

谁说postgresql 没有靠谱的高可用 (5)_高可用_05

3 查看当前的主从是否已经切换,IP是否切换了

谁说postgresql 没有靠谱的高可用 (5)_高可用_06

已经切换了,主从,21变为了主库,IP 也在后面进行了切换。

这样做的优点,

搭建简单,部署方便,可以应付大面积的高可用需求。

这样做的缺点

部分地方做的不严谨,需要进行调试和掌握相关的技巧。

到今天这里,repmgr 的问题以及命令基本上还没说,下期见

谁说postgresql 没有靠谱的高可用 (5)_IP_07