关键字
金仓数据库 读写分离集群
前言
金仓数据库管理系统读写分离集群软件(简称KingbaseES RWC)在金仓数据守护集群软件的基础上增加了对应用透明的读写负载均衡能力。相比数据守护集群,该类集群中所有备库均可对外提供查询能力,从而减轻了主库的读负载压力,可实现更高的事务吞吐率;该软件支持在多个备库间进行读负载均衡。 RWC集群具有高可用性、读写分离、负载均衡、在线扩展、性能提升几大优势。 看了下网上其他关于部署RWC集群的经验贴,但是都比较复杂,对新手不太友好。所以写这篇博客,省去大部分较复杂操作,只介绍一些很必要的操作,帮助大家快速搭建集群。
环境准备
至少两台CPU架构一样的Linux服务器(本文使用的是两台centos7的x86虚拟机),互相能ping通,已关闭防火墙
获取安装包
在下载中心,选择一个和服务器CPU架构相对应的版本,我这里选择了KingbaseES_V009R001C002B0014_Lin64_install,点击下载后填写验证码即可开始下载。
下载好后,上传到一台Linux服务器上即可。
[kingbase@k8s-master pkg]$ pwd
/home/kingbase/kes/pkg
[kingbase@k8s-master pkg]$
[kingbase@k8s-master pkg]$ ll
total 2669444
-rw-r--r-- 1 kingbase kingbase 2733508608 Apr 11 19:31 KingbaseES_V009R001C002B0014_Lin64_install.iso
部署准备
准备部署所需文件
挂载ISO镜像文件,命令行安装客户端工具
[kingbase@k8s-master pkg]$ mkdir mnt
[kingbase@k8s-master pkg]$
[kingbase@k8s-master pkg]$ sudo mount KingbaseES_V009R001C002B0014_Lin64_install.iso mnt/
mount: /dev/loop0 is write-protected, mounting read-only
[kingbase@k8s-master pkg]$
[kingbase@k8s-master pkg]$ ls mnt/
setup setup.sh
[kingbase@k8s-master pkg]$ ./mnt/setup.sh -i console
...
一路确认即可
...
Choose Install Set
------------------
Please choose the Install Set to be installed by this installer.
->1- Full
2- Client
3- Custom
ENTER THE NUMBER FOR THE INSTALL SET, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
:(只部署集群这里可以选2省去很多步骤,选1会安装单机数据库,当然后期也可以自己手动init单机数据库)
===============================================================================
Choose Install Folder
---------------------
Please choose a destination folder for this installation.
Where would you like to install?
Default Install Folder: /opt/Kingbase/ES/V9
ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
:/home/kingbase/kes/client(客户端工具的安装路径)
安装完成后看到client目录如下
[kingbase@k8s-master kes]$ ll client/
total 0
lrwxrwxrwx 1 kingbase kingbase 67 Apr 11 19:45 ClientTools -> /home/kingbase/kes/client/KESRealPro/V009R001C002B0014/ClientTools/
lrwxrwxrwx 1 kingbase kingbase 59 Apr 11 19:45 doc -> /home/kingbase/kes/client/KESRealPro/V009R001C002B0014/doc/
lrwxrwxrwx 1 kingbase kingbase 63 Apr 11 19:45 install -> /home/kingbase/kes/client/KESRealPro/V009R001C002B0014/install/
lrwxrwxrwx 1 kingbase kingbase 65 Apr 11 19:45 Interface -> /home/kingbase/kes/client/KESRealPro/V009R001C002B0014/Interface/
drwxrwxr-x 3 kingbase kingbase 31 Apr 11 19:45 KESRealPro
lrwxrwxrwx 1 kingbase kingbase 64 Apr 11 19:45 SupTools -> /home/kingbase/kes/client/KESRealPro/V009R001C002B0014/SupTools/
lrwxrwxrwx 1 kingbase kingbase 65 Apr 11 19:45 Uninstall -> /home/kingbase/kes/client/KESRealPro/V009R001C002B0014/Uninstall/
接下来把部署集群所需要的文件拷出来(当然也可以直接在zip目录下操作)
[kingbase@k8s-master kes]$ mkdir rwc_install
[kingbase@k8s-master kes]$ cd rwc_install/
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ cp ../client/ClientTools/guitools/DeployTools/zip/* ./
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ ls
cluster_install.sh db.zip install.conf securecmdd.zip trust_cluster.sh
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ ll
total 322408
-rwxrwxr-x 1 kingbase kingbase 252402 Apr 11 19:48 cluster_install.sh
-rw-rw-r-- 1 kingbase kingbase 327258132 Apr 11 19:48 db.zip
-rw-rw-r-- 1 kingbase kingbase 19379 Apr 11 19:48 install.conf
-rw-rw-r-- 1 kingbase kingbase 2595145 Apr 11 19:48 securecmdd.zip
-rwxrwxr-x 1 kingbase kingbase 9677 Apr 11 19:48 trust_cluster.sh
编辑部署配置文件
vim install.conf
部署一个一主一备简单的带虚拟IP(VIP)的集群,主要(部分)参考配置如下:
[install] # 注意是改这个标签下的配置
all_ip=(192.168.232.128 192.168.232.129) # 空格间隔,当前节点IP放在前面
install_dir="/home/kingbase/kes/cluster/test1" # 部署路径,当前用户需要有权限
zip_package="/home/kingbase/kes/rwc_install/db.zip" # 上一步拷出来的zip包路径
db_password="1" # 密码,不改默认为12345678ab
db_port="54321" # 端口,默认54321,填写未被占用的端口
trusted_servers="192.168.232.2" # 网关,所有服务器都能ping通的ip,用ip route查看(default via后面即是)
virtual_ip="192.168.232.150/24" # 所有节点都ping不通的同网段ip,注意掩码一致
net_device=(ens33 ens33) # 配置VIP必填,ip addr可查看
net_device_ip=(192.168.232.128 192.168.232.129) # 配置VIP必填,一般与all_ip一致
install_with_root=1 # 入门选手可以不管
super_user="root"
execute_user="kingbase" # 部署用户,与部署路径保持一致
deploy_by_sshd=1 # 入门选手可以不管
use_scmd=1 # 入门选手可以不管
节点间免密
还是刚才的路径,root执行拷出来的免密脚本
[kingbase@k8s-master rwc_install]$ pwd
/home/kingbase/kes/rwc_install
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ ls
cluster_install.sh db.zip install.conf securecmdd.zip trust_cluster.sh
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ sudo ./trust_cluster.sh
[INFO] set password-free between root and kingbase
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:givn5Nv+haptZL5tC9LSFsoYHhuDWYKYupqrjZHZwLA root@k8s-master
The key's randomart image is:
+---[RSA 2048]----+
| |
|o. |
|* . |
|+* . |
|E.= . o S |
| B O =oo . |
|= * O+= . . |
|.= * *o+.. |
|B.. ==*++. |
+----[SHA256]-----+
Warning: Permanently added '192.168.232.128' (ECDSA) to the list of known hosts.
id_rsa 100% 1679 1.0MB/s 00:00
id_rsa.pub 100% 397 175.5KB/s 00:00
authorized_keys 100% 397 232.5KB/s 00:00
known_hosts 100% 348 229.8KB/s 00:00
Warning: Permanently added '192.168.232.129' (ECDSA) to the list of known hosts.
root@192.168.232.129's password:
id_rsa 100% 1679 843.1KB/s 00:00
id_rsa.pub 100% 397 193.7KB/s 00:00
authorized_keys 100% 397 166.1KB/s 00:00
known_hosts 100% 525 183.4KB/s 00:00
connect to "192.168.232.128" from current node by 'ssh' kingbase:0..... OK
connect to "192.168.232.128" from current node by 'ssh' root:0..... OK
connect to "192.168.232.129" from "192.168.232.128" by 'ssh' kingbase->kingbase:0 .... OK
connect to "192.168.232.129" from "192.168.232.128" by 'ssh' root->root:0 root->kingbase:0 kingbase->root:0.... OK
connect to "192.168.232.129" from current node by 'ssh' kingbase:0..... OK
connect to "192.168.232.129" from current node by 'ssh' root:0..... OK
connect to "192.168.232.128" from "192.168.232.129" by 'ssh' kingbase->kingbase:0 .... OK
connect to "192.168.232.128" from "192.168.232.129" by 'ssh' root->root:0 root->kingbase:0 kingbase->root:0.... OK
check ssh connection success!
验证一下确实不需要输入密码
[kingbase@k8s-master rwc_install]$ ssh kingbase@192.168.232.129 "date"
Fri Apr 11 20:18:45 PDT 2025
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ ssh root@192.168.232.129 "date"
Fri Apr 11 20:18:53 PDT 2025
执行部署
还是刚才的路径,集群部署用户**(普通用户)**执行拷出来的免密脚本
[kingbase@k8s-master rwc_install]$ pwd
/home/kingbase/kes/rwc_install
[kingbase@k8s-master rwc_install]$ ls
cluster_install.sh db.zip install.conf securecmdd.zip trust_cluster.sh
[kingbase@k8s-master rwc_install]$
[kingbase@k8s-master rwc_install]$ ./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.232.128" from current node by 'ssh' ... OK
[RUNNING] success connect to "192.168.232.128" from "192.168.232.128" by 'ssh' ... OK
[RUNNING] success connect to "192.168.232.129" from "192.168.232.128" by 'ssh' ... OK
......
中途可能会有关于环境变量的ERROR,不用管
部署完成后会打印集群状态
......
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string
----+-------+---------+-----------+----------+----------+----------+----------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 | node1 | primary | * running | | default | 100 | 1 | | host=192.168.232.128 user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000
2 | node2 | standby | running | node1 | default | 100 | 1 | 0 bytes | host=192.168.232.129 user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000
2025-04-11 20:48:21 The primary DB is started.
2025-04-11 20:48:24 Success to load virtual ip [192.168.232.150/24] on primary host [192.168.232.128].
2025-04-11 20:48:24 Try to ping vip on host 192.168.232.128 ...
2025-04-11 20:48:27 Try to ping vip on host 192.168.232.129 ...
2025-04-11 20:48:29 begin to start repmgrd on "[192.168.232.128]".
[2025-04-11 20:48:30] [NOTICE] using provided configuration file "/home/kingbase/kes/cluster/test1/kingbase/bin/../etc/repmgr.conf"
[2025-04-11 20:48:30] [NOTICE] redirecting logging output to "/home/kingbase/kes/cluster/test1/kingbase/log/hamgr.log"
2025-04-11 20:48:32 repmgrd on "[192.168.232.128]" start success.
2025-04-11 20:48:32 begin to start repmgrd on "[192.168.232.129]".
[2025-04-11 20:48:32] [NOTICE] using provided configuration file "/home/kingbase/kes/cluster/test1/kingbase/bin/../etc/repmgr.conf"
[2025-04-11 20:48:32] [NOTICE] redirecting logging output to "/home/kingbase/kes/cluster/test1/kingbase/log/hamgr.log"
2025-04-11 20:48:34 repmgrd on "[192.168.232.129]" start success.
ID | Name | Role | Status | Upstream | repmgrd | PID | Paused? | Upstream last seen
----+-------+---------+-----------+----------+---------+-------+---------+--------------------
1 | node1 | primary | * running | | running | 42431 | no | n/a
2 | node2 | standby | running | node1 | running | 21377 | no | 1 second(s) ago
[2025-04-11 20:48:36] [NOTICE] redirecting logging output to "/home/kingbase/kes/cluster/test1/kingbase/log/kbha.log"
[2025-04-11 20:48:39] [NOTICE] redirecting logging output to "/home/kingbase/kes/cluster/test1/kingbase/log/kbha.log"
2025-04-11 20:48:40 Done.
[INSTALL] start up the whole cluster ... OK
部署后检查
进入集群目录,检查集群状态如下即为正常
[kingbase@k8s-master rwc_install]$ cd /home/kingbase/kes/cluster/test1/kingbase/bin/
[kingbase@k8s-master bin]$
[kingbase@k8s-master bin]$ pwd
/home/kingbase/kes/cluster/test1/kingbase/bin
[kingbase@k8s-master bin]$
[kingbase@k8s-master bin]$ ./repmgr cluster show
ID | Name | Role | Status | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string
----+-------+---------+-----------+----------+----------+----------+----------+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 | node1 | primary | * running | | default | 100 | 1 | | host=192.168.232.128 user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000
2 | node2 | standby | running | node1 | default | 100 | 1 | 0 bytes | host=192.168.232.129 user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000
[kingbase@k8s-master bin]$
[kingbase@k8s-master bin]$ ./repmgr service status
ID | Name | Role | Status | Upstream | repmgrd | PID | Paused? | Upstream last seen
----+-------+---------+-----------+----------+---------+-------+---------+--------------------
1 | node1 | primary | * running | | running | 42431 | no | n/a
2 | node2 | standby | running | node1 | running | 21377 | no | 1 second(s) ago