原 麒麟V10系统搭建人大金仓KingBase V8R6一主一备高可用
环境
192.66.6.135 db1
192.66.6.253 db2
1 2 3 4 5 6 7 | [root@db-02 ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Lance)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)" ANSI_COLOR="0;31" |
2个主机都执行单机安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | pvcreate /dev/vdb vgcreate vgdata /dev/vdb lvcreate -n lvdata -l 100%free vgdata mkfs.xfs /dev/vgdata/lvdata mkdir /data mount /dev/vgdata/lvdata /data echo '/dev/vgdata/lvdata /data xfs defaults 0 0' >> /etc/fstab sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/ssh_config sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config sed -i s/"PermitRootLogin no"/"PermitRootLogin yes"/g /etc/ssh/sshd_config systemctl restart sshd sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config setenforce 0 systemctl status firewalld.service systemctl disable firewalld.service systemctl start firewalld firewall-cmd --add-port=0-65535/tcp --permanent firewall-cmd --add-port=0-65535/udp --permanent firewall-cmd --reload firewall-cmd --list-ports systemctl stop firewalld.service cat >> /etc/sysctl.conf <<"EOF" fs.aio-max-nr= 1048576 fs.file-max= 6815744 kernel.shmall= 2097152 kernel.shmmax= 4294967295 kernel.shmmni= 4096 kernel.sem= 5010 641280 5010 256 net.ipv4.ip_local_port_range= 9000 65500 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_default = 8388608 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 8192 65536 16777216 net.ipv4.tcp_wmem = 8192 87380 16777216 net.core.default_qdisc=fq_codel EOF cat >> /etc/systemd/system.conf <<"EOF" DefaultTasksAccounting=no DefaultTasksMax=655350 EOF cat >> /etc/security/limits.conf <<"EOF" * soft nofile 655350 * hard nofile 655350 * soft nproc 655350 * hard nproc 655350 EOF sed -i 's/.*RemoveIPC.*/RemoveIPC=no/' /etc/systemd/logind.conf echo "RemoveIPC=no" >> /usr/lib/systemd/system/systemd-logind.service systemctl daemon-reload systemctl restart systemd-logind.service cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bk sed -i '/^password requisite/ { s/^/#/; N; s/\n/&password requisite pam_unix.so\n/ }' /etc/pam.d/system-auth useradd kingbase echo "kingbase:lhr" | chpasswd echo "kingbase ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers mount KingbaseES_V008R006C007B0024_Kunpeng64_install.iso /mnt mkdir -p /opt/Kingbase/ES/V8 mkdir -p /data/Kingbase/ES/V8/data chown -R kingbase:kingbase /opt/Kingbase/ES/V8 chown -R kingbase:kingbase /data/ cat >> /etc/hosts <<"EOF" 192.66.6.135 node1 192.66.6.253 node2 EOF hostnamectl set-hostname node1 hostnamectl set-hostname node2 -- 每台主机单机安装 # 授权文件: /home/kingbase/license.dat #根据提示进行软件的安装,看见<ENTER>一路就回车 有三个地方需要主要修改 su - kingbase sh setup.sh -i console 完全安装 /data/Kingbase/ES/V8/data lhr -- 静默方式(cat /mnt/setup/) /mnt/setup/install.bin -i silent -f /tmp/silent2.cfg cat > /tmp/silent2.cfg <<"EOF" KB_LICENSE_PATH=/home/kingbase/license.dat CHOSEN_INSTALL_SET=Full CHOSEN_FEATURE_LIST=SERVER,KSTUDIO,KDTS,INTERFACE,DEPLOY,KINGBASEHA USER_INSTALL_DIR=/opt/Kingbase/ES/V8 USER_SELECTED_DATA_FOLDER=/opt/Kingbase/ES/V8/data DB_PORT=54321 DB_USER=system DB_PASS=lhr DB_PASS2=lhr ENCODING_PARAM=UTF8 DATABASE_MODE_PARAM=PG CASE_SENSITIVE_PARAM=YES BLOCK_SIZE_PARAM=8k EOF echo $? ps -ef|grep java -- 安装完成后,目录/opt/Kingbase/ES/V8大约5.3GB -- 日志 /opt/Kingbase/ES/V8/KESRealPro/V008R006C007B0024/install/Logs more KingbaseES_V8_安装_07_26_2024_14_14_22.log | grep error -i systemctl stop kingbased systemctl disable kingbased -- 环境变量 cat >> /home/kingbase/.bash_profile <<"EOF" export PATH=$PATH:/home/kingbase/cluster/kingbase/bin export KINGBASE_DATA=/data/Kingbase/ES/V8/data export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kingbase/cluster/kingbase/lib export KINGBASE_PORT=54321 export KINGBASE_HOST=127.0.0.1 export KINGBASE_DATABASE=test export KINGBASE_USER=system EOF source /home/kingbase/.bash_profile |
集群安装配置
master节点root用户操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | -- 集群安装 cd /opt/Kingbase/ES/V8/ClientTools/guitools/DeployTools/zip cp /home/kingbase/license.dat /opt/Kingbase/ES/V8/ClientTools/guitools/DeployTools/zip/ cp install.conf install.conf_bk rm -rf /home/kingbase/cluster cat > install.conf <<"EOF" [install] on_bmj=0 all_ip=(192.66.6.135 192.66.6.253) production_ip=() local_disaster_recovery_ip=() remote_disaster_recovery_ip=() install_dir="/home/kingbase/cluster" zip_package="/opt/Kingbase/ES/V8/ClientTools/guitools/DeployTools/zip/db.zip" license_file=(license.dat) db_user="system" db_password="lhr" db_port="54321" db_mode="oracle" db_auth="scram-sha-256" trusted_servers="192.66.6.135 192.66.6.253" data_directory="/data/Kingbase/ES/V8/data" virtual_ip="" net_device=() net_device_ip=() ipaddr_path="/sbin" arping_path="" ping_path="/bin" super_user="root" execute_user="kingbase" deploy_by_sshd=1 use_scmd=0 reconnect_attempts="10" reconnect_interval="6" #故障备库自动恢复(如果是主库故障,为了保证数据安全,需要人工手动恢复) recovery="standby" ssh_port="22" scmd_port="8890" auto_cluster_recovery_level='1' use_check_disk='off' #优选同步模式,最多只有一个同步备库 synchronous='quorum' #开启【限制同中心同步】,只有和主库同一中心的备库才能作为同步备库 sync_in_same_location=1 EOF /* -- 每个节点初始化并启动 sys_securecmdd(可以不用配置,而使用集群的sshd服务) /home/kingbase/cluster/kingbase/bin/sys_HAscmdd.sh init /home/kingbase/cluster/kingbase/bin/sys_HAscmdd.sh start systemctl status securecmdd.service ps -ef|grep sys_securecmdd */ -- 必须root ./trust_cluster.sh ./cluster_install.sh /* ./sshUserSetup.sh -user root -hosts "node1 node2" -advanced -noPromptPassphrase -confirm ./sshUserSetup.sh -user kingbase -hosts "node1 node2" -advanced -noPromptPassphrase -confirm sh sshUserSetup2.sh "root kingbase" "node1 node2" */ -- kingbase用户,否则报错/home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1: version `OPENSSL_1_1_1f' not found (required by ssh) cp /home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1 /home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1_bk cp /usr/lib64/libcrypto.so.1.1 /home/kingbase/cluster/kingbase/lib/ |
参数介绍:https://bbs.kingbase.com.cn/kingbase-html/v8/highly/availability/cluster-use/cluster-use-4.html
提供 install.conf 配置文件用于配置集群部署所需参数,提供参数如下:
参数名称 | 默认值/建议值 | 备注 |
---|---|---|
on_bmj | 0 | 必须配置,说明当前部署集群的设备是否为专用机, 1表示为专用机,0表示为通用机,默认值为0。 |
all_ip | 读写分离集群参数 部署读写分离集群时,为必须配置项 部署两地三中心时,为不可配置项 配置读写分离集群所有节点host,以空格分隔, 默认第一个被设置为集群主机,可配置IPv4、IPv6或hostname, 但所有节点必须配置为相同的类型。 | |
witness_ip | 可选配置,要部署观察器节点的设备,只能配置一个IP, 默认为空(不部署观察器节点)。 可以配置IPv4或IPv6地址或hostname, 但必须和all_ip中的IP类型相同。 | |
production_ip | 两地三中心配置项 部署读写分离集群时,为不可配置项 部署两地三中心时,为必须配置项 配置生产中心所有节点的host。可配置IPv4、IPv6地址 但所有节点必须配置为相同的类型 | |
local_disaster_recovery_ip | 两地三中心配置项 部署读写分离集群时,为不可配置项 部署两地三中心时,为必须配项 配置同城灾备中心所有节点的host。 可配置IPv4、IPv6地址,但所有节点必须配置为相同的类型 | |
remote_disaster_recovery_ip | 两地三中心配置项 部署读写分离集群时,为不可配置项 部署两地三中心时,为可选项 配置异地灾备中心节点的host。异地灾备中心只能有一个节点。 可配置IPv4、IPv6地址。 | |
install_dir | 必须配置,说明集群部署的路径,该路径需是一个不存在 的目录,专用机不需要配置,字符串不能以 / 字符结尾。 | |
zip_package | 必须配置,说明压缩包的路径,专用机不需要配置。 | |
license_file | 可选配置,说明license文件的名字,多个license之间以 空格分隔。不配置时默认使用自带的试用版license。 专用机不需要配置。 | |
db_user | "system" | 必须配置,数据库初始用户。 |
db_password | 12345678ab | 可选配置,数据库用户密码;不配置则使用默认密码12345678ab。 |
db_port | 54321 | 必须配置,数据库端口。 |
db_mode | "oracle" | 必须配置,数据库模式,pg/oracle/mysql。 |
db_auth | scram-sha-256 | 必须配置,数据库权限。 |
db_case_sensitive | "yes" | 必须配置,数据库是否大小写敏感,yes表示数据库大小写敏感, no表示数据库大小写不敏感,默认为yes。当数据库默认为pg时, 只能设置为yes。数据库模式为mysql时,只能设置为no。 |
db_checksums | "yes" | 可选配置,默认值为"yes",用于校验存储的数据是否被破坏。 |
archive_mode | "always" | 当启用archive_mode时,可以通过archive_command命令将完成的WAL 段进行归档存储。该参数的值可以设置为:off、on和always。当设 置为"off"时表示禁用归档,设置为"on"或"always"均表示启用归档 ,唯一区别是设置为always时备库也会归档(设置为on时只有主库归 档。当wal_level被设置为minimal时,archive_mode不能被启用。 |
encoding | 可选配置,数据库默认采取的字符集 ,默认“UTF8” ,不配置数据库默认从locale命令读取。 | |
locale | 可选配置,数据库字符排序的字符集规则 ,默认“zh_CN.UTF-8” ,不配置数据库默认从locale命令读取。 | |
other_db_init _options | 可选配置,用户需要自定义添加的数据库初始化参数 ,例如:"--scenario-tuning"。 数据库模式为mysql时,不允许设置"--scenario-tuning"。 | |
sync_security_guc | 可选配置,是否开启同步安全参数的功能,yes表示开启, no表示关闭,默认为no。 相关功能详细描述请参考 定时任务 | |
tcp_keepalives_idle | 2 | 连接空闲多长时间后,发送心跳消息来探测连接是否正常,默认是2 秒。用于指定不活动多长时间后通过TCP向客户端发送一个keepalive 消息,参数仅当SO_KEEPALIVE套接字参数被启用时才有效。 |
tcp_keepalives_interval | 75 | 指定在多少秒以后重发一个还没有被客户端告知已收到的keepalive 消息,默认是75秒。 |
tcp_keepalives_count | 3 | 连续发送多少此心跳后,仍然没有ACK报文回复,则认为连接异常, 会主动端口连接,默认是3次。当tcp_user_timeout被启用后,此功 能会被覆盖,即使达到指定次数后连接也不会被断开。 |
tcp_user_timeout | 9000 | 用于指定传输的数据在TCP连接被强制关闭前可以保持未确认状态的 时间量。如果指定值时没有单位则以毫秒为单位,默认是9000毫秒。 |
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网 关失败后将关闭数据库。 默认为on。 |
use_exist_data | 0 | 可选配置,是否使用已有的单机数据目录部署集群。 0表示功能关闭,部署集群时所有节点不能有数据目录存在,部署 集群时会自动在第一个节点上初始化数据目录并作为主节点; 1表示功能开启,部署集群时必须有且只有一个节点上存在数据目 录,数据目录所在节点会作为集群主节点,此数据目录必须为单 机的数据目录(不能有集群插件、esrep数据库和esrep用户)。 默认为0,部署集群时会自动初始化数据目录。 |
data_directory | 可选配置,指定数据库data目录路径,通用机默 认为${install_dir}/kingbase/data,专用机默认 为/opt/Kingbase/ES/V8/data。 | |
waldir | 数据库的WAL日志默认存储在data/sys_wal目录下,如需将sys_wal从 data目录中分离,则使用该参数指定一个绝对路径即可。 | |
virtual_ip | 可选配置,部署集群所需的数据库虚拟IP,掩码长度默认为24, 需跟网卡net_device的实际掩码长度一致。简称VIP。 只能配置IPv4,当all_ip配置为IPv6或hostname时, 不能配置此参数。 | |
ignore_vip_failure | "off" | 可选配置,命令行命令是否忽略VIP操作失败并继续执行。 off,默认值,此功能关闭,VIP相关操作失败则命令异常中断; on,此功能开启,当手动执行命令涉及VIP操作时,VIP操作失败 不影响命令后续执行,包括以下命令:一键启动集群、 手动主备切换、注册主节点。 |
net_device | 可选配置,若配置了[virtual_ip],则此参数必须配置,值为VIP 所在网卡的网卡名称,每个节点网卡名中间以空格分隔,且必须和 all_node_ip的顺序保持一致,如果所有设备的网卡相同, 则只需写一次。 | |
net_device_ip | 可选配置,若配置了[virtual_ip],则此参数必须配置,即VIP 所在网卡的物理IP地址,每个节点的IP中间以空格分隔,且必须 和all_ip的顺序保持一致。 因为[virtual_ip]只能配置为IPv4,此参数也必须配置为IPv4。 net_device_ip可以是VIP所在网卡的物理ip地址列表中的任何一 个,默认为第一个,且不区分虚拟IP与物理IP。 | |
ipaddr_path | "/sbin" | 可选配置,ip命令路径,默认为“/sbin”。 |
arping_path | 可选配置,arping命令路径,默认为"数据库安装目录的bin" 目录。 | |
ping_path | "/bin" | 可选配置,ping命令路径,默认为“/bin”。 |
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 | 可选配置,数据库故障时检测重试间隔。 |
recovery | "standby" | 可选配置,集群故障恢复自动恢复参数,manual表示不自动 恢复,standby表示自动恢复故障的备数据库,automatic表 示自动恢复所有故障数据库,默认为standby。 |
ssh_port | "22" | 可选配置,指定sshd/ssh连接端口,默认为22。 |
scmd_port | "8890" | 可选配置,指定sys_securecmdd/sys_securecmd连接端口, 默认为8890。 |
use_ssl | 0 | 可选配置,指定是否使用ssl进行集群间通信, 0表示功能关闭,1表示功能开启。默认为0,即不使用ssl通信。 |
auto_cluster_recovery_level | 1 | 可选配置,集群故障多级别自动恢复参数,1表示全部节点故障 且节点间网络正常,当前集群节点只有1个处于主库状态时可自 动恢复集群。0表示关闭集群自动恢复功能。 |
use_check_disk | "off" | 可选配置,是否开启磁盘故障转移功能。on表示开启,检查到 磁盘故障后,关闭当前数据库防止故障扩大;off表示关闭,仅 检查磁盘,发现故障后打印日志,不做任何处理。 默认为off,关闭此功能。 |
synchronous | 可选配置,指定集群同/异步模式。async为异步模式;sync为 同步模式;quorum为优选同步模式;all为动态全同步模式; custom为自定义模式。 配置为空则使用默认值,读写分离集群默认为quorum; 两地三中心集群默认为all,且不支持custom自定义模式。 当synchronous配置为custom自定义模式时, all_ip参数中的每个节点都必须配置一种同步类型, witness节点不能配置同步类型。 | |
sync_nodes | 0 | 可选配置,仅当synchronous参数配置为custom时,本参数生效。 用于配置集群中同步节点的host,以空格分隔, 所有节点必须全部来自于all_ip参数。 |
potential_nodes | 0 | 可选配置,仅当synchronous参数配置为custom时,本参数生效。 用于配置集群中同步候选节点的host,以空格分隔, 所有节点必须全部来自于all_ip参数。 |
async_nodes | 0 | 可选配置,仅当synchronous参数配置为custom时,本参数生效。 用于配置集群中异步节点的host,以空格分隔, 所有节点必须全部来自于all_ip参数。 |
sync_in_same_location | 0 | 可选配置,两地三中心集群下同步模式是否仅在本中心生效。 0表示不局限于本中心,synchronous配置的同步模式对所有连接 主库的备库生效;1表示仅本中心有效,synchronous配置的同步 模式仅在主库所在中心内部生效。 |
failover_need_server_alive | "off" | 可选配置,两地三中心集群支持跨中心故障转移是否进行检查。 off为不支持跨中心故障转移;none为支持并且不需要检查; any为支持但要求故障主库所属中心任一数据库所在服务器存活; all为支持但要求故障主库所属中心所有数据库所在服务器存活。 |
启动和关闭
1 2 3 4 5 6 7 8 9 | sys_monitor.sh start sys_monitor.sh stop repmgr cluster show repmgr service status [kingbase@node1 ~]$ sys_monitor.sh -h Usage: /home/kingbase/cluster/kingbase/bin/sys_monitor.sh {start|stop|restart|set [--restart]|change_password user password} |
查看集群状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | repmgr cluster show repmgr service status -- 主库查询 select * from sys_stat_replication ; select * from sys_replication_slots ; [kingbase@node1 ~]$ repmgr cluster show ID | Name | Role | Status | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string ----+-------+---------+-----------+----------+----------+----------+----------+---------+------------------------------------------------------------------------- 1 | node1 | primary | * running | | default | 100 | 1 | | host=192.66.6.135 user=esrep dbname=esrep port=54321 connect_timeout=10 2 | node2 | standby | running | node1 | default | 100 | 1 | 0 bytes | host=192.66.6.253 user=esrep dbname=esrep port=54321 connect_timeout=10 [kingbase@node1 ~]$ repmgr service status ID | Name | Role | Status | Upstream | repmgrd | PID | Paused? | Upstream last seen ----+-------+---------+-----------+----------+---------+--------+---------+-------------------- 1 | node1 | primary | * running | | running | 28868 | no | n/a 2 | node2 | standby | running | node1 | running | 568441 | no | 0 second(s) ago [kingbase@node1 ~]$ test=# select * from sys_replication_slots ; slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn ---------------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+--------------------- repmgr_slot_2 | | physical | | | f | t | 2197930 | 1078 | | 0/4008BF8 | (1 行记录) test=# \x 扩展显示已打开. test=# select * from sys_stat_replication ; -[ RECORD 1 ]----+------------------------------ pid | 2197930 usesysid | 16385 usename | esrep application_name | node2 client_addr | 192.66.6.253 client_hostname | client_port | 38532 backend_start | 2024-07-30 12:42:31.332162+08 backend_xmin | state | streaming sent_lsn | 0/4008BF8 write_lsn | 0/4008BF8 flush_lsn | 0/4008BF8 replay_lsn | 0/4008BF8 write_lag | flush_lag | replay_lag | sync_priority | 1 sync_state | quorum reply_time | 2024-07-30 13:10:29.657613+08 |
主备集群,默认的location为default
备机的复制槽是repmgr_slot_1,主机的复制槽为repmgr_slot_2
同步模式是quorum
检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ksql -U system -d kingbase kingbase=# \l+ 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 -----------+--------+----------+-------------+-------------+-------------------+-------+-------------+-------------------------------------------- esrep | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 21 MB | sys_default | kingbase | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 20 MB | sys_default | default administrative connection database security | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 20 MB | sys_default | template0 | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system +| 20 MB | sys_default | unmodifiable empty database | | | | | system=CTc/system | | | template1 | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system +| 20 MB | sys_default | default template for new databases | | | | | system=CTc/system | | | test | system | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 20 MB | sys_default | default administrative connection database (6 行记录) kingbase=# select version(); version ------------------------------------------------------------------------------------------------ KingbaseES V008R006C007B0024 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.0, 64-bit (1 行记录) |
远程
1 2 3 4 5 6 7 | ksql -U system -d test -h 192.66.6.135 -p 54321 ksql 'hostaddr=192.66.6.135 port=54321 user=system dbname=test' create user kingbase password 'lhr' superuser; |
免密登陆
1 2 3 4 5 6 | sys_encpwd -H \* -P \* -D \* -U system -W lhr [kingbase@node2 ~]$ cat .encpwd *:*:*:esrep:S2luZ2Jhc2VoYTExMA== *:*:*:system:bGhy [kingbase@node2 ~]$ |
优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | cat >> /data/Kingbase/ES/V8/data/kingbase.conf <<"EOF" ##文件中追加以下内容: 以64GB内存为例 shared_buffers = 16GB work_mem = 16MB maintenance_work_mem = 4GB max_wal_size = 16GB min_wal_size = 4GB checkpoint_timeout = 15min max_connections = 2000 effective_cache_size = 40GB checkpoint_completion_target=0.8 log_destination= 'stderr' log_directory='sys_log' log_statement='none' log_filename='kingbase-%d.log' log_truncate_on_rotation = on log_rotation_age = 1440 log_rotation_size = 100MB log_min_duration_statement=500 log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ' EOF sys_monitor.sh restart |
错误解决
ssh: /home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1: version `OPENSSL_1_1_1f' not found (required by ssh)
1 2 | [kingbase@node1 ~]$ ssh ssh: /home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1: version `OPENSSL_1_1_1f' not found (required by ssh) |
解决:
1 2 | cp /home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1 /home/kingbase/cluster/kingbase/lib/libcrypto.so.1.1_bk cp /usr/lib64/libcrypto.so.1.1 /home/kingbase/cluster/kingbase/lib/ |
附录
数据库配置文件es_rep.conf配置
位置:/data/Kingbase/ES/V8/data/es_rep.conf
参数名称 | 默认值/建议值 | 备注 |
---|---|---|
listen_addresses | * | 数据库监听的IP地址。 根据用户需要,可以调整。 |
port | 54321 | 数据库监听端口。 根据用户需要,可以调整。 |
full_page_writes | on | 强制性要求, 开启该参数可以避免数据坏块,建议为 on。 |
wal_log_hints | on | 强制性要求, 运行sys_rewind 前提,在node rejoin 时需要。 |
max_wal_senders | 32 | 如果备机数量大于 16,那么max_wal_senders 设置为备机数量×2。 |
wal_keep_segments | 512 | 正常情况下sys_wal下的最大保存文件个数, 大小计算方式16MB×512 = 8G 。 |
max_connections | 100 | 根据用户实际情况调整,最佳配置是用户使用到的连接数×120%,在集群中,max_connections的值只能修改为更大的值,不能修改为更小的值。 |
wal_level | replica | 强制性要求, 部署主备集群至少设置成replica, 如果需要使用逻辑同步,则需设置成logical。 |
archive_mode | on/always | 建议开启以支持备份,在使用不同备份方案时可能需要修改为always以支持备机独立备份,详见备份章节。 |
archive_command | 'test ! -f archivedir/cparchivedir/cparchive_dir/%f' | $archive_dir 即归档日志存放路径归档模式开启时,才需配置archive_command。 |
control_file_copy | '$install_path/kingbase/ copy_file' | $install_path,即数据库的安装路径。copy_file为sys_control文件的副本。 |
max_replication_slots | 32 | 可获取复制槽的最大数量。 |
hot_standby | on | 强制性要求, 开启后,备库可读。 |
hot_standby_feedback | on | 开启后,备库事务所使用的wal,主库不会删除。 |
logging_collector | on | 将操作日志写到sys_log。建议为on。 |
log_destination | csvlog | 记录日志消息的方法,需开启logging_collector。 |
log_checkpoints | on | 开启后,检查点和重做点信息将被记录在日志信息中。 |
log_replication_commands | on | 开启后,每个复制命令将被记录在日志信息中。 |
wal_compression | on | 开启后,完整页面镜像每次写入wal日志,均先被压缩,然后再写入wal日志。 |
synchronous_commit | remote_apply | 同步参数,off < local < remote_write < on < remote_apply,主备集群设置为remote_apply可以保证数据的强一致性,在备库读取到主库一样的数据。 至少应该为on,这样可以保证数据不丢失,低于此配置,主库故障后,备库可能会丢失数据。 |
max_prepared_transactions | 100 | 允许同时处于prepared状态的最大事务数量。 |
shared_buffers | 512MB | 根据部署集群OS的内存来调整, 最佳配置是内存的1/3。 |
fsync | on | 数据库一致性保证。建议不要修改。 |
timezone | PRC | 根据用户使用的时区调整。 |
tcp_keepalives_idle | 2 | 指定不活动多少秒后,通过tcp 向客户端发送一个心跳消息。 |
tcp_keepalives_interval | 2 | 心跳消息重发的时间间隔。 |
tcp_keepalives_count | 3 | 判定客户端连接失效的心跳消息无回应数量。 |
tcp_user_timeout | 9000 | 传输的数据在tcp连接被强制关闭之前可以保持未确认状态的时间量。默认以毫秒为单位。 |
wal_sender_timeout | 30000 | 中断那些停止活动超过这个时间量的复制连接。默认以毫秒为单位。这对primary 节点检测一个standby节点崩溃或网络断开有用。 |
wal_receiver_timeout | 30000 | 中断那些停止活动超过这个时间量的复制连接。默认以毫秒为单位。这对正在接收的standby节点检测primary节点崩溃或网络断开有用。 |
ssl | on | 启用SSL连接。 |
ssl_ca_file | root.crt | 指定包含SSL服务器证书颁发机构(CA)的文件名。 相对路径是相对于数据目录的。 |
ssl_key_file | server.key | 指定包含SSL服务器私钥的文件名。相对路径是相对于数据目录的。 |
ssl_cert_file | server.crt | 指定包含SSL服务器证书的文件名。相对路径是相对于数据目录的。 |
集群配置文件repmgr.conf配置
位置:/home/kingbase/cluster/kingbase/etc/repmgr.conf
参数名称 | 默认值/建议值 | 备注 | |
---|---|---|---|
节点 基本 配置 | use_scmd | on | 是否使用sys_securecmdd作为集群安全执行命令的工具。 如果设置为on,会使用集群自带的 sys_securecmdd工具。 如果设置为off,会使用操作系统中的sshd服务。 |
ha_running_mode | DG | 集群模式, 默认模式为DG, 还可以配置为TPTC,即两地三中心。 | |
node_id | 1开始的正整数 | 节点的node_id值不能重复 | |
node_name | node1 | 节点名,使用工具进行配置时, 会自动生成(node+id序号)。 | |
conninfo | 'host=xxx.xxx.xxx.xxx user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=10 keepalives_interval=1 keepalives_count=3' | 该节点连接信息。注意: 是连接本地节点的连接串。 | |
data_directory | $KINGBASE_DATA | 本地数据库data目录路径 | |
日志 设置 | log_level | INFO | 日志级别根据现场情况配置, 一般情况下配置成INFO 还以可以配置成 DEBUG、NOTICE、WARNING、 ERROR、ALERT、CRIT、EMERG。 |
log_file | '$cluster_path/kingbase/ log/hamgr.log | repmgrd日志存放路径, $cluster_path表示集群部署目录。 日志文件将通过系统 logrotate进行定期清理。 | |
kbha_log_file | '$cluster_path/kingbase/ log/kbha.log | kbha日志存放路径, $cluster_path表示集群部署目录。 日志文件将通过系统 logrotate进行定期清理。 | |
环境 设置 | sys_bindir | $sys_bin_path | 数据库bin目录。Repmgr 某些操作需要调用数据库命令。 |
命令 选项 设置 | scmd_options | '-q -o ConnectTimeout=10 -o StrictHostKeyChecking =no -o ServerAliveInterval=2 -o ServerAliveCountMax=5 -p 8890' | sys_securecmd或ssh命令的额外选项, 需要配置。 |
vip 设置 | virtual_ip | xxx.xxx.xxx.xxx/24 | 集群使用的虚拟ip,根据用户的网络配置可以设置掩码,默认/24 掩码需要和网卡net_device上的实际掩码一致。 |
ipaddr_path | $ip_path | ip命令所在路径 | |
arping_path | $arping_path | arping命令所在路径 | |
vip_add_cmd | 'ip addr add virtualipdevvirtualipdevnet_device label $net_device:3' | 根据现场环境,如果默认命令不可用,可进行修改。 | |
vip_del_cmd | 'ip addr del virtualipdevvirtualipdevnet_device' | 根据现场环境,如果默认命令不可用,可进行修改。 | |
arping_cmd | 'arping -U virtualip−w2−c2−Ivirtualip−w2−c2−Inet_device' | 根据现场环境,如果默认命令不可用,可进行修改。 | |
net_device | $dev | 网卡名 | |
vip_timeout | 30 | 备机升主过程中,卸载原主VIP 失败后等待时长s,会再次进行卸载。(reboot过程中会出现 ping的通vip但连接不上的情况, 启动后vip又会被系统自己卸载)。 | |
check_vip_interval | 20 | 主库或备库检查VIP的间隔。 主库定期检查VIP是否在本设备上, 如果不存在则添加;备库定期检查VIP是否在本设备上,如果存在则自动卸载。 | |
ignore_vip_failure | off | 命令行命令是否忽略VIP操作失败? 默认为off,VIP相关操作失败则命令异常中断;配置为on,当手动执行命令涉及VIP操作时,VIP操作失败不影响命令后续执行,包括以下命令: 一键启动集群、手动主备切换、 注册主节点。 | |
信任 网关 设置 | trusted_servers | xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx | 信任ip,根据现场网络环境配置, 一般推荐填写网关地址; 可以配置多个ip,表示多个信任 节点的检测。 |
ping_path | $ping_path | ping命令所在路径 | |
切换 和 监控 设置 | failover | automatic | 切换时自动的还是手动的? 根据用户需要,可配置,建议配置 automatic(自动的) 也可以配置成 manual(手动)。 |
failover_need_serve r_alive | off | 两地三中心集群是否支持跨中心切换? 根据用户需要,可配置,建议配置off(不支持),可以配置为none(支持),或者配置为any(支持但需要故障主库中心任一服务器存活), 或者配置为all(支持需要故障主库中心任意服务器存活)。 | |
recovery | standby | 故障节点如何恢复? 根据用户需要,可配置, 建议配置standby(自动恢复故障备节点),可以配置为manual(手动恢复),也可以配置成automatic (自动恢复所有故障节点)。 | |
priority | 0或正整数(默认100) | 表示升主时,本机所占权重0表示本机不能自动升主,一般用于性能较差的备机,此备机只做容灾, 不希望它升主。 根据用户各个节点的性能,一般情况下将性能较好的节点的权重设置大一点,那么该节点更容易升主选举成功。 | |
connection_check_type | mix | 检测数据库是否存活的方式,建议配置为mix。用户可选配置如下: ping,尝试连接并根据数据库是否有反馈判断数据库状态;connection,和数据库建立连接并根据成功与否判断数据库状态;query,使用已有的和数据库长连接执行简单查询并根据结果判断数据库状态;mix,平时使用ping, 当数据库异常后,尝试重连的最后一次使用query来判断数据库状态。 | |
reconnect_attempts | 3 | 检测失败时,重试次数,根据用户需要调整。 | |
reconnect_interval | 5 | 检测失败时,重试间隔时间,根据用户需要调整。 | |
promote_command | 'sysbindir/repmgrstandbypromote−fsysbindir/repmgrstandbypromote−fetc_path/ repmgr.conf' | 执行升主的命令,$etc_path表示集群etc目录路径。 | |
follow_command | 'sysbindir/repmgrstandbyfollow−fsysbindir/repmgrstandbyfollow−fetc_path/ repmgr.conf' | 备机执行follow,跟随新主机的命令$etc_path表示集群etc目录路径。 | |
monitoring_histroy | no | 每次监控检测的结果写入数据库表中 | |
monitor_interval_secs | 2 | 每次监控检测间隔时间 | |
repmgrd_pid_file | '$cluster_path/kingbase/ etc/hamgrd.pid' | repmgrd pid存放路径(不要修改此参数) $cluster_path表示集群部署目录repmgrd进程默认每隔10×monitor_interval_secs秒检查此文件和文件中保存的pid,如果文件不存在或文件中保存的pid和自己的pid不一样,repmgrd进程会自动退出。 | |
kbha_pid_file | '$cluster_path/kingbase/ etc/kbha.pid' | kbha pid存放路径(不要修改此参数) $cluster_path表示集群部署目录 kbha进程默认每隔 10×monitor_interval_secs秒检查此文件和文件中保存的pid,如果文件不存在或文件中保存的pid和自己的pid不一样,kbha进程会自动退出。 | |
standby_disconnect _on_failover | true | 备机切换前检查流复制状态,在没有断掉流复制时切断流复制后再实施切换。 | |
auto_cluster_recovery _level | 1 | 在集群全部节点故障时尝试进行集群恢复,在节点间网络正常且集群只有一个主节点时可恢复集群。 | |
lsn_lag_threshold | 16 | 备库与主库lsn差距的阈值,单位MB, 当发生主库故障时,如备库与主库lsn 差距超过此值时,若集群配置为异步流复制则备库不会升主;若配置为同步模式,只有1主多备集群中,出现主库和备库同时故障,剩余备库会依据lsn差距是否超过此阈值判断是否允许切换。 | |
流复 制同 异步 设置 | synchronous | quorum | 根据用户需要可配置为async(异步集群) sync(同步集群) quorum(优选同步集群) all(动态全同步集群) custom(自定义模式, 不支持两地三中心集群) |
sync_nodes | 同步节点名称列表,该列表中的节点均为同步节点。仅当synchronous 为custom时,本参数生效。 | ||
potential_nodes | 同步候选节点名称列表,该列表中的节点均为同步候选节点。仅当synchronous 为custom时,本参数生效。 | ||
async_nodes | 异步节点名称列表,该列表中的节点均为异步节点。仅当synchronous 为custom时,本参数生效。 | ||
sync_in_same_location | 0 | 两地三中心集群同异步配置的生效范围。 根据用户需要可配置为0(无限制), 或者1(同异步参数仅影响主库所在中心的备库)。 | |
磁盘 检测 设置 | mount_point_dir_list | '$data_directory' | 配置路径,可以配置多个,默认为data目录路径。集群会检测该路径下的读写是否正常。 |
mount_check_max_retries | 6 | 磁盘检测失败时,会重复检测,最大失败检测次数。 | |
use_check_disk | on | 磁盘检测失败达到最大次数后,是否关闭数据库。 on表示开启此功能,关闭数据库 off表示关闭此功能,仅报warning。 |
注意:
recovery参数设置为manual时,主机和备机节点故障后都不会进行自动恢复。 recovery参数设置为standby时,仅备机节点故障后会进行自动恢复。
集群部署完成后,请不要修改repmgrd_pid_file、kbha_pid_file参数的值,修改后可能会造成同时启动多个kbha或repmgrd进程。
集群配置参数与切换时间的关系
影响切换时间参数 | 说明 | |
---|---|---|
正常切换 时间参数 | reconnect_attempts | 检测到主库失联后重试连接次数 |
reconnect_interval | 检测到主库失联后重试连接间隔 | |
monitor_interval_secs | repmgr监控循环中每次监控间隔 | |
standby_disconnect_on_failover | 打开时会增加切断流复制的时间,最佳情况需要6s。 | |
异常情况 | trusted_servers | 切换时会向配置的server执行ping操作,异常情况ping不通时会增加重试超时 reconnect_attempts*(reconnect_interval+ping操作timeout)。 |
vip_timeout | 在备机提升获取vip操作时,需要检查vip是否仍然存在于原主机,若存在,需要尝试解除, vip_timeout为尝试接触操作的时间阈值。 | |
conninfo中的 connect_timeout, keepalives, keepalives_idle, keepalives_interval, keepalives_count | 在网络异常时如出现网络延迟或网络抖动,监控中连接重连会出现超时情况,包括连接超时和socket无响应超时。 | |
scmd_options中的 ConnectTimeout, ServerAliveInterval, ServerAliveCountMax | 网络异常时,切换过程中可能出现的ssh或sys_securecmd超时, 包括连接超时和socket无响应超时。 |
切换时间估算公式:
网络中断、主机宕机、停库、断电、重启的情况:
1 | monitor_interval_secs+reconnect_attempts × reconnect_interval+6+X |
注:X包括ping trusted_servers, 解除原主vip、挂载vip等操作的时间。
网络抖动的等异常情况的切换: