PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共1730人左右 1 + 2 + 3 + 4 +5) 4群(230+),另欢迎 OpenGauss 的技术人员加入。

f888d4bead409df5b53c013e8090ef77.png

基于alexander 的俄国口音,部分内容未能完全翻译。

be8bfbe9ef914d771ebb638b901e13ed.png

大家好我叫亚历山大.库是金,今天我给大家介绍的是patroni 3.0的一些新的规划和功能,主要有以下的一些议题,功能介绍,问题的修复,以及新的功能。

ae50441f97e90b4c158a9865f52a6c51.png

8db4e3f179fd9e26f4ea1aae975b07ac.png

Patrnoi 本身支持多种部署,包含最小化部署,支持多种的分布式组件,主要是ETCD ,通过分布式服务,来自动发现节点的状态情况,并将状态进行汇总,通过leader key 来标识当前的primary point 节点,同时这里状态会根据TTL 进行状态在获取,key 是有租约的,所以这些key会在租约到期失效后,进行key 的更新。

bc409214bf4a5f2de7971312c7d4a07d.png

d7129d3e107b663d03ba712990f4a208.png

当主库出现故障,无法进行KEY 的状态更新,相关的主键的信息就会被抹去,这里的故障的起因,有网络的原因或者主机的原因,数据库服务的原因等等。当超过最大的等待时间后,剩余的两个节点 B C 开始进行选主的竞争,因为他们都发现A 节点不存在了。

d37fc8c4a1f0255153bcc82fca16ad3f.png

80dd3753e07427d6d3ea654b9fd387f4.png

ffdbecaa16cc91ada4f6a6fea069c27f.png

在确认A 节点不存在无法进行连接的情况下, B C 会开始申请主节点,经过分布式选主,最终成功申请到leader的KEY 的节点将成为新的主节点。

f28517aa651c5b5b08df4bfb14cea155.png

fbcdfb5c100304707ac3637551916c53.png

在之前的版本的PATRIONI 中有一个问题关于 DCS 导致的误切换的问题,DCS(Distributed configuration store) ,之前的版本的patroni 主要依赖DCS 来解决LEADER 的选举和检测网络分区的工作,这里primary 节点必须在DCS 中更新数据,才能持续的成为主节点,但如果更新失败,则无法成为主节点,PG 会将主节点降级,为解决这个问题,我们引入了一个新的选项,failsafe_mode 他通过在DCS/config 中的全局动态配置进行启用,这里如果主节点可以通过patroni rest api访问到集群中的其他成员,那么这个主节点即使无法更新数据,那么也会持续保留主节点的状态,不会随意降级。

929412debd54a1f0aea56b52d6f73620.png

另一个更新主要是在生产系统中,有使用逻辑复制槽的情况,在进行主从切换的过程中,复制槽会丢失的问题,在之前我们不允许在Patroni 的系统中,重建逻辑复制槽,现在我们可以通过函数pg_replication_slot_advance 来重建复制槽。

3c9997539851ea574849adf0077993a1.png

同时在3.0 针对支持多个同步方式的从库,切换是基于replication lag 的,切换中会更倾向于安全切换。

cc727518deefe18c498d162494803bf0.png

支持PostgreS 13版本中PG_REWIND 中的 --restore-target-wal 的功能,通过但这里不包括在Debain/Ubuntu 中部署的PG13 14 版本。

3bdefc87ff6b3bbace1ca16115391261.png

在配置文件中,也进行了更新,比如针对与配置的参数预先发现其中的错误的问题。

613b120115e2e0efad4f3e47c2283d0c.png

另外还有一些软件方面的改进和增强,我们彻底不在支持低于3.6一下的PYTHON , 并且要使用psycopg3 ,这里我们也会在操作pg_ctl promote 命令前来通过预先的一个脚本,我们认为是一个钩子,来进行一些安全性的判断和切换前的预先的工作。通过也在关闭节点命令前会通过脚步来做一些准备工作,必然把pgboucer先暂停了的工作等等。

efd1d0a9112666775bdea9755099bc7d.png

fc9062c9f9ee0331f02155668f5ee60c.png

之前一些链接在判断的时候,是长连接,在这样的方式下会等待很长时间来完成准备的工作,这边进行改善,通过TTL 秒的方式将连接进行关闭。

d34ee29be0e6e0dc36877fa177e3206f.png

另外在判断PG 是否存活中,也需要去检测PGDATA 变量, 之前是通过os.listdir()函数来进行判断,但是这里反映的速度很慢,这里我们改变方式通过pg_control文件来获得第一次的数据。

761a442e12b05fe68e57d506ad7a3abd.png

在之前的版本,patroni 在更新状态前会等待postgres 被关闭,但基于PG的关闭在某些情况比较慢,而现在patroni 判断一个节点的关闭是通过pg_controldata 中打印出shut down即可,判断节点关闭。

54fb66e9154760692251672fc352ba61.png

今天是星期六,外面的阳光真好,我没有那么多的时间说,(这不是杜撰这是他的原话),5年前PG10 添加的功能,关于同步复制节点的设置,我们看下面的例子 ANY2(node1 node2)  ANY2(node1,node2,node3),如果要切换我应该切换那个,谁能告诉我怎么办? 

59d4fd843467e50a55054dba98ab613a.png

3be48ac6d58f659c5cd4f600a0a564b7.png

当节点M4加入后,怎么修改相关的配置选择项,怎么能保证修改的选择项是正确的。

52ab4bc5b26d8246166ea504cf379224.png

另外我们也准备在patroni 中整合关于复制槽failover的部分,虽然patroni我们有了自己的解决方案,但是我们有一些问题没有解决,所以我们在后面要整合新的解决方案,来弥补我们自己的解决方案的问题。

b0bb0fcfcd05b0d198925295d159e1aa.png

除此以外,我们还将添加对于citus的支持的部分,对于read scaling 的改造是简单的。

5ec6b9047d09488d9dbf34a925557cd4.png

baf7c27a1e21be2d28abfc2d7bd805ab.png

772f16affd2942ecf0daaa0582e2001a.png

基于我们之前的一些问题,我们建议老的版本尽快升级到3.0 .

832d0f2f502aec09baa22a70fef503c7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值