官方文档中没有介绍安装在kubernetes集群中的高可用部署方案。

官方介绍了三种高可用架构

KingbaseES 读写分离集群架构

KingbaseES Clusterware共享存储集群

Kingbase FlySync异构数据同步架构

kingbase读写分离集群

本文主要介绍读写分离架构的部署安装方式

1、准备工作

1.1、环境配置

主节点

192.168.8.71

kylin11

备节点

192.168.8.72

kylin11

vip

192.168.8.200

网卡

ens18

1.2、配置参数

关闭防火请

systemctl stop firewalld
systemctl status firewalld

关闭selinux

setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

# 查看状态
sestatus

设置limit参数


#打开的文件描述符的最大个数 
ulimit -n
# 预期结果 65536
# 最大用户进程数
ulimit -u 
# 预期结果 65536
# 修改 /etc/security/limits.conf 文件,添加
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft core 655360
* hard core 655360
* soft memlock 50000000
* hard memlock 50000000
# 重启会话

如果/etc/security/limit.d/ 目录下还有其他配置文件,删除它,否则最终生效的是 /etc/security/limit.d/目录下的配置文件,而不是/etc/security/limits.conf 其 -n 和-u 的值不得小于65536 (严格要求),但可以继续调大,

设置信号量内核参数

sysctl kernel.sem
kernel.sem = 32000	1024000000	500	32000
# 若小于对应推荐值,修改/etc/sysctl.conf,添加kernel.sem= 5010 641280 5010 256
# 然后执行sysctl -p

移除IPC

cat /etc/systemd/logind. conf | grep RemoveIPC

#若为yes,修改 /etc/systemd/logind.con,修改RemoveIPC=no
#然后执行 systemctl daemon-reload
#如果操作系统没有 /etc/systemd/logind.conf文件则不需修改。
#如果RemoveIPC参数被注释,则取消注释并设置成no (防止默认为yes)

ssh配置

1.测试 ssh root@本机ip ssh root@其他设备ip 耗时
预期结果 小于5s
2.cat /etc/ssh/sshd_config | grep GSSAPIAuthentication
预期结果 no
3.cat /etc/ssh/sshd_config | grep UseDNS
预期结果 no

若耗时大于5秒、或者 GSSAPIAuthentication为 yes、或者UseDNS为yes,修改/etc/ssh/sshd_config 文件,设置 GSSAPIAuthentication=no UseDNS=no

配置免密登录

ssh-keygen -t rsa # 三次回车
for i in node01 node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

配置网络传输参数

sysctl -a | egrep 'wmem_default | wmem_max | rmem_default | rmem_max'

# 预期结果 8388608  16777216 8388608 16777216
#如果小于这些值,则修改 sysctl.conf,增加: net.core.rmem_default = 8388608 
net.core.rmem_max = 16777216 
net.core.wmem_default = 8388608 
net.core.wmem_max = 16777216
# 然后执行sysctl -p
sysctl -a | egrep 'tcp_wmem | tcp_rmem'
# 预期结果 8192 65536 16777216

# 如果小于这些值,则修改 sysctl.conf,增加: net.ipv4.tcp_rmem = 8192 65536 16777216
net.ipv4.tcp_wmem = 8192 87380 16777216
# 执行sysctl -p

网络传输队列

tc qdisc show dev 网卡名称
当前生效(重启会失效): tc qdisc replace dev 网卡名称 root fq_codel

永久生效(需重启): echo "net.core. default_qdisc=fq_codel" >> /etc/sysctl.conf

systemd配置

service cron/crond status | grep Tasks | grep limit
# 保证读写分离集群的守护进程kbha 能够被crontab 调度。调整后,需观察service crond status 限制是否取消,若未生效,需重启OS。

# 若查询结果为空,这表示cron/crond服务没有限制,为正常配置,无需修改
# 若小于65535,修改 /etc/systemd/system.conf,修改 DefaultTasksAccounting=no 或DefaultTasksMax=65536

修改后执行以下命令 systemctl daemon-reload ; systemctl daemon-reexec

查询端口和vip是否被占用

netstat -an | grep -w 54321 | grep LISTEN

1.3、创建安装用户

useradd -m kingbase
passwd kingbase

1.4、创建安装目录

mkdir -p /opt/Kingbase/ES/V8
chmod o+rwx /opt/Kingbase/ES/V8

1.5、创建数据目录

mkdir /opt/Kingbase/ES/V8/data

1.6、挂载安装文件

iso格式的安装程序包需要先挂载才能使用。挂载iso文件需要使用root用户。比如挂载的目录是iso文件同级目录KingbaseES,您可以运行如下命令进行挂载:

#cd KingbaseES_V008R006C009B0014_Lin64_install.iso所在目录
su
mount KingbaseES_V008R006C009B0014_Lin64_install.iso ./KingbaseESV8

KingbaseES目录下可以看到setup目录和setup.sh脚本。安装完成后您可以运行如下命令取消挂载iso文件:

su
umount ./KingbaseESV8

此时KingbaseES已经和iso文件解除挂载关系,您在KingbaseES目录下不会再看到安装相关文件。

2、安装kingbase单机版

此处我们选择命令行安装方法

3、一键式集群部署

由于我们没有GUI界面,此处选择一键式集群部署。

3.1、配置免密登录约束

目前在通用机上支持两种部署方式:

第一种是通过 sshd 服务自动分发文件并部署;

第二种是手动分发文件,启动 sys_securecmdd 工具并进行部署。

第一种部署方式,需要配置节点间 ssh 免密,第二种部署方式需要节点间sys_securecmdd 工具秘钥协商。

两种方式都有免密登陆要求。默认的,所有即将部署集群的设备之间,root 用户和 root 用户、root 用户和普通用户、普通用户和普通用户免密登陆,同一主机的root 用户免密登陆、root 用户和普通用户免密登陆、普通用户免密登陆。如果不希望在root用户和其他用户之间设置免密,则需要通过部署配置选项,指定通过非root方式进行部署,此时,仅在普通用户之间设置免密登录。

sys_securecmdd 工具秘钥协商在初始化、启动过程中自动完成;配置 ssh 免密请执行脚本 trust_cluster.sh,脚本会读取 install.conf 配置文件,所以请先按要求配置 install.conf 文件

3.2、操作系统配置约束

建议关闭防火墙,如果用户确认无法关闭防火墙,那么在防火墙添加数据库白名单,不同系统命令不同,数据库端口默认 54321,HA-LOG 分析工具默认端口 65432,sys_securecmdd 工具默认端口8890。其他参数约束见1.2章节

3.3、文件及文件名约束

集群部署所需要的所有文件需要已存在设备上,且 install.conf文件、cluster_install.sh、trust_cluster.sh 都需要在同一设备的同一目录下,需安装数据库后获取对应文件,以下是集群部署所需要的所有文件:

#用户单独准备:

license.dat #正式版授权文件

#从${install_dir}/ClientTools/guitools/DeployTools/zip/目录下获取:

db.zip #数据库压缩包

cluster_install.sh #部署脚本

install.conf #部署配置文件

trust_cluster.sh #配置SSH免密脚本

集群设置 virtual_ip 时,必须保证其子网掩码长度与网卡 net_device的子网掩码长度一致;网卡 net_device 上必须已有 IP,此 IP 需要配置在net_device_ip 中。

支持用户配置数据库 data目录的路径,配置路径时需注意所配置路径不能是当前部署集群用户无权限访问及读写的目录,且所配置的data 目录的上一级目录不能为空。

3.4、部署执行约束

1)执行脚本的操作只能在集群主机上执行,通用机需用普通用户执行脚本。

2)配置文件中所有要求写路径的参数都必须是绝对路径,不支持相对路径。

3)license_file 参数只需写 license 文件名即可,无需写路径。

4)脚本支持使用非 22 端口进行 ssh 连接,如果想要修改 ssh连接端口,除了更改配置文件 install.conf之外,还需修改系统/etc/ssh/sshd_config 文件中的 Port 项,然后重启 sshd服务才能正常部署集群。修改系统文件以及重启 sshd 服务均需要使用 root用户执行。

5)在已经成功部署集群后,如果需要再次部署集群,同样请先移除原有的archive 目录、log 目录下的所有内容。

6)部署集群前需要关闭所有设备上的 kingbased服务,并注销其开机自启设置。

systemctl stop kingbased && systemctl disable kingbased

4、集群部署操作

# 我们找到集群的安装脚本将其拷贝出来
# ls /opt/Kingbase/ES/V8/ClientTools/guitools/DeployTools/zip/
# cluster_install.sh  db.zip  install.conf  securecmdd.zip  trust_cluster.sh

mkdir -p /home/kingbase/software
scp -r * /home/kingbase/software/
chmod -R  775 /home/kingbase/software
ls -l /home/kingbase/software

卸载安装的单机版本

cd /opt/Kingbase/ES/V9/Uninstall
./Uninstaller

4.1 安装部署集群

初始化两台机器,主节点需要安装单机版本的数据库,备节点什么都不需要做。注意的是主节点找到集群软件和脚本后,要进行卸载。主备节点都关闭防火墙。

主节点

192.168.8.71

kylin11

备节点

192.168.8.72

kylin11

vip

192.168.8.200

网卡

ens18

编辑安装脚本 install.conf

[install]
on_bmj=0
all_ip=(192.168.8.71 192.168.8.72)            #必须配置,所有集群节点的IPv4、IPv6或hostname,用但所有节点必须配置为相同的类型。
witness_ip=""
production_ip=()
local_disaster_recovery_ip=()
remote_disaster_recovery_ip=()
install_dir="/home/kingbase/cluster/install"            #必须配置,集群部署的路径。
zip_package="/home/kingbase/software/db.zip"            #必须配置,压缩包的路径。
license_type='default'
license_file=()
lac_host=''                                             #license_type为'LAC'时,必须配置,LAC服务端地址
lac_port=11234                                          #license_type为'LAC'时,必须配置,LAC服务端端口号
lac_type=''
activation_file=''
use_vcpu_limit=0                                        #license_type为'LAC'时,必须配置,0代表示例授权,1代表VCPU授权
db_user="system"                 
db_port="54321"                  
db_mode="oracle"                 
db_auth="scram-sha-256"          
db_case_sensitive="yes"          
db_checksums="yes"               
archive_mode="always"            
encoding="UTF8"                  
locale="zh_CN.UTF-8"                                              
other_db_init_options=""         
sync_security_guc="no"           
tcp_keepalives_idle="2"          
tcp_keepalives_interval="2"      
tcp_keepalives_count="3"         
tcp_user_timeout="9000"          
connection_timeout="10"          
wal_sender_timeout="30000"       
wal_receiver_timeout="30000"     
trusted_servers="192.168.59.0"            #必须配置,指定当前部署集群的信任网关,多个网关请用“,”分隔,不允许有空格。通过route -n查看网关地址
running_under_failure_trusted_servers='on'
use_exist_data=0
data_directory=""
waldir=''
virtual_ip="192.168.59.200"            #可选配置,部署集群所需VIP。只能配置IPv4,当all_ip配置为IPv6或hostname时, 不能配置此参数。
ignore_vip_failure='off'
net_device=(ens33)                #可选配置,若配置了[virtual_ip],则此参数必须配置,值为VIP所在网卡的网卡名称。
net_device_ip=(192.168.59.141 192.168.59.142)        #可选配置,若配置了[virtual_ip],则此参数必须配置,值为VIP所在网卡的集群节点物理IP地址。
ipaddr_path="/sbin"
arping_path=""
ping_path="/bin"
install_with_root=1
super_user="root"
execute_user="kingbase"
deploy_by_sshd=1                 
use_scmd=1                       
reconnect_attempts="10"          
reconnect_interval="6"           
recovery="standby"               
ssh_port="22"                    
scmd_port="8890"                 
use_ssl=0
auto_cluster_recovery_level='1'
use_check_disk='off'
synchronous=''
sync_nodes=()
potential_nodes=()
async_nodes=()
sync_in_same_location=0
failover_need_server_alive='off'
[expand]
expand_type=""                   
primary_ip=""                    
expand_ip=""                     
node_id=""                       
sync_type=""                     
install_dir=""                   
zip_package=""
net_device=()                    
net_device_ip=()                 
license_type='default'
license_file=()
lac_host=''
lac_port=11234
lac_type=''
activation_file=''
use_vcpu_limit=0
deploy_by_sshd="1"
ssh_port="22"
scmd_port="8890"
[shrink]
shrink_type=""                   
primary_ip=""                    
shrink_ip=""                     
node_id=""                       
install_dir=""                   
ssh_port="22"                   
scmd_port="8890"                        

主节点执行免密登录脚本

sh trust_cluster.sh

主节点使用kingbase用户执行集群安装脚本 cluster_install.sh

sh cluster_install.sh

集群状态查看

在集群中任意一数据库节点,使用kingbase用户执行

cd /home/kingbase/cluster/install/kingbase/bin
./repmgr cluster show

主备切换测试

cd /home/kingbase/cluster/install/kingbase/bin
./repmgr standby switchover --choose
./repmgr standby switchover --siblings-follow
./repmgr cluster show

参考链接:

https://docs.kingbase.com.cn/cn/KES-V9R1C10/availability/rwc/Database_Operation/Cluster_Operations#%E4%B8%BB%E5%A4%87%E5%88%87%E6%8D%A2