今天,我们将探讨南大通用GBase 8s RHAC(Remote High Availability Cluster)的基本原理和搭建步骤,这是一种在异步通信框架内运行的辅助服务器技术,旨在最小化对主服务器的影响,同时提供数据的高可用性。
GBase 8s RHAC 辅助服务器在很多方面都与 HAC 辅助服务器相似。将日志发送到 RHAC 辅助服务器的方式与主服务器将日志发送到 HAC 辅助服务器的方式很相似。但是,RHAC 辅助服务器用于完全在异步通信框架内运行,因此对主服务器的影响达到最小。事务落实和检查点在主服务器和 RHAC 辅助服务器之间均未同步。不保证在主服务器上落实的任何事务也在同一时间在 RHAC 辅助服务器上得到完成。
从对RHAC与HAC功能应用比较来看,RHAC相对于HAC有以下不支持的功能:
不支持完全同步和近同步方式
不支持DRAUTO参数自动切换
不支持同步检查点
RHAC原理
RHAC采用SMX(Server Multiplexer)通信方式来建立节点之间的网络连接,SMX采用全双工的通信协议,支持异步通信的方式,在低速网络上提供更好的通信连接,简化了节点之间的通信管理,支持加密传输,同一个SMX连接可以支持多个内部功能传输。
RHAC_Send线程负责将逻辑日志发送到RHAC辅节点,如果要发送的下一页逻辑日志不在逻辑日志缓冲区中,那么RHAC_Send将直接从磁盘中读取日志。RHAC_Send 线程与 SMX 交互,以使用全双工方式发送数据。有了全双工通信,线程在发送下一个缓冲区之前不等待来自辅助服务器的确认。在主服务器需要来自辅助服务器的确认之前最多可发送 32 个缓冲区传输。如果达到 32 个缓冲区的限制,那么发送线程将等待RHAC_Recv 线程接收来自 RHAC 辅助服务器的确认。在辅助服务器上,RHAC_Recv 与 SMX 交互,以接收来自主服务器的日志页。
简单来说,RHAC架构基于主节点和辅节点之间的通信来实现数据传输和恢复。当数据生成时,它首先被写入主节点的逻辑日志缓冲区和存储中。同时,数据也会被写入发送缓冲区。为了保证数据的一致性,专门的线程负责将发送缓冲区中的数据通过网络传输给辅节点。辅节点接收到数据后,将其存储在逻辑日志缓冲区中,并使用重放技术来更新内存中的缓冲值。
一个关键的特性是RHAC架构支持延时数据恢复。延时数据恢复意味着辅节点在接收到数据后,并不会立即进行重放操作。相反,辅节点会按照一定的规则,延迟一段时间再进行数据的重放。这种延时恢复的机制可以通过将数据缓存到临时文件夹或者其他存储位置上来实现。
RHAC架构中的数据传输是异步的。辅节点会监测主节点和辅节点之间的数据差异,以进行流量控制。如果数据差异过大,辅节点会通知主节点进行相应的业务操作。
RHAC部署
RHAC集群的部署和HAC集群的部署十分相似。
主节点(192.168.1.1)
辅节点(192.168.1.2)
关闭防火墙
关闭防火墙
关闭selinux
关闭selinux
调整操作系统参数(共享内存,信号量,资源限制等)
调整操作系统参数(共享内存,信号量,资源限制等)
配置节点互信
配置节点互信
安装GBase 8s,并初始化实例(primary)
非实例化安装GBase 8s
——
配置环境变量
配置onconfig相关参数
配置onconfig相关参数
调整sqlhosts,加入辅节点信息
调整sqlhosts,同主节点
重启主节点实例
——
在主节点上注册RHAC节点(onmode -d add RSS )
——
进行L0备份
——
——
进行L0备份的恢复
——
将辅节点注册到主节点(onmode -d RSS )
查看节点状态(onstat -g rss)
查看节点状态(onstat -g rss)
安装GBase 8s
首先,我们需要分别在主节点和辅节点安装GBase 8s 数据库。安装过程也不做赘述。
注意:主节点安装完需要初始化实例,辅节点不初始化实例!!!
修改主节点的sqlhosts文件和配置文件
主节点完成初始化实例之后,我们需要修改onconfig文件;
SERVERNUM和DBSERVERNUM 可以不做修改(只要保证主节点和辅节点不一样即可),
剩下三个参数初始化之后都是默认值,需要我们进行修改。其中DRAUTO是控制故障转移的参数,当主节点发生故障的时,辅节点怎么成为主节点就靠这个参数来控制。参数详细信息可看下表:
参数
值
说明
SERVERNUM
131
实例唯一标识,最大值255
DBSERVERNAME
prim
实例名
HA_ALIAS(选配)
prim
高可用环境中的实例别名,如果没配置则使用实例名
DRAUTO
0或3
0:不进行自动故障转移
3:由CM接管
LOG_INDEX_BUILDS
1
必选,将索引数据写入逻辑日志
修改完onconfig文件之后,修改sqlhosts文件,sqlhosts文件中加入辅节点的信息即可,如下所示:
[gbasedbt@prim ~]$ cd /opt/gbase/etc/
[gbasedbt@prim etc]$ cat sqlhosts.prim
prim onsoctcp 192.168.56.201 9088
[gbasedbt@prim etc]$ vi sqlhosts.prim
[gbasedbt@prim etc]$ cat sqlhosts.prim
prim onsoctcp 192.168.1.1 9088
rhac onsoctcp 192.168.1.2 9088
修改完配置文件之后,主节点需要重启,让修改的参数生效。
修改辅节点的配置文件和profile文件
首先我们修改onconfig文件,主要修改SERVERNUM、DBSERVERNAME、HA_ALIAS等参数,让其和主节点不一致。
参数
值
说明
SERVERNUM
132
实例唯一标识,最大值255
DBSERVERNAME
rhac
实例名
HA_ALIAS(选配)
rhac
高可用环境中的实例别名,如果没配置则使用实例名
DRAUTO
0或3
0:不进行自动故障转移
3:由CM接管
LOG_INDEX_BUILDS
1
必选,将索引数据写入逻辑日志
sqlhost文件与主节点相同即可
修改profile文件,将profile文件中的prim修改成rhac即可。
[gbasedbt@rhac ~]$ cat profile.rhac
export GBASEDBTSERVER=rhac
export GBASEDBTDIR=/opt/gbase
export GBASEDBTSQLHOSTS=/opt/gbase/etc/sqlhosts.rhac
export ONCONFIG=onconfig.rhac
export PATH=/opt/gbase/bin:$PATH
export PATH=/opt/gbase/sbin:$PATH
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export GL_USEGLU=1
完成上述操作之后,我们可以source一下环境变量,之后查看数据库服务状态,此时辅节点应该是关闭状态。
[gbasedbt@rhac ~]$ source profile.rhac
[gbasedbt@rhac ~]$ onstat -
Your evaluation license will expire on 2024-11-20 00:00:00
shared memory not initialized for GBASEDBTSERVER 'rhac'
辅节点创建chunk
首先在主节点查看dbs的存放路径,在辅节点创建相同的文件夹。
[gbasedbt@prim rhac_dbs]$ ll
总用量 8527872
-rw-rw---- 1 gbasedbt gbasedbt 104857600 11月 21 10:00
datadbs1_1-rw-rw---- 1 gbasedbt gbasedbt 3481272320 11月 21 10:28
llogdbs-rw-rw---- 1 gbasedbt gbasedbt 3481272320 11月 21 10:28
plogdbs-rw-rw---- 1 gbasedbt gbasedbt 209715200 11月 21 10:28
rootdbs-rw-rw---- 1 gbasedbt gbasedbt 727711744 11月 21 09:58
sbspace1-rw-rw---- 1 gbasedbt gbasedbt 727711744 11月 21 09:58
tmpdbs1[gbasedbt@prim rhac_dbs]$ pwd /opt/gbase/rhac_dbs
在辅节点 /opt/gbase 目录下创建rhac_dbs目录,之后再根据主节点chunk的名称再辅节点创建chunk。如上所示,主节点一共有六个chunk,因此在辅节点我们也创建6个chunk,并且将chunk的权限修改为660。
[gbasedbt@rhac ~]$ cd /opt/gbase/
[gbasedbt@rhac gbase]$ mkdir rhac_dbs
[gbasedbt@rhac gbase]$ cd rhac_dbs/
[gbasedbt@rhac rhac_dbs]$ touch datadbs1_1 llogdbs plogdbs rootdbs sbspace1 tmpdbs1
[gbasedbt@rhac rhac_dbs]$ ll
总用量 0
-rw-rw-r-- 1 gbasedbt gbasedbt 0 11月 21 10:37 datadbs1_1
-rw-rw-r-- 1 gbasedbt gbasedbt 0 11月 21 10:37 llogdbs
-rw-rw-r-- 1 gbasedbt gbasedbt 0 11月 21 10:37 plogdbs
-rw-rw-r-- 1 gbasedbt gbasedbt 0 11月 21 10:37 rootdbs
-rw-rw-r-- 1 gbasedbt gbasedbt 0 11月 21 10:37 sbspace1
-rw-rw-r-- 1 gbasedbt gbasedbt 0 11月 21 10:37 tmpdbs1
[gbasedbt@rhac rhac_dbs]$ chmod 660 *
[gbasedbt@rhac rhac_dbs]$ ll
总用量 0
-rw-rw---- 1 gbasedbt gbasedbt 0 11月 21 10:37 datadbs1_1
-rw-rw---- 1 gbasedbt gbasedbt 0 11月 21 10:37 llogdbs
-rw-rw---- 1 gbasedbt gbasedbt 0 11月 21 10:37 plogdbs
-rw-rw---- 1 gbasedbt gbasedbt 0 11月 21 10:37 rootdbs
-rw-rw---- 1 gbasedbt gbasedbt 0 11月 21 10:37 sbspace1
-rw-rw---- 1 gbasedbt gbasedbt 0 11月 21 10:37 tmpdbs1
至此安装,初始化,配置文件修改等步骤已全部完成。
配置互信
GBase 8s集群部署的时候,互信的方法很多,这里主要介绍配置 .rhosts 文件的方法
用户主目录内的“.rhosts”文件内容是受信任的{主机~用户}关系对。授予特定主机上的某一特定账号以信任关系。简单的说.rhosts是同一用户在不同主机间的信任,只信任被信主机的相应的某个用户。
.rhosts方式配置互信适用于对操作系统安全要求比较低,互信需要指定到用户级别。root用户管理严格。这种情况可以使用gbasedbt用户修改.rhosts方式配置互信。
配置方法如下:
首先修改 /etc/hosts 文件,主辅节点使用root用户执行:vi /etc/hosts。在/etc/hosts文件下添加主辅节点的ip地址及主机名。主辅两台服务器配置一样。
[root@localhost opt]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1 prim
192.168.1.2 rhac
修改完 /etc/hosts 文件之后,修改 .rhosts 文件,在gbasedbt用户家目录下新建.rhosts 文件,主节点和辅节点在文件中互相添加对方的主机名和互信用户gbasedbt。
[gbasedbt@hac ~]$ cat .rhosts
prim gbasedbt
hac gbasedbt
最后配置正确的sqlhosts文件即可完成互信。sqlhosts文件的配置前面已完成,至此配置互信完成。
搭建RHAC集群
搭建集群前的准备工作完成了之后,就可以搭建集群关系了。
首先,我们需要设置主节点,命令中的rhac是辅节点实例的名称。之后可以查看集群状态,我们会发现rhac是Disconnected状态。
[gbasedbt@prim rhac_dbs]$ onmode -d add RSS rhac
Your evaluation license will expire on 2024-11-20 00:00:00
[gbasedbt@prim rhac_dbs]$ onstat -g cluster
Your evaluation license will expire on 2024-11-20 00:00:00
On-Line -- Up 00:00:47 -- 674664 Kbytes
Primary Server:prim
Current Log Page:7,4081
Index page logging status: Enabled
Index page logging was enabled at: 2023/11/21 10:39:46
Server ACKed Log Applied Log Supports Status
(log, page) (log, page) Updates
rhac 0,0 0,0 No ASYNC(RSS),Disconnected,Defined
接下来辅节点进行数据恢复,确保在执行以下命令之前,辅节点的状态是关闭状态。
在主节点执行以下命令:
[gbasedbt@rhac ~]$ onstat - #辅节点
Your evaluation license will expire on 2024-11-20 00:00:00
shared memory not initialized for GBASEDBTSERVER 'rhac'
主节点
[gbasedbt@prim rhac_dbs]$ ontape -s -L 0 -t STDIO | ssh 192.168.56.202 "source /home/gbasedbt/profile.rhac && ontape -p -t STDIO"
Your evaluation license will expire on 2024-11-20 00:00:00
gbasedbt@192.168.56.202's password:
Your evaluation license will expire on 2024-11-20 00:00:00
Your evaluation license will expire on 2024-11-20 00:00:00
在主节点执行完此命令之后,我们可以查看辅节点的状态,辅节点此时会变成Fast Recovery状态。
[gbasedbt@rhac ~]$ onstat - #辅节点
Your evaluation license will expire on 2024-11-20 00:00:00
Fast Recovery -- Up 00:01:47 -- 597864 Kbytes
此时,我们需要设置辅节点。
在辅节点执行以下命令,执行完命令之后,可以查看辅节点的状态,此时辅节点的状态会有两种变化,首先会变成Fast Recovery (RSS)状态,之后会变成Read-Only (RSS)状态。此时我们可以查看集群状态,此时rhac是Connected状态。
[gbasedbt@rhac ~]$ onmode -d RSS prim
Your evaluation license will expire on 2024-11-20 00:00:00
[gbasedbt@rhac ~]$ onstat -
Your evaluation license will expire on 2024-11-20 00:00:00
Fast Recovery (RSS) -- Up 00:02:27 -- 1135464 Kbytes
[gbasedbt@rhac ~]$ onstat -g cluster
Your evaluation license will expire on 2024-11-20 00:00:00Read-Only (RSS) -- Up 00:02:57 -- 1135464 Kbytes
Primary Server:prim
Index page logging status: Enabled
Index page logging was enabled at: 2023/11/21 10:39:46
Server ACKed Log Supports Status
(log, page) Updates
rhac 7,4092 No ASYNC(RSS),Connected,Active
至此,RHAC集群关系搭建完毕。
通过这篇文章,我们了解了RHAC的基本原理和搭建步骤。RHAC作为一种高效的数据库高可用性解决方案,不仅能够提供数据的异步复制,还能够在网络条件不理想的情况下保持高效的通信。随着技术的不断进步,RHAC将继续为企业的数据安全和业务连续性提供强有力的支持。感谢您的阅读。