首页
产品
CLup:PostgreSQL高可用集群平台CData高性能数据库云一体机CBackup数据库备份恢复云平台CPDA高性能双子星数据库机
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源
往前插入
往后插入
删除

共享存储HA集群

1. 基于共享存储的高可用集群

基于共享存储的集群是指,两台机器(A机器和B机器)都挂载了一块共享盘,数据库只运行在一台机器上,如运行在A机器上,当A机器出现故障之后,把文件系统挂载到另一台机器B上,然后把数据库在机器B上拉起来,然后把VIP也切过来的高可用方式。

给出一个示例:
机器的情况:

主机名 IP 数据库端口 数据库数据目录
CLUP0 10.197.167.25 N/A N/A
pg01 10.197.167.29 5432 pgdata
pg02 10.197.167.30 5432 /pgdata

集群的信息的VIP为:10.197.167.251

我们假设在CLUP机器上已配置好了配置文件/opt/clup/conf/clup.conf同时在10.197.167.2910.197.167.30机器上安装好了clup-agent和已配置好了/opt/clup-agent/conf/clup-agent.conf
共享磁盘为/dev/sdb,同时也挂载到了/data目录下,我们的数据库软件也在机器10.197.167.29上安装好了,数据库实例也创建在了/data目录下。

在CLUP机器上启动CLUP程序,在每台数据库机器上启动clup-agent程序

2. 导入共享存储集群

在导入共享磁盘的高可用集群之前,需要先手工把数据库创建好。然后再到此界面中导入此高可以集群,这里把创建数据库的过程略过。

在CLUP的web管理端中的,在HA集群菜单中,点击集群定义中的导入共享盘HA集群按钮,(暂不支持添加docker类型的数据库)出来界面:

界面说明如下:

上面的reset命令设置为IPMI的命令,通常设置为如下内容:
ipmitool -H 172.16.167.29 -Uadmin –PXXX chassis power reset
其中ipmitool命令中的参数:

ipmitool命令的配置好之后,一定要先测试一下看看IPMI的用户名和密码配置是否正确,可以用ipmitool的查询电源状态的命令替代上面的重启命令来验证ipmi的用户名和密码是否配置的正确:
ipmitool -H 172.16.167.29 -Uadmin -PXXX chassis power status
如果是在虚拟机测试环境,没有IPMI环境,可以配置一个ssh命令仿真IPMI重启机器的命令,如下所示:
ssh -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no root@10.197.167.29 "nohup reboot -f >/dev/null 2>&1 &"
添加完集群之后,在HA集群模块的集群定义列表中可以看到此集群:

HA集群模块

点列表中的查看按钮就可看到此集群的详情界面,在详情界面中选择tab切换页中的主备机器:

主备机器

在此界面中,可以看到共享磁盘集群中的两台机器,机器的DB状态为“无”表示数据库还没有运行,VIP状态为“无”表示这台机器目前没有VIP。如果发现机器的DB状态为“未知”,通常是这台机器上的clup-agent没有启动。

回到HA集群HA管理中,可以看到集群的状态还是“offline”,即此时集群的状态还是离线状态,离线状态表示HA的检测和切换是不生效的,要让高可用开始工作,需要让集群上线,方法是点击本集群那一行中的上线按钮,集群就可以上线,点完成,CLUP会对此集群做一系列的检查,如果检查不通过,请看不通过的原因。

注意!上线操作会自动把数据目录的文件系统挂起来,把数据库拉起来,把VIP加上去。所以需要注意共享磁盘不要挂载到已有的其它机器上,否则两边同时挂载会导致共享磁盘上的文件系统损坏!!!
如果检查通过之后,集群就变成了正常状态:

集群就变成了正常状态

3. 创建共享磁盘高可用集群

在CLUP的web管理端中的,在HA集群菜单中,点击集群定义中的创建集群创建PostgreSQL共享盘集群,出来界面:

创建共享盘集群的第1步

在上面界面中输入第一台机器的信息:

同样的方法输入第二台机器的信息:

输入完后,点下一步,出现下面的界面:

创建共享盘集群的第2步

在上面的界面中输入:

注意做这之前需要先在一台机器上把此共享盘的文件系统格式化好:

  1. mkfs.xfs -L /data -f /dev/sdb

用blkid命令可以看到这块盘的LABEL:

  1. [root@clup2 /]# blkid
  2. ...
  3. ...
  4. /dev/sdb: LABEL="/data" UUID="58d90ac1-03b5-4ec9-8600-3325b191ad5f" TYPE="xfs"
  5. ...
  6. ...

然后用命令mount LABEL="/data" /shared_data测试是否可以挂载到目录/shared_data,测试成功后一定要用命令umount /shared_data卸载掉。

点下一步,进入如下界面:

![创建共享盘集群的第3步](/uploadimg/20230112163441555740605.png)

在上面的界面中输入:

点下一步,出现如下界面:
创建共享盘集群的第4步

在上面的界面中,通常保持默认值就可以了。

点下一步,出现如下界面:

创建共享盘集群的第5步

上面的界面中主要是设置数据库的常用参数,根据实际需要设置即可。

点下一步,出现如下界面:
创建共享盘集群的第6步

上面的界面中主要是设置数据库的一般参数,根据实际需要设置即可,当然如果不改变默认值,通常也是可以的。

点下一步,出现如下界面:
创建共享盘集群的第6步
上面的界面中主要是设置数据库的其他参数,根据实际需要设置即可,当然如果不改变默认值,通常也是可以的。

这一步做完后,点提交按钮就开始创建基于共享磁盘的PostgreSQL高可用集群了,如下界面:

创建共享盘集群的最后一步

后续我们进入到“HA集群”界面中,可“上线”此集群后,当出现故障后,此高可用集群就会自动的进行高可用切换。

4. 共享磁盘集群的管理

对于基于共享存储的集群,我们可以把数据库从一台机器切换到另一台机器上运行。
方法是在HA管理的集群列表中,点击本集群那一行中的详情按钮,进到当前集群详情页面,页面中有两个TAB页,进入到主备机器页,页面列表中可以看到有数据库切换到此主机按钮,点下这个按钮就会实现此切换的功能:

切换功能

另外我们有时会对数据库做一些维护操作,如停止数据库,这时如果我们直接停止数据库,CLUP会认为数据库出现的故障,会自动再把数据库拉起来。

我们需要让CLUP对这个集群停止工作,方法就是让集群“离线”,在集群列表中对指定的集群点离线按钮即可以完成这个工作,当集群处于“离线”状态,不会再触发故障转换的动作。

5. 集群的故障切换

CLUP会每隔”集群定义”参数“探测周期(秒)”指定的秒数去检查数据库是否正常。
检查方法为执行一个SQL,即在”集群定义”参数“探测SQL”指定的数据库中更新表“cs_sys_heartbeat”。
如果无法更新,则会触发故障切换的动作,执行的SQL为:
UPDATE cs_sys_heartbeat SET hb_time = now()
如果发现此表的hb_time时间一直不变,则认为CLUP的检测失效了:

  1. cs_sys_ha=# select * from cs_sys_heartbeat;
  2. hb_time
  3. -------------------------------
  4. 2022-05-11 15:04:47.665581+08
  5. (1 row)

注意:共享存储方式高可用进行切换时,会将旧节点上访问共享盘目录的进程都kill掉。以保证共享盘再旧节点上可以被umount掉.