重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 108|回复: 0
打印 上一主题 下一主题

PostgreSQL高可用Patroni+Etcd

[复制链接]
跳转到指定楼层
楼主
发表于 2026-1-25 18:29:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Patroni 简介
Patroni基于Python开发的模板,结合DCS(例如 ZooKeeper, etcd, Consul )可以定制PostgreSQL⾼可⽤⽅案。Patroni并不是⼀套拿来即⽤的PostgreSQL⾼可⽤组件,涉及较多的配置和定制⼯作。Patroni接管PostgreSQL数据库的启停,同时监控本地的PostgreSQL数据库,并将本地的PostgreSQL数据库信息写⼊DCS。Patroni的主备端是通过是否能获得 leader key 来控制的,获取到了leader key的Patroni为主节点,其它的为备节点。

Etcd 简介
Etcd是⼀款基于Raft算法和协议开发的分布式 key-value 数据库,基于Go语⾔编写,Patroni监控本地的PostgreSQL状态,并将相关信息写⼊Etcd,每个Patroni都能读写Etcd上的key,从⽽获取外地PostgreSQL数据库信息。当Etcd的leader节点不可⽤时,Etcd会⼀致性的选择⼀个合适的节点作为主节点,新的Etcd主节点将获取leader key,因此建议Etcd集群为三个以上且为奇数的节点。⼀个标准的3节点etcd集群,最⼤容许1个节点故障。

本文将引导您完成在CentOS7.9上使用 PostgreSQL14数据库版本从零安装配置高可用Patroni+Etcd集群

环境准备
主机名        IP地址        操作系统版本        数据库版本        patroni版本        etcd版本
node1        192.168.17.20        CentOS7.9        14.9        3.1.0        3.5.9
node2        192.168.17.21        CentOS7.9        14.9        3.1.0        3.5.9
node3        192.168.17.22        CentOS7.9        14.9        3.1.0        3.5.9
下载软件地址

https://ftp.postgresql.org/pub/s ... tgresql-14.9.tar.gz

https://ftp.postgresql.org/pub/r ... -1.rhel7.x86_64.rpm

操作系统准备
安装CentOS7.9这里省略

关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3台主机都要操作

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node1 ~]#

[root@node2 ~]# systemctl stop firewalld
[root@node2 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node2 ~]#

[root@node3 ~]# systemctl stop firewalld
[root@node3 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@node3 ~]#
关闭SELINUX
setenforce 0
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3台主机都要操作

[root@node1 ~]# setenforce 0
[root@node1 ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

[root@node2 ~]# setenforce 0
[root@node2 ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

[root@node3 ~]# setenforce 0
[root@node3 ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

配置yum源
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo
3台主机都要操作

[root@node1 ~]# sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
>          -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
>          -i.bak \
>          /etc/yum.repos.d/CentOS-*.repo
[root@node1 ~]#

[root@node2 ~]# sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
>          -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
>          -i.bak \
>          /etc/yum.repos.d/CentOS-*.repo
[root@node2 ~]#

[root@node3 ~]# sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
>          -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
>          -i.bak \
>          /etc/yum.repos.d/CentOS-*.repo
[root@node3 ~]#

配置时间同步
yum install -y ntpdate
ntpdate time.windows.com && hwclock -w
3台主机都要操作

[root@node1 ~]# yum install -y ntpdate
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
base                                                                                                         | 3.6 kB  00:00:00
extras                                                                                                       | 2.9 kB  00:00:00
updates                                                                                                      | 2.9 kB  00:00:00
(1/2): extras/7/x86_64/primary_db                                                                            | 250 kB  00:00:00
(2/2): base/7/x86_64/primary_db                                                                              | 6.1 MB  00:00:00
Package ntpdate-4.2.6p5-29.el7.centos.2.x86_64 already installed and latest version
Nothing to do
[root@node1 ~]# ntpdate time.windows.com && hwclock -w
8 Sep 15:32:30 ntpdate[2130]: adjust time server 52.231.114.183 offset 0.018752 sec
[root@node1 ~]#

[root@node2 ~]# yum install -y ntpdate
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
base                                                                                                         | 3.6 kB  00:00:00
extras                                                                                                       | 2.9 kB  00:00:00
updates                                                                                                      | 2.9 kB  00:00:00
Package ntpdate-4.2.6p5-29.el7.centos.2.x86_64 already installed and latest version
Nothing to do
[root@node2 ~]# ntpdate time.windows.com && hwclock -w
8 Sep 15:32:30 ntpdate[2290]: step time server 52.231.114.183 offset -0.875401 sec
[root@node2 ~]#


[root@node3 ~]# yum install -y ntpdate
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
base                                                                                                         | 3.6 kB  00:00:00
extras                                                                                                       | 2.9 kB  00:00:00
updates                                                                                                      | 2.9 kB  00:00:00
Package ntpdate-4.2.6p5-29.el7.centos.2.x86_64 already installed and latest version
Nothing to do
[root@node3 ~]# ntpdate time.windows.com && hwclock -w
8 Sep 15:32:30 ntpdate[2090]: step time server 52.231.114.183 offset -0.770114 sec
[root@node3 ~]#
安装所需依赖的包
yum install -y readline readline-devel zlib zlib-devel gettext gettext-devel openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel tcl-devel uuid-devel gcc gcc-c++ make flex bison perl-ExtUtils*
3台主机都要操作,操作略

设置hosts文件
cat >> /etc/hosts << EOF

192.168.17.20 node1
192.168.17.21 node2
192.168.17.22 node3

EOF
3台主机都要操作

[root@node1 ~]# cat >> /etc/hosts << EOF
>
> 192.168.17.20    node1
> 192.168.17.21    node2
> 192.168.17.22    node3
>
> EOF
[root@node1 ~]#

[root@node2 ~]# cat >> /etc/hosts << EOF
>
> 192.168.17.20    node1
> 192.168.17.21    node2
> 192.168.17.22    node3
>
> EOF
[root@node2 ~]#

[root@node3 ~]# cat >> /etc/hosts << EOF
>
> 192.168.17.20    node1
> 192.168.17.21    node2
> 192.168.17.22    node3
>
> EOF
[root@node3 ~]#

添加用户
groupadd postgres
useradd -g postgres postgres
echo "postgres"|passwd --stdin postgres
3台主机都要操作

[root@node1 ~]# groupadd postgres
[root@node1 ~]# useradd -g postgres postgres
[root@node1 ~]# echo "postgres"|passwd --stdin postgres
Changing password for user postgres.
passwd: all authentication tokens updated successfully.
[root@node1 ~]#

[root@node2 ~]# groupadd postgres
[root@node2 ~]# useradd -g postgres postgres
[root@node2 ~]# echo "postgres"|passwd --stdin postgres
Changing password for user postgres.
passwd: all authentication tokens updated successfully.
[root@node2 ~]#

[root@node3 ~]# groupadd postgres
[root@node3 ~]# useradd -g postgres postgres
[root@node3 ~]# echo "postgres"|passwd --stdin postgres
Changing password for user postgres.
passwd: all authentication tokens updated successfully.
[root@node3 ~]#

创建目录
mkdir -p /opt/pg14 /opt/pgdata /opt/pgarchive
chown -R postgres:postgres /opt
chmod 0755 /opt/pg14
chmod 0700 /opt/pgdata /opt/pgarchive
3台主机都要操作

[root@node1 ~]# mkdir -p /opt/pg14 /opt/pgdata /opt/pgarchive
[root@node1 ~]# chown -R postgres:postgres /opt
[root@node1 ~]# chmod 0755 /opt/pg14
[root@node1 ~]# chmod 0700 /opt/pgdata /opt/pgarchive
[root@node1 ~]#

[root@node2 ~]# mkdir -p /opt/pg14 /opt/pgdata /opt/pgarchive
[root@node2 ~]# chown -R postgres:postgres /opt
[root@node2 ~]# chmod 0755 /opt/pg14
[root@node2 ~]# chmod 0700 /opt/pgdata /opt/pgarchive
[root@node2 ~]#

[root@node3 ~]# mkdir -p /opt/pg14 /opt/pgdata /opt/pgarchive
[root@node3 ~]# chown -R postgres:postgres /opt
[root@node3 ~]# chmod 0755 /opt/pg14
[root@node3 ~]# chmod 0700 /opt/pgdata /opt/pgarchive
[root@node3 ~]#
源码编译软件
安装PostgreSQL
把软件包postgresql-14.9.tar.gz上传到/home/postgres目录下

su - postgres
tar zxf postgresql-14.9.tar.gz
cd postgresql-14.9/
./configure --prefix=/opt/pg14
gmake world && gmake install-world
ln -s /opt/pg14 /opt/pgsql
3台主机都要操作,操作略

配置环境变量
cd ~
cat >> /home/postgres/.bash_profile <<EOF

#PostgreSQL settings
export PGPORT=5432
export PGUSER=postgres
export PGHOME=/opt/pgsql
export PGDATA=/opt/pgdata
export LD_LIBRARY_PATH=\$PGHOME/lib
export PATH=\$PGHOME/bin:\$PATH

EOF
source /home/postgres/.bash_profile
postgres --version
3台主机都要操作

[postgres@node1 postgresql-14.9]$ cd ~
[postgres@node1 ~]$ cat >> /home/postgres/.bash_profile <<EOF
>
> #PostgreSQL settings
> export PGPORT=5432
> export PGUSER=postgres
> export PGHOME=/opt/pgsql
> export PGDATA=/opt/pgdata
> export LD_LIBRARY_PATH=\$PGHOME/lib
> export PATH=\$PGHOME/bin:\$PATH
>
> EOF
[postgres@node1 ~]$ source /home/postgres/.bash_profile
[postgres@node1 ~]$ postgres --version
postgres (PostgreSQL) 14.9
[postgres@node1 ~]$

[postgres@node2 postgresql-14.9]$ cd ~
[postgres@node2 ~]$ cat >> /home/postgres/.bash_profile <<EOF
>
> #PostgreSQL settings
> export PGPORT=5432
> export PGUSER=postgres
> export PGHOME=/opt/pgsql
> export PGDATA=/opt/pgdata
> export LD_LIBRARY_PATH=\$PGHOME/lib
> export PATH=\$PGHOME/bin:\$PATH
>
> EOF
[postgres@node2 ~]$ source /home/postgres/.bash_profile
[postgres@node2 ~]$ postgres --version
postgres (PostgreSQL) 14.9
[postgres@node2 ~]$

[postgres@node3 postgresql-14.9]$ cd ~
[postgres@node3 ~]$ cat >> /home/postgres/.bash_profile <<EOF
>
> #PostgreSQL settings
> export PGPORT=5432
> export PGUSER=postgres
> export PGHOME=/opt/pgsql
> export PGDATA=/opt/pgdata
> export LD_LIBRARY_PATH=\$PGHOME/lib
> export PATH=\$PGHOME/bin:\$PATH
>
> EOF
[postgres@node3 ~]$ source /home/postgres/.bash_profile
[postgres@node3 ~]$ postgres --version
postgres (PostgreSQL) 14.9
[postgres@node3 ~]$

安装etcd
把软件包etcd-3.5.9-1.rhel7.x86_64.rpm上传到/root目录下

yum install -y etcd-3.5.9-1.rhel7.x86_64.rpm
cd /etc/etcd/
mkdir data
mv etcd.conf etcd.conf.bak

cat >> etcd.conf << EOF
name: etcd1
data-dir: /etc/etcd/data
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://192.168.17.20:2379
listen-peer-urls: http://0.0.0.0:2380
initial-adverties-peer-urls: http://192.168.17.20:2380
initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
enable-v2: true

EOF
cat /etc/etcd/etcd.conf

cat >> /etc/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/etc/etcd
ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

EOF
systemctl daemon-reload
systemctl start etcd.service
systemctl status etcd.service
etcdctl member list
etcdctl endpoint status --write-out=table --endpoints=192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
3台主机都要操作,注意etcd.conf每个节点的IP地址和name都要修改

[root@node1 ~]# cd
[root@node1 ~]# yum install -y etcd-3.5.9-1.rhel7.x86_64.rpm
Loaded plugins: fastestmirror, langpacks
Examining etcd-3.5.9-1.rhel7.x86_64.rpm: etcd-3.5.9-1.rhel7.x86_64
Marking etcd-3.5.9-1.rhel7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package etcd.x86_64 0:3.5.9-1.rhel7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                Arch                     Version                         Repository                                    Size
====================================================================================================================================
Installing:
etcd                   x86_64                   3.5.9-1.rhel7                   /etcd-3.5.9-1.rhel7.x86_64                    51 M

Transaction Summary
====================================================================================================================================
Install  1 Package

Total size: 51 M
Installed size: 51 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : etcd-3.5.9-1.rhel7.x86_64                                                                                        1/1
  Verifying  : etcd-3.5.9-1.rhel7.x86_64                                                                                        1/1

Installed:
  etcd.x86_64 0:3.5.9-1.rhel7

Complete!
[root@node1 ~]# cd /etc/etcd/
[root@node1 etcd]# mkdir data
[root@node1 etcd]# mv etcd.conf etcd.conf.bak
[root@node1 etcd]# cat >> etcd.conf << EOF
> name: etcd1
> data-dir: /etc/etcd/data
> listen-client-urls: http://0.0.0.0:2379
> advertise-client-urls: http://192.168.17.20:2379
> listen-peer-urls: http://0.0.0.0:2380
> initial-adverties-peer-urls: http://192.168.17.20:2380
> initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
> initial-cluster-token: etcd-cluster
> initial-cluster-state: new
> enable-v2: true
>
> EOF
[root@node1 etcd]# cat /etc/etcd/etcd.conf
name: etcd1
data-dir: /etc/etcd/data
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://192.168.17.20:2379
listen-peer-urls: http://0.0.0.0:2380
initial-adverties-peer-urls: http://192.168.17.20:2380
initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
enable-v2: true

[root@node1 etcd]# cat >> /etc/systemd/system/etcd.service << EOF
> [Unit]
> Description=Etcd Server
> After=network.target
> After=network-online.target
> Wants=network-online.target
>
> [Service]
> Type=notify
> WorkingDirectory=/etc/etcd
> ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf
> Restart=on-failure
> LimitNOFILE=65536
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node1 etcd]# systemctl daemon-reload
[root@node1 etcd]# systemctl start etcd.service
[root@node1 etcd]# systemctl status etcd.service
● etcd.service - Etcd Server
   Loaded: loaded (/etc/systemd/system/etcd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-09-08 23:00:28 CST; 1min 39s ago
Main PID: 13019 (etcd)
    Tasks: 9
   CGroup: /system.slice/etcd.service
           └─13019 /usr/bin/etcd --config-file /etc/etcd/etcd.conf

Sep 08 23:01:51 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:51.717154+0800","caller":"rafthttp/stream.go:274...660b1"}
Sep 08 23:01:51 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:51.717209+0800","caller":"rafthttp/stream.go:249...pp v2"}
Sep 08 23:01:51 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:51.717221+0800","caller":"rafthttp/stream.go:274...660b1"}
Sep 08 23:01:51 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:51.724005+0800","caller":"rafthttp/stream.go:412...660b1"}
Sep 08 23:01:51 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:51.725469+0800","caller":"rafthttp/stream.go:412...660b1"}
Sep 08 23:01:52 node1 etcd[13019]: {"level":"warn","ts":"2023-09-08T23:01:52.246682+0800","caller":"rafthttp/probing_statu...fused"}
Sep 08 23:01:52 node1 etcd[13019]: {"level":"warn","ts":"2023-09-08T23:01:52.248644+0800","caller":"rafthttp/probing_status.go:68...
Sep 08 23:01:52 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:52.756795+0800","caller":"etcdserver/server.go:2...:"3.5"}
Sep 08 23:01:52 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:52.757564+0800","caller":"membership/cluster.go:...:"3.5"}
Sep 08 23:01:52 node1 etcd[13019]: {"level":"info","ts":"2023-09-08T23:01:52.757664+0800","caller":"etcdserver/server.go:2...:"3.5"}
Hint: Some lines were ellipsized, use -l to show in full.
[root@node1 etcd]# etcdctl member list
2babb66633c7e1d8, started, etcd2, http://192.168.17.21:2380, http://192.168.17.21:2379, false
9ca0e7738d03bf5e, started, etcd1, http://192.168.17.20:2380, http://192.168.17.20:2379, false
c33b92e8758660b1, started, etcd3, http://192.168.17.22:2380, http://192.168.17.22:2379, false
[root@node1 etcd]# etcdctl endpoint status --write-out=table --endpoints=192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
|      ENDPOINT      |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |                                                                                                                                          ERRORS |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
| 192.168.17.20:2379 | 9ca0e7738d03bf5e |   3.5.9 |   20 kB |      true |      false |         2 |          9 |                  9 |                                                                                                                                                 |
| 192.168.17.21:2379 | 2babb66633c7e1d8 |   3.5.9 |   20 kB |     false |      false |         2 |          9 |                  9 |                                                                                                                                                 |
| 192.168.17.22:2379 | c33b92e8758660b1 |   3.5.9 |   20 kB |     false |      false |         2 |          9 |                  9 |                                                                                                                                                 |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
[root@node1 etcd]#

[root@node2 ~]# cd
[root@node2 ~]# yum install -y etcd-3.5.9-1.rhel7.x86_64.rpm
Loaded plugins: fastestmirror, langpacks
Examining etcd-3.5.9-1.rhel7.x86_64.rpm: etcd-3.5.9-1.rhel7.x86_64
Marking etcd-3.5.9-1.rhel7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package etcd.x86_64 0:3.5.9-1.rhel7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                Arch                     Version                         Repository                                    Size
====================================================================================================================================
Installing:
etcd                   x86_64                   3.5.9-1.rhel7                   /etcd-3.5.9-1.rhel7.x86_64                    51 M

Transaction Summary
====================================================================================================================================
Install  1 Package

Total size: 51 M
Installed size: 51 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : etcd-3.5.9-1.rhel7.x86_64                                                                                        1/1
  Verifying  : etcd-3.5.9-1.rhel7.x86_64                                                                                        1/1

Installed:
  etcd.x86_64 0:3.5.9-1.rhel7

Complete!
[root@node2 ~]# cd /etc/etcd/
[root@node2 etcd]# mkdir data
[root@node2 etcd]# mv etcd.conf etcd.conf.bak
[root@node2 etcd]# cat >> etcd.conf << EOF
> name: etcd2
> data-dir: /etc/etcd/data
> listen-client-urls: http://0.0.0.0:2379
> advertise-client-urls: http://192.168.17.21:2379
> listen-peer-urls: http://0.0.0.0:2380
> initial-adverties-peer-urls: http://192.168.17.21:2380
> initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
> initial-cluster-token: etcd-cluster
> initial-cluster-state: new
> enable-v2: true
>
> EOF
[root@node2 etcd]# cat /etc/etcd/etcd.conf
name: etcd2
data-dir: /etc/etcd/data
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://192.168.17.21:2379
listen-peer-urls: http://0.0.0.0:2380
initial-adverties-peer-urls: http://192.168.17.21:2380
initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
enable-v2: true

[root@node2 etcd]# cat >> /etc/systemd/system/etcd.service << EOF
> [Unit]
> Description=Etcd Server
> After=network.target
> After=network-online.target
> Wants=network-online.target
>
> [Service]
> Type=notify
> WorkingDirectory=/etc/etcd
> ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf
> Restart=on-failure
> LimitNOFILE=65536
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node2 etcd]# systemctl daemon-reload
[root@node2 etcd]# systemctl start etcd.service
[root@node2 etcd]# systemctl status etcd.service
● etcd.service - Etcd Server
   Loaded: loaded (/etc/systemd/system/etcd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-09-08 23:00:28 CST; 1min 39s ago
Main PID: 12938 (etcd)
    Tasks: 9
   CGroup: /system.slice/etcd.service
           └─12938 /usr/bin/etcd --config-file /etc/etcd/etcd.conf

Sep 08 23:01:47 node2 etcd[12938]: {"level":"warn","ts":"2023-09-08T23:01:47.545905+0800","caller":"rafthttp/probing_statu...fused"}
Sep 08 23:01:47 node2 etcd[12938]: {"level":"warn","ts":"2023-09-08T23:01:47.545954+0800","caller":"rafthttp/probing_status.go:68...
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.425378+0800","caller":"rafthttp/stream.go:249...ssage"}
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.425406+0800","caller":"rafthttp/peer_status.g...660b1"}
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.425418+0800","caller":"rafthttp/stream.go:274...660b1"}
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.425462+0800","caller":"rafthttp/stream.go:249...pp v2"}
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.425475+0800","caller":"rafthttp/stream.go:274...660b1"}
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.439767+0800","caller":"rafthttp/stream.go:412...660b1"}
Sep 08 23:01:51 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:51.439802+0800","caller":"rafthttp/stream.go:412...660b1"}
Sep 08 23:01:52 node2 etcd[12938]: {"level":"info","ts":"2023-09-08T23:01:52.466405+0800","caller":"membership/cluster.go:...:"3.5"}
Hint: Some lines were ellipsized, use -l to show in full.
[root@node2 etcd]# etcdctl member list
2babb66633c7e1d8, started, etcd2, http://192.168.17.21:2380, http://192.168.17.21:2379, false
9ca0e7738d03bf5e, started, etcd1, http://192.168.17.20:2380, http://192.168.17.20:2379, false
c33b92e8758660b1, started, etcd3, http://192.168.17.22:2380, http://192.168.17.22:2379, false
[root@node2 etcd]# etcdctl endpoint status --write-out=table --endpoints=192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
|      ENDPOINT      |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |                                                                                                                                          ERRORS |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
| 192.168.17.20:2379 | 9ca0e7738d03bf5e |   3.5.9 |   20 kB |      true |      false |         2 |          9 |                  9 |                                                                                                                                                 |
| 192.168.17.21:2379 | 2babb66633c7e1d8 |   3.5.9 |   20 kB |     false |      false |         2 |          9 |                  9 |                                                                                                                                                 |
| 192.168.17.22:2379 | c33b92e8758660b1 |   3.5.9 |   20 kB |     false |      false |         2 |          9 |                  9 |                                                                                                                                                 |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
[root@node2 etcd]#

[root@node3 ~]# cd
[root@node3 ~]# yum install -y etcd-3.5.9-1.rhel7.x86_64.rpm
Loaded plugins: fastestmirror, langpacks
Examining etcd-3.5.9-1.rhel7.x86_64.rpm: etcd-3.5.9-1.rhel7.x86_64
Marking etcd-3.5.9-1.rhel7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package etcd.x86_64 0:3.5.9-1.rhel7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                Arch                     Version                         Repository                                    Size
====================================================================================================================================
Installing:
etcd                   x86_64                   3.5.9-1.rhel7                   /etcd-3.5.9-1.rhel7.x86_64                    51 M

Transaction Summary
====================================================================================================================================
Install  1 Package

Total size: 51 M
Installed size: 51 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : etcd-3.5.9-1.rhel7.x86_64                                                                                        1/1
  Verifying  : etcd-3.5.9-1.rhel7.x86_64                                                                                        1/1

Installed:
  etcd.x86_64 0:3.5.9-1.rhel7

Complete!
[root@node3 ~]# cd /etc/etcd/
[root@node3 etcd]# mkdir data
[root@node3 etcd]# mv etcd.conf etcd.conf.bak
[root@node3 etcd]# cat >> etcd.conf << EOF
> name: etcd3
> data-dir: /etc/etcd/data
> listen-client-urls: http://0.0.0.0:2379
> advertise-client-urls: http://192.168.17.22:2379
> listen-peer-urls: http://0.0.0.0:2380
> initial-adverties-peer-urls: http://192.168.17.22:2380
> initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
> initial-cluster-token: etcd-cluster
> initial-cluster-state: new
> enable-v2: true
>
> EOF
[root@node3 etcd]# cat /etc/etcd/etcd.conf
name: etcd3
data-dir: /etc/etcd/data
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://192.168.17.22:2379
listen-peer-urls: http://0.0.0.0:2380
initial-adverties-peer-urls: http://192.168.17.22:2380
initial-cluster: etcd1=http://192.168.17.20:2380,etcd2=http://192.168.17.21:2380,etcd3=http://192.168.17.22:2380
initial-cluster-token: etcd-cluster
initial-cluster-state: new
enable-v2: true

[root@node3 etcd]# cat >> /etc/systemd/system/etcd.service << EOF
> [Unit]
> Description=Etcd Server
> After=network.target
> After=network-online.target
> Wants=network-online.target
>
> [Service]
> Type=notify
> WorkingDirectory=/etc/etcd
> ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf
> Restart=on-failure
> LimitNOFILE=65536
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node3 etcd]# systemctl daemon-reload
[root@node3 etcd]# systemctl start etcd.service
[root@node3 etcd]# systemctl status etcd.service
● etcd.service - Etcd Server
   Loaded: loaded (/etc/systemd/system/etcd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-09-08 23:01:51 CST; 16s ago
Main PID: 12980 (etcd)
    Tasks: 9
   CGroup: /system.slice/etcd.service
           └─12980 /usr/bin/etcd --config-file /etc/etcd/etcd.conf

Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.462193+0800","caller":"rafthttp/stream.go:249...pp v2"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.462219+0800","caller":"rafthttp/stream.go:274...3bf5e"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.46221+0800","caller":"rafthttp/stream.go:249"...ssage"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.462251+0800","caller":"rafthttp/stream.go:274...3bf5e"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.469227+0800","caller":"rafthttp/stream.go:249...pp v2"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.469255+0800","caller":"rafthttp/stream.go:274...7e1d8"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.469234+0800","caller":"rafthttp/stream.go:249...ssage"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.469267+0800","caller":"rafthttp/stream.go:274...7e1d8"}
Sep 08 23:01:51 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:51.507705+0800","caller":"etcdserver/server.go:777","ms...
Sep 08 23:01:52 node3 etcd[12980]: {"level":"info","ts":"2023-09-08T23:01:52.49601+0800","caller":"membership/cluster.go:5...:"3.5"}
Hint: Some lines were ellipsized, use -l to show in full.
[root@node3 etcd]# etcdctl member list
2babb66633c7e1d8, started, etcd2, http://192.168.17.21:2380, http://192.168.17.21:2379, false
9ca0e7738d03bf5e, started, etcd1, http://192.168.17.20:2380, http://192.168.17.20:2379, false
c33b92e8758660b1, started, etcd3, http://192.168.17.22:2380, http://192.168.17.22:2379, false
[root@node3 etcd]# etcdctl endpoint status --write-out=table --endpoints=192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
|      ENDPOINT      |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |                                                                                                                                          ERRORS |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
| 192.168.17.20:2379 | 9ca0e7738d03bf5e |   3.5.9 |   20 kB |      true |      false |         2 |          9 |                  9 |                                                                                                                                                 |
| 192.168.17.21:2379 | 2babb66633c7e1d8 |   3.5.9 |   20 kB |     false |      false |         2 |          9 |                  9 |                                                                                                                                                 |
| 192.168.17.22:2379 | c33b92e8758660b1 |   3.5.9 |   20 kB |     false |      false |         2 |          9 |                  9 |                                                                                                                                                 |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+                                                                                                                                         --------+
[root@node3 etcd]#

安装watchdog
yum install -y watchdog
sed -ri 's/#watchdog-device/watchdog-device/' /etc/watchdog.conf
mknod /dev/watchdog c 10 130
modprobe softdog
chown postgres /dev/watchdog
3台主机都要操作

[root@node1 etcd]# yum install -y watchdog
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package watchdog.x86_64 0:5.13-12.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                         Arch                          Version                            Repository                   Size
====================================================================================================================================
Installing:
watchdog                        x86_64                        5.13-12.el7                        base                         79 k

Transaction Summary
====================================================================================================================================
Install  1 Package

Total download size: 79 k
Installed size: 160 k
Downloading packages:
watchdog-5.13-12.el7.x86_64.rpm                                                                              |  79 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : watchdog-5.13-12.el7.x86_64                                                                                      1/1
  Verifying  : watchdog-5.13-12.el7.x86_64                                                                                      1/1

Installed:
  watchdog.x86_64 0:5.13-12.el7

Complete!
[root@node1 etcd]# sed -ri 's/#watchdog-device/watchdog-device/' /etc/watchdog.conf
[root@node1 etcd]# mknod /dev/watchdog c 10 130
[root@node1 etcd]# modprobe softdog
[root@node1 etcd]# chown postgres /dev/watchdog
[root@node1 etcd]#

[root@node2 etcd]# yum install -y watchdog
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package watchdog.x86_64 0:5.13-12.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                         Arch                          Version                            Repository                   Size
====================================================================================================================================
Installing:
watchdog                        x86_64                        5.13-12.el7                        base                         79 k

Transaction Summary
====================================================================================================================================
Install  1 Package

Total download size: 79 k
Installed size: 160 k
Downloading packages:
watchdog-5.13-12.el7.x86_64.rpm                                                                              |  79 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : watchdog-5.13-12.el7.x86_64                                                                                      1/1
  Verifying  : watchdog-5.13-12.el7.x86_64                                                                                      1/1

Installed:
  watchdog.x86_64 0:5.13-12.el7

Complete!
[root@node2 etcd]# sed -ri 's/#watchdog-device/watchdog-device/' /etc/watchdog.conf
[root@node2 etcd]# mknod /dev/watchdog c 10 130
[root@node2 etcd]# modprobe softdog
[root@node2 etcd]# chown postgres /dev/watchdog
[root@node2 etcd]#

[root@node3 etcd]# yum install -y watchdog
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package watchdog.x86_64 0:5.13-12.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                         Arch                          Version                            Repository                   Size
====================================================================================================================================
Installing:
watchdog                        x86_64                        5.13-12.el7                        base                         79 k

Transaction Summary
====================================================================================================================================
Install  1 Package

Total download size: 79 k
Installed size: 160 k
Downloading packages:
watchdog-5.13-12.el7.x86_64.rpm                                                                              |  79 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : watchdog-5.13-12.el7.x86_64                                                                                      1/1
  Verifying  : watchdog-5.13-12.el7.x86_64                                                                                      1/1

Installed:
  watchdog.x86_64 0:5.13-12.el7

Complete!
[root@node3 etcd]# sed -ri 's/#watchdog-device/watchdog-device/' /etc/watchdog.conf
[root@node3 etcd]# mknod /dev/watchdog c 10 130
[root@node3 etcd]# modprobe softdog
[root@node3 etcd]# chown postgres /dev/watchdog
[root@node3 etcd]#

安装patroni
yum install -y python3 python3-devel python3-pip gcc libpq-devel
export PGPORT=5432
export PGUSER=postgres
export PGHOME=/opt/pgsql
export PGDATA=/opt/pgdata
export LD_LIBRARY_PATH=$PGHOME/lib
export PATH=$PGHOME/bin:$PATH
pip3 install patroni[etcd]
pip3 install psycopg2-binary
3台主机都要操作

[root@node1 etcd]# yum install -y python3 python3-devel python3-pip gcc libpq-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version
No package libpq-devel available.
Resolving Dependencies
--> Running transaction check
---> Package python3.x86_64 0:3.6.8-19.el7_9 will be installed
--> Processing Dependency: python3-libs(x86-64) = 3.6.8-19.el7_9 for package: python3-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-setuptools for package: python3-3.6.8-19.el7_9.x86_64
--> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-19.el7_9.x86_64
---> Package python3-devel.x86_64 0:3.6.8-19.el7_9 will be installed
--> Processing Dependency: redhat-rpm-config for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-rpm-macros for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-rpm-generators for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python-rpm-macros for package: python3-devel-3.6.8-19.el7_9.x86_64
---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
--> Running transaction check
---> Package python-rpm-macros.noarch 0:3-34.el7 will be installed
--> Processing Dependency: python-srpm-macros for package: python-rpm-macros-3-34.el7.noarch
---> Package python3-libs.x86_64 0:3.6.8-19.el7_9 will be installed
---> Package python3-rpm-generators.noarch 0:6-2.el7 will be installed
---> Package python3-rpm-macros.noarch 0:3-34.el7 will be installed
---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
---> Package redhat-rpm-config.noarch 0:9.1.0-88.el7.centos will be installed
--> Processing Dependency: dwz >= 0.4 for package: redhat-rpm-config-9.1.0-88.el7.centos.noarch
--> Processing Dependency: perl-srpm-macros for package: redhat-rpm-config-9.1.0-88.el7.centos.noarch
--> Running transaction check
---> Package dwz.x86_64 0:0.11-3.el7 will be installed
---> Package perl-srpm-macros.noarch 0:1-8.el7 will be installed
---> Package python-srpm-macros.noarch 0:3-34.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                                Arch                   Version                                Repository               Size
====================================================================================================================================
Installing:
python3                                x86_64                 3.6.8-19.el7_9                         updates                  70 k
python3-devel                          x86_64                 3.6.8-19.el7_9                         updates                 217 k
python3-pip                            noarch                 9.0.3-8.el7                            base                    1.6 M
Installing for dependencies:
dwz                                    x86_64                 0.11-3.el7                             base                     99 k
perl-srpm-macros                       noarch                 1-8.el7                                base                    4.6 k
python-rpm-macros                      noarch                 3-34.el7                               base                    9.1 k
python-srpm-macros                     noarch                 3-34.el7                               base                    8.8 k
python3-libs                           x86_64                 3.6.8-19.el7_9                         updates                 6.9 M
python3-rpm-generators                 noarch                 6-2.el7                                base                     20 k
python3-rpm-macros                     noarch                 3-34.el7                               base                    8.1 k
python3-setuptools                     noarch                 39.2.0-10.el7                          base                    629 k
redhat-rpm-config                      noarch                 9.1.0-88.el7.centos                    base                     81 k

Transaction Summary
====================================================================================================================================
Install  3 Packages (+9 Dependent packages)

Total download size: 9.7 M
Installed size: 48 M
Downloading packages:
(1/12): perl-srpm-macros-1-8.el7.noarch.rpm                                                                  | 4.6 kB  00:00:00
(2/12): python-rpm-macros-3-34.el7.noarch.rpm                                                                | 9.1 kB  00:00:00
(3/12): dwz-0.11-3.el7.x86_64.rpm                                                                            |  99 kB  00:00:00
(4/12): python-srpm-macros-3-34.el7.noarch.rpm                                                               | 8.8 kB  00:00:00
(5/12): python3-3.6.8-19.el7_9.x86_64.rpm                                                                    |  70 kB  00:00:00
(6/12): python3-devel-3.6.8-19.el7_9.x86_64.rpm                                                              | 217 kB  00:00:00
(7/12): python3-libs-3.6.8-19.el7_9.x86_64.rpm                                                               | 6.9 MB  00:00:00
(8/12): python3-rpm-generators-6-2.el7.noarch.rpm                                                            |  20 kB  00:00:00
(9/12): python3-rpm-macros-3-34.el7.noarch.rpm                                                               | 8.1 kB  00:00:00
(10/12): python3-pip-9.0.3-8.el7.noarch.rpm                                                                  | 1.6 MB  00:00:00
(11/12): python3-setuptools-39.2.0-10.el7.noarch.rpm                                                         | 629 kB  00:00:00
(12/12): redhat-rpm-config-9.1.0-88.el7.centos.noarch.rpm                                                    |  81 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                               5.6 MB/s | 9.7 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python3-setuptools-39.2.0-10.el7.noarch                                                                         1/12
  Installing : python3-pip-9.0.3-8.el7.noarch                                                                                  2/12
  Installing : python3-libs-3.6.8-19.el7_9.x86_64                                                                              3/12
  Installing : python3-3.6.8-19.el7_9.x86_64                                                                                   4/12
  Installing : python-srpm-macros-3-34.el7.noarch                                                                              5/12
  Installing : python-rpm-macros-3-34.el7.noarch                                                                               6/12
  Installing : python3-rpm-generators-6-2.el7.noarch                                                                           7/12
  Installing : python3-rpm-macros-3-34.el7.noarch                                                                              8/12
  Installing : dwz-0.11-3.el7.x86_64                                                                                           9/12
  Installing : perl-srpm-macros-1-8.el7.noarch                                                                                10/12
  Installing : redhat-rpm-config-9.1.0-88.el7.centos.noarch                                                                   11/12
  Installing : python3-devel-3.6.8-19.el7_9.x86_64                                                                            12/12
  Verifying  : python3-devel-3.6.8-19.el7_9.x86_64                                                                             1/12
  Verifying  : python3-rpm-generators-6-2.el7.noarch                                                                           2/12
  Verifying  : perl-srpm-macros-1-8.el7.noarch                                                                                 3/12
  Verifying  : python3-3.6.8-19.el7_9.x86_64                                                                                   4/12
  Verifying  : python-rpm-macros-3-34.el7.noarch                                                                               5/12
  Verifying  : dwz-0.11-3.el7.x86_64                                                                                           6/12
  Verifying  : python3-rpm-macros-3-34.el7.noarch                                                                              7/12
  Verifying  : python3-setuptools-39.2.0-10.el7.noarch                                                                         8/12
  Verifying  : python3-pip-9.0.3-8.el7.noarch                                                                                  9/12
  Verifying  : python-srpm-macros-3-34.el7.noarch                                                                             10/12
  Verifying  : python3-libs-3.6.8-19.el7_9.x86_64                                                                             11/12
  Verifying  : redhat-rpm-config-9.1.0-88.el7.centos.noarch                                                                   12/12

Installed:
  python3.x86_64 0:3.6.8-19.el7_9          python3-devel.x86_64 0:3.6.8-19.el7_9          python3-pip.noarch 0:9.0.3-8.el7

Dependency Installed:
  dwz.x86_64 0:0.11-3.el7               perl-srpm-macros.noarch 0:1-8.el7          python-rpm-macros.noarch 0:3-34.el7
  python-srpm-macros.noarch 0:3-34.el7  python3-libs.x86_64 0:3.6.8-19.el7_9       python3-rpm-generators.noarch 0:6-2.el7
  python3-rpm-macros.noarch 0:3-34.el7  python3-setuptools.noarch 0:39.2.0-10.el7  redhat-rpm-config.noarch 0:9.1.0-88.el7.centos

Complete!
[root@node1 etcd]# echo $LD_LIBRARY_PATH

[root@node1 etcd]# export PGPORT=5432
[root@node1 etcd]# export PGUSER=postgres
[root@node1 etcd]# export PGHOME=/opt/pgsql
[root@node1 etcd]# export PGDATA=/opt/pgdata
[root@node1 etcd]# export LD_LIBRARY_PATH=$PGHOME/lib
[root@node1 etcd]# export PATH=$PGHOME/bin:$PATH
[root@node1 etcd]# pip3 install patroni[etcd]
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting patroni[etcd]
  Downloading https://files.pythonhosted.org/p ... d49f714/patroni-3.1                                                                                                                                         .0-py3-none-any.whl (286kB)
    100% |████████████████████████████████| 286kB 832kB/s
Collecting ydiff>=1.2.0 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 583fce4/ydiff-1.2.t                                                                                                                                         ar.gz (42kB)
    100% |████████████████████████████████| 51kB 427kB/s
Collecting PyYAML (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... be1eda0/PyYAML-6.0.                                                                                                                                         1.tar.gz (125kB)
    100% |████████████████████████████████| 133kB 614kB/s
Collecting prettytable>=0.7 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 6168b4c/prettytable                                                                                                                                         -2.5.0-py3-none-any.whl
Collecting urllib3!=1.21,>=1.19.1 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 7728471/urllib3-1.2                                                                                                                                         6.16-py2.py3-none-any.whl (143kB)
    100% |████████████████████████████████| 143kB 566kB/s
Collecting python-dateutil (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 342a56d/python_date                                                                                                                                         util-2.8.2-py2.py3-none-any.whl (247kB)
    100% |████████████████████████████████| 256kB 450kB/s
Collecting click>=4.1 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 1696d7d/click-8.0.4                                                                                                                                         -py3-none-any.whl (97kB)
    100% |████████████████████████████████| 102kB 459kB/s
Collecting psutil>=2.0.0 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... cfc2c07/psutil-5.9.                                                                                                                                         5.tar.gz (493kB)
    100% |████████████████████████████████| 501kB 486kB/s
Collecting python-etcd<0.5,>=0.4.3; extra == "etcd" (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 821ab41/python-etcd                                                                                                                                         -0.4.5.tar.gz
Collecting wcwidth (from prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... aa83f11/wcwidth-0.2                                                                                                                                         .6-py2.py3-none-any.whl
Collecting importlib-metadata; python_version < "3.8" (from prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... d68f4ce/importlib_m                                                                                                                                         etadata-4.8.3-py3-none-any.whl
Collecting six>=1.5 (from python-dateutil->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 91daf11/six-1.16.0-                                                                                                                                         py2.py3-none-any.whl
Collecting dnspython>=1.13.0 (from python-etcd<0.5,>=0.4.3; extra == "etcd"->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 337cc35/dnspython-2                                                                                                                                         .2.1-py3-none-any.whl (269kB)
    100% |████████████████████████████████| 276kB 454kB/s
Collecting typing-extensions>=3.6.4; python_version < "3.8" (from importlib-metadata; python_version < "3.8"->prettytable>=0.7->patr                                                                                                                                         oni[etcd])
  Downloading https://files.pythonhosted.org/p ... ffd3a0e/typing_exte                                                                                                                                         nsions-4.1.1-py3-none-any.whl
Collecting zipp>=0.5 (from importlib-metadata; python_version < "3.8"->prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 6f8e8ad/zipp-3.6.0-                                                                                                                                         py3-none-any.whl
Installing collected packages: ydiff, PyYAML, wcwidth, typing-extensions, zipp, importlib-metadata, prettytable, urllib3, six, pytho                                                                                                                                         n-dateutil, click, psutil, dnspython, python-etcd, patroni
  Running setup.py install for ydiff ... done
  Running setup.py install for PyYAML ... done
  Running setup.py install for psutil ... done
  Running setup.py install for python-etcd ... done
Successfully installed PyYAML-6.0.1 click-8.0.4 dnspython-2.2.1 importlib-metadata-4.8.3 patroni-3.1.0 prettytable-2.5.0 psutil-5.9.                                                                                                                                         5 python-dateutil-2.8.2 python-etcd-0.4.5 six-1.16.0 typing-extensions-4.1.1 urllib3-1.26.16 wcwidth-0.2.6 ydiff-1.2 zipp-3.6.0
[root@node1 etcd]# pip3 install psycopg2-binary
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting psycopg2-binary
  Downloading https://files.pythonhosted.org/p ... 3a1a29f/psycopg2-bi                                                                                                                                         nary-2.9.7.tar.gz (383kB)
    100% |████████████████████████████████| 389kB 876kB/s
Installing collected packages: psycopg2-binary
  Running setup.py install for psycopg2-binary ... done
Successfully installed psycopg2-binary-2.9.7
[root@node1 etcd]#

[root@node2 etcd]# yum install -y python3 python3-devel python3-pip gcc libpq-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version
No package libpq-devel available.
Resolving Dependencies
--> Running transaction check
---> Package python3.x86_64 0:3.6.8-19.el7_9 will be installed
--> Processing Dependency: python3-libs(x86-64) = 3.6.8-19.el7_9 for package: python3-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-setuptools for package: python3-3.6.8-19.el7_9.x86_64
--> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-19.el7_9.x86_64
---> Package python3-devel.x86_64 0:3.6.8-19.el7_9 will be installed
--> Processing Dependency: redhat-rpm-config for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-rpm-macros for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-rpm-generators for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python-rpm-macros for package: python3-devel-3.6.8-19.el7_9.x86_64
---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
--> Running transaction check
---> Package python-rpm-macros.noarch 0:3-34.el7 will be installed
--> Processing Dependency: python-srpm-macros for package: python-rpm-macros-3-34.el7.noarch
---> Package python3-libs.x86_64 0:3.6.8-19.el7_9 will be installed
---> Package python3-rpm-generators.noarch 0:6-2.el7 will be installed
---> Package python3-rpm-macros.noarch 0:3-34.el7 will be installed
---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
---> Package redhat-rpm-config.noarch 0:9.1.0-88.el7.centos will be installed
--> Processing Dependency: dwz >= 0.4 for package: redhat-rpm-config-9.1.0-88.el7.centos.noarch
--> Processing Dependency: perl-srpm-macros for package: redhat-rpm-config-9.1.0-88.el7.centos.noarch
--> Running transaction check
---> Package dwz.x86_64 0:0.11-3.el7 will be installed
---> Package perl-srpm-macros.noarch 0:1-8.el7 will be installed
---> Package python-srpm-macros.noarch 0:3-34.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                                Arch                   Version                                Repository               Size
====================================================================================================================================
Installing:
python3                                x86_64                 3.6.8-19.el7_9                         updates                  70 k
python3-devel                          x86_64                 3.6.8-19.el7_9                         updates                 217 k
python3-pip                            noarch                 9.0.3-8.el7                            base                    1.6 M
Installing for dependencies:
dwz                                    x86_64                 0.11-3.el7                             base                     99 k
perl-srpm-macros                       noarch                 1-8.el7                                base                    4.6 k
python-rpm-macros                      noarch                 3-34.el7                               base                    9.1 k
python-srpm-macros                     noarch                 3-34.el7                               base                    8.8 k
python3-libs                           x86_64                 3.6.8-19.el7_9                         updates                 6.9 M
python3-rpm-generators                 noarch                 6-2.el7                                base                     20 k
python3-rpm-macros                     noarch                 3-34.el7                               base                    8.1 k
python3-setuptools                     noarch                 39.2.0-10.el7                          base                    629 k
redhat-rpm-config                      noarch                 9.1.0-88.el7.centos                    base                     81 k

Transaction Summary
====================================================================================================================================
Install  3 Packages (+9 Dependent packages)

Total download size: 9.7 M
Installed size: 48 M
Downloading packages:
(1/12): perl-srpm-macros-1-8.el7.noarch.rpm                                                                  | 4.6 kB  00:00:00
(2/12): python-rpm-macros-3-34.el7.noarch.rpm                                                                | 9.1 kB  00:00:00
(3/12): dwz-0.11-3.el7.x86_64.rpm                                                                            |  99 kB  00:00:00
(4/12): python-srpm-macros-3-34.el7.noarch.rpm                                                               | 8.8 kB  00:00:00
(5/12): python3-3.6.8-19.el7_9.x86_64.rpm                                                                    |  70 kB  00:00:00
(6/12): python3-devel-3.6.8-19.el7_9.x86_64.rpm                                                              | 217 kB  00:00:00
(7/12): python3-rpm-generators-6-2.el7.noarch.rpm                                                            |  20 kB  00:00:00
(8/12): python3-libs-3.6.8-19.el7_9.x86_64.rpm                                                               | 6.9 MB  00:00:00
(9/12): python3-rpm-macros-3-34.el7.noarch.rpm                                                               | 8.1 kB  00:00:00
(10/12): python3-setuptools-39.2.0-10.el7.noarch.rpm                                                         | 629 kB  00:00:00
(11/12): python3-pip-9.0.3-8.el7.noarch.rpm                                                                  | 1.6 MB  00:00:00
(12/12): redhat-rpm-config-9.1.0-88.el7.centos.noarch.rpm                                                    |  81 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                               6.2 MB/s | 9.7 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python3-setuptools-39.2.0-10.el7.noarch                                                                         1/12
  Installing : python3-pip-9.0.3-8.el7.noarch                                                                                  2/12
  Installing : python3-libs-3.6.8-19.el7_9.x86_64                                                                              3/12
  Installing : python3-3.6.8-19.el7_9.x86_64                                                                                   4/12
  Installing : python-srpm-macros-3-34.el7.noarch                                                                              5/12
  Installing : python-rpm-macros-3-34.el7.noarch                                                                               6/12
  Installing : python3-rpm-generators-6-2.el7.noarch                                                                           7/12
  Installing : python3-rpm-macros-3-34.el7.noarch                                                                              8/12
  Installing : dwz-0.11-3.el7.x86_64                                                                                           9/12
  Installing : perl-srpm-macros-1-8.el7.noarch                                                                                10/12
  Installing : redhat-rpm-config-9.1.0-88.el7.centos.noarch                                                                   11/12
  Installing : python3-devel-3.6.8-19.el7_9.x86_64                                                                            12/12
  Verifying  : python3-devel-3.6.8-19.el7_9.x86_64                                                                             1/12
  Verifying  : python3-rpm-generators-6-2.el7.noarch                                                                           2/12
  Verifying  : perl-srpm-macros-1-8.el7.noarch                                                                                 3/12
  Verifying  : python3-3.6.8-19.el7_9.x86_64                                                                                   4/12
  Verifying  : python-rpm-macros-3-34.el7.noarch                                                                               5/12
  Verifying  : dwz-0.11-3.el7.x86_64                                                                                           6/12
  Verifying  : python3-rpm-macros-3-34.el7.noarch                                                                              7/12
  Verifying  : python3-setuptools-39.2.0-10.el7.noarch                                                                         8/12
  Verifying  : python3-pip-9.0.3-8.el7.noarch                                                                                  9/12
  Verifying  : python-srpm-macros-3-34.el7.noarch                                                                             10/12
  Verifying  : python3-libs-3.6.8-19.el7_9.x86_64                                                                             11/12
  Verifying  : redhat-rpm-config-9.1.0-88.el7.centos.noarch                                                                   12/12

Installed:
  python3.x86_64 0:3.6.8-19.el7_9          python3-devel.x86_64 0:3.6.8-19.el7_9          python3-pip.noarch 0:9.0.3-8.el7

Dependency Installed:
  dwz.x86_64 0:0.11-3.el7               perl-srpm-macros.noarch 0:1-8.el7          python-rpm-macros.noarch 0:3-34.el7
  python-srpm-macros.noarch 0:3-34.el7  python3-libs.x86_64 0:3.6.8-19.el7_9       python3-rpm-generators.noarch 0:6-2.el7
  python3-rpm-macros.noarch 0:3-34.el7  python3-setuptools.noarch 0:39.2.0-10.el7  redhat-rpm-config.noarch 0:9.1.0-88.el7.centos

Complete!
[root@node2 etcd]# echo $LD_LIBRARY_PATH

[root@node2 etcd]# export PGPORT=5432
[root@node2 etcd]# export PGUSER=postgres
[root@node2 etcd]# export PGHOME=/opt/pgsql
[root@node2 etcd]# export PGDATA=/opt/pgdata
[root@node2 etcd]# export LD_LIBRARY_PATH=$PGHOME/lib
[root@node2 etcd]# export PATH=$PGHOME/bin:$PATH
[root@node2 etcd]# pip3 install patroni[etcd]
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting patroni[etcd]
  Downloading https://files.pythonhosted.org/p ... d49f714/patroni-3.1                                                                                                                                         .0-py3-none-any.whl (286kB)
    100% |████████████████████████████████| 286kB 389kB/s
Collecting prettytable>=0.7 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 6168b4c/prettytable                                                                                                                                         -2.5.0-py3-none-any.whl
Collecting python-dateutil (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 342a56d/python_date                                                                                                                                         util-2.8.2-py2.py3-none-any.whl (247kB)
    100% |████████████████████████████████| 256kB 906kB/s
Collecting ydiff>=1.2.0 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 583fce4/ydiff-1.2.t                                                                                                                                         ar.gz (42kB)
    100% |████████████████████████████████| 51kB 1.2MB/s
Collecting click>=4.1 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 1696d7d/click-8.0.4                                                                                                                                         -py3-none-any.whl (97kB)
    100% |████████████████████████████████| 102kB 721kB/s
Collecting psutil>=2.0.0 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... cfc2c07/psutil-5.9.                                                                                                                                         5.tar.gz (493kB)
    100% |████████████████████████████████| 501kB 702kB/s
Collecting urllib3!=1.21,>=1.19.1 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 7728471/urllib3-1.2                                                                                                                                         6.16-py2.py3-none-any.whl (143kB)
    100% |████████████████████████████████| 143kB 693kB/s
Collecting PyYAML (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... be1eda0/PyYAML-6.0.                                                                                                                                         1.tar.gz (125kB)
    100% |████████████████████████████████| 133kB 578kB/s
Collecting python-etcd<0.5,>=0.4.3; extra == "etcd" (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 821ab41/python-etcd                                                                                                                                         -0.4.5.tar.gz
Collecting wcwidth (from prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... aa83f11/wcwidth-0.2                                                                                                                                         .6-py2.py3-none-any.whl
Collecting importlib-metadata; python_version < "3.8" (from prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... d68f4ce/importlib_m                                                                                                                                         etadata-4.8.3-py3-none-any.whl
Collecting six>=1.5 (from python-dateutil->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 91daf11/six-1.16.0-                                                                                                                                         py2.py3-none-any.whl
Collecting dnspython>=1.13.0 (from python-etcd<0.5,>=0.4.3; extra == "etcd"->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 337cc35/dnspython-2                                                                                                                                         .2.1-py3-none-any.whl (269kB)
    100% |████████████████████████████████| 276kB 256kB/s
Collecting typing-extensions>=3.6.4; python_version < "3.8" (from importlib-metadata; python_version < "3.8"->prettytable>=0.7->patr                                                                                                                                         oni[etcd])
  Downloading https://files.pythonhosted.org/p ... ffd3a0e/typing_exte                                                                                                                                         nsions-4.1.1-py3-none-any.whl
Collecting zipp>=0.5 (from importlib-metadata; python_version < "3.8"->prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 6f8e8ad/zipp-3.6.0-                                                                                                                                         py3-none-any.whl
Installing collected packages: wcwidth, typing-extensions, zipp, importlib-metadata, prettytable, six, python-dateutil, ydiff, click                                                                                                                                         , psutil, urllib3, PyYAML, dnspython, python-etcd, patroni
  Running setup.py install for ydiff ... done
  Running setup.py install for psutil ... done
  Running setup.py install for PyYAML ... done
  Running setup.py install for python-etcd ... done
Successfully installed PyYAML-6.0.1 click-8.0.4 dnspython-2.2.1 importlib-metadata-4.8.3 patroni-3.1.0 prettytable-2.5.0 psutil-5.9.                                                                                                                                         5 python-dateutil-2.8.2 python-etcd-0.4.5 six-1.16.0 typing-extensions-4.1.1 urllib3-1.26.16 wcwidth-0.2.6 ydiff-1.2 zipp-3.6.0
[root@node2 etcd]# pip3 install psycopg2-binary
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting psycopg2-binary
  Downloading https://files.pythonhosted.org/p ... 3a1a29f/psycopg2-bi                                                                                                                                         nary-2.9.7.tar.gz (383kB)
    100% |████████████████████████████████| 389kB 821kB/s
Installing collected packages: psycopg2-binary
  Running setup.py install for psycopg2-binary ... done
Successfully installed psycopg2-binary-2.9.7
[root@node2 etcd]#

[root@node3 etcd]# yum install -y python3 python3-devel python3-pip gcc libpq-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package gcc-4.8.5-44.el7.x86_64 already installed and latest version
No package libpq-devel available.
Resolving Dependencies
--> Running transaction check
---> Package python3.x86_64 0:3.6.8-19.el7_9 will be installed
--> Processing Dependency: python3-libs(x86-64) = 3.6.8-19.el7_9 for package: python3-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-setuptools for package: python3-3.6.8-19.el7_9.x86_64
--> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-19.el7_9.x86_64
---> Package python3-devel.x86_64 0:3.6.8-19.el7_9 will be installed
--> Processing Dependency: redhat-rpm-config for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-rpm-macros for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python3-rpm-generators for package: python3-devel-3.6.8-19.el7_9.x86_64
--> Processing Dependency: python-rpm-macros for package: python3-devel-3.6.8-19.el7_9.x86_64
---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
--> Running transaction check
---> Package python-rpm-macros.noarch 0:3-34.el7 will be installed
--> Processing Dependency: python-srpm-macros for package: python-rpm-macros-3-34.el7.noarch
---> Package python3-libs.x86_64 0:3.6.8-19.el7_9 will be installed
---> Package python3-rpm-generators.noarch 0:6-2.el7 will be installed
---> Package python3-rpm-macros.noarch 0:3-34.el7 will be installed
---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
---> Package redhat-rpm-config.noarch 0:9.1.0-88.el7.centos will be installed
--> Processing Dependency: dwz >= 0.4 for package: redhat-rpm-config-9.1.0-88.el7.centos.noarch
--> Processing Dependency: perl-srpm-macros for package: redhat-rpm-config-9.1.0-88.el7.centos.noarch
--> Running transaction check
---> Package dwz.x86_64 0:0.11-3.el7 will be installed
---> Package perl-srpm-macros.noarch 0:1-8.el7 will be installed
---> Package python-srpm-macros.noarch 0:3-34.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package                                Arch                   Version                                Repository               Size
====================================================================================================================================
Installing:
python3                                x86_64                 3.6.8-19.el7_9                         updates                  70 k
python3-devel                          x86_64                 3.6.8-19.el7_9                         updates                 217 k
python3-pip                            noarch                 9.0.3-8.el7                            base                    1.6 M
Installing for dependencies:
dwz                                    x86_64                 0.11-3.el7                             base                     99 k
perl-srpm-macros                       noarch                 1-8.el7                                base                    4.6 k
python-rpm-macros                      noarch                 3-34.el7                               base                    9.1 k
python-srpm-macros                     noarch                 3-34.el7                               base                    8.8 k
python3-libs                           x86_64                 3.6.8-19.el7_9                         updates                 6.9 M
python3-rpm-generators                 noarch                 6-2.el7                                base                     20 k
python3-rpm-macros                     noarch                 3-34.el7                               base                    8.1 k
python3-setuptools                     noarch                 39.2.0-10.el7                          base                    629 k
redhat-rpm-config                      noarch                 9.1.0-88.el7.centos                    base                     81 k

Transaction Summary
====================================================================================================================================
Install  3 Packages (+9 Dependent packages)

Total download size: 9.7 M
Installed size: 48 M
Downloading packages:
(1/12): perl-srpm-macros-1-8.el7.noarch.rpm                                                                  | 4.6 kB  00:00:00
(2/12): python-rpm-macros-3-34.el7.noarch.rpm                                                                | 9.1 kB  00:00:00
(3/12): dwz-0.11-3.el7.x86_64.rpm                                                                            |  99 kB  00:00:00
(4/12): python-srpm-macros-3-34.el7.noarch.rpm                                                               | 8.8 kB  00:00:00
(5/12): python3-3.6.8-19.el7_9.x86_64.rpm                                                                    |  70 kB  00:00:00
(6/12): python3-devel-3.6.8-19.el7_9.x86_64.rpm                                                              | 217 kB  00:00:00
(7/12): python3-rpm-generators-6-2.el7.noarch.rpm                                                            |  20 kB  00:00:00
(8/12): python3-libs-3.6.8-19.el7_9.x86_64.rpm                                                               | 6.9 MB  00:00:00
(9/12): python3-rpm-macros-3-34.el7.noarch.rpm                                                               | 8.1 kB  00:00:00
(10/12): python3-pip-9.0.3-8.el7.noarch.rpm                                                                  | 1.6 MB  00:00:00
(11/12): python3-setuptools-39.2.0-10.el7.noarch.rpm                                                         | 629 kB  00:00:00
(12/12): redhat-rpm-config-9.1.0-88.el7.centos.noarch.rpm                                                    |  81 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                               8.3 MB/s | 9.7 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python3-setuptools-39.2.0-10.el7.noarch                                                                         1/12
  Installing : python3-pip-9.0.3-8.el7.noarch                                                                                  2/12
  Installing : python3-libs-3.6.8-19.el7_9.x86_64                                                                              3/12
  Installing : python3-3.6.8-19.el7_9.x86_64                                                                                   4/12
  Installing : python-srpm-macros-3-34.el7.noarch                                                                              5/12
  Installing : python-rpm-macros-3-34.el7.noarch                                                                               6/12
  Installing : python3-rpm-generators-6-2.el7.noarch                                                                           7/12
  Installing : python3-rpm-macros-3-34.el7.noarch                                                                              8/12
  Installing : dwz-0.11-3.el7.x86_64                                                                                           9/12
  Installing : perl-srpm-macros-1-8.el7.noarch                                                                                10/12
  Installing : redhat-rpm-config-9.1.0-88.el7.centos.noarch                                                                   11/12
  Installing : python3-devel-3.6.8-19.el7_9.x86_64                                                                            12/12
  Verifying  : python3-devel-3.6.8-19.el7_9.x86_64                                                                             1/12
  Verifying  : python3-rpm-generators-6-2.el7.noarch                                                                           2/12
  Verifying  : perl-srpm-macros-1-8.el7.noarch                                                                                 3/12
  Verifying  : python3-3.6.8-19.el7_9.x86_64                                                                                   4/12
  Verifying  : python-rpm-macros-3-34.el7.noarch                                                                               5/12
  Verifying  : dwz-0.11-3.el7.x86_64                                                                                           6/12
  Verifying  : python3-rpm-macros-3-34.el7.noarch                                                                              7/12
  Verifying  : python3-setuptools-39.2.0-10.el7.noarch                                                                         8/12
  Verifying  : python3-pip-9.0.3-8.el7.noarch                                                                                  9/12
  Verifying  : python-srpm-macros-3-34.el7.noarch                                                                             10/12
  Verifying  : python3-libs-3.6.8-19.el7_9.x86_64                                                                             11/12
  Verifying  : redhat-rpm-config-9.1.0-88.el7.centos.noarch                                                                   12/12

Installed:
  python3.x86_64 0:3.6.8-19.el7_9          python3-devel.x86_64 0:3.6.8-19.el7_9          python3-pip.noarch 0:9.0.3-8.el7

Dependency Installed:
  dwz.x86_64 0:0.11-3.el7               perl-srpm-macros.noarch 0:1-8.el7          python-rpm-macros.noarch 0:3-34.el7
  python-srpm-macros.noarch 0:3-34.el7  python3-libs.x86_64 0:3.6.8-19.el7_9       python3-rpm-generators.noarch 0:6-2.el7
  python3-rpm-macros.noarch 0:3-34.el7  python3-setuptools.noarch 0:39.2.0-10.el7  redhat-rpm-config.noarch 0:9.1.0-88.el7.centos

Complete!
[root@node3 etcd]# echo $LD_LIBRARY_PATH

[root@node3 etcd]# export PGPORT=5432
[root@node3 etcd]# export PGUSER=postgres
[root@node3 etcd]# export PGHOME=/opt/pgsql
[root@node3 etcd]# export PGDATA=/opt/pgdata
[root@node3 etcd]# export LD_LIBRARY_PATH=$PGHOME/lib
[root@node3 etcd]# export PATH=$PGHOME/bin:$PATH
[root@node3 etcd]# pip3 install patroni[etcd]
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting patroni[etcd]
  Downloading https://files.pythonhosted.org/p ... d49f714/patroni-3.1                                                                                                                                         .0-py3-none-any.whl (286kB)
    100% |████████████████████████████████| 286kB 3.6MB/s
Collecting urllib3!=1.21,>=1.19.1 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 7728471/urllib3-1.2                                                                                                                                         6.16-py2.py3-none-any.whl (143kB)
    100% |████████████████████████████████| 143kB 7.6MB/s
Collecting PyYAML (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... be1eda0/PyYAML-6.0.                                                                                                                                         1.tar.gz (125kB)
    100% |████████████████████████████████| 133kB 7.5MB/s
Collecting python-dateutil (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 342a56d/python_date                                                                                                                                         util-2.8.2-py2.py3-none-any.whl (247kB)
    100% |████████████████████████████████| 256kB 5.5MB/s
Collecting prettytable>=0.7 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 6168b4c/prettytable                                                                                                                                         -2.5.0-py3-none-any.whl
Collecting ydiff>=1.2.0 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 583fce4/ydiff-1.2.t                                                                                                                                         ar.gz (42kB)
    100% |████████████████████████████████| 51kB 13.1MB/s
Collecting click>=4.1 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 1696d7d/click-8.0.4                                                                                                                                         -py3-none-any.whl (97kB)
    100% |████████████████████████████████| 102kB 13.1MB/s
Collecting psutil>=2.0.0 (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... cfc2c07/psutil-5.9.                                                                                                                                         5.tar.gz (493kB)
    100% |████████████████████████████████| 501kB 4.1MB/s
Collecting python-etcd<0.5,>=0.4.3; extra == "etcd" (from patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 821ab41/python-etcd                                                                                                                                         -0.4.5.tar.gz
Collecting six>=1.5 (from python-dateutil->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 91daf11/six-1.16.0-                                                                                                                                         py2.py3-none-any.whl
Collecting wcwidth (from prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... aa83f11/wcwidth-0.2                                                                                                                                         .6-py2.py3-none-any.whl
Collecting importlib-metadata; python_version < "3.8" (from prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... d68f4ce/importlib_m                                                                                                                                         etadata-4.8.3-py3-none-any.whl
Collecting dnspython>=1.13.0 (from python-etcd<0.5,>=0.4.3; extra == "etcd"->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 337cc35/dnspython-2                                                                                                                                         .2.1-py3-none-any.whl (269kB)
    100% |████████████████████████████████| 276kB 6.7MB/s
Collecting zipp>=0.5 (from importlib-metadata; python_version < "3.8"->prettytable>=0.7->patroni[etcd])
  Downloading https://files.pythonhosted.org/p ... 6f8e8ad/zipp-3.6.0-                                                                                                                                         py3-none-any.whl
Collecting typing-extensions>=3.6.4; python_version < "3.8" (from importlib-metadata; python_version < "3.8"->prettytable>=0.7->patr                                                                                                                                         oni[etcd])
  Downloading https://files.pythonhosted.org/p ... ffd3a0e/typing_exte                                                                                                                                         nsions-4.1.1-py3-none-any.whl
Installing collected packages: urllib3, PyYAML, six, python-dateutil, wcwidth, zipp, typing-extensions, importlib-metadata, prettyta                                                                                                                                         ble, ydiff, click, psutil, dnspython, python-etcd, patroni
  Running setup.py install for PyYAML ... done
  Running setup.py install for ydiff ... done
  Running setup.py install for psutil ... done
  Running setup.py install for python-etcd ... done
Successfully installed PyYAML-6.0.1 click-8.0.4 dnspython-2.2.1 importlib-metadata-4.8.3 patroni-3.1.0 prettytable-2.5.0 psutil-5.9.                                                                                                                                         5 python-dateutil-2.8.2 python-etcd-0.4.5 six-1.16.0 typing-extensions-4.1.1 urllib3-1.26.16 wcwidth-0.2.6 ydiff-1.2 zipp-3.6.0
[root@node3 etcd]# pip3 install psycopg2-binary
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting psycopg2-binary
  Downloading https://files.pythonhosted.org/p ... 3a1a29f/psycopg2-bi                                                                                                                                         nary-2.9.7.tar.gz (383kB)
    100% |████████████████████████████████| 389kB 861kB/s
Installing collected packages: psycopg2-binary
  Running setup.py install for psycopg2-binary ... done
Successfully installed psycopg2-binary-2.9.7
[root@node3 etcd]#

配置patroni
mkdir -p /etc/patroni/
cd /etc/patroni/
cat >> patroni.yml << EOF
scope: pg_cluster
namespace: /service/
name: pg1

restapi:
    listen: 0.0.0.0:8008
    connect_address: 192.168.17.20:8008

etcd:
  hosts: 192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:

  initdb:
  - encoding: UTF8
  - data-checksums

  pg_hba:
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 192.168.17.20/32 md5
  - host replication replicator 192.168.17.21/32 md5
  - host replication replicator 192.168.17.22/32 md5
  - host all all 0.0.0.0/0 md5

  users:
    admin:
      password: admin
      options:
        - createrole
        - createdb

postgresql:
  listen: 192.168.17.20:5432
  connect_address: 192.168.17.20:5432
  data_dir: /opt/pgdata
  bin_dir: /opt/pgsql/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: replicator
    superuser:
      username: postgres
      password: postgres

watchdog:
  mode: required
  device: /dev/watchdog
  safety_margin: 5

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

EOF

cat >> /etc/systemd/system/patroni.service << EOF
[Unit]
Description=patroni - a high-availability PostgreSQL
Documentation=https://patroni.readthedocs.io/en/latest/index.html
After=syslog.target network.target etcd.target
Wants=network-online.target

[Service]
Type=simple
User=postgres
Group=postgres
PermissionsStartOnly=true
Environment="LD_LIBRARY_PATH=/opt/pgsql/lib"
ExecStart=/usr/local/bin/patroni /etc/patroni/patroni.yml
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65536
KillMode=process
KillSignal=SIGINT
Restart=on-abnormal
RestartSec=30s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

EOF

systemctl daemon-reload
systemctl start patroni.service
systemctl status patroni.service
su - postgres
patronictl -c /etc/patroni/patroni.yml list
3台机器都要操作,注意patroni.yml每个节点的IP地址和name都要修改

[root@node1 etcd]# mkdir -p /etc/patroni/
[root@node1 etcd]# cd /etc/patroni/
[root@node1 patroni]# cat >> patroni.yml << EOF
> scope: pg_cluster
> namespace: /service/
> name: pg1
>
> restapi:
>     listen: 0.0.0.0:8008
>     connect_address: 192.168.17.20:8008
>
> etcd:
>   hosts: 192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
>
> bootstrap:
>   dcs:
>     ttl: 30
>     loop_wait: 10
>     retry_timeout: 10
>     maximum_lag_on_failover: 1048576
>     postgresql:
>       use_pg_rewind: true
>       use_slots: true
>       parameters:
>
>   initdb:
>   - encoding: UTF8
>   - data-checksums
>
>   pg_hba:
>   - host replication replicator 127.0.0.1/32 md5
>   - host replication replicator 192.168.17.20/32 md5
>   - host replication replicator 192.168.17.21/32 md5
>   - host replication replicator 192.168.17.22/32 md5
>   - host all all 0.0.0.0/0 md5
>
>   users:
>     admin:
>       password: admin
>       options:
>         - createrole
>         - createdb
>
> postgresql:
>   listen: 192.168.17.20:5432
>   connect_address: 192.168.17.20:5432
>   data_dir: /opt/pgdata
>   bin_dir: /opt/pgsql/bin
>   pgpass: /tmp/pgpass
>   authentication:
>     replication:
>       username: replicator
>       password: replicator
>     superuser:
>       username: postgres
>       password: postgres
>
> watchdog:
>   mode: required
>   device: /dev/watchdog
>   safety_margin: 5
>
> tags:
>     nofailover: false
>     noloadbalance: false
>     clonefrom: false
>     nosync: false
>
> EOF
[root@node1 patroni]# cat >> /etc/systemd/system/patroni.service << EOF
> [Unit]
> Description=patroni - a high-availability PostgreSQL
> Documentation=https://patroni.readthedocs.io/en/latest/index.html
> After=syslog.target network.target etcd.target
> Wants=network-online.target
>
> [Service]
> Type=simple
> User=postgres
> Group=postgres
> PermissionsStartOnly=true
> Environment="LD_LIBRARY_PATH=/opt/pgsql/lib"
> ExecStart=/usr/local/bin/patroni /etc/patroni/patroni.yml
> ExecReload=/bin/kill -HUP $MAINPID
> LimitNOFILE=65536
> KillMode=process
> KillSignal=SIGINT
> Restart=on-abnormal
> RestartSec=30s
> TimeoutSec=0
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node1 patroni]# systemctl daemon-reload
[root@node1 patroni]# systemctl start patroni.service
[root@node1 patroni]# systemctl status patroni.service
● patroni.service - patroni - a high-availability PostgreSQL
   Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-09-08 23:38:02 CST; 41s ago
     Docs: https://patroni.readthedocs.io/en/latest/index.html
Main PID: 14038 (patroni)
    Tasks: 15
   CGroup: /system.slice/patroni.service
           ├─14038 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni/patroni.yml
           ├─14079 /opt/pgsql/bin/postgres -D /opt/pgdata --config-file=/opt/pgdata/postgresql.conf --listen_addresses=192.168.17.20 --port=5432 --cluster_name=pg_cluster --wal_level=replica --hot_standby=on --max_connections=100 --max_wal_senders=10 --max_prepared_...
           ├─14081 postgres: pg_cluster: checkpointer
           ├─14082 postgres: pg_cluster: background writer
           ├─14083 postgres: pg_cluster: walwriter
           ├─14084 postgres: pg_cluster: autovacuum launcher
           ├─14085 postgres: pg_cluster: stats collector
           ├─14086 postgres: pg_cluster: logical replication launcher
           ├─14091 postgres: pg_cluster: postgres postgres 192.168.17.20(46620) idle
           ├─14103 postgres: pg_cluster: walsender replicator 192.168.17.21(47634) streaming 0/4000060
           └─14104 postgres: pg_cluster: walsender replicator 192.168.17.22(48736) streaming 0/4000060

Sep 08 23:38:09 node1 patroni[14038]: 2023-09-08 23:38:09.964 CST [14097] STATEMENT:  START_REPLICATION SLOT "pg2" 0/3000000 TIMELINE 1
Sep 08 23:38:09 node1 patroni[14038]: 2023-09-08 23:38:09.971 CST [14098] ERROR:  replication slot "pg2" does not exist
Sep 08 23:38:09 node1 patroni[14038]: 2023-09-08 23:38:09.971 CST [14098] STATEMENT:  START_REPLICATION SLOT "pg2" 0/3000000 TIMELINE 1
Sep 08 23:38:12 node1 patroni[14038]: 2023-09-08 23:38:12.418 CST [14101] ERROR:  replication slot "pg3" does not exist
Sep 08 23:38:12 node1 patroni[14038]: 2023-09-08 23:38:12.418 CST [14101] STATEMENT:  START_REPLICATION SLOT "pg3" 0/4000000 TIMELINE 1
Sep 08 23:38:12 node1 patroni[14038]: 2023-09-08 23:38:12.425 CST [14102] ERROR:  replication slot "pg3" does not exist
Sep 08 23:38:12 node1 patroni[14038]: 2023-09-08 23:38:12.425 CST [14102] STATEMENT:  START_REPLICATION SLOT "pg3" 0/4000000 TIMELINE 1
Sep 08 23:38:14 node1 patroni[14038]: 2023-09-08 23:38:14,847 INFO: no action. I am (pg1), the leader with the lock
Sep 08 23:38:24 node1 patroni[14038]: 2023-09-08 23:38:24,844 INFO: no action. I am (pg1), the leader with the lock
Sep 08 23:38:34 node1 patroni[14038]: 2023-09-08 23:38:34,842 INFO: no action. I am (pg1), the leader with the lock
[root@node1 patroni]# su - postgres
Last login: Fri Sep  8 23:14:26 CST 2023 on pts/1
[postgres@node1 ~]$ patronictl -c /etc/patroni/patroni.yml list
+ Cluster: pg_cluster ---+---------+-----------+----+-----------+
| Member | Host          | Role    | State     | TL | Lag in MB |
+--------+---------------+---------+-----------+----+-----------+
| pg1    | 192.168.17.20 | Leader  | running   |  1 |           |
| pg2    | 192.168.17.21 | Replica | streaming |  1 |         0 |
| pg3    | 192.168.17.22 | Replica | streaming |  1 |         0 |
+--------+---------------+---------+-----------+----+-----------+
[postgres@node1 ~]$

[root@node2 etcd]# mkdir -p /etc/patroni/
[root@node2 etcd]# cd /etc/patroni/
[root@node2 patroni]# cat >> patroni.yml << EOF
> scope: pg_cluster
> namespace: /service/
> name: pg2
>
> restapi:
>     listen: 0.0.0.0:8008
>     connect_address: 192.168.17.21:8008
>
> etcd:
>   hosts: 192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
>
> bootstrap:
>   dcs:
>     ttl: 30
>     loop_wait: 10
>     retry_timeout: 10
>     maximum_lag_on_failover: 1048576
>     postgresql:
>       use_pg_rewind: true
>       use_slots: true
>       parameters:
>
>   initdb:
>   - encoding: UTF8
>   - data-checksums
>
>   pg_hba:
>   - host replication replicator 127.0.0.1/32 md5
>   - host replication replicator 192.168.17.20/32 md5
>   - host replication replicator 192.168.17.21/32 md5
>   - host replication replicator 192.168.17.22/32 md5
>   - host all all 0.0.0.0/0 md5
>
>   users:
>     admin:
>       password: admin
>       options:
>         - createrole
>         - createdb
>
> postgresql:
>   listen: 192.168.17.21:5432
>   connect_address: 192.168.17.21:5432
>   data_dir: /opt/pgdata
>   bin_dir: /opt/pgsql/bin
>   pgpass: /tmp/pgpass
>   authentication:
>     replication:
>       username: replicator
>       password: replicator
>     superuser:
>       username: postgres
>       password: postgres
>
> watchdog:
>   mode: required
>   device: /dev/watchdog
>   safety_margin: 5
>
> tags:
>     nofailover: false
>     noloadbalance: false
>     clonefrom: false
>     nosync: false
>
> EOF
[root@node2 patroni]#
[root@node2 patroni]# cat >> /etc/systemd/system/patroni.service << EOF
> [Unit]
> Description=patroni - a high-availability PostgreSQL
> Documentation=https://patroni.readthedocs.io/en/latest/index.html
> After=syslog.target network.target etcd.target
> Wants=network-online.target
>
> [Service]
> Type=simple
> User=postgres
> Group=postgres
> PermissionsStartOnly=true
> Environment="LD_LIBRARY_PATH=/opt/pgsql/lib"
> ExecStart=/usr/local/bin/patroni /etc/patroni/patroni.yml
> ExecReload=/bin/kill -HUP $MAINPID
> LimitNOFILE=65536
> KillMode=process
> KillSignal=SIGINT
> Restart=on-abnormal
> RestartSec=30s
> TimeoutSec=0
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node2 patroni]#
[root@node2 patroni]# systemctl daemon-reload
[root@node2 patroni]# systemctl start patroni.service
[root@node2 patroni]# systemctl status patroni.service
● patroni.service - patroni - a high-availability PostgreSQL
   Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-09-08 23:38:08 CST; 48s ago
     Docs: https://patroni.readthedocs.io/en/latest/index.html
Main PID: 66290 (patroni)
    Tasks: 12
   CGroup: /system.slice/patroni.service
           ├─66290 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni/patroni.yml
           ├─66330 /opt/pgsql/bin/postgres -D /opt/pgdata --config-file=/opt/pgdata/postgresql.conf --listen_addresses=192.168.17.21 --port=5432 --cluster_name=pg_cluster --wal_level=replica --hot_standby=on --max_connections=100 --max_wal_senders=10 --max_prepared_...
           ├─66332 postgres: pg_cluster: startup recovering 000000010000000000000004
           ├─66336 postgres: pg_cluster: checkpointer
           ├─66337 postgres: pg_cluster: background writer
           ├─66338 postgres: pg_cluster: stats collector
           ├─66344 postgres: pg_cluster: postgres postgres 192.168.17.21(33360) idle
           └─66346 postgres: pg_cluster: walreceiver streaming 0/4000060

Sep 08 23:38:10 node2 patroni[66290]: 192.168.17.21:5432 - accepting connections
Sep 08 23:38:10 node2 patroni[66290]: 2023-09-08 23:38:10,678 INFO: Lock owner: pg1; I am pg2
Sep 08 23:38:10 node2 patroni[66290]: 2023-09-08 23:38:10,678 INFO: establishing a new patroni connection to the postgres cluster
Sep 08 23:38:10 node2 patroni[66290]: 2023-09-08 23:38:10,695 INFO: no action. I am (pg2), a secondary, and following a leader (pg1)
Sep 08 23:38:14 node2 patroni[66290]: 2023-09-08 23:38:14,564 INFO: no action. I am (pg2), a secondary, and following a leader (pg1)
Sep 08 23:38:14 node2 patroni[66290]: 2023-09-08 23:38:14.698 CST [66346] LOG:  started streaming WAL from primary at 0/3000000 on timeline 1
Sep 08 23:38:24 node2 patroni[66290]: 2023-09-08 23:38:24,563 INFO: no action. I am (pg2), a secondary, and following a leader (pg1)
Sep 08 23:38:34 node2 patroni[66290]: 2023-09-08 23:38:34,563 INFO: no action. I am (pg2), a secondary, and following a leader (pg1)
Sep 08 23:38:44 node2 patroni[66290]: 2023-09-08 23:38:44,562 INFO: no action. I am (pg2), a secondary, and following a leader (pg1)
Sep 08 23:38:54 node2 patroni[66290]: 2023-09-08 23:38:54,562 INFO: no action. I am (pg2), a secondary, and following a leader (pg1)
[root@node2 patroni]#

[root@node3 etcd]# mkdir -p /etc/patroni/
[root@node3 etcd]# cd /etc/patroni/
[root@node3 patroni]# cat >> patroni.yml << EOF
> scope: pg_cluster
> namespace: /service/
> name: pg3
>
> restapi:
>     listen: 0.0.0.0:8008
>     connect_address: 192.168.17.22:8008
>
> etcd:
>   hosts: 192.168.17.20:2379,192.168.17.21:2379,192.168.17.22:2379
>
> bootstrap:
>   dcs:
>     ttl: 30
>     loop_wait: 10
>     retry_timeout: 10
>     maximum_lag_on_failover: 1048576
>     postgresql:
>       use_pg_rewind: true
>       use_slots: true
>       parameters:
>
>   initdb:
>   - encoding: UTF8
>   - data-checksums
>
>   pg_hba:
>   - host replication replicator 127.0.0.1/32 md5
>   - host replication replicator 192.168.17.20/32 md5
>   - host replication replicator 192.168.17.21/32 md5
>   - host replication replicator 192.168.17.22/32 md5
>   - host all all 0.0.0.0/0 md5
>
>   users:
>     admin:
>       password: admin
>       options:
>         - createrole
>         - createdb
>
> postgresql:
>   listen: 192.168.17.22:5432
>   connect_address: 192.168.17.22:5432
>   data_dir: /opt/pgdata
>   bin_dir: /opt/pgsql/bin
>   pgpass: /tmp/pgpass
>   authentication:
>     replication:
>       username: replicator
>       password: replicator
>     superuser:
>       username: postgres
>       password: postgres
>
> watchdog:
>   mode: required
>   device: /dev/watchdog
>   safety_margin: 5
>
> tags:
>     nofailover: false
>     noloadbalance: false
>     clonefrom: false
>     nosync: false
>
> EOF
[root@node3 patroni]#
[root@node3 patroni]# cat >> /etc/systemd/system/patroni.service << EOF
> [Unit]
> Description=patroni - a high-availability PostgreSQL
> Documentation=https://patroni.readthedocs.io/en/latest/index.html
> After=syslog.target network.target etcd.target
> Wants=network-online.target
>
> [Service]
> Type=simple
> User=postgres
> Group=postgres
> PermissionsStartOnly=true
> Environment="LD_LIBRARY_PATH=/opt/pgsql/lib"
> ExecStart=/usr/local/bin/patroni /etc/patroni/patroni.yml
> ExecReload=/bin/kill -HUP $MAINPID
> LimitNOFILE=65536
> KillMode=process
> KillSignal=SIGINT
> Restart=on-abnormal
> RestartSec=30s
> TimeoutSec=0
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node3 patroni]#
[root@node3 patroni]# systemctl daemon-reload
[root@node3 patroni]# systemctl start patroni.service
[root@node3 patroni]# systemctl status patroni.service
● patroni.service - patroni - a high-availability PostgreSQL
   Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-09-08 23:38:11 CST; 49s ago
     Docs: https://patroni.readthedocs.io/en/latest/index.html
Main PID: 66275 (patroni)
    Tasks: 12
   CGroup: /system.slice/patroni.service
           ├─66275 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni/patroni.yml
           ├─66315 /opt/pgsql/bin/postgres -D /opt/pgdata --config-file=/opt/pgdata/postgresql.conf --listen_addresses=192.168.17.22 --port=5432 --cluster_name=pg_cluster --wal_level=replica --hot_standby=on --max_connections=100 --max_wal_senders=10 --max_prepared_...
           ├─66316 postgres: pg_cluster: startup recovering 000000010000000000000004
           ├─66317 postgres: pg_cluster: checkpointer
           ├─66318 postgres: pg_cluster: background writer
           ├─66319 postgres: pg_cluster: stats collector
           ├─66327 postgres: pg_cluster: postgres postgres 192.168.17.22(60362) idle
           └─66337 postgres: pg_cluster: walreceiver streaming 0/4000060

Sep 08 23:38:12 node3 patroni[66275]: 2023-09-08 23:38:12,158 INFO: Lock owner: pg1; I am pg3
Sep 08 23:38:12 node3 patroni[66275]: 2023-09-08 23:38:12,159 INFO: establishing a new patroni connection to the postgres cluster
Sep 08 23:38:12 node3 patroni[66275]: 2023-09-08 23:38:12.163 CST [66326] FATAL:  could not start WAL streaming: ERROR:  replication slot "pg3" does not exist
Sep 08 23:38:12 node3 patroni[66275]: 2023-09-08 23:38:12,177 INFO: no action. I am (pg3), a secondary, and following a leader (pg1)
Sep 08 23:38:14 node3 patroni[66275]: 2023-09-08 23:38:14,594 INFO: no action. I am (pg3), a secondary, and following a leader (pg1)
Sep 08 23:38:17 node3 patroni[66275]: 2023-09-08 23:38:17.170 CST [66337] LOG:  started streaming WAL from primary at 0/4000000 on timeline 1
Sep 08 23:38:24 node3 patroni[66275]: 2023-09-08 23:38:24,593 INFO: no action. I am (pg3), a secondary, and following a leader (pg1)
Sep 08 23:38:34 node3 patroni[66275]: 2023-09-08 23:38:34,593 INFO: no action. I am (pg3), a secondary, and following a leader (pg1)
Sep 08 23:38:44 node3 patroni[66275]: 2023-09-08 23:38:44,592 INFO: no action. I am (pg3), a secondary, and following a leader (pg1)
Sep 08 23:38:54 node3 patroni[66275]: 2023-09-08 23:38:54,592 INFO: no action. I am (pg3), a secondary, and following a leader (pg1)
[root@node3 patroni]#

至此安装patroni+etcd过程已经完成

测试
手动切换测试
在守护者集群中,当领导节点因意外原因不可用时,会自动执行故障转移。如果要手动测试守护者集群故障转移,可以使用以下命令启动到副本节点的故障转移

su - postgres
#查询当前集群状态
patronictl -c /etc/patroni/patroni.yml list
#手动切换,选择新的领导节点
patronictl -c /etc/patroni/patroni.yml failover
#再次查询当前集群状态
patronictl -c /etc/patroni/patroni.yml list
测试如下:

[root@node1 patroni]# su - postgres
Last login: Fri Sep  8 23:39:48 CST 2023 on pts/0
[postgres@node1 ~]$ patronictl -c /etc/patroni/patroni.yml list
+ Cluster: pg_cluster ---+---------+-----------+----+-----------+
| Member | Host          | Role    | State     | TL | Lag in MB |
+--------+---------------+---------+-----------+----+-----------+
| pg1    | 192.168.17.20 | Leader  | running   |  1 |           |
| pg2    | 192.168.17.21 | Replica | streaming |  1 |         0 |
| pg3    | 192.168.17.22 | Replica | streaming |  1 |         0 |
+--------+---------------+---------+-----------+----+-----------+
[postgres@node1 ~]$ patronictl -c /etc/patroni/patroni.yml failover
Current cluster topology
+ Cluster: pg_cluster ---+---------+-----------+----+-----------+
| Member | Host          | Role    | State     | TL | Lag in MB |
+--------+---------------+---------+-----------+----+-----------+
| pg1    | 192.168.17.20 | Leader  | running   |  1 |           |
| pg2    | 192.168.17.21 | Replica | streaming |  1 |         0 |
| pg3    | 192.168.17.22 | Replica | streaming |  1 |         0 |
+--------+---------------+---------+-----------+----+-----------+
Candidate ['pg2', 'pg3'] []: pg2
Are you sure you want to failover cluster pg_cluster, demoting current leader pg1? [y/N]: y
2023-09-08 23:49:23.31022 Successfully failed over to "pg2"
+ Cluster: pg_cluster ---+---------+-----------+----+-----------+
| Member | Host          | Role    | State     | TL | Lag in MB |
+--------+---------------+---------+-----------+----+-----------+
| pg1    | 192.168.17.20 | Replica | stopped   |    |   unknown |
| pg2    | 192.168.17.21 | Leader  | running   |  1 |           |
| pg3    | 192.168.17.22 | Replica | streaming |  1 |         0 |
+--------+---------------+---------+-----------+----+-----------+
[postgres@node1 ~]$ patronictl -c /etc/patroni/patroni.yml list
+ Cluster: pg_cluster ---+---------+-----------+----+-----------+
| Member | Host          | Role    | State     | TL | Lag in MB |
+--------+---------------+---------+-----------+----+-----------+
| pg1    | 192.168.17.20 | Replica | streaming |  2 |         0 |
| pg2    | 192.168.17.21 | Leader  | running   |  2 |           |
| pg3    | 192.168.17.22 | Replica | streaming |  2 |         0 |
+--------+---------------+---------+-----------+----+-----------+
[postgres@node1 ~]$

查询所有历史的切换操作
[postgres@node1 ~]$ patronictl -c /etc/patroni/patroni.yml history
+----+----------+------------------------------+----------------------------------+------------+
| TL |      LSN | Reason                       | Timestamp                        | New Leader |
+----+----------+------------------------------+----------------------------------+------------+
|  1 | 67109488 | no recovery target specified | 2023-09-08T23:49:22.321969+08:00 | pg2        |
+----+----------+------------------------------+----------------------------------+------------+
[postgres@node1 ~]$

测试同步
创建数据库testdb,在testdb里创建表t,查询从库是否同步

[postgres@node1 ~]$ psql -h node2
Password for user postgres:
psql (14.9)
Type "help" for help.

postgres=# create database testdb;
CREATE DATABASE
postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# create table t (id int);
CREATE TABLE
testdb=# insert into t values(1),(2),(3);
INSERT 0 3
testdb=# select * from t;
id
----
  1
  2
  3
(3 rows)

testdb=# \q
[postgres@node1 ~]$ psql -h node3 -d testdb -c "select * from t;"
Password for user postgres:
id
----
  1
  2
  3
(3 rows)

[postgres@node1 ~]$

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-17 19:48 , Processed in 0.284820 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表