场景:两台服务器环境 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:表示为专用机;
               0:表示为通用机。

all_ip

部署读写分离集群时,为必须配置项。
读写分离集群所有节点host,以空格分隔,默认第一个被设置为集群主机

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通信任网关后是否正常运行。
on表示ping信任网关失败后数据库可以继续运行;off表示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;   ------查看复制槽

备:

Logo

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

更多推荐