GaussDB流复制集群
1. 基于流复制的高可用集群
安装配置的一个例子:
机器的情况:
| 主机名 | IP | 数据库端口 | 数据库数据目录 |
|---|---|---|---|
| clup0 | 10.197.166.74 | N/A | N/A |
| gs01 | 10.197.166.115 | 5443 | /data/replication |
| gs02 | 10.197.166.116 | 5443 | /data/replication |
| gs03 | 10.197.166.117 | 5443 | /data/replication |
CLup管理节点安装在10.197.166.74,gs01~03为数据库主机,上面安装了clup-agent程序。
2. 导入GaussDB流复制集群
使用此功能可以把用户已经有的流复制集群导入到CLup中进行统一管理。
从CLup的管理机器能够能以流复制协议连接到要纳管的数据库上,才可以纳管。在CLup管理机上可以用下面的命令,测试是否可以连接:
gsql "dbname='template1' host=XXX user=replica port=5443 replication=database"
其中“primary_conninfo”中的:
- application_name=10.197.166.115 如果要纳管到CLup中,需要把application_name设置为流复制IP地址(一般是本机IP)。
检查原有数据库的归档配置,因为HA切换,每台机器都可能变成主库,要求每台机器上都需要把归档目录配置好,如一个用户的归档配置如下:
archive_mode = onarchive_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的命令,如下面的配置:
restore_command = 'PEER_DIR=/data01/peer_arch; cp $PEER_DIR/*/%f %p'
需要保证上面的命令在每台机器上都可以执行。当然也可以把这条记录去掉。
在CLup的web管理端中的,在集群定义页面中,点导入GaussDB流复制集群按钮:
在弹出来的框中,输入如下信息:
- 集群名称:我们自定义一个,例如gscluster01
- vip池:对应网络管理->VIP池管理中的列表
- 集群VIP: 点击选择VIP按钮,可以选择VIP池中的一个未使用的VIP, 如10.197.166.250
- 数据库端口:输入原先数据库端口
- 数据目录:输入数据库的数据目录,这里我们输入/data/replication
- 数据库IP列表:我们输入10.197.166.115,10.197.166.116,10.197.166.117,单实例集群直接输入IP即可
- 流复制IP列表:我们输入10.197.166.115,10.197.166.116,10.197.166.117,单实例集群直接输入IP即可
- 数据库初始化用户:初始化数据库时,所使用的用户。
- 初始化用户密码:初始化用户的密码。
- DB中HA用户:一般使用opengauss,需使用超级用户
- DB中HA用户密码:配置与用户对应的密码
- DB复制用户:搭建流复制的用户,必须超级用户,一般为opengauss
- DB复制用户密码:流复制用户的密码
- 只读VIP:输入10.197.166.244,如果不使用读写分离,我们也可以不输入,保留为空
- 均衡器列表:负载均衡器(暂未适配),可以不输入,保留为空
- 探测DB:用来检测集群是否正常的数据库,默认,无需修改
- 探测周期:高可用系统的检查系统的周期
- 探测超时:一次检查超过多少秒,会认为检测失败
- 探测重试次数:失败后重新探测次数
- 重试间隔(秒):失败后重新探测间隔的秒数
- 是否自动加回集群:检查到备库故障以后是否自动加回集群,过程中可能会执行gs_basebackup
- 跨机房自动激活主库:默认为否,CLup集群模式下可用
- 故障切换保持级联关系:集群中的数据库发生故障切换时是否保持级联关系
- 跨站切换保留旧站vip:默认不保留
- 探测主库SQL:在检测主库时所使用的SQL,不用改动
- 探测备库SQL:在检测备库时所使用的SQL,不用改动
- 触发DB名称:当发生故障切换时,会调用此设置项指定的数据库中的触发函数,如果不使用此功能,则保持为空即可,此参数配合plproxy使用
- 触发DB函数:当发生故障切换时会调用上一条配置项指定的数据库中 本配置项指定的函数,如果不使用此功能,则保持为空即可,此参数配合plproxy使用
- 备注:随便输入一些,主要是标注这个集群
添加流复制高可用集群仅支持一个主库拖所有备库的情况,所以填的数据库中第一个为主库,其他数据库的上级主库均为第一个主库。
3. 创建流复制高可用集群
在集群管理界面中点创建集群按钮,选择创建GaussDB流复制集群,出现弹出框:
- 在已有主机中创建数据库集群:在已经安装运行clup-agent的主机上创建数据库集群
- 创建新虚拟机以容纳此数据库集群:先创建虚拟机,再在虚拟机中创建数据库集群。需要配置PaaS模板,PaaS类型必须选择GaussDB。
注意:CLup会自动为运行数据库的操作系统用户在.bashrc中添加环境变量。如果之前在运行数据库的操作系统用户的.bashrc或.bash_profile文件中添加以下环境变量,请先注释掉或删掉以下配置项:
- export PATH
- export LD_LIBRARY_PATH
- export PGDATA
- export PGHOST
- export PGPORT
如果上面这些环境变量没有清理掉,可能出现配置重复且不一致导致CLup创建HA集群失败。
3.1 在已有主机中创建数据库集群
数据库所在的主机,只能选择有运行clup-agent的主机,最少选择两个主机,每选择一个主机,下面表格则会多出一行。
填写的各个项说明如下:
- 所在主机:选择多个数据库的主机, 如10.197.166.115
- 复制ip:填写一个该数据库的复制IP,如10.197.166.115
- 操作系统用户:操作系统用户名称,如果存在会自动获取UID
- 数据库软件目录:数据库安装目录,选择之后,自动获取软件版本
- 数据目录:填写该数据库所要存放的数据目录
- 优先级:设置当前数据库的优先级,主库故障的时候先根据优先级来切换,优先级一致时候会根据wal日志来切换,值越小,优先级越高
点下一步,进入第三步:
填写集群信息:
- 集群名称:输入一个集群的名字
- 数据库端口: 选择数据库的端口,同一个集群我们会把端口设置一致
- 数据库初始化用户:初始化数据库时,所使用的用户
- 初始化用户密码:初始化用户的密码
- DB中HA用户:一般使用postgres,需使用超级用户
- DB中HA用户密码:配置与用户对应的密码
- DB复制用户:搭建流复制的用户,必须超级用户,一般为postgres
- DB复制用户密码:流复制用户的密码
- 机房名:主机所在机房的名称
- vip池:对应网络管理->VIP池管理中的列表
- 集群VIP: 点击选择VIP按钮,可以选择VIP池中的一个未使用的VIP, 如10.197.166.250
- 只读VIP:如果不使用读写分离,我们也可以不输入,保留为空
- 均衡器列表:暂未完成负载均衡器的适配,我们可以不输入,保留为空
第四步 填写集群的探测信息:
填写探测信息:
- 探测DB:用来检测集群是否正常的数据库,默认即可,无需修改
- 探测周期:高可用系统的检查系统的周期
- 超时秒数:一次检查超过多少秒,会认为检测失败
- 探测重试次数:失败后重新探测次数
- 重试间隔(秒):失败后重新探测间隔的秒数
- 是否自动加回集群:数据库发生故障或clup-agent故障,恢复后是否自动加回集群,也可以手动操作,建议手动操作,使用默认否即可
- 探测SQL:在检测数据库时所使用的SQL,不用改动
- 触发DB名称:当发生故障切换时,会调用此设置项指定的数据库中的触发函数,如果不使用此功能,则保持为空即可,此参数配合plproxy使用
- 触发DB函数:当发生故障切换时会调用上一条配置项指定的数据库中 本配置项指定的函数,如果不使用此功能,则保持为空即可,此参数配合plproxy使用
- 备注:随便输入一些,主要是标注这个集群
第五步 填写数据库常用配置:
常用参数配置以及后续的一般参数配置和其它参数配置基本上与创建数据库时输入的内容基本一样,这里就不再赘述了。
3.2 创建新虚拟机以容纳此数据库集群
填写的各个项说明如下:
- 模板:这里选择的就是之前配置好的PaaS模板,模板的PaaS类型必须是GaussDB类型。
- 所在宿主机:虚拟机模板所在的宿主机。
- IP:虚拟机的IP地址,当虚拟机是多网卡时,第一个IP必须为主IP,作为安装clup-agent的IP。
- 内存大小:分配给虚拟机的内存大小,单位(MB)。
- CPU核数:分配给虚拟机的CPU核数,单位(个)。
- 数据库软件bin目录:是一个不同类型和版本的数据库软件的目录列表,需要配置好PaaS参数中的数据库软件bin目录。
填写好之后,点击下一步,进入第三步:
填写的各个项说明如下:
- 复制ip:填写多个该数据库的复制IP,如10.197.166.115,与上一步所填写的虚拟机一一对应
- 操作系统用户:操作系统用户名称
- 数据目录:填写该数据库所要存放的数据目录
点下一步,进入第四步:
填写集群信息:
- 集群名称:输入一个集群的名字
- 数据库端口: 选择数据库的端口,同一个集群我们会把端口设置一致
- 数据库初始化用户:初始化数据库时,所使用的用户
- 初始化用户密码:初始化用户的密码
- DB中HA用户:一般使用postgres,需使用超级用户
- DB中HA用户密码:配置与用户对应的密码
- DB复制用户:搭建流复制的用户,必须超级用户,一般为postgres
- DB复制用户密码:流复制用户的密码
- 机房名:主机所在机房的名称
- vip池:对应网络管理->VIP池管理中的列表
- 集群VIP: 点击选择VIP按钮,可以选择VIP池中的一个未使用的VIP, 如10.197.166.250
- 只读VIP:如果不使用读写分离,我们也可以不输入,保留为空
- 均衡器列表:暂未完成负载均衡器的适配,我们可以不输入,保留为空
第五步 填写集群的探测信息:
填写探测信息:
- 探测DB:用来检测集群是否正常的数据库,默认即可,无需修改
- 探测周期:高可用系统的检查系统的周期
- 超时秒数:一次检查超过多少秒,会认为检测失败
- 探测重试次数:失败后重新探测次数
- 重试间隔(秒):失败后重新探测间隔的秒数
- 是否自动加回集群:数据库发生故障或clup-agent故障,恢复后是否自动加回集群,也可以手动操作,建议手动操作,使用默认否即可
- 探测SQL:在检测数据库时所使用的SQL,不用改动
- 触发DB名称:当发生故障切换时,会调用此设置项指定的数据库中的触发函数,如果不使用此功能,则保持为空即可,此参数配合plproxy使用
- 触发DB函数:当发生故障切换时会调用上一条配置项指定的数据库中 本配置项指定的函数,如果不使用此功能,则保持为空即可,此参数配合plproxy使用
- 备注:随便输入一些,主要是标注这个集群
第六步 填写数据库常用配置:
创建完后,这个集群就出现在列表中。
4. 流复制集群的管理
在数据库集群中,点击GaussDB流复制集群那一行中的详情按钮,进入到流复制集群详情页面:
详情页面中有几个TAB切换页:
- 集群信息:查看集群的一些信息,同时可以修改这些信息
- 主备数据库:一个列表,显示主备数据库的信息
- 流复制状态:查看流复制的主备库之间的复制延迟
- 查看LSN:查各个数据库的当前LSN
- 机房配置:查看集群的机房信息
- 集群拓扑图:以图形化形式展示集群中数据库的级联方式
点击查看集群信息的界面:
点击查看主备数据库的界面:
对于基于流复制的集群,我们可以把一台备数据库变成主数据库,原先的主数据库变成备数据库,其它的备数据库重新从新主数据库中同步。在上面的界面中,点“切换为主库”按钮,可以把此备库切换成主库,原主库切换被备库
注意:在切换过程中会重启所有的主备库,业务会短暂中断!!!
另我们有时会对数据库做一些维护操作,如停止数据库,这时如果我们直接停止数据库,CLup会认为数据库出现的故障,会自动再把数据库拉起来,这时我们需要让CLup对这个集群停止工作,方法就是让集群离线,在集群列表中对指定的集群点离线按钮即可以完成这个工作,当集群处于离线状态,不会再触发故障转换的动作。
在上面的界面中点“停止”按钮,可以把数据库停掉,但要注意,如果HA集群在上线的情况下,如果发现数据库停机了,会自动把其拉起来。
点击流复制状态的界面:
在此界面中可以看到流复制的延迟和状态,注意“实际状态”为“streaming”才是正常的流复制状态,其它状态都表示流复制有问题。“同步”中显示为“async”表示流复制是异步的。
点击查看LSN的界面:
点击机房配置的界面:
点击数据库拓扑图的界面: