暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用 8c主备式部署VIP+高可用验证

原创 GBASE数据库 2025-11-03
46

一、环境准备

1.环境信息

iphostname角色
10.x.x.31gbase8c_7_31主节点
10.x.x.35gbase8c_7_35备节点
10.x.x.34 VIP

安装包:GBase8cV5_S5.0.0B28_centos7.8_x86_64.tar.gz

2.编辑/etc/hosts

##主备皆执行
cat >>/etc/hosts<<EOF
10.x.x.31   gbase8c_7_31
10.x.x.35   gbase8c_7_35
EOF

3.关闭防火墙

##主备皆执行
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service

4.关闭SELINUX

##主备皆执行
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce

5.安装依赖

##主备皆执行
yum install -y expect bzip2

6.创建gbase用户并给sudo权限

##主备皆执行
groupadd gbase
useradd -m -d /home/gbase gbase -g gbase
echo "gbase@123"|passwd gbase --stdin
sed -i.bak '/^root\s\+ALL=(ALL)\s\+ALL$/a gbase   ALL=(ALL)       NOPASSWD:ALL' /etc/sudoers

7.设置免密,root和gbase用户都要互信

##主备皆执行
ssh-keygen -t rsa
ssh-copy-id 10.x.x.31
ssh-copy-id 10.x.x.35

二、开始安装

1.创建安装目录

##主备皆执行,将安装包放入主节点 /data/install_package/ 目录下
mkdir -p /data/install_package
chmod 755 -R /data/
chown  gbase.gbase -R /data/

2.切换到gbase用户下进行解压

##主节点执行
su - gbase
cd /data/install_package/
tar -xf GBase8cV5_S5.0.0B28_centos7.8_x86_64.tar.gz
tar -xf GBase8cV5_S5.0.0B28_CentOS_x86_64_om.tar.gz

3.编辑配置文件,vi xxxx_gbase.xml

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
	<CLUSTER>
		<PARAM name="clusterName" value="gbase" />
		<PARAM name="nodeNames" value="gbase8c_7_31,gbase8c_7_35" />
		<PARAM name="gaussdbAppPath" value="/data/gbasedb/database/app" />
		<PARAM name="gaussdbLogPath" value="/data/gbasedb/database/log" />
		<PARAM name="tmpMppdbPath" value="/data/gbasedb/database/tmp"/>
		<PARAM name="gaussdbToolPath" value="/data/gbasedb/database/om" />
		<PARAM name="corePath" value="/data/gbasedb/database/corefile"/>
		<PARAM name="backIp1s" value="10.x.x.31,10.x.x.35"/>
	</CLUSTER>
	<DEVICELIST>
		<!-- node1 -->
		<DEVICE sn="gbase8c_7_31">
			<PARAM name="name" value="gbase8c_7_31"/>
			<PARAM name="azName" value="AZ1"/>
			<PARAM name="azPriority" value="1"/>
			<PARAM name="backIp1" value="10.x.x.31"/>
			<PARAM name="sshIp1" value="10.x.x.31"/>
			<PARAM name="dataNum" value="1"/>
			<PARAM name="dataPortBase" value="15400"/>
			<PARAM name="dataNode1" value="/data/gbasedb/database/data/dn,gbase8c_7_35,/data/gbasedb/database/data/dn"/>
			<PARAM name="dataNode1_syncNum" value="0"/>
			<!-- CM -->
			<PARAM name="cmsNum" value="1"/> 
			<PARAM name="cmDir" value="/data/gbasedb/database/cm"/> 
			<PARAM name="cmServerPortBase" value="15300"/> 
			<PARAM name="cmServerListenIp1" value="10.x.x.31,10.x.x.35"/> 
			<PARAM name="cmServerHaIp1" value="10.x.x.31,10.x.x.35"/> 
			<PARAM name="cmServerlevel" value="1"/> 
			<PARAM name="cmServerRelation" value="gbase8c_7_31,gbase8c_7_35"/>      
			<!-- CM -->
		</DEVICE>
		<!-- node2 -->
		<DEVICE sn="gbase8c_7_35">
			<PARAM name="name" value="gbase8c_7_35"/>
			<PARAM name="azName" value="AZ1"/>
			<PARAM name="azPriority" value="1"/>
			<PARAM name="backIp1" value="10.x.x.35"/>
			<PARAM name="sshIp1" value="10.x.x.35"/>
			<!-- CM -->
			<PARAM name="cmDir" value="/data/gbasedb/database/cm"/> 
			<PARAM name="cmServerPortStandby" value="15300"/> 
			<!-- CM -->
		</DEVICE>
	</DEVICELIST>
</ROOT>

4.切换到root用户下执行预安装

##主节点执行
su - root
cd /data/install_package
./script/gs_preinstall -U gbase -G gbase -X /data/install_package/xxxx_gbase.xml

5.将安装目录权限授权给gbase用户

##主备皆执行
chown -R gbase.gbase /data/

6.切换到gbase用户下执行正式安装

##主节点执行
su – gbase
cd /data/install_package
./script/gs_install -X /data/install_package/xxxx_gbase.xml

7.查看集群状态

##执行 gs_om -t status --detail 显示如下
$ gs_om -t status --detail
[  CMServer State   ]
node              node_ip         instance                                 state
----------------------------------------------------------------------------------
1  gbase8c_7_31 10.x.x.31    1    /data/gbasedb/database/cm/cm_server Primary
2  gbase8c_7_35 10.x.x.35    2    /data/gbasedb/database/cm/cm_server Standby
[   Cluster State   ]
cluster_state   : Normal
redistributing  : No
balanced        : Yes
current_az      : AZ_ALL
[  Datanode State   ]
node              node_ip         instance                                   state
----------------------------------------------------------------------------------------------
1  gbase8c_7_31 10.x.x.31    6001 15400  /data/gbasedb/database/data/dn P Primary Normal
2  gbase8c_7_35 10.x.x.35    6002 15400  /data/gbasedb/database/data/dn S Standby Normal

到此数据库已安装完成

三、配置虚拟IP

1.设置虚拟IP为 10.x.x.34

##主备皆执行
su - gbase
cm_ctl res --add --res_name="CM_VIP" --res_attr="resources_type=VIP,float_ip=10.x.x.34"

2.编辑定义的VIP资源

##主备皆执行
su - gbase
cm_ctl res --edit --res_name="CM_VIP" --add_inst="res_instance_id=6001,node_id=1" --inst_attr="base_ip=10.x.x.31"
cm_ctl res --edit --res_name="CM_VIP" --add_inst="res_instance_id=6002,node_id=2" --inst_attr="base_ip=10.x.x.35"

3.设置CM参数,这里的网关是10.x.x.1(根据实际情况修改)

##主备皆执行
su - gbase
cm_ctl set --param --server -k "cms_enable_failover_on2nodes=1"
cm_ctl set --param --server -k "cms_network_isolation_timeout=10"
cm_ctl set --param --server -k "cms_enable_db_crash_recovery=1"
cm_ctl set --param --server -k "third_party_gateway_ip=10.x.x.1"

4.重启数据库

su - gbase
gs_om -t stop
gs_om -t start
gs_om -t status --detail

5.查看vip

##执行 cm_ctl show 能正常显示VIP
[  FloatIp Network State  ]
node              instance base_ip       float_ip_name float_ip
---------------------------------------------------------------------
1  gbase8c_7_31 6001     10.x.x.31 CM_VIP        10.x.x.34

##主节点执行 ip a 能看到VIP
inet 10.x.x.31/21 brd 10.x.x.255 scope global noprefixroute ens192
   valid lft forever preferred lft forever
inet 10.x.x.34/21 brd 10.x.x.255 scope global secondary ens192:15400

四、高可用验证

1.手动主备切换

## 1.主节点执行 cm_ctl switchover -n 2 -D /data/gbasedb/database/data/dn 进行切换
$ cm_ctl switchover -n 2 -D /data/gbasedb/database/data/dn
......
cm_ctl: switchover successfully.

## 2.执行 gs_om -t status --detail 查看集群状态,能正常切换,可以看到10.x.x.35已成为主节点
$ gs_om -t status --detail
[  CMServer State   ]
node              node_ip         instance                                 state
----------------------------------------------------------------------------------
1  gbase8c_7_31 10.x.x.31    1    /data/gbasedb/database/cm/cm_server Primary
2  gbase8c_7_35 10.x.x.35    2    /data/gbasedb/database/cm/cm_server Standby
[   Cluster State   ]
cluster_state   : Normal
redistributing  : No
balanced        : No
current_az      : AZ_ALL
[  Datanode State   ]
node              node_ip         instance                                   state
----------------------------------------------------------------------------------------------
1  gbase8c_7_31 10.x.x.31    6001 15400  /data/gbasedb/database/data/dn P Standby Normal
2  gbase8c_7_35 10.x.x.35    6002 15400  /data/gbasedb/database/data/dn S Primary Normal

##3.在10.x.x.35上执行 ip a 可以看到vip已漂过来
inet 10.x.x.35/21 brd 10.x.x.255 scope global noprefixroute ens192
   valid lft forever preferred lft forever
inet 10.x.x.34/21 brd 10.x.x.255 scope global secondary ens192:15400

## 4.执行 cm_ctl switchover -n 1 -D /data/gbasedb/database/data/dn 进行回切
$ cm_ctl switchover -n 1 -D /data/gbasedb/database/data/dn
....
cm_ctl: switchover successfully.

2.主机重启自动切换

##1.主节点执行 reboot 重启服务器

##2.备节点执行 gs_om -t status --detail 查看集群状态,能正常切换,可以看到10.x.x.35已成为主节点
$ gs_om -t status --detail
[  CMServer State   ]
node                              node_ip         instance                                 state
--------------------------------------------------------------------------------------------------
1  gbase8c_7_31 10.x.x.31    1    /data/gbasedb/database/cm/cm_server Primary
2  gbase8c_7_35 10.x.x.35    2    /data/gbasedb/database/cm/cm_server Standby
[   Cluster State   ]
cluster_state   : Normal
redistributing  : No
balanced        : No
current_az      : AZ_ALL
[  Datanode State   ]
node                              node_ip         instance                                   state            
--------------------------------------------------------------------------------------------------------------
1  gbase8c_7_31 10.x.x.31    6001 15400  /data/gbasedb/database/data/dn P Standby Normal
2  gbase8c_7_35 10.x.x.35    6002 15400  /data/gbasedb/database/data/dn S Primary Normal

##3.在10.x.x.35上执行 ip a 可以看到vip已漂过来
inet 10.x.x.35/21 brd 10.x.x.255 scope global noprefixroute ens192
   valid lft forever preferred lft forever
inet 10.x.x.34/21 brd 10.x.x.255 scope global secondary ens192:15400

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论