约束条件
集群升级前,请检查以下的约束条件,避免集群升级失败:
- 升级前必须保证现有集群已经完全关闭
- 升级前集群状态正常、节点流复制关系正常
- 升级操作必须在集群主节点进行
- 集群中所有节点间ssh免密,包括root用户、集群所属用户(一般为kingbase)
- 所有待升级的集群bin路径一致
- 所有待升级的节点没有运行sys_securecmdd和corosync服务
- license.dat文件位置与kingbase目录同级
安装前准备
现运行普通集群信息收集
参数说明 | 参数值 |
主节点IP | 192.168.40.107 |
备节点IP | 192.168.40.160 |
备节点IP | 192.168.40.161 |
软件包路径(soft_dir) | /home/kingbase/software |
集群安装路径(install_dir) | /home/kingbase/cluster/install |
二进制文件路径 | /home/kingbase/cluster/install/kingbase/bin |
数据目录 | /home/kingbase/cluster/install/kingbase/data |
端口 | 25432 |
数据库版本 | V008R030C011PSI008 |
数据库超级用户 | system(提前向客户获取密码) |
操作系统超级用户 | root |
操作系统集群用户 | kingbase |
VIP | 192.168.40.180 |
同城双中心架构规划
软件包路径(soft_dir) | /home/kingbase/software |
同城双中心安装目录 | /home/kingbase/cluster |
读写分离安装目录 | /home/kingbase/cluster/install |
scmd安装目录 | /home/kingbase/cluster/install/kingbase/bin |
数据目录 | /home/kingbase/cluster/install/kingbase/data |
系统超级用户 | root |
集群安装用户 | kingbase |
生产中心节点 | 主节点:192.168.40.107 备节点:192.168.40.160、192.168.40.161 VIP: 192.168.40.180 |
灾备中心节点 (新下发服务器) | 伪主节点:172.168.15.110、备节点:172.168.15.200、172.168.15.201 VIP: 172.168.15.180(按客户需求,若不要求可以不配置) |
同城双中心软件包版本 | V008R030C011PSI011 |
注意:每个中心服务器数量必须>=3,如果中心内只存在2个节点,挂掉一个,另一个节点也会挂掉,如果客户不能提供足够数量的服务器,将风险提前和客户说明。
当前普通集群升级前操作
查看集群状态
检查集群状态,保证升级前集群状态正常;任意一运行正常的节点操作;
repmgr cluster show all |

重点检查:
Role、Status、Upstream、Sync、LSN_Lag。Status 为 running 表示正常;failed、? unreachable、running as primary/standby 等均需先处理。
查看集群组件状态
repmgr service status |

重点检查:repmgrd 是否 running,Paused 是否 no。若 Paused 为 yes,可按实际情况使用 repmgr service unpause 恢复。
KFS链路是否存在
如果KES是KFS链路的源端,存在逻辑复制槽的情况下源端数据库停不掉,需要先停止KFS链路再启停节点。验证后发现不停止KFS服务停库也不影响。
select * from sys_replication_slots;同步是否有延迟
确认备节点复制延迟为0,延迟应小于1MB。
如果有延迟先解决延迟
select usesysid, usename, sys_wal_lsn_diff(sys_current_wal_flush_lsn(), replay_lsn) as lsn_lag from sys_stat_replication;所有节点执行检查点
可以提前写到一个脚本里,提高操作效率。
ksql "host=192.168.40.107 user=system dbname=test port=25432 password=kingbase" -c "checkpoint;";
ksql "host=192.168.40.160 user=system dbname=test port=25432 password=kingbase" -c "checkpoint;";
ksql "host=192.168.40.161 user=system dbname=test port=25432 password=kingbase" -c "checkpoint;";停止集群
任意一运行正常的节点操作;
sys_monitor.sh stop检查是否配置ssh互信
如果没配置,需要手动配置
检查是否启用sys_securecmdd服务
若启用sys_securecmdd服务,需关闭sys_securecmdd(所有节点切换到root用户下操作)
--切换root用
su - root
--定位sys_securecmdd服务运行目录
ps -ef | grep securecmd
--停止并卸载sys_securecmdd服务
/home/kingbase/cluster/install/kingbase/bin/sys_HAscmdd.sh stop
/home/kingbase/cluster/install/kingbase/bin/sys_HAscmdd.sh uninstall检查授权文件位置
license.dat文件位置与kingbase目录同级;若不同级,提前拷贝至kingbase目录的同级目录下;
必须操作,不然升级升级为生产中心过程中会报错中止升级操作。
上传升级集群软件包和升级脚本至主节点
双中心版本是独立的,和普通集群版本不通用,可联系商务获取,本文使用的双中心版本是:kingbase-server-V008R030C011PSI011-linux-x86_64.tar,升级脚本:cluster_upgrade.sh
cd /home/kingbase/software
chown kingbase:kingbase cluster_upgrade.sh
chown kingbase:kingbase kingbase-server-V008R030C011PSI011-linux-x86_64.tar
chmod 755 cluster_upgrade.sh灾备中心节点环境配置
配置防火墙
需要开通25432、10024、8890、5407、5403、22,如果修改对应端口,则需要根据实际情况进行调整。
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld 禁用selinux
cp /etc/selinux/config /etc/selinux/config.bak`date +%Y%m%d`
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
cat /etc/selinux/config |grep SELINUX关闭RemoveIPC参数
要求关闭,操作系统没有 /etc/systemd/logind.conf 文件则不需修改。如果RemoveIPC参数被注释,则取消注释并设置成no(防止默认为yes)。
创建安装用户
在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录。
因此,建议在正式安装前,新建kingbase用户作为KingbaseES专用的系统用户,运行如下命令创建kingbase用户:
--检查kingbase用户是否存在,存在则执行下条命令删除,该操作要慎重
cat /etc/passwd | grep kingbase
userdel -rf kingbase
--创建同名用户组和用户kingbase
groupadd -g 1010 kingbase
useradd -m -d /home/kingbase -g kingbase -u 1010 kingbase
--设置用户kingbase密码
echo 'kingbase' | passwd --stdin kingbase 注意
该命令会同时创建同名用户组kingbase以及用户根目录/home/kingbase。
目录规划
su - kingbase
mkdir -p /home/kingbase/cluster/install/ # 创建软件包安装路径
mkdir -p /home/kingbase/software # 创建软件包上传路径不要提前创建kingbase子目录,不然会提示目录已存在的报错

环境变量
su - kingbase
cp /home/kingbase/.bashrc /home/kingbase/.bashrc_bak_`date +%F`
cat << EOF >> /home/kingbase/.bashrc
export PATH=$PATH:/home/kingbase/cluster/install/kingbase/bin
export KINGBASE_HOME=/home/kingbase/cluster/install/kingbase
export LD_LIBRARY_PATH=$KINGBASE_HOME/lib:$PATH
export KINGBASE_DATA=/home/kingbase/cluster/install/data
export KINGBASE_USER=system
export KINGBASE_PORT=25432
export KINGBASE_DATABASE=test
EOF
source /home/kingbase/.bashrc上传升级集群软件包和升级脚本至主节点
双中心版本是独立的,和普通集群版本不通用,可联系商务获取,本文使用的双中心版本是:kingbase-server-V008R030C011PSI011-linux-x86_64.tar,升级脚本:cluster_upgrade.sh
cd /home/kingbase/software
chown kingbase:kingbase cluster_upgrade.sh
chown kingbase:kingbase kingbase-server-V008R030C011PSI011-linux-x86_64.tar
chmod 755 cluster_upgrade.sh检查网络
确保生产中心、灾备中心所有节点之间网络互通,网关地址互通。
检查是否配置ssh互信
ssh root@ip
ssh kingbase@ip 无需输入密码即已配置ssh互信。如果未配置,按以下步骤手动配置;
生产中心的主节点上操作;
更改install.conf配置文件中参数
配置文件install.conf文件中的[参数/参数值]与下面列举的[参数/参数值]值保持一致。
cd /home/kingbase/cluster/install/kingbase/bin
vi install.conf
all_ip=(192.168.40.107 192.168.40.160 192.168.40.161 172.168.15.110 172.168.15.200 172.168.15.201)
install_with_root=1
deploy_by_sshd=1 ssh互信配置
使用root用户登录现有集群主节点执行
cd /home/kingbase/cluster/install/kingbase/bin
sh trust_cluster.shssh互信验证
ssh root@ip
ssh kingbase@ip 无需输入密码即ssh互信配置成功。
普通集群升级为生产中心步骤
修改升级脚本中参数
su - kingbase
cd /home/kingbase/software/
vi cluster_upgrade.sh
# 参数配置如下:
production_ips=(192.168.40.107 192.168.40.160 192.168.40.161) # 生产中心节点,第一个IP必须是主库
disaster_ips=() # 灾备中心节点
upgrade_mode="2" # 2表示将production_ips中的节点升级为生产中心
# 升级软件包路径
ZIP_FILE="/home/kingbase/software/kingbase-server-V008R030C011PSI011-linux-x86_64.tar"
KINGBASE_BIN="/home/kingbase/cluster/install/kingbase/bin" # 原集群的bin路径
enable_scmd="on" # 是否在升级后的集群中使用sys_securecmdd服务执行升级脚本
提前获取system用户密码,执行脚本过程中要求输入system用户密码
su - kingbase
cd /home/kingbase/software/
sh cluster_upgrade.sh
查看集群状态
集群升级结束后,在生产中心的任意节点执行以下命令查看集群状态是否正常,
repmgr cluster show
repmgr service status说明:集群状态满足以下条件表明集群状态和服务正常
- 集群节点状态status列显示为running
- 生产中心Cluster_name列为production
- 集群服务状态repmgrd列为 running
- Pause列显示为no


检查DCS服务
集群升级结束后,检查DCS服务,在生产中心的任意节点执行以下命令,查看DCS服务状态是否正常.
su - kingbase
cd /home/kingbase/cluster/install/kingbase/
./corosync/sbin/corosync-quorumtool说明:状态满足以下条件表明DCS服务正常
- 集群节点状态Quorate显示为Yes;
- Membership information显示当前中心包含仲裁节点的所有节点信息则表明仲裁服务正常

灾备中心部署
部署同城灾备中心前,需要确保生产中心集群已部署完成。
部署公共sys_securecmdd服务(可选)
如果待部署灾备中心集群的服务器上无法使用ssh,则需要在部署集群前在待部署集群的服务器上部署sys_securecmdd服务。如果ssh可用,则可以跳过该小节的部署操作。
本文ssh互信已配置,但是为了扩展ssh不能使用的场景,所以灾备部署部分使用securecmd服务。
灾备中心每个节点都操作
--解压介质
su - kingbase
cd /home/kingbase/software
mkdir -p clientinstall
tar -xvf kingbase-server-V008R030C011PSI011-linux-x86_64.tar -C ./clientinstall
--初始化并启动
su - root
cd /home/kingbase/software/clientinstall/bin
./sys_HAscmdd.sh init
./sys_HAscmdd.sh start
--验证
sys_securecmd kingbase@ip
能免密登录即正常配置kesm_second_cluster.conf文件
登录执行生产中心集群部署操作的节点,设置灾备中心部署配置文件。也可以在灾备中心节点上操作。
kesm_second_cluster.conf文件位置:在share目录中。
注意:
- 根据现场是否能用ssh灵活更改参数:deploy_by_sshd=0 #0是使用securecmd,1是使用ssh(默认1)
- VIP每个中心单独配置。备中心可以不配置vip,或者配置和主中心不一样的VIP。如果要配置vip的话,如果网卡上其他IP的掩码不是24,VIP的掩码最好手动配置一下,和其他IP的掩码一样。例如:vip="192.168.40.180/20",不配置掩码,集群会默认使用24作为掩码。
su - kingbase
cd /home/kingbase/software/clientinstall/share
vi kesm_second_cluster.conf
## deploy second cluster, will select one ip as subprimary node from node_ips
## other nodes will running as standby
## suprimary will create replication relation with upstream_ip which deployed as primary in first cluster
deploy_by_sshd=0 #0是使用securecmd,1是使用ssh(默认1)
upstream_ip="192.168.40.107"
zip_package="/home/kingbase/software/kingbase-server-V008R030C011PSI011-linux-x86_64.tar"
install_dir="/home/kingbase/cluster/install"
node_ips=(172.168.15.110 172.168.15.200 172.168.15.201)
cluster_name="local_disaster"
#az_name=()
center_sync_mode="async"
#center_priority=100
license_file=(license.dat)
#ssh_port="22"
#scmd_port="8890"
#dcs_port=5407
#repmgr_msg_port=10024
#vip=""
#vip_net_device=()
#vip_net_device_ip=()准备license文件
将授权文件license.dat上传到/home/kingbase/software/clientinstall/bin目录下.
授权必须存在,不然灾备中心部署过程中会报错中止。
部署集群
cd /home/kingbase/software/clientinstall/bin
./kesm cluster create -f ../share/kesm_second_cluster.conf
查看集群状态
集群升级结束后,在灾备中心的任意节点执行以下命令查看集群状态是否正常,
repmgr cluster show
repmgr service status说明:集群状态满足以下条件表明集群状态和服务正常
- 集群节点状态status列显示为running
- 生产中心Cluster_name列为local_disaster
- 集群服务状态repmgrd列为 running
- Pause列显示为no

检查DCS服务
集群升级结束后,检查DCS服务,在生产中心的任意节点执行以下命令,查看DCS服务状态是否正常.
su - kingbase
cd /home/kingbase/cluster/install/kingbase/
./corosync/sbin/corosync-quorumtool说明:状态满足以下条件表明DCS服务正常
- 集群节点状态Quorate显示为Yes;
- Membership information显示当前中心包含仲裁节点的所有节点信息则表明仲裁服务正常;





