找回密码
 立即注册
首页 业界区 安全 PostgreSQL patroni 高可用 1:ectd 安装和配置 ...

PostgreSQL patroni 高可用 1:ectd 安装和配置

咫噎 2025-9-26 18:22:32
PostgreSQL patroni高可用
PostgreSQL patroni 高可用 1:ectd 安装和配置
PostgreSQL patroni 高可用 2:patroni安装和配置
PostgreSQL patroni 高可用 3:patroni 运维
 
PostgreSQL patroni 高可用 1:etcd 安装
PostgreSQL ptroni的高可用架构图如下所示,本文完成如下架构图中红色标记内的ectd分布式存储的安装和配置。
1.png

图片来源于:https://docs.percona.com/postgresql/12/solutions/high-availability.html#architecture-layout

 
1,服务器环境

Ubuntu08:192.168.152.115Ubuntu09:192.168.152.116Ubuntu10:192.168.152.117 1.1 ectd下载与安装

以下在Ubuntu08,Ubuntu09,Ubuntu10分别安装
  1. 下载与解压安装
  2. wget https://github.com/etcd-io/etcd/releases/download/v3.6.5/etcd-v3.6.5-linux-amd64.tar.gz
  3. tar xzvf etcd-v3.6.5-linux-amd64.tar.gz -C /usr/local
  4. ln -s /usr/local/etcd-v3.6.5-linux-amd64/ /usr/local/etcd
  5. 建立软连接
  6. ln -s /usr/local/etcd/etcd /usr/bin/etcd
  7. ln -s /usr/local/etcd/etcdctl /usr/bin/etcdctl
  8. etcd --version
  9. /*
  10. 输出:
  11. etcd Version: 3.6.5
  12. Git SHA: a061450
  13. Go Version: go1.24.7
  14. Go OS/Arch: linux/amd64
  15. */
  16. 建立数据文件路径
  17. mkdir -p /var/lib/etcd
  18. mkdir /var/lib/etcd/default.etcd
复制代码
 

1.2 etcd 配置文件

Ubuntu08:192.168.152.115节点,路径:/var/lib/etcd/etcd.conf
  1. #etcd名称,自定义
  2. ETCD_NAME="etcd01"
  3. #存放etcd数据的目录,自定义
  4. ETCD_DATA_DIR="/var/lib/etcd/default"
  5. #监听URL,用户客户端和SERVER进行通信
  6. ETCD_LISTEN_CLIENT_URLS="http://192.168.152.115:2379,http://127.0.0.1:2379"
  7. #告知客户端自身的URL,TCP 2379端口用于监听客户端请求
  8. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.152.115:2379"
  9. #监听URL,用于和其他节点通信
  10. ETCD_LISTEN_PEER_URLS="http://192.168.152.115:2380"
  11. #告知集群其他节点,端口2380用于集群通信
  12. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.152.115:2380"
  13. #定义了集群内所有成员
  14. ETCD_INITIAL_CLUSTER="etcd01=http://192.168.152.115:2380,etcd02=http://192.168.152.116:2380,etcd03=http://192.168.152.117:2380"
  15. #集群ID,唯一标识
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. #集群状态,new为新创建集群,existing为已经存在的集群
  18. ETCD_INITIAL_CLUSTER_STATE="new"
复制代码
Ubuntu09:192.168.152.116节点,路径:/var/lib/etcd/etcd.conf
  1. #etcd名称,自定义
  2. ETCD_NAME="etcd02"
  3. #存放etcd数据的目录,自定义
  4. ETCD_DATA_DIR="/var/lib/etcd/default"
  5. #监听URL,用户客户端和SERVER进行通信
  6. ETCD_LISTEN_CLIENT_URLS="http://192.168.152.116:2379,http://127.0.0.1:2379"
  7. #告知客户端自身的URL,TCP 2379端口用于监听客户端请求
  8. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.152.116:2379"
  9. #监听URL,用于和其他节点通信
  10. ETCD_LISTEN_PEER_URLS="http://192.168.152.116:2380"
  11. #告知集群其他节点,端口2380用于集群通信
  12. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.152.116:2380"
  13. #定义了集群内所有成员
  14. ETCD_INITIAL_CLUSTER="etcd01=http://192.168.152.115:2380,etcd02=http://192.168.152.116:2380,etcd03=http://192.168.152.117:2380"
  15. #集群ID,唯一标识
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. #集群状态,new为新创建集群,existing为已经存在的集群
  18. ETCD_INITIAL_CLUSTER_STATE="new"
复制代码
Ubuntu10:192.168.152.117节点,路径:/var/lib/etcd/etcd.conf
  1. #etcd名称,自定义
  2. ETCD_NAME="etcd03"
  3. #存放etcd数据的目录,自定义
  4. ETCD_DATA_DIR="/var/lib/etcd/default"
  5. #监听URL,用户客户端和SERVER进行通信
  6. ETCD_LISTEN_CLIENT_URLS="http://192.168.152.117:2379,http://127.0.0.1:2379"
  7. #告知客户端自身的URL,TCP 2379端口用于监听客户端请求
  8. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.152.117:2379"
  9. #监听URL,用于和其他节点通信
  10. ETCD_LISTEN_PEER_URLS="http://192.168.152.117:2380"
  11. #告知集群其他节点,端口2380用于集群通信
  12. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.152.117:2380"
  13. #定义了集群内所有成员
  14. ETCD_INITIAL_CLUSTER="etcd01=http://192.168.152.115:2380,etcd02=http://192.168.152.116:2380,etcd03=http://192.168.152.117:2380"
  15. #集群ID,唯一标识
  16. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  17. #集群状态,new为新创建集群,existing为已经存在的集群
  18. ETCD_INITIAL_CLUSTER_STATE="new"
复制代码
 
1.3 etcd systemctl 服务脚本

三台服务器一样,/etc/systemd/system/ectd.service
  1. [Unit]
  2. Description=Etcd Server
  3. After=network.target
  4. After=network-online.target
  5. Wants=network-online.target
  6. [Service]
  7. Type=notify
  8. EnvironmentFile=/var/lib/etcd/etcd.conf
  9. WorkingDirectory=/var/lib/etcd/
  10. ExecStart=/usr/bin/etcd
  11. Restart=on-failure
  12. RestartSec=5
  13. LimitNOFILE=65536
  14. [Install]
  15. WantedBy=multi-user.target
复制代码
启动服务
  1. systemctl daemon-reload
  2. systemctl enable etcd
  3. systemctl start etcd
  4. systemctl status etcd
复制代码
 
1.4 etcd 环境变量
  1. --添加环境变量
  2. --ETCDCTL_API是有v2和v3两个版本,默认是v2版本,执行命令可能会报错
  3. echo 'export ETCDCTL_API=3' >> /etc/profile
  4. source /etc/profile
复制代码
其他
  1. --新增etcd节点,systemd启动服务出现Job for etcd.service failed because a timeout was exceeded错误
  2. --解决办法:出现该问题的原因可能时因为etcd的data-dir中的残留信息导致的,删除data-dir中的内容,重新启动etcd服务
  3. rm -rf /var/lib/etcd/default/
复制代码
 
2,检查etcd集群管理

2.1 etcd状态检查

检查集群节点状态:etcdctl endpoint health --cluster -w table列出集群成员:etcdctl member list -w table检查集群节点的健康状态:etcdctl endpoint health --cluster -w table
  1. 检查集群节点状态
  2. root@ubuntu08:/usr/local# etcdctl endpoint status --cluster -w table
  3. {"level":"warn","ts":"2025-09-22T09:34:53.831953+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  4. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  5. |          ENDPOINT           |        ID        | VERSION | STORAGE VERSION | DB SIZE | IN USE | PERCENTAGE NOT IN USE | QUOTA | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | DOWNGRADE TARGET VERSION | DOWNGRADE ENABLED |
  6. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  7. | http://192.168.152.116:2379 | 6eb726f58bd2aa70 |   3.6.5 |           3.6.0 |   20 kB |  16 kB |                   20% |   0 B |     false |      false |         2 |          9 |                  9 |        |                          |             false |
  8. | http://192.168.152.115:2379 | 7158c1b754a1eeba |   3.6.5 |           3.6.0 |   25 kB |  16 kB |                   34% |   0 B |      true |      false |         2 |          9 |                  9 |        |                          |             false |
  9. | http://192.168.152.117:2379 | af96143dba13346f |   3.6.5 |           3.6.0 |   20 kB |  16 kB |                   20% |   0 B |     false |      false |         2 |          9 |                  9 |        |                          |             false |
  10. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  11. 列出集群成员
  12. root@ubuntu08:/usr/local# etcdctl member list -w table
  13. {"level":"warn","ts":"2025-09-22T09:36:22.799237+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  14. +------------------+---------+--------+-----------------------------+-----------------------------+------------+
  15. |        ID        | STATUS  |  NAME  |         PEER ADDRS          |        CLIENT ADDRS         | IS LEARNER |
  16. +------------------+---------+--------+-----------------------------+-----------------------------+------------+
  17. | 6eb726f58bd2aa70 | started | etcd02 | http://192.168.152.116:2380 | http://192.168.152.116:2379 |      false |
  18. | 7158c1b754a1eeba | started | etcd01 | http://192.168.152.115:2380 | http://192.168.152.115:2379 |      false |
  19. | af96143dba13346f | started | etcd03 | http://192.168.152.117:2380 | http://192.168.152.117:2379 |      false |
  20. +------------------+---------+--------+-----------------------------+-----------------------------+------------+
  21. 检查集群节点的健康状态
  22. root@ubuntu08:/usr/local#  etcdctl endpoint health --cluster -w table
  23. {"level":"warn","ts":"2025-09-22T09:36:49.159370+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  24. +-----------------------------+--------+------------+-------+
  25. |          ENDPOINT           | HEALTH |    TOOK    | ERROR |
  26. +-----------------------------+--------+------------+-------+
  27. | http://192.168.152.115:2379 |   true | 4.838419ms |       |
  28. | http://192.168.152.117:2379 |   true | 7.374066ms |       |
  29. | http://192.168.152.116:2379 |   true | 7.334373ms |       |
  30. +-----------------------------+--------+------------+-------+
复制代码
 
2.2 etcd常用命令
  1. etcd常用命令
  2. --截至目前位置ectd中没有用户自定义数据,如下查询是启用了patroni之后才能查到,这里仅做示例
  3. -- 查询所有的key
  4. root@ubuntu08:/usr/local# etcdctl get "" --prefix --keys-only
  5. {"level":"warn","ts":"2025-09-23T09:36:04.000716+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  6. /service/pg_cluster_wy_prod/config
  7. /service/pg_cluster_wy_prod/history
  8. /service/pg_cluster_wy_prod/initialize
  9. /service/pg_cluster_wy_prod/leader
  10. /service/pg_cluster_wy_prod/members/ubuntu09
  11. /service/pg_cluster_wy_prod/status
  12. --删除所有的key
  13. root@ubuntu08:/usr/local# etcdctl del /service/pg_cluster_wy_prod/ --prefix
  14. {"level":"warn","ts":"2025-09-23T09:38:52.248350+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  15. 6
复制代码
 
2.3 管理etcd

--查看集群节点:etcdctl endpoint status --cluster -w table--转移领导权: etcdctl move-leader 6eb726f58bd2aa70--备份数据库:etcdctl snapshot save etcd_bak.db,默认备份到当前目录
  1. 管理etcd
  2. --查看集群节点
  3. root@ubuntu08:/usr/local# etcdctl endpoint status --cluster -w table
  4. {"level":"warn","ts":"2025-09-22T09:52:07.064600+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  5. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  6. |          ENDPOINT           |        ID        | VERSION | STORAGE VERSION | DB SIZE | IN USE | PERCENTAGE NOT IN USE | QUOTA | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | DOWNGRADE TARGET VERSION | DOWNGRADE ENABLED |
  7. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  8. | http://192.168.152.116:2379 | 6eb726f58bd2aa70 |   3.6.5 |           3.6.0 |   20 kB |  16 kB |                   20% |   0 B |     false |      false |         2 |         12 |                 12 |        |                          |             false |
  9. | http://192.168.152.115:2379 | 7158c1b754a1eeba |   3.6.5 |           3.6.0 |   25 kB |  16 kB |                   34% |   0 B |      true |      false |         2 |         12 |                 12 |        |                          |             false |
  10. | http://192.168.152.117:2379 | af96143dba13346f |   3.6.5 |           3.6.0 |   20 kB |  16 kB |                   20% |   0 B |     false |      false |         2 |         12 |                 12 |        |                          |             false |
  11. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  12. --将领导权转移到192.168.152.116,需要在leader节点(192.168.152.115)上执行以下命令
  13. root@ubuntu08:/usr/local#  etcdctl move-leader 6eb726f58bd2aa70
  14. {"level":"warn","ts":"2025-09-22T09:52:52.764611+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  15. Leadership transferred from 7158c1b754a1eeba to 6eb726f58bd2aa70
  16. root@ubuntu08:/usr/local#
  17. --再次查看集群节点
  18. root@ubuntu08:/usr/local# etcdctl endpoint status --cluster -w table
  19. {"level":"warn","ts":"2025-09-22T09:53:25.957168+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  20. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  21. |          ENDPOINT           |        ID        | VERSION | STORAGE VERSION | DB SIZE | IN USE | PERCENTAGE NOT IN USE | QUOTA | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | DOWNGRADE TARGET VERSION | DOWNGRADE ENABLED |
  22. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  23. | http://192.168.152.116:2379 | 6eb726f58bd2aa70 |   3.6.5 |           3.6.0 |   20 kB |  16 kB |                   20% |   0 B |      true |      false |         3 |         13 |                 13 |        |                          |             false |
  24. | http://192.168.152.115:2379 | 7158c1b754a1eeba |   3.6.5 |           3.6.0 |   25 kB |  16 kB |                   34% |   0 B |     false |      false |         3 |         13 |                 13 |        |                          |             false |
  25. | http://192.168.152.117:2379 | af96143dba13346f |   3.6.5 |           3.6.0 |   20 kB |  16 kB |                   20% |   0 B |     false |      false |         3 |         13 |                 13 |        |                          |             false |
  26. +-----------------------------+------------------+---------+-----------------+---------+--------+-----------------------+-------+-----------+------------+-----------+------------+--------------------+--------+--------------------------+-------------------+
  27. 备份数据库,执行etcdctl snapshot save etcd_bak.db,默认备份到当前目录
  28. root@ubuntu08:/usr/local#  etcdctl snapshot save etcd_bak.db
  29. {"level":"warn","ts":"2025-09-22T09:54:51.963842+0800","caller":"flags/flag.go:94","msg":"unrecognized environment variable","environment-variable":"ETCDCTL_API=3"}
  30. {"level":"info","ts":"2025-09-22T09:54:51.971594+0800","caller":"snapshot/v3_snapshot.go:83","msg":"created temporary db file","path":"etcd_bak.db.part"}
  31. {"level":"info","ts":"2025-09-22T09:54:51.973601+0800","logger":"client","caller":"v3@v3.6.5/maintenance.go:236","msg":"opened snapshot stream; downloading"}
  32. {"level":"info","ts":"2025-09-22T09:54:51.975135+0800","caller":"snapshot/v3_snapshot.go:96","msg":"fetching snapshot","endpoint":"127.0.0.1:2379"}
  33. {"level":"info","ts":"2025-09-22T09:54:51.975385+0800","logger":"client","caller":"v3@v3.6.5/maintenance.go:302","msg":"completed snapshot read; closing"}
  34. {"level":"info","ts":"2025-09-22T09:54:51.976335+0800","caller":"snapshot/v3_snapshot.go:111","msg":"fetched snapshot","endpoint":"127.0.0.1:2379","size":"25 kB","took":"4.643252ms","etcd-version":"3.6.0"}
  35. {"level":"info","ts":"2025-09-22T09:54:51.976404+0800","caller":"snapshot/v3_snapshot.go:121","msg":"saved","path":"etcd_bak.db"}
  36. Snapshot saved at etcd_bak.db
  37. Server version 3.6.0
复制代码
 
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

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