POSTGRESQL REPMGR DEEP DIVE (概念以及注意事项,细节 1)

2021-02-01 00:00:00 节点 设置 服务器 方式 情况下

近要整理公司使用的POSTGRESQL 的高可用方式,既然是整理和梳理,不如就仔仔细细的来一边.


PG 的高可用的方法比较多,REPMGR 算是一个靠谱的方案,之前写过6期的REPMGR. 在现在看来浅薄了点, 目前需要对这个高可用的方式进行更深入的理解,从概念到细节.

鉴于大部分的文字都是基于操作的, 这里会对于其他的一些文字有所不同,今天我们需要先从概念如说.


1  需要知晓的REPMGR 中的名词

     1.1  replication cluster

            这里的replication cluster 主要标识的是具有POSTGRESQL 流复制技术使用的服务器叫 replication cluster.

      1.2 node  

             node 的含义是是指的 POSTGRESQL 中的服务器的节点,实际上就是单台POSTGRESQL 的服务器.

      1.3 upstream node 

             这个upstream node 本身的含义有两个,当repmgr 中只包含两个节点的时候,那么upstream node 必然是主节点, 当超过2个节点,并且你使用了级联复制,那么这个upstream node 针对的就是从节点的数据源.

      1.4  failover 

             这里的failover不在是一个名词,而是一个动作的表达, 表达当主库失败后,选择出一个新的主库,并进行对外输出的工作的一个过程.

      1.5  swithover 

             这里的switchover 也是表达一个功能,通过手动的方式进行主从交换的方式,通过这样的方式,满足一些维护工作,或特殊的需求,例如主库所在的服务器,需要进行下线, 并且需要另一个服务器来接替,那么swithover 就是一个非常好的方法来完成这个工作.

      1.6  fencing

             为了防止失败的主库服务器在次上线,导致脑裂的问题,这边对于失败下线的主库所做的事情,让其与应用隔离

      1.7  witness server

              在REPMGR中的服务器超过2台及以上的情况下standby 变为主库的情况下,需要进行一个投票的行为,通过投票的方式来决定, 实际上个人看法在非极端的情况下, 跨网跨域的可以考虑见证服务器,而一般在一个网络中,并且网络稳定的情况下, 两台PG 做REPMGR 就可以了,不非要使用见证服务器.


REPMGR 到底提供了几种工具


2.1  repmgr 

repmgr 程序提供的功能主要有

设置standby 服务器

手动将一个standby服务器promoting 为一个primary 服务器

查看replication cluster 的状态

2.2  repmgrd

这个程序作为daemon的状态,来监控服务器提供如下功能

查看和记录复制的性能问题

检测主库的失败并且在适当的时机,将standby promote 为主库

通过内部的事件管理,以及用户自定义的脚本来发送告警邮件

对于REPMGR 来说安装完毕注册完毕后,会产生3个表2个VIEW


其中包含 repmgr.events  


另外repmgr.node 表主要提供当前服务器的状态


另外注意如果是编译安装需要补充以下的依赖包

  • flex

  • libselinux-devel

  • libxml2-devel

  • libxslt-devel

  • openssl-devel

  • pam-devel

  • readline-devel

另外还需要注意如果想使用swithover功能的情况下,需要进行SSH 的配置和操作RSYNC 程序的安装. 配置/ETC/hosts


在设置REPMGR 中注册primary server时需要先初始化instance, 另外一些参数的设置也需要注意.


max_wal_senders   

max_replication_slots   

wal_level 

archive_mode 

archive_command 

等这些命令的设置(从库也需要有相同的配置)

当然在创建repmgr的同时需要在主库创建repmgr的账号以及repmgr的数据库,并且修改search_path 针对repmgr的数据库


ALTER USER repmgr SET search_path TO repmgr, "$user", public;


对于repmgr的用户名密码方面

通过设置.pgpass文件 或者 可以通过pg_hba.conf 文件来控制

.pgpass 主要设置 repmgr 账号,并且replication也是通过repmgr来进行控制

需要在每一台机器包含每一个NODE 的信息

如下面的方式在.pgpass 中进行设置(此为三个节点的信息)

node1:5432:repmgr:repmgr:foo
node1:5432:replication:repmgr:foo
node2:5432:repmgr:repmgr:foo
node2:5432:replication:repmgr:foo
node3:5432:repmgr:repmgr:foo
node3:5432:replication:repmgr:foo

对于pg_hba.conf 来说, 可以有两种配置  1 信任,但需要控制主机,也就是PG 主机之间的固定的数据库 固定的账号 进行信任,这样不会泄漏信息,安全性是可以接受的  2 或者使用./pgpass 与 密码的方式进行登录


相关文章