kingbase数据库命令行方式部署主备集群(一主一备)
场景:两台服务器环境 192.168.40.118和192.168.40.119,在这两台环境上命令行部署主备集群
前提条件:需要在主节点部署一套数据库单机
操作系统服务要求
| 选项 | 配置描述 |
|---|---|
| selinux | 要求设置为disable。若在机器设备不方便reboot时,可以执行setenforce 0操作使得当前系统生效。随后按建议配置修改,在下次重启时配置生效。 |
| iptables | 建议关闭,如果开启,建议开通相应集群端口。 |
| RemoveIPC | 要求关闭,操作系统没有 /etc/systemd/logind.conf 文件则不需修改。如果RemoveIPC参数被注释,则取消注释并设置成no (防止默认为yes)。 |
| 端口 | 至少要求服务器端口开通8890,54321,22 。 |
一、主节点完成单机的安装

注: 单机安装完成之后,先不要执行root.sh 自启动脚本,也不需要启动单机服务.
二、找到zip包,把zip包内容拷贝到空目录下
主节点:
2.1 新建一个存放集群配置文件的目录(可自定义):mkdir -p /home/kingbase/cluster_install
2.2 将zip包内容拷贝到空目录下:cp -r * /home/kingbase/cluster_install
zip包原存放路径:$数据库安装目录/ClientTools/guitools/DeployTools/zip
2.3 将授权文件(license.dat)拷贝一份放到cluster_install/zip下
cp license.dat /home/kingbase/cluster_install/
2.4 给cluster_install下内容权限和归属
归属:chown kingbase.kingbase *
权限:chmod 755 *

备节点:
2.5 新建kingbase系统用户
useradd -m -U kingbase
2.6 在备节点建立cluster_install
mkdir -p /home/kingbase/cluster_install
归属: chown -R kingbase.kingbase /home/kingbase/cluster_install
权限: chmod 755 /home/kingbase/cluster_install
2.7 将主节点cluster_install内容拷贝至备节点cluster_install中,并检查权限与归属
在118节点执行:
scp /home/kingbase/cluster_install/* kingbase@192.168.40.119:/home/kingbase/cluster_install/
2.8 重新赋予权限
归属: chown kingbase.kingbase /home/kingbase/cluster_install/*
权限: chmod 755 /home/kingbase/cluster_install/*
三、配置集群配置文件install.conf
vim /home/kingbase/cluster_install/install.conf
如下图所示,其中红色框的是重要配置项; 蓝色框的是选配,一般默认; 绿色框的看具体情况一般情况默认即可(示例数据库版本为V008R006C009B0014)









3.1 install.conf 配置项参数
表格中黄色底色标注的配置项需要我们重点注意,其中一些项需要添加配置,一些可以按照默认配置.
| 参数名称 | 默认值/建议值 | 备注 |
|---|---|---|
|
on_bmj |
0 |
必须配置1:表示为专用机; |
|
all_ip |
部署读写分离集群时,为必须配置项。 |
|
| witness_ip | 可选配置,要部署观察器节点的设备,只能配置一个IP,默认为空(不部署观察器节点)。 | |
| production_ip | 部署读写分离集群时,为不可配置项,生产中心所有节点的host。 | |
| local_disaster_recovery_ip | 部署读写分离集群时,为不可配置项。配置同城灾备中心所有节点的host。 | |
| remote_disaster_recovery_ip | 部署读写分离集群时,为不可配置项。 | |
| install_dir | 必须配置,集群部署的路径,该路径需是一个不存在的目录,专用机不需要配置,字符串不能以/字符结尾。 | |
| zip_package | 必须配置,压缩包的路径,专用机不需要配置。 | |
| license_type | "default" | 必须配置,说明授权方式,可选值为:('default' 'UKey' 'LAC')。 |
| license_file | 可选配置,数据库license文件名,多个license之间以空格分隔。不配置时默认使用自带的试用版license。 专用机不需要配置。 | |
| lac_host | license_type为'LAC'时,必须配置,说明LAC服务端地址。 | |
| lac_port | 11234 | license_type为'LAC'时,必须配置,说明LAC服务端口号,默认为11234。 |
| lac_type | license_type为'LAC'时,必须配置,说明授权类型,可选值为('ENT' 'PRO' 'STD' 'DEV')。 | |
| activation_file | license_type为'LAC'时,可选配置,指定要使用的LAC服务端的激活文件。 | |
| use_vcpu_limit | 0 | license_type为'LAC'时,必须配置,说明授权控制方式。 0:表示实例授权,默认值为0; 1:表示VCPU授权。 |
| db_user | "system" | 必须配置,数据库初始用户,默认用户为system。 |
| db_password | 12345678ab | 可选配置,数据库用户密码;不配置则使用默认密码12345678ab。 |
| db_port | 54321 | 必须配置,数据库端口。 |
| db_mode | "oracle" | 必须配置,数据库模式,pg/oracle/mysql/sqlserver。 |
| db_auth | scram-sha-256 | 必须配置,数据库权限。 |
| db_case_sensitive | "yes" | 必须配置,数据库是否大小写敏感。 yes表示数据库大小写敏感; no表示数据库大小写不敏感。 |
| db_checksums | "yes" | 可选配置,默认值为"yes",用于校验存储的数据是否被破坏。 |
| archive_mode | "always" | 可选配置,当启用archive_mode时,可以通过archive_command命令将完成的WAL段进行归档存储。该参数的值可以设置为:off、on和always。 |
| encoding | 可选配置,数据库默认采取的字符集 ,默认“UTF8”,不配置数据库默认从locale命令读取。 | |
| locale | 可选配置,数据库字符排序的字符集规则 ,默认“zh_CN.UTF-8”,不配置数据库默认从locale命令读取。 | |
| other_db_init _options | 可选配置,用户需要自定义添加的数据库初始化参数,例如:"--scenario-tuning"。 | |
| sync_security_guc | no | 可选配置,是否开启同步安全参数的功能。yes表示开启,no表示关闭。 |
| tcp_keepalives_idle | 2 | 可选配置,连接空闲多长时间后,发送心跳消息来探测连接是否正常,默认是2秒。 |
| tcp_keepalives_interval | 2 | 可选配置,指定在多少秒以后重发一个还没有被客户端告知已收到的keepalive消息,默认是2秒。 |
| tcp_keepalives_count | 3 | 可选配置,连续发送多少次心跳后,仍然没有ACK报文回复,则认为连接异常,会主动断开连接,默认是3次 |
| tcp_user_timeout | 9000 | 可选配置,用于指定传输的数据在TCP连接被强制关闭前可以保持未确认状态的时间量。 |
| connection_timeout | 10 | 可选配置,使用ssh、sys_securecmd的连接超时时间,同时也是连接数据库的超时时间,默认10秒。 |
| wal_sender_timeout | 30000 | 可选配置,sender等待发送的超时时间,如果等待时间超过参数设定的值,将断开流复制连接,默认值为30000毫秒,设置为0表示禁用该参数。 |
| wal_receiver_timeout | 30000 | 可选配置,receiver等待接收的超时时间,如果等待时间超过该参数值将断开连接,默认值为30000毫秒,设置为0表示禁用该参数。 |
| trusted_servers | 必须配置,指定当前部署集群的信任网关,多个网关请用“,”分隔,不允许有空格。可以配置IPv4或IPv6地址,但必须和all_ip中的IP类型相同。 | |
|
running_under_failure_trusted_servers |
"on" |
可选配置,数据库节点无法ping通信任网关后是否正常运行。 |
| use_exist_data | 0 | 可选配置,是否使用已有的单机数据目录部署集群。 0表示功能关闭,默认为0,部署集群时会自动初始化数据目录。 |
| data_directory | 可选配置,指定数据库data目录路径,通用机默认为${install_dir}/kingbase/data,专用机默认为/opt/Kingbase/ES/V9/data。 | |
| waldir | 可选配置,数据库的WAL日志默认存储在data/sys_wal目录下,如需将sys_wal从data目录中分离,则使用该参数指定一个绝对路径即可。 | |
| virtual_ip | 可选配置,部署集群所需的数据库虚拟IP,简称VIP。只能配置IPv4,当all_ip配置为IPv6或hostname时, 不能配置此参数。 | |
| ignore_vip_failure | "off" | 可选配置,命令行命令是否忽略VIP操作失败并继续执行。 |
| net_device | 可选配置,若配置了[virtual_ip],则此参数必须配置,值为VIP所在网卡的网卡名称,每个节点网卡名中间以空格分隔,且必须和all_node_ip的顺序保持一致,如果所有设备的网卡相同, 则只需写一次。 | |
| net_device_ip | 可选配置,若配置了[virtual_ip],则此参数必须配置,即VIP所在网卡的物理IP地址,每个节点的IP中间以空格分隔,且必须和all_ip的顺序保持一致。 | |
| ipaddr_path | "/sbin" | 可选配置,ip命令路径,which ip命令查看实际值 |
| arping_path | 可选配置,arping命令路径,which arping命令查看实际值 | |
| ping_path | "/bin" | 可选配置,ping命令路径,which ping命令查看实际值 |
| install_with_root | 1 | 可选配置,指明是否允许在部署过程中设置root免密,默认为1,即允许。如果只允许普通用户执行部署,则配置为0。 |
| super_user | "root" | 可选配置,指明设备的超级用户,默认为root。 |
| execute_user | "kingbase" | 可选配置,指明设备部署集群的普通用户,默认为kingbase。 |
| deploy_by_sshd | 1 | 可选配置,部署方式,通用机是否通过sshd服务部署集群。在专用机上不能通过sshd服务部署(值为0)。 |
| use_scmd | 1 | 可选配置,指定集群是否依赖sys_securecmdd运行。如果为0则集群依赖sshd服务,专用机上只能依赖sys_securecmdd(值为1)。 |
| reconnect_attempts | 10 | 可选配置,数据库故障时检测重试次数。 |
| reconnect_interval | 6 | 可选配置,数据库故障时检测重试间隔,默认为6,最小为3。 |
| recovery | "standby" | 可选配置,自动恢复控制参数。 'manual',关闭自动恢复; 'standby',自动恢复故障备库; 'automatic',自动恢复所有故障数据库。 |
| ssh_port | "22" | 可选配置,指定sshd/ssh连接端口,默认为22。 |
| scmd_port | "8890" | 可选配置,指定sys_securecmdd/sys_securecmd连接端口,默认为8890。 |
| use_ssl | 0 | 可选配置,指定是否使用ssl进行集群间通信。 0表示功能关闭; 1表示功能开启。 默认为0,即不使用ssl通信。 |
| ...... | ...... | ...... |
3.2 示例:
192.168.40.118为主节点
192.168.40.119为备节点
all_ip=(192.168.40.118 192.168.40.119)
------------集群节点IP,第一个为主节点。空格分开
install_dir= "/home/kingbase/cluster/install"
--------集群的安装目录
zip_package= "/home/kingbase/cluster_install/db.zip"
------db.zip已存放在cluster_install下
license_file=()
------license路径可以默认不配置,会直接取cluster_install下的授权
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"
trusted_servers="192.168.40.2"
-----------网关,可以使用ip route show default命令查看
data_directory=""
------------可以默认不配置,默认部署完成会生成在集群目录的kingbase下
virtual_ip="192.168.40.115"
-----------可以选配,配置之后可以通过访问这个VIP来登录数据库
net_device=(ens33 ens33)
-----------配置网卡名称,几个节点就写几个
net_device_ip=(192.168.40.118 192.168.40.119)
----------IP,与all_ip顺序保持一致
ipaddr_path="/usr/sbin"
-------使用which ip来查询实际位置,并修改
arping_path="/usr/sbin"
-------使用which arping来查询实际位置,并修改
ping_path="/usr/bin"
-------使用which ping来查询实际位置,并修改
deploy_by_sshd=1
-----------以ssh方式部署集群,则配置为1
use_scmd=0
---------------1 表示是(运行在 sys_securecmdd),0 表示否(运行在 sshd)
配置完成之后保存install.conf文件内容.
四、执行脚本做ssh环境免密
root用户进入到cluster_install 目录中执行 bash trust_cluster.sh

执行过程中会让多次输入root 与kingbase用户的密码,直到免密结束
注: unzip命令检查下是否可以正常使用,如果不能,需要安装一下
结束之后可以在两个环境分别使用ssh 用户@IP的形式互相访问,看下是否做到了免密登录
示例:
118环境: ssh root@192.168.40.119
exit
ssh kingbase@192.168.40.119
119环境: ssh root@192.168.40.118
exit
ssh kingbase@192.168.40.118
五、执行部署脚本开始部署集群
kingbase用户进入到cluster_install 目录中执行 bash cluster_install.sh
[kingbase@node1 cluster_install]$ sh cluster_install.sh
[CONFIG_CHECK] will deploy the cluster of DG
[CONFIG_CHECK] file format is correct ... OK
[CONFIG_CHECK] encoding: UTF8 OK
[CONFIG_CHECK] locale: zh_CN.UTF-8 OK
[CONFIG_CHECK] the number of net_device matches the length of all_ip or the number of net_device is 1 ... OK
[CONFIG_CHECK] the number of license_num matches the length of all_ip or the number of license_num is 1 ... OK
[RUNNING] check if the host can be reached from current node and between all nodes by ssh ...
[RUNNING] success connect to "192.168.40.119" from current node by 'ssh' ... OK
[RUNNING] success connect to "192.168.40.119" from "192.168.40.119" by 'ssh' ... OK
[RUNNING] success connect to "192.168.40.118" from "192.168.40.119" by 'ssh' ... OK
[RUNNING] success connect to "192.168.40.118" from current node by 'ssh' ... OK
[RUNNING] success connect to "192.168.40.119" from "192.168.40.118" by 'ssh' ... OK
[RUNNING] success connect to "192.168.40.118" from "192.168.40.118" by 'ssh' ... OK
[RUNNING] chmod /usr/bin/ping ...
[RUNNING] chmod /usr/bin/ping ... Done
[RUNNING] ping access rights OK
[RUNNING] check if the virtual ip "10.12.11.200" already exist ...
[RUNNING] there is no "10.12.11.200" on any host, OK
[RUNNING] check the [net_device_ip] on dev [net_device] ...
[RUNNING] 192.168.40.119 on host "192.168.40.119" on dev "ens192" ..... OK
[RUNNING] 192.168.40.118 on host "192.168.40.118" on dev "ens192" ..... OK
[RUNNING] check the db is running or not...
[RUNNING] the db is not running on "192.168.40.119:54321" ..... OK
[RUNNING] the db is not running on "192.168.40.118:54321" ..... OK
[RUNNING] check the sys_securecmdd is running or not...
[RUNNING] the sys_securecmdd is not running on "192.168.40.119:8890" ..... OK
[RUNNING] the sys_securecmdd is not running on "192.168.40.118:8890" ..... OK
[RUNNING] check if the install dir (create dir and check it's owner/permission) ...
[RUNNING] check if the install dir (create dir and check it's owner/permission) on "192.168.40.119" ... OK
[RUNNING] check if the install dir (create dir and check it's owner/permission) on "192.168.40.118" ... OK
[RUNNING] check if the dir "/home/kingbase/cluster/kingbase" is already exist ...
[RUNNING] the dir "/home/kingbase/cluster/kingbase" is not exist on "192.168.40.119" ..... OK
[RUNNING] the dir "/home/kingbase/cluster/kingbase" is not exist on "192.168.40.118" ..... OK
[RUNNING] check the data directory (create it and check whether it is empty) ...
[RUNNING] when use_exist_data=0, create the empty data directory on "192.168.40.119" ..... OK
[RUNNING] when use_exist_data=0, create the empty data directory on "192.168.40.118" ..... OK
2024-05-28 14:16:04 [INFO] start to check system parameters on 192.168.40.119 ...
2024-05-28 14:16:05 [INFO] [GSSAPIAuthentication] no on 192.168.40.119
2024-05-28 14:16:05 [INFO] [UseDNS] no on 192.168.40.119
2024-05-28 14:16:05 [INFO] [UsePAM] yes on 192.168.40.119
2024-05-28 14:16:05 [INFO] [ulimit.open files] 655360 on 192.168.40.119
2024-05-28 14:16:05 [INFO] [ulimit.open proc] 655360 on 192.168.40.119
2024-05-28 14:16:05 [INFO] [ulimit.core size] unlimited on 192.168.40.119
2024-05-28 14:16:06 [INFO] [ulimit.mem lock] 50000000 on 192.168.40.119
2024-05-28 14:16:06 [INFO] [kernel.sem] 5010 641280 5010 256 on 192.168.40.119
2024-05-28 14:16:06 [INFO] [RemoveIPC] no on 192.168.40.119
2024-05-28 14:16:07 [INFO] [DefaultTasksAccounting] no on 192.168.40.119
2024-05-28 14:16:07 [INFO] file "/etc/udev/rules.d/kingbase.rules" exists on 192.168.40.119
2024-05-28 14:16:07 [INFO] [crontab] chmod /usr/bin/crontab ...
2024-05-28 14:16:07 [INFO] [crontab] chmod /usr/bin/crontab ... Done
2024-05-28 14:16:08 [INFO] [crontab access] OK
2024-05-28 14:16:08 [INFO] [cron.deny] kingbase not exists in cron.deny
2024-05-28 14:16:08 [INFO] [cron.allow] kingbase already exists in cron.allow
2024-05-28 14:16:08 [INFO] [crontab auth] crontab is accessible by kingbase now on 192.168.40.119
............
............
2024-05-28 14:17:56 begin to start repmgrd on "[192.168.40.119]".
[2024-05-28 14:17:56] [NOTICE] using provided configuration file "/home/kingbase/cluster/kingbase/bin/../etc/repmgr.conf"
[2024-05-28 14:17:56] [NOTICE] redirecting logging output to "/home/kingbase/cluster/kingbase/log/hamgr.log"
2024-05-28 14:17:58 repmgrd on "[192.168.40.119]" start success.
2024-05-28 14:17:58 begin to start repmgrd on "[192.168.40.118]".
[2024-05-28 14:13:59] [NOTICE] using provided configuration file "/home/kingbase/cluster/kingbase/bin/../etc/repmgr.conf"
[2024-05-28 14:13:59] [NOTICE] redirecting logging output to "/home/kingbase/cluster/kingbase/log/hamgr.log"
2024-05-28 14:18:01 repmgrd on "[192.168.40.118]" start success.
ID | Name | Role | Status | Upstream | repmgrd | PID | Paused? | Upstream last seen
----+-------+---------+-----------+----------+---------+-------+---------+--------------------
1 | node1 | primary | * running | | running | 25981 | no | n/a
2 | node2 | standby | running | node1 | running | 14193 | no | 1 second(s) ago
[2024-05-28 14:18:05] [NOTICE] redirecting logging output to "/home/kingbase/cluster/kingbase/log/kbha.log"
[2024-05-28 14:14:11] [NOTICE] redirecting logging output to "/home/kingbase/cluster/kingbase/log/kbha.log"
2024-05-28 14:18:13 Done.
[INSTALL] start up the whole cluster ... OK
六 、部署完成检查(命令都需要使用kingbase用户执行)
6.1 查看集群状态 repmgr cluster show

6.2 查看节点状态: f是主,t是备,备机上无状态
ksql -Usystem -dtest
主:
执行 select sys_is_in_recovery();

执行select * from sys_stat_replication; ------查看复制槽

备:

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)