使用 Patroni 创建 PostgreSQL 集群

今天,我们一起学习使用Patroni创建PostgreSQL集群,实验环境基于 CentOS 7 操作系统。

1、首先,我们准备 4 台 CentOS 7 虚拟机。您可以从下面的链接查看Centos 7 的安装方法。

https://dbtut.com/index.php/2022/02/13/centos-7-installation/
HOSTNAME	IP ADDRESS	
pg_node1        192.168.1.18    Patroni ve PostgreSQL          
pg_node2        192.168.1.19    Patroni ve PostgreSQL
etcd            192.168.1.20    ETCD Server
haproxy         192.168.1.21    HA Proxy

2、我们在所有服务器上安装 epel 存储库。

$ sudo yum -y install epel-release
$ sudo yum -y install centos-release-scl-rh
$ sudo yum -y update

3、重新启动服务器。

$ sudo shutdown -r now

4、在pg_node1和pg_node2上安装PostgreSQL 12。

$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo yum -y install postgresql12-server postgresql12 postgresql12-devel

5、再在pg_node1和pg_node2上安装Patroni。

$ sudo yum -y install https://github.com/cybertec-postgresql/patroni-packaging/releases/download/1.6.5-1/patroni-1.6.5-1.rhel7.x86_64.rpm

6、在pg_node1和pg_node2上分别创建Patroni服务配置文件。

$ sudo cp -p /opt/app/patroni/etc/postgresql.yml.sample /opt/app/patroni/etc/postgresql.yml
$ sudo vi /opt/app/patroni/etc/postgresql.yml

pg_node1 :

scope: postgres
namespace: /pg_cluster/
name: pg_node1
restapi:
  listen: 192.168.1.18:8008
  connect_address: 192.168.1.18:8008
etcd:
  host: 192.168.1.20:2379
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
initdb: 
  - encoding: UTF8
  - data-checksums
pg_hba: 
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 192.168.1.18/0 md5
  - host replication replicator 192.168.1.19/0 md5
  - host all all 0.0.0.0/0 md5
users:
    admin:
      password: admin
      options:
        - createrole
        - createdb
postgresql:
  listen: 192.168.1.18:5432
  connect_address: 192.168.1.18:5432
  data_dir: /var/lib/pgsql/12/data
  bin_dir: /usr/pgsql-12/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: replicator
    superuser:
      username: postgres
      password: postgres
tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

pg_node2:

scope: postgres
namespace: /pg_cluster/
name: pg_node2
restapi:
  listen: 192.168.1.19:8008
  connect_address: 192.168.1.19:8008
etcd:
  host: 192.168.1.20:2379
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
initdb: 
  - encoding: UTF8
  - data-checksums
pg_hba:  
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 192.168.1.18/0 md5
  - host replication replicator 192.168.1.19/0 md5
  - host all all 0.0.0.0/0 md5
users:
    admin:
      password: admin
      options:
        - createrole
        - createdb
postgresql:
  listen: 192.168.1.19:5432
  connect_address: 192.168.1.19:5432
  data_dir: /var/lib/pgsql/12/data
  bin_dir: /usr/pgsql-12/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: replicator
    superuser:
      username: postgres
      password: postgres
tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

7、在 etcd 服务器上安装 etcd。

$ sudo yum -y install etcd

8、安装完成后,我们在配置文件中进行以下更改。

$ sudo vi /etc/etcd/etcd.conf
 
[Member]
ETCD_LISTEN_PEER_URLS="http://192.168.1.20:2380,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.20:2379,http://localhost:2379"
[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.20:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.20:2379"
ETCD_INITIAL_CLUSTER="default=http://192.168.1.20:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

9、开启 etcd 服务。

$ sudo systemctl enable etcd
$ sudo systemctl start etcd
$ sudo systemctl status etcd

10、启动 etcd 服务后,我们在pg_node1和pg_node2中启动 Patroni 服务。

$ sudo systemctl enable patroni
$ sudo systemctl start patroni
$ sudo systemctl status patroni

pg_node1 :

pg_node2 :

11、我们在 haproxy 服务器上安装 HAProxy。

$ sudo yum -y install haproxy

12、安装完成后,备份配置文件并编辑文件

$ sudo cp -p /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_old
$ sudo vi /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         4s
    timeout client          30m
    timeout server          30m
    timeout http-keep-alive 10s
    timeout check           5s
    maxconn                 3000
listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /
listen postgres
    bind *:5000
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server pg_node1 192.168.1.18:5432 maxconn 1000 check port 8008
    server pg_node2 192.168.1.19:5432 maxconn 1000 check port 8008

13、启动HAProxy 服务。

$ sudo systemctl start haproxy
$ sudo systemctl enable haproxy
$ sudo systemctl status haproxy

如果 HAProxy 服务无法启动,我们可以使用以下命令检查配置文档中的错误。

$ sudo haproxy -c -V -f /etc/haproxy/haproxy.cfg

在浏览器中打开地址 http://18.9.0.9:7000 ,我们将看到如下图所示的hapoxy界面。从这里可以看出,pg_node1是主库,pg_node2是备库。

image-20220827135215037.png)

我们还可以使用以下命令检查集群状态、角色和成员。

$ sudo patronictl -c /opt/app/patroni/etc/postgresql.yml list

至此,我们已经完成使用 Patroni 创建 PostgreSQL 集群。

原文标题:How To Create A PostgreSQL Cluster With Patroni
原文作者:Melek Durdu 
原文地址:https://dbtut.com/index.php/2022/06/04/how-to-create-a-postgresql-cluster-with-patroni/

免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论