Patroni的数据一般存储在分布式数据库etcd中。也可以用其它软件(如zookeeper)替代etcd,这里记录一下使用raft替代etcd的方法。
所谓raft,其实是python3的插件:pysyncobj (可以通过 pip install pysyncobj 下载安装)。所以,不需要另外安装和配置单独的DCS软件,只要配置Patroni的raft相关参数就可以了,对raft环境的建立和配置在Patroni代码的dcs/raft.py里。
在patroni.yml中增加raft配置,如下:
data_dir -- raft数据库在每个节点存储数据的目录,这一点与etcd是一样的。
self_addr -- 本机的IP+端口号
partner_addrs -- raft集群中其它的节点的IP+端口号
以我的环境为例,有三台机器,IP分别为:172.32.148.154、 172.32.148.155、172.32.148.156,端口号都设置为15010,partner_addrs可以不包括self_addr,但是最好包括。然后就可以了,配置raft比配置etcd简单的多。
注意,如果选择时候raft就不能有其它dcs的配置,因此,如上图etcd的配置就要注释掉。
使用raft作为DCS,对于三节点集群,必须至少有两个正常工作,所管理的PG/OG才能正常,如果只剩一个节点正常工作,PG/OG会被置为只读,而命令patronictl list也不能返回了。
启动时,要先启动三个节点的Patroni,等它们建立起raft集群,才会有一个节点被选为PG/OG主节点,所以是Patroni集群先于PG/OG集群建立。
查看raft状态:
syncobj_admin -conn 127.0.0.1:15010 -status