上文学习到了 1.9,本文为 1.10 ~ 1.15 小节的课程笔记。
etcd 配置
etcd是一种高度一致的分布式键值存储,建议部署三台机器,即三个节点,避免脑裂。
etcd 是 CNCF 开源项目,源码地址为:https://github.com/etcd-io/etcd/
三个节点的配置文件略有不同,主要体现在 name 和监听 ip 地址,需要依据当前节点的 ip 进行微调。
具体区别如下:
# node1
ETCD_NAME="etcd01"
ETCD_LISTEN_PEER_URLS="http://192.168.56.101:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.101:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.101:2379"
# node2
ETCD_NAME="etcd02"
ETCD_LISTEN_PEER_URLS="http://192.168.56.102:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.102:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.102:2379"
# node3
ETCD_NAME="etcd03"
ETCD_LISTEN_PEER_URLS="http://192.168.56.103:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.56.103:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.103:2379"
参数的释义为:
- ETCD_NAME :ETCD的节点名
- ETCD_LISTEN_PEER_URLS :该节点与其他节点通信时所监听的地址列表,多个地址使用逗号隔开,其格式可以划分为scheme://IP:PORT,这里的scheme可以是http、https
- ETCD_INITIAL_ADVERTISE_PEER_URLS :该成员节点在整个集群中的通信地址列表,这个地址用来传输集群数据的地址。因此这个地址必须是可以连接集群中所有的成员的。
- ETCD_ADVERTISE_CLIENT_URLS :广播给集群中其他成员自己的客户端地址列表
Patroni 的部署
Patroni是一个模板,你可以使用Python创建你自己定制的高可用性解决方案,为了最大限度的访问,还可以创建一个分布式配置存储,比如ZooKeeper、etcd、Consul或Kubernetes。 希望在数据中心或其他地方快速部署HA PostgreSQL的数据库工程师、dba、DevOps工程师和SREs会发现它很有用。
我们称Patroni为“模板”,因为它远不是一个通用的或即插即用的复制系统。 它也有自己的警告。 明智地使用。 用PostgreSQL运行高可用性有很多方法; 查看PostgreSQL文档。
目前支持的PostgreSQL版本:9.3到14。
具体配置步骤此处略。
Patroni 常用命令:
- 查看集群状态
su - postgres
# 高可用集群状态查看
patronictl -c /pg/patroni/pg.yml list
- 主备切换
patronictl -c /pg/patroni/pg.yml switchover
- 通过VIP访问数据库
# 查看主节点网卡ifconfig(或ip addr),检查VIP是否创建
ifconfig
# 使用psql验证该VIP有效性
su - postgres
psql -h 192.168.56.108 -p 5432 -U postgres -d postgres
后记
对于 PostgreSQL 的高可用方案,本课程介绍的只是其中一种,还有业内知名的 2ndQuadrant 公司开源的 Repmgr 组件。
https://repmgr.org/
repmgr is an open-source tool suite for managing replication and failover in a cluster of PostgreSQL servers. It enhances PostgreSQL’s built-in hot-standby capabilities with tools to set up standby servers, monitor replication, and perform administrative tasks such as failover or manual switchover operations.
感兴趣的同学可以自行学习。




