HAC概述
GBase 8s灾备集群HAC(High Availability Cluster)是被广泛使用的典型的高可用解决方案。当主节点发生故障时可迅速切换至辅节点,企业的业务不受影响。
- 同步方式:基于逻辑日志的复制;支持同步模式、异步模式和折中模式;
- 高性能:采用缓冲区内存同步方式,然后到备用服务器回放的方式;
- 容灾:同步模式下零数据丢失;
如图,在灾备集群中:
- PRIMARY为主节点,HAC为辅节点;
- 支持同城灾备集群和异地灾备集群。异地灾备集群支持多个节点、部署距离更远、对网络带宽要求更低;
- 连接管理器(CM)可部署在一个或多个数据节点上,建议部署在单独的应用服务器或服务器集群上;
- 准备1个主节点、1个同城辅节点和2个异地辅节点
- PRIMARY:192.168.5.100
- HAC:192.168.5.110
- HAC1:192.168.5.111
- HAC2:192.168.5.112
- 硬件要求
GBase 8s同城灾备集群支持一个辅节点,GBase 8s异地灾备集群支持多个辅节点,以下为单节点推荐配置:
硬件 | 最低配置 | 推荐配置 |
处理器 | 1×2核 2.0GHz | 4×4核 3.0GHz |
内存 | 4GB | 64GB或更多 |
硬盘 | 100GB | 1TB |
光驱 | CD-ROM | CD-ROM |
- 平台要求:
GBase 8s灾备集群支持安装部署在x86、飞腾、鲲鹏、龙芯等多种平台上,支持的操作系统包括RedHat6.x、CentOS6.x等主流OS,并包括UOS、麒麟、凝思磐石等国产OS。
序号 | 操作系统 | CPU(平台) | 位数 |
1 | Redhat6.x、CentOS6.x及以上 | x86 | 64位 |
2 | 麒麟 V10、UOS V20 | 飞腾、鲲鹏平台 | 64位 |
3 | 麒麟 V10、UOS V20 | 龙芯平台 | 64位 |
本手册以Redhat Enterprise Linux 6.5 64位操作系统为例进行讲解,对于RHEL后续版本和CentOS等其他Linux内核操作系统,请大家做相应调整。
- 以root用户身份创建gbasedbt组和用户
[root@PRIMARY ~]# groupadd gbasedbt
[root@PRIMARY ~]# useradd -g gbasedbt gbasedbt
- 为gbasedbt用户设置密码,建议设置为复杂密码
[root@PRIMARY ~]# passwd gbasedbt
安装和配置
-
- 安装数据库
GBase 8s详细安装步骤请参考《GBase 8s 安装手册》,集群环境建议选择Custom installation,并使用各缺省选项,不创建实例,主节点准备创建的实例名为gbaseserver。
进入安装目录,创建数据目录
[root@PRIMARY ~]# cd /opt/GBASE/gbase
[root@PRIMARY gbase]# su gbasedbt
[gbasedbt@PRIMARY gbase]$ mkdir gbaseserver_dbs
[gbasedbt@PRIMARY gbase]$ cd gbaseserver_dbs
[gbasedbt@PRIMARY gbaseserver_dbs]$ touch rootdbs
[gbasedbt@PRIMARY gbaseserver_dbs]$ chmod 660 rootdbs
-
-
- 配置profile.gbaseserver环境变量文件
-
[root@PRIMARY ~]# cd /home/gbasedbt/
[root@PRIMARY gbasedbt]# su gbasedbt
[gbasedbt@PRIMARY ~]$ vim profile.gbaseserver
内容如下:
export GBASEDBTSERVER=gbaseserver
export GBASEDBTDIR=/opt/GBASE/gbase
export GBASEDBTSQLHOSTS=/opt/GBASE/gbase/etc/sqlhosts.gbaseserver
export ONCONFIG=onconfig.gbaseserver
export PATH=/opt/GBASE/gbase/bin:$PATH
export DB_LOCALE=zh_CN.GB18030-2000
export CLIENT_LOCALE=zh_CN.GB18030-2000
export GL_USEGLU=1
为了gbasedbt用户在登录后自动应用这些环境变量,可以修改.bash_profile文件,在文件后添加如下内容:
source /home/gbasedbt/profile.gbaseserver
-
-
- 配置sqlhosts.gbaseserver文件
-
[root@PRIMARY ~]# su gbasedbt
[gbasedbt@PRIMARY ~]$ cd /opt/GBASE/gbase/etc
[gbasedbt@PRIMARY etc]$ vim sqlhosts.gbaseserver
sqlhosts文件中需要将本次的2个节点的实例名、连接方式、IP、端口配置正确。
gbaseserver onsoctcp 192.168.5.100 9088
gbaseserver_hac onsoctcp 192.168.5.110 9088
-
-
- 配置onconfig.gbaseserver参数文件
-
以gbasedbt用户身份,将/opt/GBASE/gbase/etc/目录中的onconfig.std文件复制一份,命名为profile.gbaseserver中$ONCONFIG变量指定的名称onconfig.gbaerserver。
[gbasedbt@PRIMARY etc]$ cp onconfig.std onconfig.gbaseserver
[gbasedbt@PRIMARY etc]$ vim onconfig.gbaseserver
主要参数说明如下:
参数 | 值 | 说明 |
ROOTNAME | rootdbs | 指定数据库服务器root dbspace的名称 |
ROOTPATH | $GBASEDBTDIR/gbaseserver_dbs/rootdbs | 指定root dbspace的初始chunk全路径名,包括设备或文件 |
ROOTSIZE | 500000 | 指定以KB为单位的root dbspace的初始chunk的大小,500000即500M左右 |
PHYSFILE | 100000 | 指定物理日志文件大小,100000即100M左右 |
MSGPATH | $GBASEDBTDIR/gbaseserver.log | 指定消息日志文件的全路径名 |
DBSPACETEMP | dbspacetemp | 指定临时数据空间的名称 |
SBSPACETEMP | sbspacetemp | 指定临时智能大对象空间的名称 |
SBSPACENAME | sbspace | 指定智能大对象空间的名称 |
SERVERNUM | 1 | 指定共享内存中的相对位置,取值范围为0-255,多个数据库实例时候需要确保SERVERNUM唯一 |
DBSERVERNAME | gbaseserver | 数据库实例名 |
DRAUTO | 3 | 指定由连接管理器控制 |
集群中节点都需要vim /home/gbasedbt/.rhosts,内容如下(如果没有自动创建):
192.168.5.100 gbasedbt
192.168.5.110 gbasedbt
192.168.5.111 gbasedbt
192.168.5.112 gbasedbt
根据节点硬件和软件具体情况,调整默认操作系统参数,包括但不限于:
- /etc/sysctl.conf
#操作系统核心参数设置
#使用root用户在 /etc/sysctl.conf 中加入
kernel.shmmax = 4398046511104
kernel.shmall = 4294967296
kernel.sem = 250 32000 32 4096
vm.swappiness = 0
#使用root用户执行 sysctl -p 使修改的核心参数动态生效
- /etc/security/limits.conf
#永久修改ulimit的nofiles参数
#使用root用户在 /etc/security/limits.conf 中加入
* soft nofile 102400
* hard nofile 102400
#然后重新登录用户
- RHEL6.5:/etc/security/limits.d/90-nproc.conf,CentOS7:/etc/security/limits.d/20-nproc.conf
通过上述步骤完成了PRIMARY:192.168.5.100节点的准备工作。
同城灾备集群只支持一个辅节点,重复上述步骤准备HAC:192.168.5.110节点,这个节点与主节点设置上有如下不同:
- 实例名
PRIMARY:192.168.5.100节点实例名为gbaseserver, HAC:192.168.5.110节点实例名建议为gbaseserver_hac。
请依次修改下面几个文件中的实例名和文件名,建议加_hac后缀区分,例如:
/home/gbasedbt/profile.gbaseserver_hac:
export GBASEDBTSERVER=gbaseserver_hac
export GBASEDBTSQLHOSTS=/opt/GBASE/gbase/etc/sqlhosts.gbaseserver_hac
export ONCONFIG=onconfig.gbaseserver_hac
/opt/GBASE/gbase/etc/onconfig.gbaseserver_hac:
SERVERNUM 10
DBSERVERNAME gbaseserver_hac
- SERVERNUM
PRIMARY节点的SERVERNUM配置的是1,建议HAC节点的SERVERNUM配置为10。
原则:保证唯一。
-
-
- 以root用户身份关闭各个节点防火墙
-
RHEL6.5:
[root@PRIMARY ~]# service iptables stop
CentOS7:
[root@primary ~]# systemctl stop firewalld
-
-
- 可根据需要以root用户身份关闭SELinux
-
立刻关闭:
[root@PRIMARY ~]# /usr/sbin/setenforce 0
永久更改:
[root@PRIMARY ~]# vim /etc/selinux/config
#SELINUX=enforcing
#SELINUXTYPE=targeted
SELINUX=disabled
-
-
- 以gbasedbt用户身份登录
-
可以直接切换到gbasedbt用户,也可以:
[root@PRIMARY ~]# su gbasedbt
[gbasedbt@PRIMARY root]$ source /home/gbasedbt/.bash_profile
如果想在切换用户之后使用新用户的工作环境,也可以在su和用户名之间加-:
[root@PRIMARY ~]# su - gbasedbt
- 在PRIMARY:192.168.5.100节点执行,并确认不报错
[gbasedbt@PRIMARY ~]$ oninit -ivwy
其中的-i选项表示初始化磁盘空间并使数据库服务器进入联机方式,-w选项表示在返回至shell提示符并返回代码0之前迫使服务器等待直到成功初始化为止。
- 在PRIMARY:192.168.5.100节点执行,并确认不报错
[gbasedbt@PRIMARY ~]$ onmode -d primary gbaseserver_hac
其中gbaseserver_hac是辅节点实例名
- HAC:192.168.5.110节点确保可正常启动数据库服务但是不需要启动数据库服务。然后在主节点进行0级全备,并使用管道恢复到辅节点。备份及恢复结束后HAC:192.168.5.110节点执行:onstat -,状态应为Fast Recovery
[gbasedbt@PRIMARY ~]$ ontape -s -L 0 -t STDIO | ssh 192.168.5.110 "source /home/gbasedbt/profile.gbaseserver_hac && ontape -p -t STDIO "
- HAC:192.168.5.110节点执行,并确认不报错
[gbasedbt@HAC ~]$ onmode -d secondary gbaseserver
在PRIMARY:192.168.5.100节点执行onstat -g dri,可以看到On-Line(Prim)状态。
[gbasedbt@PRIMARY ~]$ onstat -g dri
Your evaluation license will expire on 2021-05-21 00:00:00
GBase Database Server Version 12.10.FC4G1TL -- On-Line (Prim) -- Up 00:08:23 -- 207104 Kbytes
Data Replication at 0x45e11028:
Type State Paired server Last DR CKPT (id/pg) Supports Proxy Writes
primary on gbaseserver_hac 2 / 5 NA
DRINTERVAL 0
DRTIMEOUT 30
DRAUTO 3
DRLOSTFOUND /opt/GBASE/gbase/etc/dr.lostfound
DRIDXAUTO 0
ENCRYPT_HDR 0
Backlog 0
Last Send 2020/05/25 15:35:14
Last Receive 2020/05/25 15:35:14
Last Ping 2020/05/25 15:34:47
Last log page applied(log id,page): 2,6
在HAC:192.168.5.110节点执行onstat -g dri 可以看到Read-Only(Sec)状态 。
[gbasedbt@HAC ~]$ onstat -g dri
Your evaluation license will expire on 2021-05-25 00:00:00
GBase Database Server Version 12.10.FC4G1TL -- Read-Only (Sec) -- Up 00:08:53 -- 198912 Kbytes
Data Replication at 0x45e0c028:
Type State Paired server Last DR CKPT (id/pg) Supports Proxy Writes
HDR Secondary on gbaseserver 2 / 5 N
DRINTERVAL 0
DRTIMEOUT 30
DRAUTO 3
DRLOSTFOUND /opt/GBASE/gbase/etc/dr.lostfound
DRIDXAUTO 0
ENCRYPT_HDR 0
Backlog 0
Last Send 2020/05/25 15:37:37
Last Receive 2020/05/25 15:37:37
Last Ping 2020/05/25 15:37:17
Last log page applied(log id,page): 0,0
至此同城灾备集群安装成功。
异地灾备集群支持多个辅节点,重复上述步骤准备HAC1:192.168.5.111节点和HAC2:192.168.5.112节点,这2个辅节点与主节点设置上有如下不同:
- 实例名
HAC1:192.168.5.111节点实例名建议为gbaseserver_hac1,HAC2:192.168.5.112节点实例名建议为gbaseserver_hac2。
HAC1辅节点请依次修改下面几个文件中的实例名,例如:
/home/gbasedbt/profile.gbaseserver_hac:
export GBASEDBTSERVER=gbaseserver_hac1
export GBASEDBTSQLHOSTS=/opt/GBASE/gbase/etc/sqlhosts.gbaseserver_hac
export ONCONFIG=onconfig.gbaseserver_hac
/opt/GBASE/gbase/etc/onconfig.gbaseserver_hac:
SERVERNUM 11
DBSERVERNAME gbaseserver_hac1
LOG_INDEX_BUILDS 1
HAC2辅节点请依次修改下面几个文件中的实例名,例如:
/home/gbasedbt/profile.gbaseserver_hac:
export GBASEDBTSERVER=gbaseserver_hac2
export GBASEDBTSQLHOSTS=/opt/GBASE/gbase/etc/sqlhosts.gbaseserver_hac
export ONCONFIG=onconfig.gbaseserver_hac
/opt/GBASE/gbase/etc/onconfig.gbaseserver_hac:
SERVERNUM 12
DBSERVERNAME gbaseserver_hac2
LOG_INDEX_BUILDS 1
- SERVERNUM
PRIMARY节点的SERVERNUM配置的是1,HAC节点的SERVERNUM配置的是10。
建议HAC1节点的SERVERNUM配置为11,建议HAC2节点的SERVERNUM配置为12。
原则:保证唯一。
- LOG_INDEX_BUILDS
PRIMARY节点和HAC1、HAC2节点此参数均需要配置为1。
-
-
- 以root用户身份关闭各个节点防火墙
-
RHEL6.5:
[root@PRIMARY ~]# service iptables stop
CentOS7:
[root@primary ~]# systemctl stop firewalld
-
-
- 可根据需要以root用户身份关闭SELinux
-
立刻关闭:
[root@PRIMARY ~]# /usr/sbin/setenforce 0
永久更改:
[root@PRIMARY ~]# vim /etc/selinux/config
#SELINUX=enforcing
#SELINUXTYPE=targeted
SELINUX=disabled
-
-
- 以gbasedbt用户身份登录
-
可以直接切换到gbasedbt用户,也可以:
[root@PRIMARY ~]# su gbasedbt
[gbasedbt@PRIMARY root]$ source /home/gbasedbt/.bash_profile
如果想在切换用户之后使用新用户的工作环境,也可以在su和用户名之间加-:
[root@PRIMARY ~]# su - gbasedbt
- 如果是初次使用,在PRIMARY:192.168.5.100节点执行,并确认不报错:
[gbasedbt@PRIMARY ~]$ oninit -ivwy
其中的-i选项表示初始化磁盘空间并使数据库服务器进入联机方式,-w选项表示在返回至shell提示符并返回代码0之前迫使服务器等待直到成功初始化为止。
- 如果同城灾备集群部分已初始化实例,则在PRIMARY:192.168.5.100节点执行,并确认不报错:
[gbasedbt@PRIMARY ~]$ oninit -vwy
- 启动数据库服务后使用onmode命令把HAC1节点加入到主服务器,即在PRIMARY:192.168.5.100节点执行,并确认不报错:
[gbasedbt@PRIMARY ~]$ onmode -d add RSS gbaseserver_hac1
- HAC1:192.168.5.111节点确保可正常启动数据库服务但是不需要启动数据库服务。然后在主节点进行0级全备,并使用管道恢复到HAC1点:
[gbasedbt@PRIMARY ~]$ ontape -s -L 0 -t STDIO | ssh 192.168.5.111 "source /home/gbasedbt/profile.gbaseserver_hac && ontape -p -t STDIO "
- 备份及恢复结束后HAC1:192.168.111节点执行:onstat -,状态应为Fast Recovery
- HAC1:192.168.5.111节点执行onmode -d RSS gbaseserver,状态变为Read-Only(RSS)
- 可重复步骤3至6,操作HAC2辅节点。
在PRIMARY:192.168.5.100节点执行onstat -g rss verbose,可以看到On-Line(Prim)状态。
[gbasedbt@PRIMARY etc]$ onstat -g rss verbose
Your evaluation license will expire on 2021-05-21 00:00:00
GBase Database Server Version 12.10.FC4G1TL -- On-Line (Prim) -- Up 16:10:57 -- 207104 Kbytes
Local server type: Primary
Index page logging status: Enabled
Index page logging was enabled at: 2020/05/25 17:48:47
Number of RSS servers: 1
RSS Server information:
RSS Server control block: 0x4e323170
RSS server name: gbaseserver_hac1
RSS server status: Active
RSS connection status: Connected
RSS flow control:384/352
Log transmission status: Active
Next log page to send(log id,page): 2,4006
Last log page acked(log id,page): 2,4005
Last log page applied(log id,page): 2,4005
Time of Last Acknowledgement: 2020-05-26.10:14:36
Pending Log Pages to be ACKed: 0
Approximate Log Page Backlog:0
Sequence number of next buffer to send: 163
Sequence number of last buffer acked: 162
Supports Proxy Writes: N
在HAC1:192.168.5.111节点和HAC2:192.168.5.112节点执行onstat -g rss verbose,可以看到Read-Only(RSS)状态 。
[gbasedbt@HAC1 ~]$ onstat -g rss verbose
Your evaluation license will expire on 2021-05-25 00:00:00
GBase Database Server Version 12.10.FC4G1TL -- Read-Only (RSS) -- Up 00:55:03 -- 207104 Kbytes
RSS Server control block: 0x45e3ca70
Local server type: RSS
Server Status : Active
Source server name: gbaseserver
Connection status: Connected
Last log page received(log id,page): 2,4005
Sequence number of last buffer received: 162
Sequence number of last buffer acked: 162
Delay Apply: Not configured.
Stop Apply: Not configured.
Delay or Stop Apply not active.
至此异地灾备集群安装成功。
-
- 验证HAC
HAC集群安装成功后,客户端可以通过JDBC访问服务端。例如使用GBaseDataStudio连接到PRIMARY:192.168.5.100节点、HAC:192.168.5.110节点、HAC1:192.168.5.111节点、HAC2:192.168.5.112节点。对PRIMARY节点执行insert、update、delete操作,主节点对数据的修改可以同步到HAC节点、HAC1节点、HAC2节点。默认情况下HAC节点、HAC1节点、HAC2节点不支持写操作,如需支持,可通过onconfig文件的UPDATABLE_SECONDARY参数进行配置。
连接管理器是一种守护程序实用程序,它可以在高可用性集群中监视所有节点的工作负载和状态。此实用程序可将客户机应用程序连接请求引导到集群中的相应服务器,并可在主节点发生故障时自动执行服务器故障转移。
本次增加2个连接管理器节点
- CM1:192.168.5.201
- CM2:192.168.5.202
参考HAC中介绍部分。
在Linux服务器之间建立信任关系,是很多线上服务系统的基础性工作,这样能便于程序在多台服务器之间自动传输数据。服务器级节点信任请参考HAC中介绍部分配置。
请安装光盘中的clientsdk,详细步骤请参考《GBase 8s 客户机产品安装指南》,这里只介绍安装后的配置,并对高可用相关细节进行说明。
-
-
- 配置profile.cm1环境变量文件
-
[root@CM1 ~]# cd /home/gbasedbt/
[root@CM1 gbasedbt]# su gbasedbt
[gbasedbt@CM1 ~]$ vim profile.cm1
内容如下:
export GBASEDBTDIR=/opt/GBASE/gbase
export GBASEDBTSQLHOSTS=/opt/GBASE/gbase/etc/sqlhosts.cm1
export PATH=/opt/GBASE/gbase/bin:$PATH
export DB_LOCALE=zh_CN.GB18030-2000
export CLIENT_LOCALE=zh_CN.GB18030-2000
export GL_USEGLU=1
为了gbasedbt用户在登录后自动应用这些环境变量,可以修改.bash_profile文件,在文件后添加如下内容:
source /home/gbasedbt/profile.cm1
-
-
- 配置sqlhosts.cm1文件
-
[root@CM1 ~]# cd /opt/GBASE/gbase/etc/
[root@CM1 etc]# su gbasedbt
[gbasedbt@CM1 etc]$ vim sqlhosts.cm1
内容如下:
db_group group - - i=1
gbaseserver onsoctcp 192.168.5.100 9088 g=db_group
gbaseserver_hac onsoctcp 192.168.5.110 9088 g=db_group
gbaseserver_hac1 onsoctcp 192.168.5.111 9088 g=db_group
gbaseserver_hac2 onsoctcp 192.168.5.112 9088 g=db_group
cm_update group - - i=3,c=0
wcm1 onsoctcp 192.168.5.201 9089 g=cm_update
wcm2 onsoctcp 192.168.5.202 9089 g=cm_update
cm_read group - - i=4,c=0
rcm1 onsoctcp 192.168.5.201 9090 g=cm_read
rcm2 onsoctcp 192.168.5.202 9090 g=cm_read
-
-
- 配置cm1.cfg参数文件
-
[root@CM1 ~]# cd /opt/GBASE/gbase/etc/
[root@CM1 etc]# su gbasedbt
[gbasedbt@CM1 etc]$ vim cm1.cfg
内容如下:
NAME CM1
LOGFILE ${GBASEDBTDIR}/tmp/cm1.log
CM_TIMEOUT 40
SECONDARY_EVENT_TIMEOUT 30
SQLHOSTS LOCAL
EVENT_TIMEOUT 60
LOG 1
DEBUG 0
CLUSTER CLUSTER1
{
GBASEDBTSERVER db_group
SLA wcm1 DBSERVERS=PRI WORKERS=16
SLA rcm1 DBSERVERS=HDR,RSS WORKERS=16
FOC ORDER=ENABLED TIMEOUT=15 RETRY=3 PRIORITY=1
}
通过上述步骤完成了CM1:192.168.5.201节点的准备工作,本次我们的集群由2个节点组成,因此重复上述步骤再准备CM2:192.168.5.202节点,这个节点与第1个节点设置上有如下不同:
-
-
- 配置profile.cm2环境变量文件
-
[root@CM2 ~]# cd /home/gbasedbt/
[root@CM2 gbasedbt]# su gbasedbt
[gbasedbt@CM2 ~]$ vim profile.cm2
内容如下:
export GBASEDBTDIR=/opt/GBASE/gbase
export GBASEDBTSQLHOSTS=/opt/GBASE/gbase/etc/sqlhosts.cm2
export PATH=/opt/GBASE/gbase/bin:$PATH
export DB_LOCALE=zh_CN.GB18030-2000
export CLIENT_LOCALE=zh_CN.GB18030-2000
export GL_USEGLU=1
为了gbasedbt用户在登录后自动应用这些环境变量,可以修改.bash_profile文件,在文件后添加如下内容:
source /home/gbasedbt/profile.cm2
-
-
- 配置sqlhosts.cm2文件
-
内容可同sqlhosts.cm1
-
-
- 配置cm2.cfg参数文件
-
[root@CM2 ~]# cd /opt/GBASE/gbase/etc/
[root@CM2 etc]# su gbasedbt
[gbasedbt@CM2 etc]$ vim cm2.cfg
内容如下:
NAME CM2
LOGFILE ${GBASEDBTDIR}/tmp/cm2.log
CM_TIMEOUT 40
SECONDARY_EVENT_TIMEOUT 30
SQLHOSTS LOCAL
EVENT_TIMEOUT 60
LOG 1
DEBUG 0
CLUSTER CLUSTER2
{
GBASEDBTSERVER db_group
SLA wcm2 DBSERVERS=PRI WORKERS=16
SLA rcm2 DBSERVERS=HDR,RSS WORKERS=16
FOC ORDER=ENABLED TIMEOUT=15 RETRY=3 PRIORITY=2
}
多CM节点时PRIORITY依次配置为1、2、3等,数字越大优先级越低。
-
- 启动CM
[gbasedbt@CM1 ~]$ oncmsm -c /opt/GBASE/gbase/etc/cm1.cfg
参看日志文件,可看到详细启动信息。
如果PRIMARY:192.168.5.100节点宕机后,可以看到CM会将PRI切换到HAC:192.168.5.110节点和HAC1:192.168.5.111节点和HAC2:192.168.5.112节点。应用对CM的访问不受影响。