当前位置: 首页 > news >正文

基于Linux的patroni搭建标准

作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师

第一部分 说明

得益于PostgreSQL的开源特性,越来越多的第三方集群管理软件填补了PostgreSQL在集群方面的易用性和可靠性,patroni+etcd提供了一系列的集群管理方案。etcd负责集群状态信息的存放,用来联系各个节点,patroni负责为集群提供高可用服务,两者的集合为PostgreSQL集群提供了故障转移的高可用服务,它不仅配置简单,而且功能丰富:
 支持手动和自动故障转移
 支持一主多从、级联复制
 支持同步、异步模式
 支持使用watchdog防止脑裂

1.1 前期准备

本文使用3个节点的部署规划(一主两从):

主机名IP端口备注
node1192.168.22.1285432主节点
node2192.168.22.1295432从节点
node3192.168.22.1305432从节点
操作系统:centos 7.8
pg版本:13

第二部分 操作步骤

2.1 关闭防火墙

关闭主机防火墙

# systemctl stop firewalld.service
# systemctl disable firewalld.service

2.2 部署PostgreSQL及流复制环境

省略搭建步骤

2.3 部署etcd

在各个节点安装必要的依赖包及etcd软件

# yum install -y gcc python-devel epel-release
# yum install -y etcd

编辑配置文件(以下列出了需要修改的参数,并以主节点为例)

# vim /etc/etcd/etcd.conf#[Member]
ETCD_DATA_DIR="/var/lib/etcd/node1.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.22.128:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.22.128:2379,http://127.0.0.1:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.22.128:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.22.128:2379"
ETCD_INITIAL_CLUSTER="node1=http://192.168.22.128:2380,node2=http://192.168.22.129:2380, node3=http://192.168.22.130:2380"

启动etcd集群,并设置开机自启动

# systemctl start etcd
# systemctl enable etcd

2.4 部署python3

在各个节点部署python3。需要使用高版本的python来使用patroni服务,一般的linux环境内置了2.7版本的python环境,因此我们需要升级python,这里采用源码编译安装方式安装

# wget -c https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
# ./configure
# make
# make install

删除原2.7版本的软连接,添加新的软链接以使用python3

# rm -f /usr/bin/python
# ln -s /usr/local/bin/python3 /usr/bin/python

2.5 部署patroni

在各个节点上部署patroni。安装必要的依赖包和patroni软件

# pip3 install psycopg2-binary -i https://mirrors.aliyun.com/pypi/simple/
# pip3 install patroni -i https://mirrors.aliyun.com/pypi/simple/

修改patroni配置文件(以主节点为例)

# vim /etc/patroni.ymlscope: pgsql
namespace: /pgsql/
name: pgsql_node2restapi:listen: 192.168.22.128:8008connect_address: 192.168.22.128:8008etcd:host: 192.168.22.128:2379bootstrap:# this section will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster# and all other cluster members will use it as a `global configuration`dcs:ttl: 30loop_wait: 10retry_timeout: 10maximum_lag_on_failover: 1048576master_start_timeout: 300synchronous_mode: falsepostgresql:use_pg_rewind: trueuse_slots: trueparameters:listen_addresses: "0.0.0.0"port: 5432wal_level: logicalhot_standby: "on"wal_keep_segments: 100max_wal_senders: 10max_replication_slots: 10wal_log_hints: "on"
#        archive_mode: "on"
#        archive_timeout: 1800s
#        archive_command: gzip < %p > /data/backup/pgwalarchive/%f.gz
#      recovery_conf:
#        restore_command: gunzip < /data/backup/pgwalarchive/%f.gz > %ppostgresql:listen: 0.0.0.0:5432connect_address: 192.168.22.128:5432data_dir: /pgdata/patr2bin_dir: /usr/pgsql-12/bin
#  config_dir: /etc/postgresql/9.6/mainauthentication:replication:username: replpassword: replsuperuser:username: postgrespassword: postgres#watchdog:
#  mode: automatic # Allowed values: off, automatic, required
#  device: /dev/watchdog
#  safety_margin: 5tags:nofailover: falsenoloadbalance: falseclonefrom: falsenosync: false

配置patroni服务单元

# vim /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服务

# systemctl start patroni

当然,我们也可以直接使用patroni命令来启动patroni服务,配置服务单元是为了更方便使用。

#/usr/local/bin/patroni /etc/patroni.yml > patroni.log 2>&1 &

第三部分 集群使用

3.1信息查看

查看集群内节点信息

# patronictl -c /etc/patroni.yml list
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
|   Member    |        Host         |  Role  |  State  | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node1 | 192.168.22.128:5432 | Leader | running | 3  |           |
| pgsql_node2 | 192.168.22.129:5432 |        | running | 3  |      0    |
| pgsql_node3 | 192.168.22.130:5432 |        | running | 3  |      0    |
+-------------+---------------------+--------+---------+----+-----------+

3.2手动切换主备

选择某一可用的从节点,使其成为主节点角色

# patronictl -c /etc/patroni.yml switchover
Master [pgsql_node1]: pgsql_node1
Candidate ['pgsql_node2', 'pgsql_node3'] []: pgsql_node2
When should the switchover take place (e.g. 2021-06-20T11:42 )  [now]: now

查看集群状态

# patronictl -c /etc/patroni.yml list
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
|   Member    |        Host         |  Role  |  State  | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node1 | 192.168.22.128:5432 |        | running | 3  |      0    |
| pgsql_node2 | 192.168.22.129:5432 | Leader | running | 3  |           |
| pgsql_node3 | 192.168.22.130:5432 |        | running | 3  |      0    |
+-------------+---------------------+--------+---------+----+-----------+

3.3自动切换主备

重启node1节点所在主机。查看集群状态,node2自动提升为主,如果只是关闭节点实例,则patroni会再将数据库服务自动拉起。

# patronictl -c /etc/patroni.yml list
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
|   Member    |        Host         |  Role  |  State  | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node2 | 192.168.22.129:5432 | Leader | running | 3  |           |
| pgsql_node3 | 192.168.22.130:5432 |        | running | 3  |      0    |
+-------------+---------------------+--------+---------+----+-----------+

3.4初始化节点

当某一节点与主库不同步,或者节点异常运行时,可以使用此方法初始化节点信息以重新加入集群。

# patronictl -c /etc/patroni.yml reinit pgsql
+ Cluster: pgsql (6972099274779350082)+------+---------+----+-----------+
|   Member    |        Host         |  Role  |  State  | TL | Lag in MB |
+-------------+---------------------+--------+---------+----+-----------+
| pgsql_node1 | 192.168.22.128:5432 |        | running | 3  |      0    |
| pgsql_node2 | 192.168.22.129:5432 | Leader | running | 3  |           |
| pgsql_node3 | 192.168.22.130:5432 |        | running | 3  |      0    |
+-------------+---------------------+--------+---------+----+-----------+
选择以下需要添加的节点名称:pgsql_node3
你确定要重新初始化成员 pgsql_node3?[y/N]:y
成功:为成员pgsql_node3执行初始化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://www.lryc.cn/news/493724.html

相关文章:

  • 2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)
  • Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)
  • (四)3D视觉机器人的手眼标定(眼在手外)
  • 安达发|制造业APS智能优化排产软件的四类制造模型解决方案
  • 命令行使用ssh隧道连接远程mysql
  • 力扣第 71 题 简化路径
  • 使用ENSP实现OSPF
  • 分布式下怎么优化处理数据,怎么代替Join
  • 51单片机快速入门之中断的应用 2024/11/23 串口中断
  • [Java]微服务配置管理
  • c/c++ 用easyx图形库写一个射击游戏
  • Rust eyre 错误处理实战教程
  • 面试小札:JVM虚拟机
  • Docker扩容操作(docker总是空间不足)
  • 数字图像处理(4):FPGA中的定点数、浮点数
  • 毕昇入门学习
  • 2411C++,学习C++提示4
  • STM32-- 看门狗--介绍、使用场景、失效场景
  • 【赵渝强老师】PostgreSQL的数据库
  • linux安全管理-会话安全
  • Ubuntu监视显卡占用情况
  • 学成在线day06
  • Mac安装及合规无限使用Beyond Compare
  • 【青牛科技】2K02 电动工具专用调速电路芯片描述
  • 基于SpringBoot实现的民宿管理系统(代码+论文)
  • 安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
  • MinIO常见操作及Python实现对象的增删改查
  • 网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
  • 【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦
  • RHCE NFS