前言:
repmgr是一套开源工具,用于管理 PostgreSQL 服务器集群内的复制和故障转移。repmgr 支持并增强了 PostgreSQL 的内置流复制,它提供了一个单一的读/写主服务器和一个或多个只读备用服务器。
repmgr 流复制管理工具对 PostgreSQL 集群节点的管理是基于分布式的管理方式。集群每个节点都具备一个 repmgr.conf 配置文件,用来记录本节点的 ID、节点名称、连接信息、数据库的 PGDATA 目录等配置参数。在完成参数配置后,就可以通过 repmgr 命令实现对集群节点的 “一键式” 部署。
Repmgr整体架构图:
集群节点部署完成后,每个节点都可通过 repmgrd 守护进程来监控节点数据库状态;每个节点元数据表可独立维护,这些元数据表将记录所有集群节点的信息。
选举原理
在发生 Auto Failover 时,备节点在尝试多次连接主节点失败后(尝试次数及尝试间隔可以通过 repmgr.conf 配置文件修改),repmgrd 会在所有备节点中选举一个候选备节点(选举机制参考下文)提升为新主节点,其他备节点去 Follow 到该新主上,形成一个新的集群。
repmgr 选举候选备节点按照以下顺序选举:LSN > Priority > Node_ID
- 系统将优先选举一个 LSN 较大的节点,作为候选备节点;
- 若 LSN 一样,会根据 Priority 优先级进行比较(该优先级是在配置文件中进行参数配置,如果 Priority 为 0,则代表该节点被禁止提升为主节点);
- 若优先级也一样,会比较节点的 Node ID,小者会优先选举。
两个工具
repmgr 主要提供了 repmgr 和 repmgrd 两个工具。
repmgr 是一个执行管理任务的命令行工具,方便进行 PostgreSQL 服务器集群的管理。具备以下功能特点:
- 设置备用服务器
- promote 备
- 主从切换
- 显示复制集群中服务器的状态
repmgrd 是一个守护进程,它主动监视复制集群中的服务器并支持以下任务:
- 监控和记录复制集群信息
- 故障检测、故障转移
- 集群中事件的通知(需要自定义脚本接受通知)
接下来开始部署:
- 环境设置
- 环境规划
主机名称 | 主机IP | 用途 | 操作系统 | PostgreSQL版本 | Repmgr版本 |
Node1 | 192.168.1.71 | Primary | CentOS Linux 7.9 | 16.2 | 5.4.1 |
Node2 | 192.168.1.72 | Standby | CentOS Linux 7.9 | 16.2 | 5.4.1 |
Node3 | 192.168.1.73 | witness | CentOS Linux 7.9 | 16.2 | 5.4.1 |
-
- 统一主机名称
vi /etc/hostname
或 hostnamectl set-hostname Node1
-
- 关闭SELINUX
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
-
- 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
或设置开放端口:
查看开放的端口:
firewall-cmd --list-ports
开启防火墙端口:
firewall-cmd --zone=public --add-port=5432/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
重新加载一遍才会生效:
firewall-cmd --reload
-
- 安装插件
yum -y install readline readline-devel zlib zlib-devel gettext gettext-devel openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel tcl-devel uuid-devel gcc gcc-c++ make flex bison perl-ExtUtils* libicu libicu-devel ntp libcurl-devel
-
- 编辑hosts
将主机名和 ip 解析写到/etc/hosts 文件。
cat>>/etc/hosts/etc/security/limits.conf/etc/sysctl.conf