暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

patroni安装,PostgreSQL + Patroni HA部署

开源喵 2021-06-23
2887

安装Patroni

前提条件1

升级python2.7到3.x

前提条件2

升级Pip到pip3:yum -y install python3-pip

前提条件3

后续的pip install 修改为pip3 install

1 主要软件

  • CentOS 7.8

  • PostgreSQL 13

  • Patroni 2.0

  • etcd 3.3.11

2 机器和VIP资源

  • PostgreSQL

  • node1:172.16.1.4

  • node2:172.16.1.5

  • etcd

  • node3:172.16.1.6

3 etcd部署

安装需要的包

yum install -y gcc python-devel epel-release

安装etcd

yum install -y etcd

编辑etcd配置文件/etc/etcd/etcd.conf, 参考配置如下


    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://172.16.1.6:2380"
    ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://172.16.1.6:2379"
    ETCD_NAME="etcd0"
    #[Clustering]
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.1.6:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.6:2379"
    ETCD_INITIAL_CLUSTER="etcd0=http://172.16.1.6:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="cluster1"
    ETCD_INITIAL_CLUSTER_STATE="new"
    复制



    启动etcd

    systemctl start etcd

    设置etcd自启动

    systemctl enable etcd


    4 PostgreSQL + Patroni HA部署

    在需要运行PostgreSQL的实例上安装相关软件

    安装PostgreSQL 13

    此处省略


    安装patroni

    yum install -y gcc epel-release
    yum install -y python3-pip python3-psycopg2 python3-devel

    pip3 install --upgrade pip
    pip3 install --upgrade setuptools
    pip3 install patroni[etcd]
    复制

    创建PostgreSQL数据目录

    参考:

    mkdir -p pgsql/data

    chown postgres:postgres -R pgsql

    chmod -R700 pgsql/data


    创建Partoni service配置文件/etc/systemd/system/patroni.service

      [Unit]Description=Runners to orchestrate a high-availability PostgreSQL
      After=syslog.target network.target


      [Service]
      Type=simple
      User=postgres
      Group=postgres
      #StandardOutput=syslog
      ExecStart=/usr/local/bin/patroni etc/patroni.yml
      ExecReload=/bin/kill -s HUP $MAINPID
      KillMode=process
      TimeoutSec=30
      Restart=no


      [Install]
      WantedBy=multi-user.target
      复制


      创建Patroni配置文件/etc/patroni.yml,以下是node1

        scope: pgsql2  #这里为cluster的名字,所有节点一致
        namespace: service/
        name: pg1




        restapi:
        listen: 0.0.0.0:8008
        connect_address: 172.16.1.4:8008




        etcd:
        host: 172.16.1.6:2379




        bootstrap:
        dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        master_start_timeout: 300
        synchronous_mode: false
        postgresql:
        use_pg_rewind: true
        use_slots: true
        parameters:
        listen_addresses: "0.0.0.0"
        port: 5432
        wal_level: logical
        hot_standby: "on"
        wal_keep_segments: 100
        max_wal_senders: 10
        max_replication_slots: 10
        wal_log_hints: "on"




        initdb:
        - encoding: UTF8
        - locale: C
        - lc-ctype: zh_CN.UTF-8
        - data-checksums




        pg_hba:
        - host replication repl 0.0.0.0/0 md5
        - host all all 0.0.0.0/0 md5




        postgresql:
        listen: 0.0.0.0:5432
        connect_address: 172.16.1.4:5432
        data_dir: var/lib/pgsql/13/data
        bin_dir: usr/pgsql-13/bin




        authentication:
        replication:
        username: repl
        password: "123456"
        superuser:
        username: postgres
        password: "123456"




        basebackup:
        max-rate: 100M
        checkpoint: fast




        tags:
        nofailover: false
        noloadbalance: false
        clonefrom: false
        nosync: false
        复制


        其他PG节点的patroni.yml需要相应修改下面3个参数

        • name

        • node1~node2分别设置pg1~pg2

        • restapi.connect_address

        • 根据各自节点IP设置

        • postgresql.connect_address

        • 根据各自节点IP设置

        启动Patroni

        node1上启动Patroni

        systemctl start patroni

        初次启动Patroni时,Patroni会初始创建PostgreSQL实例和用户。这里要注意

          [postgres@mdw ~]$ systemctl status patroni
          ● patroni.service - Runners to orchestrate a high-availability PostgreSQL
          Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: disabled)
          Active: active (running) since Mon 2021-06-21 15:46:35 CST; 1h 10min ago
          Main PID: 42203 (patroni)
          Tasks: 15
          CGroup: system.slice/patroni.service
          ├─42203 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni.yml
          ├─42262 /usr/pgsql-13/bin/postgres -D /var/lib/pgsql/13/data --config-file=/var/lib/pgsql/13/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5432 --cluster_nam...
          ├─42263 postgres: pgsql2: logger
          ├─42268 postgres: pgsql2: checkpointer
          ├─42269 postgres: pgsql2: background writer
          ├─42270 postgres: pgsql2: stats collector
          ├─42274 postgres: pgsql2: postgres postgres 127.0.0.1(53198) idle
          ├─82780 postgres: pgsql2: walwriter
          ├─82781 postgres: pgsql2: autovacuum launcher
          ├─82782 postgres: pgsql2: logical replication launcher
          └─83615 postgres: pgsql2: walsender repl 172.16.1.5(12810) streaming 0/30BC730
          复制

          node2上启动Patroni

          node2将作为replica加入集群,自动从leader拷贝数据并建立复制。

            [postgres@sdw1 ~]$ systemctl status patroni
            ● patroni.service - Runners to orchestrate a high-availability PostgreSQL
            Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: disabled)
            Active: active (running) since Mon 2021-06-21 16:19:09 CST; 39min ago
            Main PID: 105100 (patroni)
            Tasks: 13
            CGroup: /system.slice/patroni.service
            ├─105100 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni.yml
            ├─105135 /usr/pgsql-13/bin/postgres -D /var/lib/pgsql/13/data --config-file=/var/lib/pgsql/13/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5432 --cluster_na...
            ├─105136 postgres: pgsql2: logger
            ├─105137 postgres: pgsql2: startup recovering 000000050000000000000003
            ├─105139 postgres: pgsql2: checkpointer
            ├─105140 postgres: pgsql2: background writer
            ├─105141 postgres: pgsql2: stats collector
            ├─105147 postgres: pgsql2: postgres postgres 127.0.0.1(63424) idle
            └─105278 postgres: pgsql2: walreceiver streaming 0/30BC730
            复制


            查看集群状态

              [postgres@sdw1  ~]$ patronictl -c /etc/patroni.yml list




              Cluster: pgsql2 (6976148972338622213) --+----+-----------+
              | Member | Host | Role | State | TL | Lag in MB |
              +--------+------------+---------+---------+----+-----------+
              | pg1 | 172.16.1.4 | Leader | running | 5 | |
              | pg2 | 172.16.1.5 | Replica | running | 5 | 0 |
              +--------+------------+---------+---------+----+-----------+
              复制

              设置patronictl环境变量

                echo'export PATRONICTL_CONFIG_FILE=/etc/patroni.yml' >/etc/profile.d/patroni.sh
                复制

                . /etc/profile.d/patroni.sh写入postgres的.bash_profile

                成功完成!



                报错处理

                pip3 install patroni[etcd]的时候报错

                psutil/_psutil_common.c:9:20: fatal error: Python.h: 
                No such file or directory compilation termi
                复制

                需要安装依赖

                yum install python3-devel
                复制

                启动patronni报错:waiting for leader to bootstrap

                Jun 21 15:35:35 sdw1 patroni: 2021-06-21 15:35:35,366 INFO: Lock owner: None; I am pg2
                Jun 21 15:35:35 sdw1 patroni: 2021-06-21 15:35:35,372 INFO: waiting for leader to bootstrap
                复制

                因为pg1 pg2这两个库我以前有搭建postgres13,上面有数据。所以需要把$PGDATA目录下的文件删除。

                依次删除data目录,然后依次启动则正常。

                最后修改时间:2021-06-23 12:02:03
                文章转载自开源喵,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论