PostgreSQL 的 Patroni 是一个系列, 目前已经写到了 4 , 实际我也不知道应该写到多少结束.
2019 PGCONF Asia 中有这么一篇演讲,关于POSTGRESQL 的高可用的问题,其中提到常用的三种Postgresql 的高可用方式, 其中repmgr 之前写过了,当然其实还不完善, 另外一个就是我们今天提到的 Patrnoi , 不大想一开始就是安装, 还是从他的起源和历史来,要不使用了,还不知道他从哪里来, 有可能从哪里去, 也枉然用过他.
一个开源的软件,你首先的知道他的来自于哪里, 要不哪天断供了,怎么办,patrnoi 来自于大欧罗巴的德国, 总公司位于柏林. 这是一家在欧洲知名的电商公司,主营的业务是主营时尚圈的事情, 当然还有表, 技术员工在1700人.
那这个软件的作者是谁 Alexander 和 Oleksii (其实有时候真该反思反思, MYSQL 的MHA 是日本人发明的, Postgresql Patroni 是德国人发明的, 当然还有 挪威人, 俄罗斯人发明的一些类似的东西),并且在世界范围使用.
为什么要使用patroni ,对比目前的常用的高可用的方式存在的问题
1 提升一个复制节点时无响应的情况下,存在脑裂的可能
2 单一的monitor节点对于集群的监控缺陷以及失败节点必须被清理的问题
3 多点监控中的分布一致性的问题
所以patrnoi 的诞生是因为这些问题在其他的方式中并没有被解决, Patrnoi 本身并没有在内部来解决上述问题,而是巧妙的使用了,大部分常用的DCS , Distributed configuration system (DCS), 例如 etcd zookeeper ,consul 等来作为解决上面3个问题的方法.
任何解决方案都有他的Pros 和 Cons , Patrnoi 的 Cons 又是什么, 例如当某个节点并未和主节点连接的情况下,可能Patrnoi 可能无法判断,还是显示从属节点. 另外还需要对于ZOOKEEPER 或者 ETCD 等有相关的知识, 设置上可能不如 repmgr 要简单方便.
当然也有一些不客气的话,对于POSTGRESQL 的其他的HA的方案,例如 DRBD, COROSYNC pacemaker ,repmgr 等方案 用上了 out of date 的词汇.
实际上, repmgr 的变化方式已经在某云使用了, 不知道他们听到如此的词汇作何感想.
实际上到底Patrnoi 有没有一个简单的 introduce
Patroni 是一个有 Zalando 研发的,完整由python 代码的开源产品,通过DCS来对postgresql 各个节点的状态进行判断, 在添加节点方面你需要通过你熟悉的手段来自行添加节点(repmgr在安装中会将节点加入), 同时还能定义类似 MHA 中某些节点一直是standby的角色,不参与mater的竞争, 其中还能定义一些触发行为,例如在 start , stops , failover 等状态下触发后,到底要继续做些什么. 并且也可以类似MHA 的方式手动切换主节点.
那么还有一个问题值得来说,到底 patroni 应该最低是几个几点, 这里建议是3个节点, 这和 MYSQL 的MHA 中建议的三个节点是一个意思, 大多数原则,防止由于网络等问题,造成的一些双数节点出现的不可预测的问题.
另外repmgr 本身是可以通过witeness的技术防止类似问题,但起步也是最少三个节点,但这又给了文字最初英文中,out of date 中提出的单点monitor 于口实. 所以patrnoi 的确在某些方面要比某些高可用的方案 ,严谨.
所以选择patrnoi 作为postgresql 的高可用的方式是有可圈可点. 另外通过docker K8S 部署patroni的方案也是有的,参见下图, 也是目前另一种更方便的并且适合大批量部署的方式.