暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

技术干货 | KingbaseES RAC 集群安装指南

原创 Lucifer三思而后行 2024-11-19
1115

大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。

社群交流

为了给大家提供一些技术交流的平台,目前已成立的技术交流群:

  • Oracle 数据库交流群
  • 国产数据库交流群
  • Linux 技术交流群
  • ChatGPT 4o 免费体验群

需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。

目录

前言

前文介绍了 KES RAC 的一些基础架构和概念,具体可参考:金仓 KingbaseES RAC 入门指南

实战才是王道,玩玩才知道好不好,本文记录一下在麒麟 V10 上安装部署 KES RAC 2 节点的详细过程。

环境准备

本文演示环境:

主机名 IP 版本 CPU 内存 硬盘
kesrac01 192.168.6.60 银河麒麟 Kylin V10 x86 8G 100G
kesrac02 192.168.6.61 银河麒麟 Kylin V10 x86 8G 100G

安装前配置

检查操作系统版本(所有节点)

检查操作系统版本信息:

## 以节点一为例 [root@kesrac01 ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Halberd)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (Halberd)" ANSI_COLOR="0;31"

配置 /etc/hosts(所有节点)

建议配置主机名解析:

## 以节点一为例 cat<<-EOF>>/etc/hosts 192.168.6.60 kesrac01 192.168.6.61 kesrac02 EOF

关闭防火墙(所有节点)

数据库安装均建议关闭防火墙:

## 以节点一为例 [root@kesrac01 ~]# systemctl stop firewalld [root@kesrac01 ~]# systemctl disable firewalld Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

禁用 selinux(所有节点)

所有节点建议关闭 SELNUX,防止造成一些不必要的问题:

## 以节点一为例 ## 这里使用 setenforce 0 临时生效 [root@kesrac01 ~]# /usr/sbin/setenforce 0 /usr/sbin/setenforce: SELinux is disabled [root@kesrac01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@kesrac01 ~]# sestatus SELinux status: disabled

将 SELINUX 参数设置为 disabled,即 SELINUX=disabled 保存退出后,需要重新启动才能生效。

创建主机用户(所有节点)

建议在所有服务器上创建 KES 产品的安装用户 kingbase,而非使用 root 身份执行安装部署:

## 以节点一为例 [root@kesrac01 ~]# useradd -u 2000 -d /home/kingbase -m kingbase [root@kesrac01 ~]# echo "kingbase:kingbase" | chpasswd [root@kesrac01 ~]# id kingbase 用户id=2000(kingbase) 组id=2000(kingbase) 组=2000(kingbase)

如果有密码复杂性要求,不想设置密码太复杂的话,可以取消密码复杂度:

## 以节点一为例 [root@kesrac01 ~]# sed -i 's/^password\+[[:space:]]\+requisite[[:space:]]\+pam_pwquality.so/#&/g' /etc/pam.d/system-auth [root@kesrac01 ~]# sed -i 's/use_authtok$//' /etc/pam.d/system-auth

为了使共享磁盘在节点间迁移时不会因改变属主而失去访问权限,我们需要保证共享磁盘的属主(也就是拥有 KingbaseES 实例的用户)在每个节点上的 uid 一致。

创建目录(所有节点)

为了利于数据库的日常运维、持续使用、存储扩容等,我们在安装前必须做好选项、存储目录规划。

创建安装所需目录并且授权:

## 以节点一为例 [root@kesrac01 ~]# mkdir -p /KingbaseES/V8 /backup /archive /install [root@kesrac01 ~]# chown -R kingbase:kingbase {/KingbaseES,/backup,/archive,/install} [root@kesrac01 ~]# chmod -R 775 {/KingbaseES,/backup,/archive,/install}

系统参数配置(所有节点)

为了避免在 KingbaseES 安装和使用过程中出现问题,官方建议调整系统内核参数:

参数 参考值 所在文件
semmsl 250 /proc/sys/kernel/sem
semmns 32000 /proc/sys/kernel/sem
semopm 100 /proc/sys/kernel/sem
semmni 128 /proc/sys/kernel/sem
shmall 2097152 /proc/sys/kernel/shmall
shmmax 最小: 536870912
最大: 物理内存值减去1字节
建议: 大于物理内存的一半
/proc/sys/kernel/shmmax
shmmin 4096 /proc/sys/kernel/shmmni
file-max 6815744 /proc/sys/fs/file-max
aio-max-nr 1048576
注意: 本参数限制并发发出的请求数量。应该设置以避免IO子系统的失败。
/proc/sys/fs/aio-max-nr
ip_local_port_range 最小:9000
最大:65500
/proc/sys/net/ipv4/ip_local_port_range
rmem_default 262144 /proc/sys/net/core/rmem_default
rmem_max 4194304 /proc/sys/net/core/rmem_max
wmem_default 262144 /proc/sys/net/core/wmem_default
wmem_max 1048576 /proc/sys/net/core/wmem_max

注意:这里关于 shmmax 和 shmall 参数值的计算,我们可以参考 oracle 来设置:

# 物理内存(KB) os_memory_total=$(awk '/MemTotal/{print $2}' /proc/meminfo) # 获取系统页面大小,用于计算内存总量 pagesize=$(getconf PAGE_SIZE) ((shmall = (os_memory_total - 1) * 1024 / pagesize)) ((shmmax = os_memory_total * 1024 - 10)) # 如果 shmall 小于 2097152,则将其设为 2097152 ((shmall < 2097152)) && shmall=2097152 # 如果 shmmax 小于 4294967295,则将其设为 4294967295 ((shmmax < 4294967295)) && shmmax=4294967295

复制以上命令,直接执行即可计算得出这两个参数值:

## 以节点一为例 [root@kesrac01 ~]# echo $shmall 2097152 [root@kesrac01 ~]# echo $shmmax 7008071670

根据官方建议值,配置系统参数文件:

## 以节点一为例 [root@kesrac01 ~]# cat<<-EOF>>/etc/sysctl.conf fs.aio-max-nr= 1048576 fs.file-max= 6815744 kernel.shmall= 2097152 kernel.shmmax= 7008071670 kernel.shmmni= 4096 kernel.sem= 250 32000 100 128 net.ipv4.ip_local_port_range= 9000 65500 net.core.rmem_default= 262144 net.core.rmem_max= 4194304 net.core.wmem_default= 262144 net.core.wmem_max= 1048576 EOF ## 生效配置 [root@kesrac01 ~]# sysctl -p

资源配置(所有节点)

限制用户可使用的资源数量对系统的稳定性非常重要,可以通过调整资源限制数量改进系统性能:

## 以节点一为例 [root@kesrac01 ~]# cat<<-EOF>>/etc/security/limits.conf kingbase soft nofile 65536 kingbase hard nofile 65536 kingbase soft nproc 65536 kingbase hard nproc 65536 kingbase soft core unlimited kingbase hard core unlimited EOF

配置 RemoveIPC(所有节点)

systemd-logind 服务中引入的一个特性 RemoveIPC,会造成程序信号丢失等问题,只有Redhat7 及以上和一些特殊的国产Linux的版本需要修改,改之前可先查看此项是否为默认yes),需要设置 RemoveIPC=no:

## 以节点一为例 [root@kesrac01 ~]# sed -i 's/#RemoveIPC=no/RemoveIPC=no/' /etc/systemd/logind.conf [root@kesrac01 ~]# grep RemoveIPC /etc/systemd/logind.conf RemoveIPC=no # 重新加载 systemd 守护进程并重启 systemd-logind 服务生效 [root@kesrac01 ~]# systemctl daemon-reload [root@kesrac01 ~]# systemctl restart systemd-logind.service

检查 /tmp 目录(所有节点)

KES 安装对于 /tmp 目录有一定要求,至少需要 10G 空间,否则安装时会报警并使用 kingbase 用户家目录作为替代:

Now launch installer... 正在准备进行安装 警告:/tmp 磁盘空间不足!正在尝试将 /home/kingbase 用于安装基础和 tmp dir。

手动挂载 /tmp 目录空间:

## 以节点一为例 [root@kesrac01 ~]# cat<<-EOF>>/etc/fstab tmpfs /tmp tmpfs size=10G 0 0 EOF [root@kesrac01 ~]# mount -o remount /tmp [root@kesrac01 ~]# df -h | grep /tmp tmpfs 10G 16K 10G 1% /tmp

配置时间同步(所有节点)

这个不是必须配置,但是建议配置,用于在系统中配置 NTP 实现时间同步。

⭐️ 配置 Linux 时间同步可以参考为之前写的文章:Linux 一键配置时钟同步全攻略

本文未配置时间同步。

配置软件源(所有节点)

Linux 系统安装软件需要配置本地软件源。

⭐️ 配置 Linux 软件源可以参考为之前写的文章:DBA 必备:Linux 软件源配置全攻略

配置本地软件源的方式需要先挂载本地 ISO 安装镜像:

mount /dev/sr0 /mnt

一键配置 KylinV10 本地软件源:

## 以节点一为例 ## 备份软件源初始配置 [root@kesrac01 ~]# mkdir -p /etc/yum.repos.d/bak [root@kesrac01 ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak mv: 无法将目录'/etc/yum.repos.d/bak' 移动至自身的子目录'/etc/yum.repos.d/bak/bak'## 配置软件源 [root@kesrac01 ~]# cat<<-EOF>/etc/yum.repos.d/local.repo [server] name=server baseurl=file:///mnt enabled=1 gpgcheck=0 EOF ## 查看软件源内容 [root@kesrac01 ~]# cat /etc/yum.repos.d/local.repo [server] name=server baseurl=file:///mnt enabled=1 gpgcheck=0

确保软件源配置完成,就可以安装软件了。

挂载共享盘(所有节点)

构建 KingbaseES RAC 架构,需要准备好两块共享存储:

  • 投票盘:大小不小于 100MB;
  • 数据盘:大小可根据实际环境设置。

可以采用 iSCSI 设备或其他多点可见存储设备作为共享存储。如果只有一块共享存储,可采用分区方式来对投票盘和数据盘进行区分,可以采用 fdisk 或 parted 命令进行分区。

本文通过 iscsi 共享存储作为数据库存储文件系统。

⭐️ 配置 iscsi 共享盘可以参考为之前写的文章:实战篇:使用 StarWind 配置 ISCSI 共享存储

1、Linux 客户端安装 iscsi 软件

## 以节点一为例 ## 如果遇到报错 -bash: iscsiadm:未找到命令,就需要安装 iscsi 软件 [root@kesrac01 ~]# yum install -y iscsi-initiator-utils* [root@kesrac01 ~]# systemctl start iscsid.service [root@kesrac01 ~]# systemctl enable iscsid.service

2、搜索服务端 iscsi target

## 以节点一为例 ## 192.168.6.43 为 iscsi 服务端 IP 地址 [root@kesrac01 ~]# iscsiadm -m discovery -t st -p 192.168.6.43 192.168.6.43:3260,-1 iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer

3、连接服务端 iscsi 共享存储

## 以节点一为例 ## iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer 为上一步搜索出的 target 名称 [root@kesrac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer -p 192.168.6.43 -l Logging in to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer, portal: 192.168.6.43,3260] Login to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer, portal: 192.168.6.43,3260] successful.

4、配置开机自动挂载

## 以节点一为例 [root@kesrac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer -p 192.168.6.43 --op update -n node.startup -v automatic

5、查看挂载成功的共享盘

## 以节点一为例,sdb 和 sdc 为挂载的共享盘 [root@kesrac01 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 99G 0 part ├─klas-root 253:0 0 91.1G 0 lvm / └─klas-swap 253:1 0 7.9G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk sdc 8:32 0 20G 0 disk sr0 11:0 1 4.4G 0 rom /mnt

挂载好共享盘之后就可以配置 UDEV 绑盘了。

UDEV 绑盘(所有节点)

如果共享盘是多路径,建议可以先使用 multipath 进行绑盘,便于管理。

我这里只有一条路径,查看节点磁盘 wwid:

## 以节点一为例 [root@kesrac01 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb 22d5116c157b61795 [root@kesrac01 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc 2f055a2b742fd0cc9

执行 udev 绑定:

## 以节点一为例 ## 防止规则冲突,建议使用 99-persist-iscsi.rules,以确保此规则在最后生效 [root@kesrac01 ~]# cat<<-EOF>/etc/udev/rules.d/99-persist-iscsi.rules KERNEL=="sd*",ENV{ID_SERIAL}=="22d5116c157b61795",SYMLINK+="qdisk%n",MODE:="0644" KERNEL=="sd*",ENV{ID_SERIAL}=="2f055a2b742fd0cc9",SYMLINK+="kdata%n",MODE:="0644" EOF

生效 udev:

## 以节点一为例 [root@kesrac01 ~]# udevadm control --reload-rules [root@kesrac01 ~]# udevadm trigger --type=devices --action=change

查看绑定后的盘:

## 以节点一为例 [root@kesrac01 ~]# ll /dev/qdisk lrwxrwxrwx 1 root root 3 11月 18 11:38 /dev/qdisk -> sdb [root@kesrac01 ~]# ll /dev/kdata lrwxrwxrwx 1 root root 3 11月 18 11:38 /dev/kdata -> sdc

确保两个节点都绑定成功。配置方面到这就结束了。

部署 KingbaseES RAC 集群

安装数据库软件(所有节点)

安装 KES RAC 之前需要现在各个节点安装 KingbaseES RAC 数据库软件。

在所有节点都分别上传 KES RAC 安装包:KingbaseES_V008R006B1108_Lin64_install.iso 到 /install 目录下,目前暂不开放下载,如有需要可向官方申请试用。

以节点一为例

## 挂载 iso 文件需要使用 root 用户,安装包上传在 /install 目录,挂载到 /mnt 目录下 [root@kesrac01 ~]# umount /mnt [root@kesrac01 ~]# mount -o loop /install/KingbaseES_V008R006B1108_Lin64_install.iso /mnt/ ## 将挂载出来的安装文件拷贝到 /install 目录下 [root@kesrac01 ~]# cp -r /mnt/* /install ## 复制完成后取消安装 iso 的挂载 [root@kesrac01 ~]# umount /mnt ## 由于之前 root 复制的安装文件权限为 root,所以需要重新授权 kingbase 用户 [root@kesrac01 ~]# chown -R kingbase:kingbase /install [root@kesrac01 ~]# su - kingbase [kingbase@kesrac01 ~]$ cd /install/ ## 命令行安装 [kingbase@kesrac01 install]$ sh setup.sh -i console Now launch installer... 正在准备进行安装 正在从安装程序档案中提取 JRE... 正在解包 JRE... 正在从安装程序档案中提取安装资源... 配置该系统环境的安装程序... Verifying JVM........ 正在启动安装程序... =============================================================================== KingbaseES V8 (使用 InstallAnywhere 创建) ------------------------------------------------------------------------------- 正在准备控制台模式安装... 许可协议不分省略.... 是否接受此许可协议条款? (Y/N): Y =============================================================================== 选择安装集 ----- 请选择将由本安装程序安装的“安装集”。 ->1- 完全安装 2- 客户端安装 3- 定制安装 输入“安装集”的号码,或按 <ENTER> 键以接受缺省值 =============================================================================== 选择服务器类型 ------- 请选择服务器类型: ->1- default 2- rac 输入您选择的号码,或按 <ENTER> 键以接受缺省值: 2 =============================================================================== 选择授权文件 ------ 不选择授权文件,则使用软件自带试用版授权 提示:请在有效期内及时更换正式授权文件。 文件路径 : =============================================================================== 选择安装目录 ------ 请选择一个安装目录。 您想在哪一位置安装? 缺省安装文件夹: /opt/Kingbase/ES/V8 输入一个绝对路径,或按 <ENTER> 键以接受缺省路径 : /KingbaseES/V8 安装文件夹为: /KingbaseES/V8 是否正确? (Y/N): Y =============================================================================== 预安装摘要 ----- 在继续执行前请检查以下信息: 产品名: KingbaseES V8 安装文件夹: /KingbaseES/V8 产品功能部件: 数据库服务器, 接口, 数据库部署工具, 高可用组件, 数据库开发管理工具, 数据库迁移工具 安装空间磁盘信息 所需磁盘空间: 5378 MB 空闲磁盘空间: 79279 MB 请按 <ENTER> 键继续: =============================================================================== 准备就绪,可以安装 --------- 本安装程序已准备完毕,可在下列位置安装 KingbaseES V8: /KingbaseES/V8 按 <ENTER> 键进行安装: =============================================================================== 正在安装... ------- [==================|==================|==================|==================] [------------------|------------------|------------------|-------- =============================================================================== 安装完成 ---- 恭喜!KingbaseES V8 已成功地安装到: /KingbaseES/V8 按 <ENTER> 键以退出安装程序: Complete.

📢 注意:服务器类型要选择 rac,密钥为空直接回车试用即可。

创建集群部署目录(所有节点)

安装完 KingbaseES 后,进入安装后的数据库 install/script 目录,执行 rootDeployClusterware.sh 脚本:

## 以节点一为例 [root@kesrac01 script]# vi rootDeployClusterware.sh ## 执行前需要检查 rootDeployClusterware.sh 脚本中的 INSTALLDIR 变量,需要修改为 KingbaseES 软件安装目录,本教程正常无需修改 ## INSTALLDIR=/KingbaseES/V8 ## 使用 root 用户执行脚本 [root@kesrac01 script]# sh rootDeployClusterware.sh [root@kesrac01 ~]# ll /opt/KingbaseHA/ -rw-r--r-- 1 root root 4150 11月 18 14:14 cluster_manager.conf -rwxr-xr-x 1 root root 64786 11月 18 14:14 cluster_manager.sh drwxr-xr-x 9 root root 130 11月 18 14:14 corosync drwxr-xr-x 7 root root 130 11月 18 14:14 corosync-qdevice drwxr-xr-x 8 root root 74 11月 18 14:14 crmsh drwxr-xr-x 7 root root 70 11月 18 14:14 dlm-dlm drwxr-xr-x 5 root root 42 11月 18 14:14 fence_agents drwxr-xr-x 7 root root 140 11月 18 14:14 gfs2 drwxr-xr-x 6 root root 57 11月 18 14:14 gfs2-utils drwxr-xr-x 5 root root 42 11月 18 14:14 ipmi_tool -rwxr-xr-x 1 root root 2962 11月 18 14:14 keep_cluster_alive.sh drwxr-xr-x 7 root root 89 11月 18 14:14 kingbasefs drwxr-xr-x 5 root root 45 11月 18 14:15 kronosnet drwxr-xr-x 2 root root 4096 11月 18 14:15 lib drwxr-xr-x 2 root root 29 11月 18 14:15 lib64 drwxr-xr-x 7 root root 68 11月 18 14:15 libqb drwxr-xr-x 10 root root 146 11月 18 14:15 pacemaker drwxr-xr-x 6 root root 56 11月 18 14:15 python2.7

执行完成后会将 INSTALLDIR 目录下的 KingbaseHA 软件包拷贝到 /opt 目录下。

配置 cluster_manager.conf(所有节点)

进入 KingbaseHA 目录,修改集群搭建必要参数:

查看 cluster_manager.conf 默认配置:

[root@kesrac01 ~]# cd /opt/KingbaseHA/ [root@kesrac01 KingbaseHA]# cat cluster_manager.conf |grep -v ^$|grep -v ^# cluster_name=kcluster node_name=(node1 node2) node_ip=(192.168.5.1 192.168.5.2) enable_qdisk=1 votingdisk=/dev/sde sharedata_dir=/sharedata/data_gfs2 sharedata_disk=/dev/sdb install_dir=/opt/KingbaseHA env_bash_file=/root/.bashrc keep_cluster_alive=0 pacemaker_daemon_group=haclient pacemaker_daemon_user=hacluster kingbaseowner=kingbase kingbasegroup=kingbase kingbase_install_dir=/home/kingbase/V8/Server database="test" username="system" password="123456" initdb_options="-A trust -U $username" enable_fence=1 enable_esxi=0 esxi_server=192.168.4.5 esxi_user=root esxi_passwd="Kingbase@99" enable_ipmi=0 ipmi_server=(192.168.2.100 192.168.2.101) ipmi_user=(Administrator Administrator) ipmi_passwd=("Admin@9000" "Admin@9000") enable_qdisk_fence=1 qdisk_watchdog_dev=/dev/watchdog qdisk_watchdog_timeout=30 enable_fip=0 fip=(192.168.4.139 192.168.4.140) fip_interface=(bond0 bond0) fip_netmask=24 enable_heuristics=1 heuristics_interval=1000 heuristics_timeout=10000 heuristics_ping_gateway="" heuristics_reskey_attempts=1 heuristics_exec="exec_ping: /bin/ping -q -c $heuristics_reskey_attempts $heuristics_ping_gateway" install_rac=1 rac_port=54321 rac_lms_port=53444 rac_lms_count=7 install_ssma=0 ssma_data_disk=("-U f0c8f59d-0cc8-473c-970d-d19b30d87f5e" "-U 7075f361-f3ad-48cf-87cc-ecc3db4a063a") ssma_data_dir=(/sharedata/data1 /sharedata/data2) ssma_port=(36321 36322) ssma_fstype=ext4

需要修改参数为:

## 集群名称 cluster_name=krac ## 集群节点主机名 node_name=(kesrac01 kesrac02) ## 集群节点 IP node_ip=(192.168.6.60 192.168.6.61) ## 仲裁磁盘和 votedisk votingdisk=/dev/sdb ## 数据库共享存储磁盘 sharedata_disk=/dev/sdc ## KingbaseES 软件安装路径 kingbase_install_dir=/KingbaseES/V8/Server ## 不启用 heuristics enable_heuristics=0

配置修改完之后即可,后续需要调用。

磁盘初始化(节点一)

本文基于 SAN 的部署,所以需要初始化仲裁和 votedisk 磁盘(iscsi 共享存储)。

初始化仲裁盘

## root 用户执行 [root@kesrac01 ~]# cd /opt/KingbaseHA/ [root@kesrac01 KingbaseHA]# ./cluster_manager.sh --qdisk_init votingdisk init start disk /dev/sdb has already initialized as label 'krac' Are you sure you want to initialize again? [Y/N]: Y /dev/block/8:16: /dev/disk/by-id/scsi-22d5116c157b61795: /dev/disk/by-path/ip-192.168.6.43:3260-iscsi-iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer-lun-0: /dev/qdisk: /dev/sdb: Magic: eb7a62c2 Label: krac Created: Mon Nov 18 14:23:16 2024 Host: kesrac01 Kernel Sector Size: 512 Recorded Sector Size: 512 votingdisk init success

初始化数据盘

[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --cluster_disk_init sharedata disk init start It appears to contain an existing filesystem (gfs2) This will destroy any data on /dev/sdc Are you sure you want to proceed? (Y/N): Y Adding journals: Done Building resource groups: Done Creating quota file: Done Writing superblock and syncing: Done Device: /dev/sdc Block size: 4096 Device size: 20.00 GB (5242880 blocks) Filesystem size: 20.00 GB (5242876 blocks) Journals: 3 Journal size: 512MB Resource groups: 77 Locking protocol: "lock_dlm" Lock table: "krac:gfs2" UUID: b8f79ae5-5d80-4596-aab8-1ecda4eaf685 sharedata disk init success

基础组件初始化(所有节点)

使用 root 用户在所有节点执行,更新操作系统内核的 gfs2 模块:

## 以节点一为例 [root@kesrac01 KingbaseHA]# ./cluster_manager.sh --init_gfs2 init gfs2 start current OS kernel version does not support updating gfs2, please confirm whether to continue? (Y/N): Y init the OS native gfs2 success

使用 root 用户在所有节点执行,初始化所有基础组件,如corosync,pacemaker,corosync-qdevice:

## 以节点一为例 [root@kesrac01 KingbaseHA]# ./cluster_manager.sh --base_configure_init init kernel soft watchdog start init kernel soft watchdog success config host start config host success add env varaible in /root/.bashrc add env variable success config corosync.conf start config corosync.conf success Starting Corosync Cluster Engine (corosync): [WARNING] add pacemaker daemon user start add pacemaker daemon user success config pacemaker success Starting Pacemaker Cluster Manager[ OK ] config qdevice start config qdevice success clean qdisk fence flag start clean qdisk fence flag success Starting Qdisk Fenced daemon (qdisk-fenced): [ OK ] Starting Corosync Qdevice daemon (corosync-qdevice): [ OK ] config kingbase rac start config kingbase rac success add_udev_rule start add_udev_rule success check and mknod for dlm start /opt/KingbaseHA/corosync/etc/corosync/uidgid.d /opt/KingbaseHA/corosync/etc/corosync/uidgid.d /opt/KingbaseHA/corosync/etc/corosync/uidgid.d check and mknod for dlm success

初始化之后,查看环境变量:

[root@kesrac01 KingbaseHA]# cat /root/.bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi export install_dir=/opt/KingbaseHA export PATH=/opt/KingbaseHA/python2.7/bin:/opt/KingbaseHA/pacemaker/sbin/:$PATH export PATH=/opt/KingbaseHA/crmsh/bin:/opt/KingbaseHA/pacemaker/libexec/pacemaker/:$PATH export PATH=/opt/KingbaseHA/corosync/sbin:/opt/KingbaseHA/corosync-qdevice/sbin:$PATH export PYTHONPATH=/opt/KingbaseHA/python2.7/lib/python2.7/site-packages/:/opt/KingbaseHA/crmsh/lib/python2.7/site-packages:$PYTHONPATH export COROSYNC_MAIN_CONFIG_FILE=/opt/KingbaseHA/corosync/etc/corosync/corosync.conf export CRM_CONFIG_FILE=/opt/KingbaseHA/crmsh/etc/crm/crm.conf export OCF_ROOT=/opt/KingbaseHA/pacemaker/ocf export HA_SBIN_DIR=/opt/KingbaseHA/pacemaker/sbin/ export QDEVICE_SBIN_DIR=/opt/KingbaseHA/corosync-qdevice/sbin/ export LD_LIBRARY_PATH=/opt/KingbaseHA/lib64/:$LD_LIBRARY_PATH export HA_INSTALL_PATH=/opt/KingbaseHA export PATH=/opt/KingbaseHA/dlm-dlm/sbin:/opt/KingbaseHA/gfs2-utils/sbin:$PATH export LD_LIBRARY_PATH=/opt/KingbaseHA/corosync/lib/:$LD_LIBRARY_PATH

检查 corosync 和 pacemaker 进程:

## corosync [root@kesrac01 KingbaseHA]# ps -ef|grep corosync root 43300 1 1 14:41 ? 00:00:00 /opt/KingbaseHA/corosync/sbin/corosync -c /opt/KingbaseHA/corosync/etc/corosync/corosync.conf -p /opt/KingbaseHA/corosync/var/ root 43436 1 0 14:41 ? 00:00:00 corosync-qdevice -p /opt/KingbaseHA/corosync-qdevice/var/run/corosync-qdevice/corosync-qdevice.sock root 43437 1 0 14:41 ? 00:00:00 corosync-qdevice -p /opt/KingbaseHA/corosync-qdevice/var/run/corosync-qdevice/corosync-qdevice.sock root 43588 9128 0 14:42 pts/0 00:00:00 grep --color=auto corosync ## pacemaker [root@kesrac01 KingbaseHA]# ps -ef|grep pacemaker root 43341 1 0 14:41 pts/0 00:00:00 /opt/KingbaseHA/pacemaker/sbin/pacemakerd -d /opt/KingbaseHA/pacemaker haclust+ 43344 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-based -d /opt/KingbaseHA/pacemaker root 43345 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-fenced -d /opt/KingbaseHA/pacemaker root 43346 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-execd -d /opt/KingbaseHA/pacemaker haclust+ 43347 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-attrd haclust+ 43348 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-schedulerd -d /opt/KingbaseHA/pacemaker haclust+ 43349 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-controld -d /opt/KingbaseHA/pacemaker root 43598 9128 0 14:42 pts/0 00:00:00 grep --color=auto pacemaker

查看集群资源:

## 需要生效环境变量 [root@kesrac01 KingbaseHA]# source /root/.bashrc [root@kesrac01 KingbaseHA]# crm status Cluster Summary: * Stack: corosync * Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum * Last updated: Mon Nov 18 14:44:06 2024 * Last change: Mon Nov 18 14:41:35 2024 by hacluster via crmd on kesrac01 * 2 nodes configured * 0 resource instances configured Node List: * Online: [ kesrac01 kesrac02 ] Full List of Resources: * No resources

确保两个节点的进程均已正常启动。

gfs2 相关资源初始化(节点一)

配置 fence、dlm 和 gfs2 资源:

[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --config_gfs2_resource config dlm and gfs2 resource start b8f79ae5-5d80-4596-aab8-1ecda4eaf685 config dlm and gfs2 resource success

查看集群资源:

## 注意 gfs2 一直在 Starting 状态 [root@kesrac01 KingbaseHA]# crm status Cluster Summary: * Stack: corosync * Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum * Last updated: Mon Nov 18 14:47:00 2024 * Last change: Mon Nov 18 14:44:23 2024 by root via cibadmin on kesrac01 * 2 nodes configured * 6 resource instances configured Node List: * Online: [ kesrac01 kesrac02 ] Full List of Resources: * fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02 * fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01 * Clone Set: clone-dlm [dlm]: * Started: [ kesrac01 kesrac02 ] * Clone Set: clone-gfs2 [gfs2]: * gfs2 (ocf::heartbeat:Filesystem): Starting kesrac01 * gfs2 (ocf::heartbeat:Filesystem): Starting kesrac02 ## 要等待 dlm 和 gfs2 全都启动到 Started 才算完成 [root@kesrac01 KingbaseHA]# crm status Cluster Summary: * Stack: corosync * Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum * Last updated: Mon Nov 18 14:47:38 2024 * Last change: Mon Nov 18 14:44:23 2024 by root via cibadmin on kesrac01 * 2 nodes configured * 6 resource instances configured Node List: * Online: [ kesrac01 kesrac02 ] Full List of Resources: * fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02 * fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01 * Clone Set: clone-dlm [dlm]: * Started: [ kesrac01 kesrac02 ] * Clone Set: clone-gfs2 [gfs2]: * Started: [ kesrac01 kesrac02 ]

确保集群状态正常。

初始化数据库集簇(节点一)

创建 RAC 数据库实例,初始化数据库:

[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --init_rac init KingbaseES RAC start create_rac_share_dir start create_rac_share_dir success 数据库簇将使用本地化语言 "zh_CN.utf8"进行初始化. 默认的数据库编码已经相应的设置为 "UTF8". 属于此数据库系统的文件宿主为用户 "kingbase". 此用户也必须为服务器进程的宿主. initdb: could not find suitable text search configuration for locale "zh_CN.utf8" 缺省的文本搜索配置将会被设置到"simple" 字符串的比较区分大小写. 禁止为数据页生成校验和. 输入新的超级用户口令: 再输入一遍: 创建目录 /sharedata/data_gfs2/kingbase/data ... 成功 正在创建子目录 ... 成功 选择动态共享内存实现 ......posix 选择默认最大联接数 (max_connections) ... 100 选择默认共享缓冲区大小 (shared_buffers) ... 128MB 选择默认时区...Asia/Shanghai 创建配置文件 ... 成功 开始设置加密设备 正在初始化加密设备...成功 正在运行自举脚本 ...成功 正在执行自举后初始化 ...成功 创建安全数据库...成功 加载安全数据库...成功 同步数据到磁盘...成功 成功。您现在可以用下面的命令开启数据库服务器: ./sys_ctl -D /sharedata/data_gfs2/kingbase/data -l 日志文件 start init KingbaseES RAC success

托管数据库(节点一)

推荐使用 pacemaker 管理数据库的启动和停止,这样可以获得更好的可用性。

初始化 PINGD、FIP、DB 资源:

[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --config_rac_resource crm configure DB resource start crm configure DB resource end

查看资源配置信息:

[root@kesrac01 KingbaseHA]# crm config show node 1: kesrac01 node 2: kesrac02 primitive DB ocf:kingbase:kingbase \ params sys_ctl="/KingbaseES/V8/Server/bin/sys_ctl" ksql="/KingbaseES/V8/Server/bin/ksql" sys_isready="/KingbaseES/V8/Server/bin/sys_isready" kb_data="/sharedata/data_gfs2/kingbase/data" kb_dba=kingbase kb_host=0.0.0.0 kb_user=system kb_port=54321 kb_db=template1 logfile="/KingbaseES/V8/Server/log/kingbase1.log" \ op start interval=0 timeout=120 \ op stop interval=0 timeout=120 \ op monitor interval=9s timeout=30 on-fail=restart \ meta failure-timeout=5min primitive dlm ocf:pacemaker:controld \ params daemon="/opt/KingbaseHA/dlm-dlm/sbin/dlm_controld" dlm_tool="/opt/KingbaseHA/dlm-dlm/sbin/dlm_tool" args="-s 0 -f 0" \ op start interval=0 \ op stop interval=0 \ op monitor interval=60 timeout=60 primitive fence_qdisk_0 stonith:fence_qdisk \ params qdisk_path="/dev/sdb" qdisk_fence_tool="/opt/KingbaseHA/corosync-qdevice/sbin/qdisk-fence-tool" pcmk_host_list=kesrac01 \ op monitor interval=60s \ meta failure-timeout=5min target-role=Started primitive fence_qdisk_1 stonith:fence_qdisk \ params qdisk_path="/dev/sdb" qdisk_fence_tool="/opt/KingbaseHA/corosync-qdevice/sbin/qdisk-fence-tool" pcmk_host_list=kesrac02 \ op monitor interval=60s \ meta failure-timeout=5min target-role=Started primitive gfs2 Filesystem \ params device="-o noatime -U b8f79ae5-5d80-4596-aab8-1ecda4eaf685" directory="/sharedata/data_gfs2" fstype=gfs2 \ op start interval=0 timeout=7200 \ op stop interval=0 timeout=60 \ op monitor interval=30s timeout=60 OCF_CHECK_LEVEL=10 \ meta failure-timeout=5min clone clone-DB DB \ meta interleave=true target-role=Started clone clone-dlm dlm \ meta interleave=true target-role=Started clone clone-gfs2 gfs2 \ meta interleave=true target-role=Started colocation cluster-colo1 inf: clone-gfs2 clone-dlm order cluster-order1 clone-dlm clone-gfs2 order cluster-order2 clone-dlm clone-gfs2 clone-DB location fence_qdisk_0-on-kesrac02 fence_qdisk_0 1800: kesrac02 location fence_qdisk_1-on-kesrac01 fence_qdisk_1 1800: kesrac01 property cib-bootstrap-options: \ have-watchdog=false \ dc-version=2.0.3.0.0-4b1f869f0f \ cluster-infrastructure=corosync \ cluster-name=krac \ cluster-recheck-interval=3min \ load-threshold="0%"

查看当前数据库状态:

[root@kesrac01 ~]# crm resource status clone-DB resource clone-DB is running on: kesrac01 resource clone-DB is running on: kesrac02

配置完成后,尝试关闭数据库资源:

[root@kesrac01 ~]# crm resource stop clone-DB ## 需要等待几秒后,再次查看发现数据库已经关闭 [root@kesrac01 ~]# crm resource status clone-DB resource clone-DB is NOT running resource clone-DB is NOT running

开启数据库资源:

[root@kesrac01 ~]# crm resource start clone-DB ## 启动成功 [root@kesrac01 ~]# crm resource status clone-DB resource clone-DB is running on: kesrac01 resource clone-DB is running on: kesrac02

查看集群状态:

[root@kesrac01 ~]# crm status Cluster Summary: * Stack: corosync * Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum * Last updated: Mon Nov 18 16:11:55 2024 * Last change: Mon Nov 18 16:11:35 2024 by root via cibadmin on kesrac01 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ kesrac01 kesrac02 ] Full List of Resources: * fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02 * fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01 * Clone Set: clone-dlm [dlm]: * Started: [ kesrac01 kesrac02 ] * Clone Set: clone-gfs2 [gfs2]: * Started: [ kesrac01 kesrac02 ] * Clone Set: clone-DB [DB]: * Started: [ kesrac01 kesrac02 ]

使用 pacemaker 托管数据库是推荐的做法,这样可以获得更好的可用性。

启停集群

启动停止集群需要在 root 用户下执行,使用 cluster_manager.sh 脚本。

关闭集群

## 在任意节点均可以执行,只会关闭当前执行节点的集群资源 [root@kesrac02 ~]# cd /opt/KingbaseHA/ [root@kesrac02 KingbaseHA]# ./cluster_manager.sh stop Signaling Pacemaker Cluster Manager to terminate[ OK ] Waiting for cluster services to unload..........[ OK ] Signaling Qdisk Fenced daemon (qdisk-fenced) to terminate: [ OK ] Waiting for qdisk-fenced services to unload:[ OK ] Signaling Corosync Qdevice daemon (corosync-qdevice) to terminate: [ OK ] Waiting for corosync-qdevice services to unload:.[ OK ] Signaling Corosync Cluster Engine (corosync) to terminate: [ OK ] Waiting for corosync services to unload:..[ OK ]

此时查看当前节点集群状态:

[root@kesrac02 KingbaseHA]# crm status Error: cluster is not available on this node ERROR: status: crm_mon (rc=102): ## 查看集群各服务状态 [root@kesrac02 KingbaseHA]# ./cluster_manager.sh status corosync is stopped pacemakerd is stopped corosync-qdevice is stopped qdisk-fenced is stopped ## 也可以分别查看各个资源状态 [root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_pacemaker pacemakerd is stopped [root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_corosync corosync is stopped [root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_qdevice corosync-qdevice is stopped [root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_qdisk_fenced qdisk-fenced is stopped

查看另一个节点的集群状态:

[root@kesrac01 install]# crm status Cluster Summary: * Stack: corosync * Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum * Last updated: Mon Nov 18 16:38:57 2024 * Last change: Mon Nov 18 16:11:35 2024 by root via cibadmin on kesrac01 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ kesrac01 ] * OFFLINE: [ kesrac02 ] Full List of Resources: * fence_qdisk_0 (stonith:fence_qdisk): Started kesrac01 * fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01 * Clone Set: clone-dlm [dlm]: * Started: [ kesrac01 ] * Stopped: [ kesrac02 ] * Clone Set: clone-gfs2 [gfs2]: * Started: [ kesrac01 ] * Stopped: [ kesrac02 ] * Clone Set: clone-DB [DB]: * Started: [ kesrac01 ] * Stopped: [ kesrac02 ] ## 节点 1 的集群各服务状态正常 [root@kesrac01 install]# cd /opt/KingbaseHA/ [root@kesrac01 KingbaseHA]# ./cluster_manager.sh status corosync (pid 43300) is running... pacemakerd (pid 43341) is running... corosync-qdevice (pid 43437) is running... qdisk-fenced (pid 43379) is running...

可以发现节点 2 集群已经关闭,对应的集群和数据库资源均已关闭。

启动集群

[root@kesrac02 KingbaseHA]# ./cluster_manager.sh start Waiting for node failover handling:[ OK ] Starting Corosync Cluster Engine (corosync): [WARNING] clean qdisk fence flag start clean qdisk fence flag success Starting Qdisk Fenced daemon (qdisk-fenced): [ OK ] Starting Corosync Qdevice daemon (corosync-qdevice): [ OK ] Waiting for quorate:..................[ OK ] Starting Pacemaker Cluster Manager[ OK ]

查看集群状态:

[root@kesrac02 KingbaseHA]# crm status Cluster Summary: * Stack: corosync * Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum * Last updated: Mon Nov 18 16:53:09 2024 * Last change: Mon Nov 18 16:11:35 2024 by root via cibadmin on kesrac01 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ kesrac01 kesrac02 ] Full List of Resources: * fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02 * fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01 * Clone Set: clone-dlm [dlm]: * Started: [ kesrac01 kesrac02 ] * Clone Set: clone-gfs2 [gfs2]: * Started: [ kesrac01 kesrac02 ] * Clone Set: clone-DB [DB]: * Started: [ kesrac01 kesrac02 ]

集群启动成功。

访问数据库

访问数据库需要使用 kingbase 主机用户,(为了方便)配置 kingbase 用户环境变量:

## 以节点一为例 [kingbase@kesrac01 ~]$ cat<<-\EOF>>/home/kingbase/.bash_profile export KES_HOME=/KingbaseES/V8/Server export LD_LIBRARY_PATH=$KES_HOME/lib:/lib:/usr/lib export PATH=$KES_HOME/bin:/usr/sbin:$PATH export PS1="[`whoami`@`hostname`:"'$PWD]$ ' alias ksystem='ksql test system' alias ksso='ksql test sso' EOF

两个节点都需要配置,配置完成后生效环境变量:

[kingbase@kesrac01 ~]$ source ~/.bash_profile

配置好环境变量之后就可以不需要到指定路径下执行命令了。

访问 RAC 数据库

[kingbase@kesrac01:/home/kingbase]$ ksql -U system test -p 54321 授权类型: TEST-企业版. 输入 "help" 来获取帮助信息. ## 查看数据库存储目录 data(存储在 gfs2 的共享文件系统上) test=# show data_directory; data_directory ------------------------------------ /sharedata/data_gfs2/kingbase/data test=# \conninfo 以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test" test=# create database lucifer; CREATE DATABASE test=# \c lucifer 您现在以用户名"system"连接到数据库"lucifer"。 lucifer=# create table test (id int,name varchar2(20)); CREATE TABLE lucifer=# insert into test values (1,'lucifer'); INSERT 0 1 lucifer=# select * from test; id | name ----+--------- 1 | lucifer (1 行记录) lucifer=# quit;

KES RAC 是默认本地免密登录的:

[kingbase@kesrac02:/home/kingbase]$ ksql test system 授权类型: TEST-企业版. 输入 "help" 来获取帮助信息. test=#

查看对应的配置文件 sys_hba.conf:

[kingbase@kesrac02:/home/kingbase]$ vi /sharedata/data_gfs2/kingbase/data/sys_hba.conf # "local" 只能用于UNIX域套接字 local all all trust

数据库连接正常。

写在最后

KES RAC 的部署到此结束,后续会继续分享 KES RAC 的运维管理以及数据库使用技巧,敬请期待。

如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!

往期精彩文章

达梦数据库安装最详细教程
一招教你学会达梦数据库的免密登录
一文讲透达梦数据库的大小写敏感
效率翻倍!达梦数据库 disql 使用技巧全攻略
达梦数据库参数配置与一键优化指南
达梦 AWR 报告快速上手指南
金仓数据库 KingbaseES V9 单机安装指南
KingbaseES KSQL 免密登录的几种方式
KingbaseES 控制文件冗余与恢复秘籍
金仓 KingbaseES RAC 入门指南
GBase 8a MPP 集群部署最佳实践
GBase 8a GDCA 认证课后练习题大全(题库)
南大通用 GBASE 8s V8.8 数据库最全安装指南
GBase 8s GDCA 认证课后练习题大全(题库)
GBase 8s 数据库巡检报告及一键巡检脚本
YashanDB 一键生成 AWR 报告
YashanDB 数据库安装部署
YashanDB 共享集群(YAC)入门指南与技术详解


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
最后修改时间:2024-11-20 10:20:15
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论