![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Patroni
Patroni源码分析,深入理解
howard_shooter
交流微信:17625988619
展开
-
Patroni如何利用etcd选举主库
patroni不是使用etcd的选举机制,而是利用etcd的原子性写的机制,来决定主库。patroni在所有健康的节点中,尝试对同一个key值进行写,成功写入的节点,视为获得锁,成功主库,同时,这个key值有生存周期,主库要周期性的维护这个key值,其它健康节点周期性的尝试获取这个锁,如果主库因为各种原因,不能维持这个锁,key值就不复存在,健康的备节点就可以抢夺,成为主节点。......原创 2022-08-30 10:04:54 · 324 阅读 · 0 评论 -
etcd的/service/pg_cluster/leader动态反映Patroni主节点的变化
etcd中的/service/pg_cluster/leader反映patroni集群中的主节点的动态变化,主节点改变则/service/pg_cluster/leader值改变,没有主节点则/service/pg_cluster/leader不存在。patroni判断集群中的主节点,也是通过查询/service/pg_cluster/leader获得的。......原创 2022-04-08 19:52:52 · 221 阅读 · 0 评论 -
Patroni的Pending restart解决
查看patroni状态时出现pending_restart,如鲠在喉。可能的原因:1. dynamic configuration 设置了参数(edit-config),但是这个参数需要重启pg。2.controldata 中的 max_connections、max_prepared_transactions、max_locks_per_transaction 比dynamic configuration中的值大。解决方法是在patroni.yml中或edit-config中设置这..原创 2022-08-30 10:13:51 · 440 阅读 · 0 评论 -
Patroni的maximum_lag_on_failover
maximum_lag_on_failover这个值原来是1M,但是发现,通过reboot模拟主机宕机时,有时会出现两个备机的lag都是16M的情况,此时会影响备机升为主机。猜测原因可能是:主机生成完一个wal文件,备机正在同步这个文件时,重启。经过查看,主机比备机多一个wal文件,而一个wal文件大小就是16M。patroni的maximum_lag_on_failover 和 pg 的 wal_segsize 的大小,需在可用性和持久性之间做衡量。降低恢复的条件限制,就更容易拉起服务原创 2022-08-30 10:18:00 · 253 阅读 · 0 评论 -
Patroni的pause和resume功能
例如,如果想利用patroni搭建postgresql/opengauss的主从关系,但是不想使用patroni管理集群,仍然保留主从关系,就可以先在各个节点上启动patroni,待建立起主从关系后,在任意节点执行patronictl.py -c patroni.yml pause,然后停掉(kill)patroni和etcd。如果稍后向让patroni管理postgresql/opengauss集群,则可以执行(现在各个节点启动patroni)Patroni有个很实用的功能,就是命令。原创 2022-08-22 17:56:06 · 481 阅读 · 0 评论 -
Patroni的执行流
有些任务,例如数据库初始化,数据库重启,rewind等,会开启一个线程来执行,而不是在主循环的执行流中执行,这个操作通过调用 Ha.AsyncExecutor.try_run_async() 来执行,有意思的是,使用这个函数,只允许系统中有一个正在运行的异步线程,这个异步线程的任务执行完之前,不允许启动新的异步线程,这样设计,估计是防止系统中的线程太多。异步任务会改变一些状态,主线程循环体中会判断这些状态做相应的动作,有时候主线程要执行完几个循环,异步任务才能完成,这也没什么关系。...原创 2022-08-29 14:30:35 · 318 阅读 · 0 评论 -
Patroni 使用 raft 作为 DCS
所以,不需要另外安装和配置单独的DCS软件,只要配置Patroni的raft相关参数就可以了,对raft环境的建立和配置在Patroni代码的dcs/raft.py里。然后就可以了,配置raft比配置etcd简单的多。使用raft作为DCS,对于三节点集群,必须至少有两个正常工作,所管理的PG/OG才能正常,如果只剩一个节点正常工作,PG/OG会被置为只读,而命令patronictl list也不能返回了。注意,如果选择时候raft就不能有其它dcs的配置,因此,如上图etcd的配置就要注释掉。......原创 2022-08-30 11:13:38 · 367 阅读 · 0 评论