首页
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品 APCC: Greenplum管理平台
文档
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源
修改标题
往前插入
往后插入
删除

流复制HA集群

1. 基于流复制的高可用集群

安装配置的一个例子:

机器的情况:

主机名 IP 数据库端口 数据库数据目录
clup0 10.197.166.74 N/A N/A
pg01 10.197.166.115 5443 /data/replication
pg02 10.197.166.116 5443 /data/replication
pg03 10.197.166.117 5443 /data/replication

CLup管理节点安装在10.197.166.74,pg01~03为数据库主机,上面安装了clup-agent程序。

2. 导入流复制集群

使用此功能可以把用户已经有的流复制集群导入到CLup中进行统一管理。

CLup只支持PostgreSQL9.5以上版本的数据库,如果您的数据库版本低于此版本,则不能纳管。

从CLup的管理机器能够能以流复制协议连接到要纳管的数据库上,才可以纳管。在CLup管理机上可以用下面的命令,测试是否可以连接:

  1. psql "dbname='template1' host=XXX user=replica port=5443 replication=database"

另需要修改主备库的一些配置,才能纳管到CLup中。
PostgreSQL12版本以前备库使用recovery.conf配置文件,内容类似如下:

  1. standby_mode = 'on'
  2. recovery_target_timeline = 'latest'
  3. primary_conninfo = 'application_name=10.197.166.115 user=postgres password=postgres host=10.197.166.115 port=5443 sslmode=disable sslcompression=1'

PostgreSQL12版本以上将备库的recovery.conf参数并入到postgresql.conf文件的内容类似如下:

  1. recovery_target_timeline = 'latest'
  2. primary_conninfo = 'application_name=10.197.166.115 user=postgres password=postgres host=10.197.166.115 port=5443 sslmode=disable sslcompression=1

其中“primary_conninfo”中的:

检查原有数据库的归档配置,因为HA切换,每台机器都可能变成主库,要求每台机器上都需要把归档目录配置好,如一个用户的归档配置如下:

  1. archive_mode = on
  2. archive_command = 'DIR=/data01/arch/`date +%F`; test ! -d $DIR && mkdir -p $DIR; chmod 755 $DIR; test ! -f $DIR/%f && cp %p $DIR'

上面的归档配置要求每台机器上都要有/data01/arch的目录。
检查recovery.conf中的配置,重点是 restore_command的命令,如下面的配置:

  1. restore_command = 'PEER_DIR=/data01/peer_arch; cp $PEER_DIR/*/%f %p'

需要保证上面的命令在每台机器上都可以执行。当然也可以把这条记录去掉。

在CLup的web管理端中的,在集群定义页面中,点导入PostgreSQL流复制集群按钮:
添加流复制高可用集群

在弹出来的框中,输入如下信息:

添加流复制高可用集群仅支持一个主库拖所有备库的情况,所以填的数据库中第一个为主库,其他数据库的上级主库均为第一个主库, 如果需要更改上级主库,可以到数据库管理页面列表中选择对应数据库,使用更多-切换备库级联的功能,可以实现切换上一级主库。

3. 创建流复制高可用集群

注意:CLup会自动为运行数据库的操作系统用户在.bashrc中添加环境变量。如果之前在运行数据库的操作系统用户的.bashrc或.bash_profile文件中添加以下环境变量,请先注释掉或删掉以下配置项:

如果上面这些环境变量没有清理掉,可能出现配置重复且不一至导致CLup创建HA集群失败。

集群定义页面中,点创建PostgreSQL流复制集群按钮,弹出创建流复制集群的向导:
创建PostgreSQL流复制集群

在弹出来的框中,按照提示输入信息:

填写完成以后点击添加,第一个添加的数据库作为主库,其他都作为它的备库,添加的数据库到下面的列表中,信息填错了可以点击删除,删掉数据库重新添加:
重新添加

点下一步,进入第二步:
下一步

填写集群信息:

第三步 填写集群的探测信息:
探测信息

填写探测信息:

第四步 填写数据库常用配置:
常用配置

常用参数配置以及后续的一般参数配置和其它参数配置基本上与创建数据库时输入的内容基本一样,这里旧不再赘述了。

添加完后,这个集群就出现在列表中,此时集群的状态还是离线状态。离线状态表示HA的检测和切换是不生效的。这时点击本集群那一行中的上线按钮,集群即开始上线。

集群上线,CLup会对此集群做一系列的检查,如果检查不通过,请查看不通过的原因,根据原因进行修复:
检查不通过

上面这个错误通常是因为机器上的clup-agent服务没有启动,不能正常连接到CLup,在对应机器上面执行systemctl status clup-agent检查状态并执行命令systemctl start clup-agent启动clup-agent就可以解决了。

有时我们把主备数据库的流复制搭建好了,但还是报下面的错误:
错误

错误1:备库的流复制配置primary_conninfo中application_name没有配置正确,查询主库中的pg_stat_replication表,看application_name名称是否正确;

  1. postgres=# select usename,application_name,client_addr from pg_stat_replication ;
  2. usename | application_name | client_addr
  3. ----------+------------------+---------------
  4. postgres | 10.197.167.27 | 10.197.167.26
  5. postgres | 10.197.160.28 | 10.197.167.28
  6. (2 rows)

如上所示,备库主机10.197.167.28的application_name与提示信息中的值不相同,此时需要将备库中recovery.confpostgresql.conf配置文件中流复制的application_name名称配置成提示中的值10.197.167.28。注意:不要在备库中的recovery.conf添加一些特殊的配置项,因为每次切换时,CLup都会根据配置自动生成recovery.conf文件,你的这些特殊配置项都会被覆盖掉。

错误2:备库落后主库太多,导致需要的WAL日志文件在主库上已经被移除了;此时可以点击集群详情页中的此备库的状态,将此备库当前状态设置为Fault,然后点击加回集群重新搭建此备库,选择此备库的上级主库,点击确定后勾选重新搭建备库,可选择保留旧的数据目录或是删除原有数据目录。

错误3:流复制配置错误,此情况出现在导入流复制集群上线时出现的错误,因此需要手动按照导入流复制集群的步骤进行检查。
如果检查通过之后,集群就变成了正常状态:
正常状态

4. 流复制集群的管理

HA管理中,点击流复制集群那一行中的详情按钮,进入到流复制集群详情页面:
详情页面

详情页面中有几个TAB切换页:

点击查看主备数据库的界面:
主备数据库

对于基于流复制的集群,我们可以把一台备数据库变成主数据库,原先的主数据库变成备数据库,其它的备数据库重新从新主数据库中同步。在上面的界面中,点“切换为主库”按钮,可以把此备库切换成主库,原主库切换被备库:
切换为主库

注意:在切换过程中会重启所有的主备库,业务会短暂中断!!!

另我们有时会对数据库做一些维护操作,如停止数据库,这时如果我们直接停止数据库,CLup会认为数据库出现的故障,会自动再把数据库拉起来,这时我们需要让CLup对这个集群停止工作,方法就是让集群离线,在集群列表中对指定的集群点离线按钮即可以完成这个工作,当集群处于离线状态,不会再触发故障转换的动作。

在上面的界面中点“停止”按钮,可以把数据库停掉,但要注意,如果HA集群在上线的情况下,如果发现数据库停机了,会自动把其拉起来。

点击查看延迟的界面:
查看延迟

在此界面中可以看到流复制的延迟和状态,注意“实际状态”为“streaming”才是正常的流复制状态,其它状态都表示流复制有问题。“同步”中显示为“async”表示流复制是异步的。
点击查看LSN的界面:
查看LSN

点击机房配置的界面:
机房配置

点击集群拓扑图的界面:
集群拓扑图

目录
img