PostgreSQL+repmgr集群部署(一主一备一仲裁)

2024年 5月 12日 77.6k 0

前言:

repmgr是一套开源工具,用于管理 PostgreSQL 服务器集群内的复制和故障转移。repmgr 支持并增强了 PostgreSQL 的内置流复制,它提供了一个单一的读/写主服务器和一个或多个只读备用服务器。

repmgr 流复制管理工具对 PostgreSQL 集群节点的管理是基于分布式的管理方式。集群每个节点都具备一个 repmgr.conf 配置文件,用来记录本节点的 ID、节点名称、连接信息、数据库的 PGDATA 目录等配置参数。在完成参数配置后,就可以通过 repmgr 命令实现对集群节点的 “一键式” 部署。

Repmgr整体架构图:

PostgreSQL+repmgr集群部署(一主一备一仲裁)-1

集群节点部署完成后,每个节点都可通过 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 是一个守护进程,它主动监视复制集群中的服务器并支持以下任务:

  • 监控和记录复制集群信息
  • 故障检测、故障转移
  • 集群中事件的通知(需要自定义脚本接受通知)

接下来开始部署:

  1. 环境设置
    1. 环境规划
主机名称 主机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
    1. 统一主机名称

vi /etc/hostname

或 hostnamectl set-hostname Node1

    1. 关闭SELINUX

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

    1. 关闭防火墙

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

    1. 安装插件

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

    1. 编辑hosts

将主机名和 ip 解析写到/etc/hosts 文件。

cat>>/etc/hosts/etc/security/limits.conf/etc/sysctl.conf

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论