petcona HA 环境搭建

jimingkang 4天前 33

参考:

https://docs.percona.com/postgresql/17/solutions/ha-patroni.html

 

我的GCP三台主机node1=35.208.138.220:2380,node3=35.208.253.243,node5=35.208.162.10

每台机器都按照下面安装

1)先要安装etcd分布式管理软件(V3):

sudo apt-get update
sudo apt-get install -y etcd

配置文件/etc/etcd/etcd.conf.yaml

name: 'node1'
initial-cluster-token: PostgreSQL_HA_Cluster_1
initial-cluster-state: new
initial-cluster: node1=http://35.208.138.220:2380,node3=http://35.208.253.243:2380,node5=http://35.208.162.10:2380
data-dir: /var/lib/etcd
initial-advertise-peer-urls: http://35.208.138.220:2380 
listen-peer-urls: http://35.208.138.220:2380
advertise-client-urls: http://35.208.138.220:2379
listen-client-urls: http://35.208.138.220:2379

覆盖默认的配置

  • Create the directory if it doesn’t exist:

    sudo mkdir -p /etc/systemd/system/etcd.service.d
  • Write the override in one shot:

     
    sudo tee /etc/systemd/system/etcd.service.d/override.conf << 'EOF' [Service] ExecStart= ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf.yaml EOF
  • Reload and restart:

    sudo systemctl daemon-reload sudo systemctl restart etcd

3)启动
export ETCDCTL_API=3
HOST_1=35.208.138.220
HOST_2=35.208.253.243
HOST_3=35.208.162.10
ENDPOINTS="http://35.208.138.220:2379,http://35.208.253.243:2379,http://35.208.162.10:2379"
sudo systemctl enable --now etcd
sudo systemctl status etcd
sudo systemctl start etcd

4)安装Percona的版本的pg17和管理软件

A)添加Percona repo到系统

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb sudo apt-get update

B)使能repo

sudo percona-release setup ppg-17
sudo apt-get update

(If you’re running PostgreSQL 15 or 16, replace ppg-17 with ppg-15 or ppg-16.)

C)安装Patroni管理工具

 
sudo apt-get install percona-patroni

This will pull in Patroni (Percona’s build of it) along with all its dependencies Percona.

D)验证版本

 
patroni --version
systemctl status patroni
sudo systemctl restart patroni
sudo journalctl -u patroni -f
patronictl -c /etc/patroni.yml list #检查cluster中的成员
+ Cluster: mycluster (7535123762072343268) --+----+-----------+
| Member | Host           | Role   | State   | TL | Lag in MB |
+--------+----------------+--------+---------+----+-----------+
| node1  | 35.208.138.220 | Leader | running |  1 |           |
+--------+----------------+--------+---------+----+-----------+

注释:如果启动不成功,可以安装下面检查:
#验证postgres是否启动,
sudo systemctl status postgresql@17-main 或者pg_lsclusters
#这是停止cluster 中的main
sudo pg_dropcluster --stop 17 main   
#这是启动cluster 中的main,咱暂时不用这种方式启动                                  
#sudo pg_createcluster 17 main --start 
检查 /etc/patroni/patroni.yml
我的配置如下:

scope: mycluster
namespace: /service/
name: node1

restapi:
  listen: 0.0.0.0:8008
  connect_address: 35.208.138.220:8008

etcd:
  host: 127.0.0.1:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
  initdb:
    - encoding: UTF8
    - data-checksums
  pg_hba:
    # allow PostgreSQL superuser access
    - host all all 0.0.0.0/0 md5
    # allow replication user access
    - host replication repl 0.0.0.0/0 md5

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 35.208.138.220:5432        # your node’s IP
  data_dir: /var/lib/postgresql/17/main  # adjust to your PG version/path
  bin_dir: /usr/lib/postgresql/17/bin
  authentication:
    replication:
      username: repl
      password: replpass
    superuser:
      username: postgres
      password: pg #第一次启动,可能汇报密码不对,因为没有给postgres用户设置密码,参见常用错误


  parameters:
    max_connections: 100

 

常见错误: postgres密码错误

在root用户下直接登陆psql:

sudo -u postgres psql

\password postgres

                                  
常用命令:
 

  179  sudo systemctl status etcd
  180  export ETCDCTL_API=3
  181  HOST_1=35.208.138.220
  182  HOST_2=35.208.253.243
  183  HOST_3=35.208.162.10
  190  ENDPOINTS="http://35.208.138.220:2379,http://35.208.253.243:2379,http://35.208.162.10:2379"
  191  sudo etcdctl --endpoints="$ENDPOINTS"  member list
  192  ENDPOINTS="35.208.138.220:2379,35.208.253.243:2379,35.208.162.10:2379"
  193  sudo systemctl stop etcd
  194  sudo systemctl enable --now etcd
  195  sudo systemctl status etcd
  196  sudo etcdctl --endpoints="$ENDPOINTS"  member list
  223  vi /etc/etcd/etcd.conf
  241  sudo apt-get remove --purge -y etcd etcd-server etcd-client
  242  # Also drop any stray service definitions
  243  sudo rm -f /etc/systemd/system/etcd2.service
  244  sudo systemctl daemon-reload
  245  sudo apt-get update
  246  sudo apt-get install -y etcd
  247  etcd --version
  248  sudo systemctl edit etcd.service
  249  sudo mkdir -p /etc/systemd/system/etcd.service.d
  250  sudo tee /etc/systemd/system/etcd.service.d/override.conf << 'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/etcd --config-file /etc/etcd/etcd.conf.yaml
EOF

  251  sudo systemctl daemon-reload
  252  sudo systemctl restart etcd
  253  systemctl status etcd.service
  254  vi /etc/etcd/etcd.conf.yaml:

  259  sudo chmod 0777 /etc/etcd/etcd.conf.xml 
  260  sudo systemctl daemon-reload
  261  sudo systemctl restart etcd
  262  systemctl status etcd.service
  263  sudo chmod 0777 -R /etc/etcd/
  264  sudo systemctl restart etcd
  265  systemctl status etcd.service
  266  sudo chown root:root /etc/etcd/etcd.conf.yaml
  267  sudo chmod 600      /etc/etcd/etcd.conf.yaml
  268  ls /etc/etcd/
  269  mv /etc/etcd/etcd.conf.xml /etc/etcd/etcd.conf.yaml


最新回复 (0)
返回
发新帖