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

「YashanDB个人版体验」崖山数据库实战-高可用主从-故障切换及节点扩缩容

image.png

本文为基于银河麒麟v10操作系统部署崖山数据库的实战记录
包含【单节点】部署、【一主一备】部署、【节点扩缩容】到【一主两备】


初识崖山数据库是6月份在深圳某次数据库国产化适配沟通会议中,当时崖山官网还没有开放下载个人版,联系官方进行对接试用的是企业版,崖山的售前和技术专家老师支持相当专业。11月份在崖山数据库认证群里看到对个人版免费开放下载:https://download.yashandb.com/download ,迅速在数据库圈热度高涨。本文基于YashanDB个人版 YashanDB Personal 23.1 (Linux X86) 做一个实践分享。

产品简介

崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

YashanDB基于原创内核架构,全面支持众核、RDMA、智能计算、云基础设施等面向未来的软硬件技术,采用异步并行、基于代价的事务调度、Raft、有界计算等创新技术和算法,满足企业级核心应用对高兼容、高性能、高扩展、高可用等全生命周期数据管理诉求。

为什么叫崖山数据库?
崖山数据库系统命名源于发生在广东省江门市的历史著名战役——崖山海战。战役中十万南宋军民舍生取义,宁死不降。以“崖山”为名,意在赓续崖山的民族气节,以全自研的技术和系统,破解数据库领域“卡脖子”问题,在国际IT界重铸华夏辉煌。

1 安装前准备

1.1 服务器配置

主机名称 主机ip 角色 服务器 配置
trexdb01 192.168.7.21 主库(单节点和主备用) Kylin V10sp3 x86_64 2核cpu,5G内存,500G磁盘
trexdb02 192.168.7.22 备库 (一主一备用) Kylin V10sp3 x86_64 2核cpu,5G内存,500G磁盘
trexdb03 192.168.7.23 备库(节点扩容至一主两备用) Kylin V10sp3 x86_64 2核cpu,5G内存,500G磁盘

本文基于YashanDB 23.1.1.100个人版搭建。

1.2 关闭交换分区

使用sysctl -a | grep swappiness查看当前状态。

sysctl -w vm.swappiness=0 echo "vm.swappiness = 0">> /etc/sysctl.conf

1.3 调整自动分配本地端口范围

下限值建议大于30000。

sysctl -w net.ipv4.ip_local_port_range='32768 60999' echo "net.ipv4.ip_local_port_range = 32768 60999" >> /etc/sysctl.conf

本调整对ipv6同样生效。

1.4 调整进程的VMA上限

使用sysctl -a|grep vm.max_map_count查看当前上限值,建议大于2000000。

sysctl -w vm.max_map_count=2000000 echo "vm.max_map_count=2000000" >> /etc/sysctl.conf

1.5 调整资源限制值

将一些内核参数所定义的资源限制值(使用ulimit -a可查看所有的资源限制值)调整为大于或等于最小要求的某个值,具体如下:

配置参数永久生效

执行如下命令将参数写入/etc/security/limits.conf文件,重启后参数永久生效:

echo " * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 * soft rss unlimited * hard rss unlimited * soft stack 8192 * hard stack 8192 " >> /etc/security/limits.conf

1.6 关闭透明大页

标准大页内存会在系统启动时预分配,而透明大页会在运行时动态分配大页内存,可能产生运行时错误,造成 YashanDB 被终止。我们建议您在安装时,关闭操作系统透明大页(Transparent HugePages)选项。

1.6.1 查看透明大页是否开启

在一些系统的内核中默认开启了透明大页选项。您可以通过以下指令确认:

## Red Hat Enterprise Linux 内核 cat /sys/kernel/mm/redhat_transparent_hugepage/enabled ## 其他内核 (kylinV10用这个) cat /sys/kernel/mm/transparent_hugepage/enabled

image.png

若显示[always] madvise never,则说明透明大页开启。

若显示always madvise [never],则说明透明大页关闭。

1.6.2 关闭透明大页

  1. vi /etc/default/grub,在 GRUB_CMDLINE_LINUX 中添加或修改参数 transparent_hugepage=never
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never" GRUB_DISABLE_RECOVERY="true"

1.6.3 刷新配置 grub.cfg

grub2-mkconfig -o /boot/grub2/grub.cfg

1.6.4 重启操作系统,使配置永久生效。

2 安装初始环境调整

2.1 开放端口

运行YashanDB产品需要占用一系列端口(通信矩阵中已列示这些端口的作用及相关信息)。YashanDB制订了一套端口划分规则,并据此规则给出了安装部署过程中需要指定的端口号默认值。用户可根据自身网络状况修改这些端口号,但应该遵循这套规则,以避免出现端口冲突错误。

端口划分规则

  1. 一个实例需要配多个监听端口,给一个初始值,后面端口缺省+1。
  2. 一个物理机需要配多个实例,给一个初始值,后面实例缺省+10。
  3. 按照MN、CN、DN的顺序生成端口号。
  4. 单机实例或分布式CN的监听端口初始值默认为1688,对应后续安装中的beging-port参数。

安装默认端口号

部署形态 数据库监听 om yasagent 主机间通信
单机部署 1688 1675 1676 1689
分布式 MN:1678 CN:1688 DN:1698 1675 1676 MN:1679、1680 CN:1689、1690 DN:1699、1700
共享集群 1688 1675 1676 1689、1670

建议在所有服务器上开放上表所列示端口。

此外,对启用可视化部署web服务的主机,还需开放9001端口。

方式一:关闭防火墙

在所有主机上执行如下命令关闭防火墙:

##关闭防火墙 systemctl stop firewalld ##关闭开机自启 systemctl disable firewalld ##查看状态 systemctl status firewalld

方式二:添加白名单

如果防火墙不能关闭,则必须按如下步骤添加端口到白名单中:

1.查看防火墙端口开放情况:

# firewall-cmd --zone=public --list-ports

2.添加端口到防火墙(Firewall):

这里以1688为例演示如何添加端口到防火墙中,其他端口操作方法相同。

##添加(--permanent 永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port=1688/tcp --permanent ##重新载入 firewall-cmd --reload ##查看 firewall-cmd --zone=public --query-port=1688/tcp

如需从白名单中删除已添加的端口,使用如下命令:

##删除已添加的端口 firewall-cmd --zone=public --remove-port=1688/tcp --permanent

2.2 开启SSH服务

首先,请在所有服务器上检查ssh服务是否已打开:

systemctl status sshd.service

如输出信息中无active (running)内容,请参照如下命令开启ssh服务:

systemctl start sshd.service

2.3 创建安装用户

建议创建一个新用户安装YashanDB数据库。

  1. 切换至root用户,并执行如下命令创建新用户yashan:

    useradd -d /home/yashan -m yashan
  2. 执行如下命令为用户yashan指定密码:

    passwd yashan
  3. 配置sudo免密

    首先,请打开/etc/sudoers文件,通常情况下,即使root用户都无该文件的编辑权限,此时需要先对root授权。

    cd /etc ll sudoers chmod +w sudoers vim /etc/sudoers

    在文件的最后添加如下内容后保存退出:

    yashan ALL=(ALL)NOPASSWD:ALL

    最后,如该文件初始为只读,恢复其属性:

    chmod -w sudoers

    将yashan用户加入到YASDBA用户组

    groupadd YASDBA usermod -a -G YASDBA yashan

3 目录划分

主机目录规划

1.安装目录

YashanDB采用集群多节点并行安装模式,只需在一台主机上创建安装目录,用于下载和解压软件包。

本安装手册中,安装目录规划在/home/yashan下,由yashan用户执行软件包下载时自行创建。

2.HOME目录和DATA目录

所有安装YashanDB的实例节点(一台服务器对应一个实例节点,或者一台服务器包含多个实例节点)上必须规划的两个目录为:

  • HOME目录:YashanDB的产品目录,包含YashanDB所提供的命令、数据库运行所需的库及各关键组件。该目录由yashan用户执行安装部署时输入的install-path参数根据一定规则生成并创建。
  • DATA目录:YashanDB的数据目录,包含数据库的各类系统数据文件、日志文件和配置文件,用户数据也缺省存储在该目录下。但对于共享集群,所有的数据文件和redo文件均需保存在共享存储上,DATA目录将只用于存储实例运行相关的配置文件、日志文件等数据。该目录由yashan用户执行安装部署时输入的data-path参数根据一定规则生成并创建。

本安装手册中,HOME目录和DATA目录均规划在/data/yashan下,yashan用户需要对该目录拥有全部权限,可执行如下命令授权:

cd / mkdir data cd data mkdir yashan chmod -R 777 /data/yashan

4 软件包准备

进入官网下载页面

https://download.yashandb.com/download

image.png

5 单节点部署(单机)

为了方便某些朋友的部署需求,这里增加了单节点部署(单机),如果你需要部署高可用(一主一备),请直接略过此章节,进行下一步操作。

执行安装部署前,请以yashan用户登录192.168.7.21服务器,并进入/home/yashan/install安装目录。

cd /home/yashan/install

5.1 生成部署文件

  1. 执行yasboot package命令生成配置文件,命令详细参数可查阅[yasboot](https://doc.yashandb.com/yashandb/23.1/zh/工具手册/yasboot/yasboot命令介绍/yasboot package)。

其中

  • –cluster指定为要部署的数据库集群名称,该名称也将作为集群中所有节点上初始创建数据库的名称(database name)

  • –port指定SSH服务端口

  • –install-path指定数据库安装路径

  • –data-path指定数据存放目录

  • –begin-port指定数据库监听端口

./bin/yasboot package se gen --cluster yashandb -u yashan -p 'Trex@123' --ip 192.168.7.21 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688

image.png

上一步骤执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,yashandb.toml为数据库集群的配置文件,hosts.toml为主机的配置文件,可手动修改,但不建议删除文件中任何行,否则可能导致后续安装过程报错,或者所搭建的环境后续无法进行扩展配置。

-rw------- 1 yashan yashan 491 12月 1 17:55 hosts.toml -rw------- 1 yashan yashan 723 12月 1 17:55 yashandb.toml
  1. 依据企业实际需要调整yashandb.toml配置文件中的安装参数。其中,可在group级别设置YashanDB的所有建库参数,在node级别设置YashanDB的所有配置参数

5.2 执行安装

./bin/yasboot package install -t hosts.toml -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz

image.png

5.3 数据库部署

  1. 执行部署命令。
$ ./bin/yasboot cluster deploy -t yashandb.toml

image.png

  1. 生效环境变量(此步骤需以yashan用户登录到每个节点上执行)。

    如果**~/.bashrc**中已存在YashanDB相关的环境变量,将其清除

image.png

部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件

cd /data/yashan/yasdb_home/yashandb/23.1.1.100/conf/
cat yashandb.bashrc >> ~/.bashrc source ~/.bashrc

5.4 修改sys用户口令

YashanDB不提供系统初始口令,请通过yasboot工具设置集群内所有节点sys用户的密码。

yasboot cluster password set -n 'Trex@123' -c yashandb

image.png

5.5 验证安装是否成功

  1. 执行查看数据库状态命令。

    yasboot cluster status -c yashandb -d

image.png

  1. 使用yasboot工具连接数据库,查看实例状态。

    # 示例: yasboot sql -d sys/password@192.168.7.21:1688

    如果密码含有特殊字符,请参考如下方式连接

    yasboot sql -d 'sys/"Trex@123"'@192.168.7.21:1688 yasql 'sys/"Trex@123"'@192.168.7.21:1688
    SQL> SELECT STATUS FROM V$INSTANCE;

image.png

SQL> SELECT database_name FROM v$database;

image.png

5.6 创建数据库用户

使用yasql工具连接数据库并创建sales用户。

yasql 'sys/"Trex@123"'@192.168.7.21:1688 SQL> CREATE USER trex IDENTIFIED BY trex; SQL> GRANT CONNECT TO trex;
yasql trex/trex@192.168.7.21:1688

image.png

6 高可用部署(一主一备)

单机主备部署将以2台主机,分别作为主、备角色作为示例,搭建一主一备的高可用环境。

主机名称 主机ip 角色
trexdb01 192.168.7.21 主库
trexdb02 192.168.7.22 备库

6.1 生成部署文件

  1. 执行yasboot package命令生成配置文件,命令详细参数可查阅[yasboot](https://doc.yashandb.com/yashandb/23.1/zh/工具手册/yasboot/yasboot命令介绍/yasboot package)。

    其中

    • –cluster指定为要部署的数据库集群名称,该名称也将作为集群中所有节点上初始创建数据库的名称(database name)
    • -u 数据库安装用户
    • -p 数据库安装用户对应的密码
    • –ip 节点ip,如192.168.7.21,192.168.7.22
    • –port指定SSH服务端口
    • –install-path指定数据库安装路径
    • –data-path指定数据存放目录
    • –begin-port指定数据库监听端口
    • –node指定主备节点总数量
    su - yashan cd /home/yashan/install/ ./bin/yasboot package se gen --cluster trexdb -u yashan -p 'Trex@123' --ip 192.168.7.21,192.168.7.22 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688 --node 2

image.png

  1. 上一步骤执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,yashandb.toml为数据库集群的配置文件,hosts.toml为主机的配置文件,可手动修改,但不建议删除文件中任何行,否则可能导致后续安装过程报错,或者所搭建的环境后续无法进行扩展配置。

    ll hosts.toml ll trexdb.toml
[yashan@trexdb01 install]$ ll hosts.toml -rw------- 1 yashan yashan 771 12月 2 11:46 hosts.toml [yashan@trexdb01 install]$ ll trexdb.toml -rw------- 1 yashan yashan 1142 12月 2 11:46 trexdb.toml
  1. 依据企业实际需要调整yashandb.toml配置文件中的安装参数。其中,可在group级别设置YashanDB的所有建库参数,在node级别设置YashanDB的所有配置参数

6.2 执行安装

./bin/yasboot package install -t hosts.toml -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz

image.png

6.3 数据库部署

  1. 执行部署命令。
./bin/yasboot cluster deploy -t trexdb.toml

image.png

  1. 生效环境变量

    在trexdb01和trexdb02上都执行

#部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件 cd /data/yashan/yasdb_home/yashandb/23.1.1.100/conf/ # 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除 cat ~/.bashrc cat trexdb.bashrc >> ~/.bashrc source ~/.bashrc

查看trexdb01配置

cat ~/.bashrc

image.png

查看trexdb02配置

cat ~/.bashrc

image.png

6.4 修改sys用户口令

YashanDB不提供系统初始口令,请通过yasboot工具设置集群内所有节点sys用户的密码。

在trexdb01执行

yasboot cluster password set -n 'Trex@456' -c trexdb

image.png

6.5 验证安装是否成功

  1. 执行查看数据库状态命令。
yasboot cluster status -c trexdb -d

image.png

  1. 连接数据库
  • 使用yasboot工具

    yasboot sql -d 'sys/"Trex@456"'@192.168.7.21:1688
  • 使用yasql

    yasql 'sys/"Trex@456"' 或 yasql 'sys/"Trex@456"'@192.168.7.21:1688

查看实例状态

SQL> SELECT STATUS FROM V$INSTANCE; SQL> SELECT database_name FROM v$database;

image.png

CREATE TABLE trexinfo (id INTEGER NOT NULL PRIMARY KEY, info VARCHAR2(128) ); INSERT INTO trexinfo VALUES ('01','霸王龙的日常'); commit;

image.png

备库查询

yasql 'sys/"Trex@456"' SQL> select * from trexinfo;

image.png

6.6 仲裁选举故障切换

与基于RAFT协议的自动选举不同,本模式是通过yasom仲裁,在主库故障的情况下,将备库切换为新的主库。

YashanDB仅支持在一主一备单机部署下进行仲裁选举。

注意

  1. 须保证yasom和备库的yasagent进程正常在线。
  2. 主备状态正常,并且主备保护模式相同(非零丢失模式下,仅支持最大性能和最大可用模式)。
  3. 开启仲裁选举会修改数据库心跳间隔和心跳超时参数,如果是零丢失模式,将设置主备为最大保护模式。
  4. 开启仲裁选举后,主库每次启动都会确认实际角色,如果需要降备,会直接启动为备库。确认实际角色需要连接到yasom,或者连接到备库,否则主库将启动失败

6.6.1 启用基于yasom的仲裁选举

trex01上执行

yasboot election enable on -c trexdb

image.png

6.6.2 查看仲裁选举的参数设置和运行状态。

trex01和trex02上执行均可

yasboot election config show -c trexdb

image.png

其中:

  1. Protection Mode:yasom记录的主库保护模式。

  2. Members:表示节点信息。包括节点状态,节点角色,备库传输延迟,回放延迟和回放速率等。

  3. Properties:当前生效的参数值。

  4. Automatic Failover:仲裁选举状态。

    • DISABLED:选举关闭。

    • Enabled in Potential Data Loss Mode:选举开启,并且切换可能丢失数据。

    • Enabled in Zero Data Loss Mode:选举开启,并且不会丢失数据。

    • Enabled in Zero Data Loss Mode (NOT ALLOWED):选举开启,但不是最大保护模式,可能有数据丢失风险,禁止自动切换

仲裁选举的参数如下:

参数名 默认值 取值范围 含义
FailoverThreshold 9 [2, 1000] 备机心跳超时时间,到达该时间后,yasom将执行failover切换流程
FailoverAutoReinstate false true/false 是否启用自动脑裂修复。 启用后,如果备机发生脑裂,处于NEED REPAIR状态,yasom将尝试自动修复
ZeroDataLossMode true true/false 是否启用零丢失模式。
启用后,将设置主备为最大保护模式,当主库宕机时,备库可自动failover;当备库异常时,主库将由yasom降级为最大可用模式,并禁止自动failover,直到备库恢复同步后,yasom重新将主库升级为最大保护模式后,使能自动failover

注意

  1. 仅允许在仲裁选举未启用的情况下设置选举参数。
  2. FailoverThreshold太小,可能会因为网络抖动而发生不必要的切换,请根据网络状态设置合理的超时时间。
  3. FailoverAutoReinstate启用后,会自动修复备库脑裂问题,会使备库与主库有分歧的部分数据丢失,请谨慎使用
  4. ZeroDataLossMode启用后,优先使用最大保护模式,在最大保护模式下,主库宕机,备库自动failover后,不会丢失数据。当备库异常后,主库会降级为最大可用模式,此时备库有丢失数据的风险,所以自动failover将禁用,直到主库再次恢复最大保护模式。因此零丢失模式的切换条件更严格,但是能保证数据不丢失。
#示例,这里不执行 yasboot election config set -k FailoverThreshold -v 5 -c yashandb

6.6.3 查看仲裁选举相关的事件

包括事件名,发生时间,处理时间,处理是否成功等。

yasboot election event show -c trexdb

image.png

仲裁选举的事件如下:

事件名 含义
failover 备库无法连接主库,并且心跳超时后,向yasom上报,通知yasom将进行仲裁选举
confirm role 主库重启的时候,需要确认自己的角色,向yasom上报,通知yasom确认该节点的实际角色。如果旧主库需要降备,将直接启动为备库
need repair 备库状态为NEED REPAIR,可能是非零丢失模式下,产生脑裂现象,旧主库降备后无法继续接收日志数据,需要通知yasom修复该备库
protection demote 零丢失模式下,当备库异常,导致主库事务阻塞时,主库向yasom上报,通知yasom将主库的保护模式降级为最大可用模式,并禁止自动切换
protection promote 零丢失模式下,当备库恢复同步后,主库向yasom上报,通知yasom将主库的保护模式升级为最大保护模式,并恢复自动切换

Note

  1. 同一种事件最多保存5条,超出将淘汰老的事件。
  2. 在1分钟内,下发SQL处理失败3次后,将不再处理failover和need repair事件,后续的相同事件会被忽略,并在最近一次事件记录里增加Ignore字段的值。

6.6.4 故障切换验证

验证1,正常关闭主库

[yashan@trexdb01 ~]$ yasboot node stop -c trexdb -n 1-1

image.png

查看集群状态

[yashan@trexdb01 ~]$ yasboot cluster status -c trexdb -d

image.png

此时查看仲裁选举相关的事件

yasboot election event show -c trexdb

image.png

结论:正常关机,备库并不会自动升主。

验证2,模拟异常关闭,kill主库(trexdb01)进程

因为刚才关闭了trexdb01,这里先启动起来

yasboot node start -c trexdb -n 1-1

image.png

查看集群状态

yasboot cluster status -c trexdb -d

image.png

直接kill进程,模拟异常现象

ps -ef | grep "/bin/yasdb" | awk '{print $2}' | xargs kill -9 2>/dev/null

再次查看集群状态

yasboot cluster status -c trexdb -d

可以看到备库已经自动升为主库

image.png

查看仲裁事件

yasboot election event show -c trexdb

image.png

查看数据库启动模式

SQL> SELECT database_name,log_mode,open_mode,database_role FROM V$DATABASE;

image.png

创建测试表

# trexdb02 SQL> create table trex_test01 as select * from trexinfo; SQL> select * from trex_test01;

image.png

结论:模拟异常关闭主库,备库自动升主。

验证3 主库异常关闭后恢复启动

如果trexdb01启动,会发生什么情况???

启动trexdb01节点数据库

yasboot node start -c trexdb -n 1-1

image.png

查看集群状态

yasboot cluster status -c trexdb -d

image.png

可以看到trexdb01启动后,已自动以备库身份加入集群

查看仲裁信息

yasboot election event show -c trexdb

image.png

查看trexdb01数据库启动模式,并检查前面在trexdb02中创建的表trex_test01是否会同步到trexdb01。

# trexdb01 SQL> SELECT database_name,log_mode,open_mode,database_role FROM V$DATABASE; SQL> select * from trex_test01;

image.png

可以看到此时,trexdb01已经降级为备库。并且已经同步trexdb02的数据。

验证4 模拟异常关闭,kill主库(trexdb02)进程

kill主库(trexdb02)进程

# trexdb02 ps -ef | grep "/bin/yasdb" | awk '{print $2}' | xargs kill -9 2>/dev/null

查看集群状态

yasboot cluster status -c trexdb -d

image.png

此时,trexdb01又自动切换为主库

验证5 再次启动trexdb02节点数据库

# trexdb01或者trexdb02均可 yasboot node start -c trexdb -n 1-2

image.png

查看节点状态

# trexdb01或者trexdb02均可 yasboot cluster status -c trexdb -d

image.png

可看到trexdb02又切换为备库了。

下面验证数据同步情况

# trexdb01执行 yasql 'sys/"Trex@456"' SQL> create table trex_test02 as select * from trexinfo;

image.png

trexdb02执行

yasql 'sys/"Trex@456"' SQL> select * from trex_test02;

image.png

数据库同步正常

7 备机扩缩容(扩容到一主两备)

OM扩缩容

在扩缩容过程中请不要通过OM对节点进行强制重启/停止节点的操作,否则可能会造成扩缩容失败后无法执行node remove --clean命令。如果不可避免地造成了这种情况,可以通过OM对扩容失败/缩容失败的节点进行强制操作(如yasboot node stop -f)后,通过node remove --node-ids的方式删除失败的节点。 备机扩缩容不能和表空间等数据文件增删、RESIZE操作并发,所以需等待任一事件完成之后才可进行下个操作。

7.1 记录当前主备状态

image.png

先关闭之前的仲裁切换

yasboot election enable off -c trexdb

image.png

7.2 在线增加备机节点

7.2.1 生成配置文件

在新增主机上增加备机节点,会生成hosts_add.tomltrexdb_add.toml两个配置文件。

cd /home/yashan/install/ yasboot config node gen -c trexdb -u yashan -p 'Trex@123' --ip 192.168.7.23 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data -g 1 --node 1

注意路径

–install-path /data/yashan/yasdb_home

–data-path /data/yashan/yasdb_data

image.png

注意生成的hosts_add.tomltrexdb_add.toml两个配置文件中的路径是否正确

修改路径和之前主备环境一致

sed -i 's#/data/yashan/yasdb_home/yashandb/log/trexdb/db-1-3#/data/yashan/yasdb_home/yashandb/23.1.1.100#' trexdb_add.toml

image.png

7.2.2 部署新主机

yasboot host add -c trexdb -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -t hosts_add.toml

image.png

7.2.3 扩容

yasboot node add -c trexdb -t trexdb_add.toml

image.png

任务显示成功并不代表着扩容任务成功,因为仍有后台任务在完成数据的同步等操作。

7.2.4 查看扩容是否成功

可以通过task list命令查看和扩容相关的任务是否都成功。

yasboot task list -c trexdb --search type=NodeAdd

image.pngimage-20231203162301484

yasboot cluster status -c trexdb -d

image.png
可以看到目前是一主两备状态。

在线删除备机节点

yasboot node remove --node-ids 1-3 --purge --force -c trexdb

image.png

再次查看集群状态

yasboot cluster status -c trexdb -d

image.png

可以看到又回到了一主一备状态。

8 问题汇总及解决方法

8.1 依赖包问题

在重启操作系统后,再次启动yasom 和 yasagent 时出现如下警告和报错。

注:
安装过程无警告或报错,只是重启操作后出现了该问题。

yasboot process yasom start -c trexdb
yasboot process yasagent start -c trexdb
warning: watch yasom error: monitor failed, stdout: , stderr: /data/yashan/yasdb_home/yashandb/23.1.1.100/ext/monit/monit: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory warning: watch yasagent error: monitor failed, stdout: , stderr: /data/yashan/yasdb_home/yashandb/23.1.1.100/ext/monit/monit: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory

缺少依赖包libnsl。

解决方法:
在各个节点安装libnsl包即可。

yum install -y libnsl

体验总结

  • 在部署方面,文档详细,崖山的脚本化部署安装很方便,不管是单机还是一主多从高可用,非常容易上手。
  • 故障切换方面,一主一备方面通过yasom仲裁,在主库故障的情况下,将备库切换为新的主库,经过几轮测试验证,在故障切换方面也十分稳健。
  • 节点扩缩容方面,支持在线对备机进行在线扩缩,且不影响原主机的使用,包括在线增加备机节点和在线删除节点。简单几条命令就可以实现节点扩缩容,在实际体验当中也相当的丝滑。

可以看到崖山的研发团队在产品上还是下了很大的功夫在做产品,同时也期待崖山企业版开放个人试用,生产上用的话,还是要基于企业版的进行开发测试验证。后续我也会实践崖山数据库的其他功能进行验证,希望崖山数据库继续精心打磨产品,在国产数据库行列里扛一面大旗!

本文为原创,如需转载请在文章前注明出处。
https://www.modb.pro/knowledge?id=1731226172397281280
如果该文章有帮助到您,请 点赞 支持,谢谢!
有任何疑问,欢迎在评论中留言。

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

评论