一、崖山数据库介绍
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。
崖山数据库管理系统采用先进内核架构,高效地支持众核计算、大内存、新存储介质和网络通信框架,软件层面采用并行和向量引擎、异步并行框架、OCC动态事务调度算法、Raft协议、有界理论等技术方案和算法,通过多形态的产品架构和全面的基础设施支持能力,满足企业级核心应用对高兼容、高性能、高扩展、高可用等全生命周期数据管理诉求。
YashanDB个人版、标准版和企业版功能差异:
| 类目 | 功能项 | 个人版 | 标准版 | 企业版 |
|---|---|---|---|---|
| 产品形态 | 版本名称 | Personal Edition | Standard Edition | Enterprise Edition |
| 产品形态 | 部署形态 | 单机 | 单机部署 分布式部署 共享集群部署 |
单机部署 分布式部署 共享集群部署 |
| 物理规格 | 最大连接数 | 256 | 1024 | 无限制 |
| 物理规格 | 最大存储容量 | 1TB | 无限制 | 无限制 |
| 物理规格 | 硬件平台 | x86 ARM 龙芯 | x86 ARM 龙芯 | x86 ARM 龙芯 |
| 物理规格 | 使用时间 | 无限制 | 无限制 | 无限制 |
| 基础功能 | 单表最大行数 | 无限制 | 无限制 | 无限制 |
| 基础功能 | 单表最大列数 | 4096 | 4096 | 4096 |
| 基础功能 | 基本数据类型 | 支持 | 支持 | 支持 |
| 基础功能 | 内置高级包 | 支持 | 支持 | 支持 |
| 基础功能 | 并行查询 | 支持 | 支持 | 支持 |
| 基础功能 | 闪回查询 | 支持 | 支持 | 支持 |
| 基础功能 | 存储过程调试功能 | 支持 | 支持 | 支持 |
| 基础功能 | 外部函数扩展 | 支持 | 支持 | 支持 |
| 基础功能 | DBLINK | 支持 | 支持 | 支持 |
| 基础功能 | 物化视图 | 支持 | 支持 | 支持 |
| 基础功能 | 诊断包 | 支持 | 支持 | 支持 |
| 核心组件 | 驱动 | 支持 | 支持 | 支持 |
| 安全能力 | 通讯加密 | 支持 | 支持 | 支持 |
| 安全能力 | 存储加密 | 支持 | 支持 | 支持 |
| 安全能力 | 三权分立 | 支持 | 支持 | 支持 |
| 安全能力 | 审计 | 支持 | 支持 | 支持 |
| 高阶功能 | 分区表 | 一级分区 | 一级分区 | 二级分区 |
| 高阶功能 | 列存储 | 不支持 | 支持 | 支持 |
| 高阶功能 | JSON类型 | 不支持 | 不支持 | 支持 |
| 高阶功能 | GIS | 不支持 | 不支持 | 支持 |
| 配套工具 | 数据迁移工具 | 支持 | 支持 | 支持 |
| 配套工具 | 运维监控工具 | 支持 | 支持 | 支持 |
| 配套工具 | 开发者工具 | 支持 | 支持 | 支持 |
| 产品服务 | 软件升级 | 不支持 | 支持 | 支持 |
| 产品服务 | 专家服务 | 网站 | 支持 | 支持 |
从上面可以看到,标准版和企业版都具备共享集群部署能力。
二、崖山共享集群YAC介绍
YashanDB共享集群(YAC)是一款单库多实例的多活数据库系统,所有节点之间以强一致性方式实现并发读写,为高端核心业务提供了应用透明的透明多写、高可用、高扩展、高性能的数据库能力。对等Oracle RAC/DB2的集群产品,基于国产中间件/芯片/服务器/存储,构建高端核心交易场景的完整全栈替代方案。具备金融级高可用能力的同时拥有优异的性能表现,4节点TPC-C性能达520w tpmC,线性扩展比高达0.7以上,无需大规模的系统改造和重构,是1:1平替国外主流数据库的高性价比解决方案。
2024年11月14日,YashanDB在2024国产数据库创新生态大会上正式发布YashanDB V23.3版本,定位为面向企业核心的通用数据库,具备1:1平替Oracle的能力。该版本提供包含单机主备、共享集群、分布式多种产品形态,所有用户均可体验。
YAC 整体架构图:

功能模块说明:
1、YashanDB共享集群依据YashanDB的数据库内核逻辑演进而来,并在共享存储的基础上引入了Cohesive Memory核心技术,用于集群数据库各实例之间协同数据页的读写访问以及各种非数据类资源的并发控制。GRC( Global Resource Catalog )负责全局资源管理,GCS( Global Cache Service )负责全局数据页管理,GLS( Global Lock Service )负责全局锁管理。
2、Inter-Communication Service,内部通讯服务,简称ICS,用于建立实例之间的连接池,并实现实例间的相互通信。
3、Yashan File System,崖山文件系统,简称YFS,崖山文件系统承担了集群文件系统的职责,直接管理裸设备,并提供强一致的文件系统服务给数据库使用。
4、Yashan Cluster Service,崖山集群服务,简称YCS,崖山集群服务是集群数据库高可用的核心部件,统一管理崖山文件系统、数据库等资源,包括配置、启停、监控等,并在各种故障场景下提供仲裁服务,维护全局统一的拓扑状态。
三、YAC 共享集群部署安装部署
3.1 安装要求
3.1.1 服务器配置要求
| 项目 | 推荐配置 | 最低配置 |
|---|---|---|
| 操作系统 | CentOS 7.6以上,KylinOS V10,openEuler 22.03 | 如需使用大页内存,则要求Linux内核版本为2.6及以上 |
| CPU | X86_64,ARM64 超线程,非超线程 推荐4C及以上;共享集群推荐8C及以上 |
CPU核数>2 |
| 内存 | 推荐16G及以上;共享集群推荐32G及以上 | >4G |
| 硬盘 | 推荐使用SSD 推荐存储空间50G及以上 |
>4G |
| 文件系统 | ext4或xfs | 不能为tmpfs |
| 网络 | 千兆以上以太网,支持TCP和UDP;共享集群内部均要求10GE,不包含RDMA | - |
3.1.2 共享存储配置要求
| 项目 | 推荐配置 |
|---|---|
| 硬盘 | SSD/HDD都支持,品牌和介质不交叉组合 |
| LUN | 三块及以上: 一块YCR盘(1G) 一块投票盘(1G) 其他为数据盘(50G及以上) |
| 接口 | 存储设备及操作系统支持Direct IO,支持512字节内存对齐和IO大小对齐 存储设备支持通过pread64、pwrite64接口一次性读写512字节整倍数,即支持:512字节、1024字节、1536字节、……、32M |
3.1.3 软件依赖包要求
| 动态库名称 | 来源 | 版本要求 | 作用 |
|---|---|---|---|
| libcrypto.so | openssl | 1.0.0及以上 | 加密 |
| libcrypto.so.1.1 | openssl | 1.0.0及以上 | - |
| libssl.so | openssl | 1.0.0及以上 | 网络通信 |
| libssl.so.1.1 | openssl | 1.0.0及以上 | - |
| libgmssl.so.3.1 | gmssl | 3.1.1及以上 | 加密 |
| liblz4.so | lz4 | 1.9.3及以上 | 数据压缩和解压缩 |
| liblz4.so.1 | lz4 | 1.9.3及以上 | - |
| liblz4.so.1.9.3 | lz4 | 1.9.3及以上 | - |
| libz.so | zlib | 1.2.12及以上 | 数据压缩 |
| libz.so.1 | zlib | 1.2.12及以上 | - |
| libz.so.1.2.12 | zlib | 1.2.12及以上 | - |
| libzstd.so | zstd | 1.5.2及以上 | 数据压缩和解压缩 |
| libzstd.so.1 | zstd | 1.5.2及以上 | - |
| libzstd.so.1.5.2 | zstd | 1.5.2及以上 | - |
| monit | monit | 5.28.0及以上 | 守护进程 |
安装依赖包
yum install -y openssl gmssl lz4 zlib zstd monit
3.2 实验环境说明
本文以两台服务器+一台共享存储为示例,搭建双实例单库的典型共享集群环境。
主机规划:
| 主机名 | ip地址 | OS版本 | 内存、CPU | 角色 |
|---|---|---|---|---|
| node1 | 192.*.*.60 | Centos7.9 | 6G 、 1个双核 | 数据库实例1 |
| node2 | 192.*.*.62 | Centos7.9 | 6G 、 1个双核 | 数据库实例2 |
端口规划:
| 部署形态 | 数据库监听 | yasom | yasagent | 服务器间通信 |
|---|---|---|---|---|
| 共享集群 | 1688 | 1675 | 1676 | 1689、1670 |
共享存储:(存储上已按配置要求划分三个LUN)
| LUN名称 | LUN路径 | 角色 |
|---|---|---|
| LUN1 | /dev/sdc | 数据盘 |
| LUN2 | /dev/sdd | 投票盘 |
| LUN3 | /dev/sde | YCR盘 |
3.3 配置操作系统
3.3.1 设置服务器hostname
注意:若部署YashanDB共享集群,必须执行本操作。
服务器名称要求如下:
名称由字母、数字以及下划线组成,且必须以字母开头,长度为[4,64]个字符。
同一个YashanDB共享集群中的服务器名称不能相同。
建议每台服务器上只运行一个实例,若一台服务器需运行多个实例则要求将服务器名称设置为[3,63]个字符。
# 节点1
hostnamectl set-hostname node1
# 节点2
hostnamectl set-hostname node2
3.3.2 内核参数配置
#关闭交换分区
echo "vm.swappiness=0">> /etc/sysctl.conf
#调整自动分配本地端口范围
echo "net.ipv4.ip_local_port_range=32768 60999" >> /etc/sysctl.conf
#调整进程的VMA上限
echo "vm.max_map_count=2000000" >> /etc/sysctl.conf
#参数生效
sysctl -p
3.3.3 调整资源限制值
将部分资源限制值(使用ulimit -a可查看所有的资源限制值)调整为推荐值或以上。
cat>>/etc/security/limits.conf<<EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 1048576
* hard nproc 1048576
* soft rss unlimited
* hard rss unlimited
* soft stack 8192
* hard stack 8192
EOF
3.3.4 关闭透明大页
#检查THP开启情况
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
##关闭THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled
## 设置重启后自动关闭
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local.service
cat >> /etc/rc.d/rc.local <<EOF
swapoff -a
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
#再次检查THP开启情况
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
3.3.5 开启SSH服务
systemctl status sshd.service systemctl start sshd.service
3.3.6 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3.3.7 清理共享内存
ipcrm -a
3.3.8 创建安装用户和组
useradd -d /home/yashan -m yashan passwd yashan groupadd YASDBA usermod -a -G YASDBA yashan
3.3.9 配置sudo免密
如果其他用户需要免密连接db,需要将其他用户加入到安装用户yashan的用户组中,如果当前用户已登录,需要断开ssh连接重新登录。
# 对root用户赋权并打开/etc/sudoers文件
cd /etc
ll sudoers
chmod +w sudoers
vi /etc/sudoers
# 在文件的最后添加如下内容后保存退出
yashan ALL=(ALL)NOPASSWD:ALL
按需恢复/etc/sudoers文件的属性
chmod -w sudoers
3.3.10 目录规划
HOME目录和DATA目录:
所有 YashanDB 的实例节点都必须规划以下两个目录:
- HOME 目录:YashanDB 的产品目录,包含 YashanDB 所提供的命令、数据库运行所需的库及各关键组件。该目录由 yashan 用户执行安装部署时输入的 install-path 参数根据一定规则生成并创建。
- DATA 目录:对于共享集群,所有的数据文件和 redo 文件均需保存在共享存储上,DATA 目录将只用于存储实例运行相关的配置文件、日志文件等数据。该目录由 yashan 用户执行安装部署时输入的 --data-path 参数根据一定规则生成并创建。
HOME 目录和 DATA 目录均规划在 /data/yashan 下,yashan 用户需要对该目录拥有全部权限,可执行如下命令授权:
cd /
mkdir data
cd data
mkdir yashan
chmod -R 777 /data/yashan
运行日志目录:
YashanDB的运行日志目录,包含数据库运行过程中产生的日志文件,该目录默认为HOME目录/yashandb/版本号/log。
Note:为避免运行日志跟数据文件IO相互影响,建议将数据库的运行日志与数据文件路径配置到不同的物理盘上。
- 运行日志路径:由集群配置文件(集群名称.toml)中group.node.config配置域下的RUN_LOG_FILE_PATH参数决定。
- 数据文件路径:由执行安装部署时输入的–data-path参数决定,安装完成后可直接修改集群配置文件中group.node配置域下的data_path参数。共享集群部署的数据文件路径默认配置在共享存储下,无法直接修改,只能通过修改共享存储的路径从而调整数据文件存储的路径。
3.3.11 绑定LUN
YashanDB要求共享存储上必须规划出下述三类磁盘:
数据盘:一块或多块,根据业务实际情况规划,其中一块数据盘的路径将作为yasboot package ce gen命令的data选项参数。
投票盘:一块,建议规划为1G及以上,该盘路径将作为yasboot package ce gen命令的vote选项参数。
YCR盘:一块,建议规划为1G及以上,该盘路径将作为yasboot package ce gen命令的YCR选项参数。
两台主机都需要操作,下面以node1节点为例:
3.3.11.1 查看添加的三块共享磁盘
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 20G 0 part /boot
└─sda2 8:2 0 385G 0 part
├─centos_node1-root 253:0 0 120G 0 lvm /
├─centos_node1-swap 253:1 0 20G 0 lvm
├─centos_node1-data 253:2 0 300G 0 lvm /data
├─centos_node1-opt 253:3 0 20G 0 lvm /opt
├─centos_node1-var 253:4 0 10G 0 lvm /var
├─centos_node1-tmp 253:5 0 10G 0 lvm /tmp
└─centos_node1-home 253:6 0 5G 0 lvm /home
sdb 8:16 0 100G 0 disk
└─centos_node1-root 253:0 0 120G 0 lvm /
sdc 8:32 0 20G 0 disk #共享磁盘1,将来用作数据盘
sdd 8:48 0 2G 0 disk #共享磁盘2,将来用作投票盘
sde 8:64 0 2G 0 disk #共享磁盘3,将来用作YCR盘
sr0 11:0 1 1024M 0 rom
3.3.11.2 查看三块共享磁盘的uuid
[root@node1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc
36000c29391d924be7358f703bb10cb2a
[root@node1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdd
36000c292bca70428f46d452c9061542d
[root@node1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sde
36000c292d78ff744ec49014f0c3a740f
3.3.11.3 udev绑定共享磁盘
1、编辑genDevRuleByUUID.sh脚本
[root@node1 ~]# vi genDevRuleByUUID.sh
#!/bin/bash
curDir=$(cd "$(dirname "$0")"; pwd)
rm -f "$curDir/yashan-device-rule.rules"
for i in sdc sdd sde;
do
if /usr/lib/udev/scsi_id -g -u /dev/$i; then
uuid=$(/usr/lib/udev/scsi_id -g -u /dev/$i)
echo "KERNEL==\"sd*\", ENV{ID_SERIAL}==\"$uuid\", SYMLINK+=\"yas/$i\", OWNER=\"yashan\", GROUP=\"YASDBA\", MODE=\"0666\"" >> "$curDir/yashan-device-rule.rules"
else
echo "Device /dev/$i not found or has no UUID"
fi
done
2、执行genDevRuleByUUID.sh脚本生成绑定规则文件yashan-device-rule.rules
[root@node1 ~]# ./genDevRuleByUUID.sh
36000c29391d924be7358f703bb10cb2a
36000c292bca70428f46d452c9061542d
36000c292d78ff744ec49014f0c3a740f
3、查看生成的yashan-device-rule.rules文件
[root@node1 ~]# cat yashan-device-rule.rules
KERNEL=="sd*", ENV{ID_SERIAL}=="36000c29391d924be7358f703bb10cb2a", SYMLINK+="yas/sdc", OWNER="yashan", GROUP="YASDBA", MODE="0666"
KERNEL=="sd*", ENV{ID_SERIAL}=="36000c292bca70428f46d452c9061542d", SYMLINK+="yas/sdd", OWNER="yashan", GROUP="YASDBA", MODE="0666"
KERNEL=="sd*", ENV{ID_SERIAL}=="36000c292d78ff744ec49014f0c3a740f", SYMLINK+="yas/sde", OWNER="yashan", GROUP="YASDBA", MODE="0666"
4、修改yashan-device-rule.rules文件
SYMLINK为绑定设备的别名,可修改为业务可理解的名称,例如修改为如下内容:
[root@node1 ~]# vi yashan-device-rule.rules
KERNEL=="sd*", ENV{ID_SERIAL}=="36000c29391d924be7358f703bb10cb2a", SYMLINK+="yas/data", OWNER="yashan", GROUP="YASDBA", MODE="0666"
KERNEL=="sd*", ENV{ID_SERIAL}=="36000c292bca70428f46d452c9061542d", SYMLINK+="yas/vote", OWNER="yashan", GROUP="YASDBA", MODE="0666"
KERNEL=="sd*", ENV{ID_SERIAL}=="36000c292d78ff744ec49014f0c3a740f", SYMLINK+="yas/ycr", OWNER="yashan", GROUP="YASDBA", MODE="0666"
[root@node1 ~]#
5、部署配置文件yashan-device-rule.rules
执行如下命令部署绑定配置文件:
[root@node1 ~]# cp yashan-device-rule.rules /etc/udev/rules.d/yashan-device-rule.rules
6、重启服务器
[root@node1 ~]# systemctl reboot
7、检查绑定结果
执行如下命令,确认/dev/yas/data、/dev/yas/vote和/dev/yas/ycr已存在,且权限位为666。
[root@node1 ~]# ls -l /dev/yas/*
lrwxrwxrwx 1 root root 6 Dec 20 19:24 /dev/yas/data -> ../sdc
lrwxrwxrwx 1 root root 6 Dec 20 19:24 /dev/yas/vote -> ../sdd
lrwxrwxrwx 1 root root 6 Dec 20 19:24 /dev/yas/ycr -> ../sde
[root@node1 ~]#
在两台服务器上分别执行以下命令,确认两台服务器上/dev/yas/data、/dev/yas/vote和/dev/yas/ycr对应的WWID是否一致。
## 对比两台服务器上的输出结果是否对应一致
/usr/lib/udev/scsi_id --whitelisted --device=/dev/yas/data
/usr/lib/udev/scsi_id --whitelisted --device=/dev/yas/vote
/usr/lib/udev/scsi_id --whitelisted --device=/dev/yas/ycr
若两台服务器上同一路经所对应的WWID不一致,说明其挂载的磁阵不是同一个LUN,需联系公司网络管理员处理。
3.3.12 下载YashanDB安装包(node1节点)
下载网址:https://download.yashandb.com/download

安装包名称:yashandb-23.2.4.100-linux-x86_64.tar.gz
从本步骤开始,以及后续所有服务端安装步骤,将由数据库安装用户进行操作,请先切换至yashan用户或直接以yashan用户登录至服务器。
YashanDB支持在任一服务器上下载软件包,向其他所有服务器发起并行安装,本次安装以node1作为安装服务器,以下步骤均在node1上执行。
将软件包下载到/home/yashan/install目录下,并解压软件包:
su - yashan
mkdir -p /home/yashan/install
cd /home/yashan/install
sudo chown -R yashan:yashan yashandb-23.2.4.100-linux-x86_64.tar.gz
tar -zxf yashandb-23.2.4.100-linux-x86_64.tar.gz
YashanDB所提供的软件包中包含安装工具,位于bin目录下。如执行命令行安装需使用yasboot命令,如执行可视化安装需使用yasom命令。
[yashan@node1 install]$ ll ./bin/yasboot -rwxrwxr-x 1 yashan yashan 13486576 Sep 4 17:29 ./bin/yasboot [yashan@node1 install]$ ll ./bin/yasom -rwxrwxr-x 1 yashan yashan 23039032 Sep 4 17:29 ./bin/yasom [yashan@node1 install]$
3.4 YAC 共享集群部署
接下来将以命令行方式部署共享集群。
3.4.1 生成部署文件
1、执行yasboot package命令生成配置文件,命令详细参数可查阅yasboot。
$ ./bin/yasboot package ce gen --cluster yashandb -u yashan -p yashan --ip 192.*.*.60,192.*.*.62 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688 --node 2 --data /dev/yas/data --vote /dev/yas/vote --ycr /dev/yas/ycr
| 参数 | 说明 |
|---|---|
| –cluster | 指定数据库集群名称,该名称也将作为初始数据库的名称(database name) |
| –port | 指定SSH服务端口 |
| –install-path | 指定数据库安装路径 |
| –data-path | 指定数据存放目录 |
| –begin-port | 指定第一个数据库实例的数据库监听端口 |
| –data | 指定绑定的数据盘路径 |
| –vote | 指定绑定的投票盘路径 |
| –ycr | 指定绑定的YCR盘路径 |
命令回显如下:
[yashan@node1 install]$ ./bin/yasboot package ce gen --cluster yashandb -u yashan -p yashan --ip 192.*.*.60,192.*.*.62 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688 --node 2 --data /dev/yas/data --vote /dev/yas/vote --ycr /dev/yas/ycr
host host0002 openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017
Warning: OpenSSL less than 1.1.1, it may cause installation failures, please upgrade OpenSSL to 1.1.1 or greater
host host0001 openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017
Warning: OpenSSL less than 1.1.1, it may cause installation failures, please upgrade OpenSSL to 1.1.1 or greater
192.*.*.60
ip:192.*.*.60 memory is less than 4096MB
192.*.*.62
ip:192.*.*.62 memory is less than 4096MB
hostid | group | node_type | node_name | listen_addr | inter_connect | data_path
----------------------------------------------------------------------------------------------------------------
host0001 | ceg1 | ce | 1-1 | 192.*.*.60:1688 | 192.*.*.60:1689 | /data/yashan/yasdb_data
----------+-------+-----------+-----------+---------------------+---------------------+-------------------------
host0002 | ceg1 | ce | 1-2 | 192.*.*.62:1688 | 192.*.*.62:1689 | /data/yashan/yasdb_data
----------+-------+-----------+-----------+---------------------+---------------------+-------------------------
Generate config completed
执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,可手动修改,但不建议删除文件中任何行,否则可能导致后续安装过程报错,或所搭建的环境后续无法进行扩展配置。
- yashandb.toml:数据库集群的配置文件。
- hosts.toml:服务器的配置文件。
[yashan@node1 install]$ ls -l *.toml
-rw------- 1 yashan yashan 831 Dec 20 20:14 hosts.toml
-rw------- 1 yashan yashan 2278 Dec 20 20:14 yashandb.toml
2、根据实际需要调整yashandb.toml配置文件中的安装参数,可在group级别设置YashanDB的所有建库参数,可在node级别设置YashanDB的所有配置参数。
[yashan@node1 install]$ cat yashandb.toml
cluster = "yashandb" # 安装后修改也不会生效,除非重新安装
create_simple_schema = false # 为true部署完会执行示例的SQL,若改为true需要在deploy时指定sys-password参数
uuid = "67655f8997a38d6b07315cf97150ef7b" # 系统自动生成,不建议修改
yas_type = "CE" # 部署模式,安装后修改也不会生效,除非重新安装
[[group]]
database_role = "primary"
group_type = "ce" # 节点组类型,安装后修改也不会生效,除非重新安装
name = "ceg1" # 节点组名称,安装后修改也不会生效,除非重新安装
[group.cedisk]
vote = "/dev/yas/vote" # 投票盘,安装后不可修改,除非重新安装
ycr = "/dev/yas/ycr" # ycr盘,安装后不可修改,除非重新安装
[group.config] # 可配置所有建库参数,不配置时采用默认值
CHARACTER_SET = "utf8"
ISARCHIVELOG = true
REDO_FILE_NUM = 4
REDO_FILE_SIZE = "128M"
[[group.diskgroup]] # 磁盘组信息
au_size = "1M" # 分配磁盘空间时的AU大小
disk_size = "" # 指定可以由diskgroup进行管理的disk大小,可省略,则默认为该disk的总大小
name = "DG0" # 磁盘组的名称
redundancy = "EXTERNAL" # 磁盘组的冗余度
yfs_force_create = false # 强制格式化磁盘
[[group.diskgroup.failgroup]]
disk = ["/dev/yas/data"]
name = "DG0_0"
[[group.node]] # 节点配置
data_path = "/data/yashan/yasdb_data" # 为DATA目录,安装后修改也不会生效,除非重新安装
hostid = "host0001" # 服务器标识,安装后修改也不会生效,除非重新安装
role = 1 # 数据库主备角色,共享集群的实例没有主备概念,不支持修改
[group.node.config] # 可配置所有数据库参数,不配置时采用默认值,安装后修改也不会生效,除非重新安装
CLUSTER_DATABASE = "TRUE"
CLUSTER_INTERCONNECT = "192.*.*.60:1689"
DATA_BUFFER_SIZE = "1G"
HA_ELECTION_TIMEOUT = 18
HA_HEARTBEAT_INTERVAL = 6
INTER_URL = "192.*.*.60:1788"
LISTEN_ADDR = "192.*.*.60:1688"
REDO_BUFFER_PARTS = 8
REDO_BUFFER_SIZE = "64M"
RUN_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-1/run"
SHARE_POOL_SIZE = "1G"
SLOW_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-1/slow"
SQL_POOL_PARTS = 8
[[group.node]]
data_path = "/data/yashan/yasdb_data"
hostid = "host0002"
role = 2
[group.node.config]
CLUSTER_DATABASE = "TRUE"
CLUSTER_INTERCONNECT = "192.*.*.62:1689"
DATA_BUFFER_SIZE = "1G"
HA_ELECTION_TIMEOUT = 18
HA_HEARTBEAT_INTERVAL = 6
INTER_URL = "192.*.*.62:1788"
LISTEN_ADDR = "192.*.*.62:1688"
REDO_BUFFER_PARTS = 8
REDO_BUFFER_SIZE = "64M"
RUN_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-2/run"
SHARE_POOL_SIZE = "1G"
SLOW_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-2/slow"
SQL_POOL_PARTS = 8
[group.ycsconfig] # YFS配置参数,不配置时采用默认值
DISK_HB_KEEP_ALIVE = 30
LOG_LEVEL = "DEBUG"
LOG_NUMBER = 10
LOG_SIZE = "20M"
NETWORK_HB_TIMEOUT = 30
RESTART_INTERVAL = 30
RESTART_TIMES = 3
WAIT_STOP_FIN_TIME = 90
[group.yfsconfig]
SHM_POOL_SIZE = "2G"
SYS_AREA_SIZE = "1G"
YFS_PACKET_SIZE = "1M"
[yashan@node1 install]$
3.4.2 执行安装
场景一:直接安装。
$ ./bin/yasboot package install -t hosts.toml -i yashandb-23.2.4.100-linux-x86_64.tar.gz
场景二:如需使用DBLINK功能和更丰富的内置函数(例如LSFA_LISTAGG),需先下载plugin插件包并在安装命令中指定–plugin参数。安装完成后,无法单独安装该插件包。
$ ./bin/yasboot package install -t hosts.toml -i yashandb-23.2.4.100-linux-x86_64.tar.gz --plugin yashandb-plugins-all-23.2.4.100-linux-x86_64.tar.gz
这里使用了场景一:直接安装方式,回显如下:
[yashan@node1 install]$ ./bin/yasboot package install -t hosts.toml -i yashandb-23.2.4.100-linux-x86_64.tar.gz host host0002 openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017 Warning: OpenSSL less than 1.1.1, it may cause installation failures, please upgrade OpenSSL to 1.1.1 or greater host host0001 openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017 Warning: OpenSSL less than 1.1.1, it may cause installation failures, please upgrade OpenSSL to 1.1.1 or greater checking install package... install version: yashandb 23.2.4.100 host0001 100% [====================================================================] 3s host0002 100% [====================================================================] 3s update host to yasom... [yashan@node1 install]$
3.4.3 数据库部署
$ ./bin/yasboot cluster deploy -t yashandb.toml --yfs-force-create
命令说明:
[yashan@node1 install]$ ./bin/yasboot cluster deploy --help
Usages: yasboot cluster deploy [<flags>]
deploy yasdb cluster
Flags:
-h,--help Show detailed help information.
-t,--toml yasdb toml config, such as '<cluster>.toml'
-w,--nowait do not wait commands result(default: false)
-d,--child show task info with children task itself(default: false)
--disable shield running progress(default: false)
--dump-uuid dump task uuid in specified directory
-p,--sys-password database sys password
--yfs-force-create yfs force create diskgroup(default: false)
--recommend-force skip recommend param check exceed memory(default: false)
命令回显如下:
[yashan@node1 install]$ ./bin/yasboot cluster deploy -t yashandb.toml --yfs-force-create
type | uuid | name | hostid | index | status | return_code | progress | cost
-----------------------------------------------------------------------------------------------------------
task | 38604e9e9bdec8cc | DeployYasdbCluster | - | yashandb | FAILED | 1 | 100 | 98
------+------------------+--------------------+--------+----------+--------+-------------+----------+------
task completed, status: FAILED
retcode: 1
stdout: start log check failed
stderr: start yfs failed,err:start log check failed, failed to init dynamic library OPENSSL
Failed to start instance
failed to init dynamic library OPENSSL
Failed to start instance
解决办法:
1、参考《六、碰到的问题》章节安装openssl高版本。
2、卸载数据库:
[yashan@node1 install]$ ./bin/yasboot cluster clean --cluster yashandb --purge
Are you sure you want to CLEAN cluster: [yashandb], AND ALL DATA WILL BE DELETED (-p/--purge is given)?
[yes/no]: yes
type | uuid | name | hostid | index | status | return_code | progress | cost
-----------------------------------------------------------------------------------------------------------
task | f1b6c1410bff9cf2 | CleanYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 1
------+------------------+-------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
3、再次部署数据库
[yashan@node1 install]$ ./bin/yasboot cluster deploy -t yashandb.toml --yfs-force-create
type | uuid | name | hostid | index | status | return_code | progress | cost
------------------------------------------------------------------------------------------------------------
task | 950e6ea32aff27f8 | DeployYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 82
------+------------------+--------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
数据库成功部署完成。
3.4.4 配置环境变量
以安装用户登录到每个服务器上,执行如下命令生效环境变量。
# 部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件
$ cd /data/yashan/yasdb_home/yashandb/23.2.4.100/conf
[yashan@node1 conf]$ ls
database_options.json monit profile.toml sqlcollect.toml sqlhtml.template yashandb.bashrc yasreport.template ycs_options.json yfs_options.json
# 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除
$ cat yashandb.bashrc >> ~/.bashrc
$ source ~/.bashrc
3.4.5 检查安装结果
1、YashanDB不提供系统初始口令,需使用yasboot工具设置数据库sys用户的密码,以安装用户登录到服务器并执行如下命令设置密码。
$ yasboot cluster password set -n newpasswd -c yashandb
命令回显如下:
[yashan@node1 conf]$ yasboot cluster password set -n newpasswd -c yashandb
type | uuid | name | hostid | index | status | return_code | progress | cost
----------------------------------------------------------------------------------------------------------
task | 34de065b10ad3f5f | YasdbPasswordSet | - | yashandb | SUCCESS | 0 | 100 | 2
------+------------------+------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
2、执行如下命令,查看数据库状态。
$ yasboot cluster status -c yashandb -d
命令回显如下:
[yashan@node1 conf]$ yasboot cluster status -c yashandb -d
hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path
--------------------------------------------------------------------------------------------------------------------------------------------------
host0001 | ce | 1-1:1 | 25008 | open | normal | primary | 192.*.*.60:1688 | /data/yashan/yasdb_data/ce-1-1
----------+-----------+--------+-------+-----------------+-----------------+---------------+---------------------+--------------------------------
host0002 | ce | 1-2:2 | 24285 | open | normal | primary | 192.*.*.62:1688 | /data/yashan/yasdb_data/ce-1-2
----------+-----------+--------+-------+-----------------+-----------------+---------------+---------------------+--------------------------------
[yashan@node1 conf]$
3、使用yasql工具连接数据库。
[yashan@node1 conf]$ yasql sys/password@192.*.*.60:1688
YashanDB SQL Enterprise Edition Release 23.2.4.100 x86_64
Connected to:
YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 - X86 64bit Linux
#查看实例状态
SQL> select inst_id,status from gv$instance;
INST_ID STATUS
----------- -------------
1 OPEN
2 OPEN
2 rows fetched.
#查看数据库版本
SQL> select * from v$version;
BANNER VERSION_NUMBER
---------------------------------------------------------------- -----------------
Enterprise Edition Release 23.2.4.100 x86_64 23.2.4.100
1 row fetched.
SQL>
#查看数据库信息,包括实例id,数据库名,创建时间,归档模式,数据库保护模式,数据库角色等信息
SELECT GROUP_ID,INST_ID,DATABASE_NAME,CREATE_TIME ,LOG_MODE,OPEN_MODE ,PROTECTION_MODE,DATABASE_ROLE FROM gv$database;
GROUP_ID INST_ID DATABASE_NAME CREATE_TIME LOG_MODE OPEN_MODE PROTECTION_MODE DATABASE_ROLE
----------- ----------- ---------------------------------------------------------------- ------------------------------------------------ ----------------- ----------------- --------------------------------- -----------------
0 1 yashandb 2024-12-20 ARCHIVELOG READ_WRITE MAXIMUM PERFORMANCE PRIMARY
0 2 yashandb 2024-12-20 ARCHIVELOG READ_WRITE MAXIMUM PERFORMANCE PRIMARY
2 rows fetched.
4、创建数据库用户并赋权
SQL> create user testusr identified by testusr; Succeed. SQL> grant dba to testusr; Succeed.
四、dbeaver连接yashandb
下载jdbc驱动:

菜单栏选择数据库->选择驱动管理器->选择新建->选择库->添加文件->点击找到类



菜单栏选择数据库->选择新建数据库连接->选择刚才添加的yashandb驱动

填写JDBC URL、用户名、密码
jdbc url格式:jdbc:yasdb://ip地址:port/数据库名

测试连接:

五、集群管理
#查看数据库集群的状态
[yashan@node1 ~]$ yasboot cluster status -c yashandb -d
hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path
--------------------------------------------------------------------------------------------------------------------------------------------------
host0001 | ce | 1-1:1 | 25008 | open | normal | primary | 192.*.*.60:1688 | /data/yashan/yasdb_data/ce-1-1
----------+-----------+--------+-------+-----------------+-----------------+---------------+---------------------+--------------------------------
host0002 | ce | 1-2:2 | 24285 | open | normal | primary | 192.*.*.62:1688 | /data/yashan/yasdb_data/ce-1-2
----------+-----------+--------+-------+-----------------+-----------------+---------------+---------------------+--------------------------------
[yashan@node1 ~]$
#启动数据库集群
[yashan@node1 ~]$ yasboot cluster start -c yashandb -d
type | uuid | name | hostid | index | status | return_code | progress | cost
------------------------------------------------------------------------------------------------------------------
task | 9c39a1c6d3826a7e | StartYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 19
-------+------------------+-------------------+----------+--------------+---------+-------------+----------+------
child | dc53214a3f9f834c | StartYasdbYasce | host0001 | yashandb.1-1 | SUCCESS | 0 | 100 | 8
+------------------+-------------------+----------+--------------+---------+-------------+----------+------
| c6e8230b3024b4d1 | StartYasdbYasce | host0002 | yashandb.1-2 | SUCCESS | 0 | 100 | 11
-------+------------------+-------------------+----------+--------------+---------+-------------+----------+------
task completed, status: SUCCESS
#停止数据库集群
[yashan@node1 ~]$ yasboot cluster stop -c yashandb -d
type | uuid | name | hostid | index | status | return_code | progress | cost
-----------------------------------------------------------------------------------------------------------------
task | cf91f372f8ca1f27 | StopYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 17
-------+------------------+------------------+----------+--------------+---------+-------------+----------+------
child | abb118ce7a12bc96 | StopYasdbYasce | host0001 | yashandb.1-1 | SUCCESS | 0 | 100 | 11
+------------------+------------------+----------+--------------+---------+-------------+----------+------
| 5d6b82790ce60366 | StopYasdbYasce | host0002 | yashandb.1-2 | SUCCESS | 0 | 100 | 6
-------+------------------+------------------+----------+--------------+---------+-------------+----------+------
task completed, status: SUCCESS
六、碰到的问题
1、yasboot package install失败:
[yashan@node1 install]$ ./bin/yasboot package install -t hosts.toml -i yashandb-23.2.4.100-linux-x86_64.tar.gz host host0002 openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017 Warning: OpenSSL less than 1.1.1, it may cause installation failures, please upgrade OpenSSL to 1.1.1 or greater host host0001 openssl version: OpenSSL 1.0.2k-fips 26 Jan 2017 Warning: OpenSSL less than 1.1.1, it may cause installation failures, please upgrade OpenSSL to 1.1.1 or greater 192.*.*.60 ip:192.*.*.60 memory is less than 4096MB 192.*.*.62 ip:192.*.*.62 memory is less than 4096MB config check failed
原因:内存<4G
解决办法:内存设置为6G
2、数据库部署时失败
[yashan@node1 install]$ ./bin/yasboot cluster deploy -t yashandb.toml --yfs-force-create
type | uuid | name | hostid | index | status | return_code | progress | cost
-----------------------------------------------------------------------------------------------------------
task | 38604e9e9bdec8cc | DeployYasdbCluster | - | yashandb | FAILED | 1 | 100 | 98
------+------------------+--------------------+--------+----------+--------+-------------+----------+------
task completed, status: FAILED
retcode: 1
stdout: start log check failed
stderr: start yfs failed,err:start log check failed, failed to init dynamic library OPENSSL
Failed to start instance
failed to init dynamic library OPENSSL
Failed to start instance
原因:openssl版本太低
解决办法:安装高版本的openssl,并卸载数据库
安装openssl:
#下载openssl
https://openssl-library.org/source/
#备份老版本的openssl
mv /usr/bin/openssl /usr/bin/openssl.old
#安装openssl
mkdir -p /root/openssl
tar -zxvf openssl-1.1.1w.tar.gz -C /root/openssl
cd /root/openssl/openssl-1.1.1w
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
make depend && make -j 2 && make install
#创建软链接,将新版本的OpenSSL链接到旧版本的路径:
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#添加新OpenSSL库到动态链接库配置文件,并更新动态链接库
echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf
ldconfig -v
#查看openssl版本
openssl version -a
OpenSSL 1.1.1w 11 Sep 2023
built on: Fri Dec 20 14:30:43 2024 UTC
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: "/usr/local/openssl"
ENGINESDIR: "/usr/local/openssl/lib/engines-1.1"
Seeding source: os-specific
卸载数据库:
[yashan@node1 install]$ ./bin/yasboot cluster clean --cluster yashandb --purge
Are you sure you want to CLEAN cluster: [yashandb], AND ALL DATA WILL BE DELETED (-p/--purge is given)?
[yes/no]: yes
type | uuid | name | hostid | index | status | return_code | progress | cost
-----------------------------------------------------------------------------------------------------------
task | f1b6c1410bff9cf2 | CleanYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 1
------+------------------+-------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
六、总结
YashanDB 23.2 YAC 共享集群部署安装部署还是非常丝滑的~~~
关于作者:
专注于Oracle、MySQL、PG、OpenGauss和国产数据库的研究,热爱生活,热衷于分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同进步~~~




