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

企业版 YashanDB 23.2.4 分布式集群 数据库一主二备集群安装部署指南

山佳数峰寻道 2025-03-08
6

一、概述

1.1 文档目标

本部分旨在为技术人员提供崖山数据库企业版 23.2 在 CentOS 7 x86_64 操作系统上进行安装部署操作的全面且清晰的指引。通过对系统架构、集群拓扑和部署需求的精确阐述,使读者能够在安装过程开始前形成系统的概念架构,为后续的详细安装、配置和调试步骤奠定坚实基础,确保崖山数据库能够在目标环境中实现高效、稳定和安全的运行,符合企业级生产环境的要求。

1.2 系统架构简介

1.2.1 架构概览

崖山数据库企业版 23.2 采用了多层模块化架构设计,这种设计确保了系统在处理复杂业务场景时能够具备高性能、高可靠性和卓越的可扩展性。

  • 存储层:作为数据的持久化存储基础,存储层精心设计了存储引擎以适配不同类型的数据存储需求。它采用了混合存储策略,结合了传统硬盘(HDD)的大容量和固态硬盘(SSD)的高读写速度优势。通过智能的数据分层算法,根据数据的访问频率、热度和重要性,自动将数据分配到合适的存储介质上,优化了存储 I/O 性能。此外,存储层还实现了高效的数据压缩和加密机制,在保证数据安全性的同时,减少了存储成本。
  • 核心引擎层:此层是数据库的核心大脑,集成了多个关键组件。在事务处理方面,采用了先进的分布式事务协议,确保在复杂的多节点环境下事务的原子性、一致性、隔离性和持久性(ACID 特性)。其查询优化器基于成本模型,能够动态分析查询语句和数据分布情况,运用先进的统计信息和启发式算法,生成最优的查询执行计划。在并发控制上,结合了锁机制和多版本并发控制(MVCC)技术,能够在高并发读写场景下最小化锁冲突,保障系统的整体性能和数据一致性。
  • 应用接口层:为了实现与外部应用的无缝集成,应用接口层遵循了业界标准,全面支持 SQL - 92、SQL:1999 等主流 SQL 标准,允许用户通过标准的 SQL 语句操作数据库。同时,针对不同的编程语言,提供了丰富且高效的编程接口,包括但不限于 Java 的 JDBC、C++ 的 ODBC 和 Python 的 DB - API 等。这些接口经过精心优化,确保在不同应用场景下的数据交互流畅性和低延迟性。

1.2.2 主备架构机制

在一主二备集群架构下,主节点是整个集群的核心写入点,承担着所有的写入操作以及部分高优先级的读取操作。主节点内部采用了日志先行(Write - Ahead Logging,WAL)机制,即所有的数据修改操作在应用到数据文件之前,先记录到预写日志中。这种机制确保了在系统故障时能够通过回放日志来恢复数据的完整性。

两个备节点与主节点之间的数据同步存在两种机制:

  • 异步复制机制

备节点通过基于日志的异步复制机制与主节点保持数据同步。备节点会周期性地从主节点获取最新的预写日志,并按照日志顺序在本地重放操作,以确保数据的一致性。在主节点出现故障时,集群监控系统将根据预定义的策略,自动从两个备节点中选举出一个合适的节点切换为主节点,整个切换过程对上层应用透明,最大限度地保障了业务的连续性。

  • 同步复制机制

除了异步复制机制外,崖山主备架构还支持同步复制机制。在同步复制模式下,当主节点执行写入操作时,会等待备节点确认已经成功接收并写入对应的日志数据后,才认为本次写入操作成功。这种机制确保了在任何时刻主节点和备节点的数据都处于完全一致的状态,提高了数据的可靠性和可用性,但可能会在一定程度上影响系统的写入性能。通过这种方式,在对数据一致性要求极高的场景下,可以确保数据不会因为系统故障而丢失或出现不一致的情况。

通过异步复制和同步复制这两种机制,崖山主备架构能够灵活地适应不同业务场景下对数据一致性和系统性能的需求,保障了整个集群的稳定运行和数据安全。

1.3 集群拓扑结构

1.3.1 网络拓扑设计

崖山数据库一主二备集群的网络拓扑结构经过精心规划,以确保在高负载和高并发场景下的数据传输可靠性和高效性。

主节点和两个备节点通过高速冗余网络连接,推荐采用千兆以太网(Gigabit Ethernet)或更高速率的网络技术,如万兆以太网(10 - Gigabit Ethernet)。为确保网络的高可用性,建议采用双网络链路冗余设计,即每个节点配置双网卡,并通过链路聚合技术(如 802.3ad 链路聚合协议)将两个物理链路绑定为一个逻辑链路,实现网络流量的负载均衡和故障切换。

网络中的交换机应选用企业级高性能设备,具备足够的端口密度、背板带宽和包转发能力,以满足数据库集群在高并发数据传输时的需求。同时,为保障网络安全,应在网络边界部署防火墙和入侵检测 预防系统(IDS/IPS),通过配置严格的访问控制策略和入侵防范策略,防止外部网络攻击对数据库集群造成威胁。

1.3.2 数据流向与同步机制

在集群正常运行状态下,数据流向遵循从主节点到备节点的单向路径。当主节点有新的数据写入操作时,数据变更首先被记录到主节点的二进制日志(Binary Log)中。二进制日志采用了高效的日志格式,记录了数据修改操作的详细信息,包括操作类型、操作数据和操作顺序等。

备节点通过专用的复制线程定期轮询主节点的二进制日志。一旦发现有新的日志记录,备节点将使用基于网络的 I/O 操作将这些日志拉取到本地的中继日志(Relay Log)中。中继日志作为备节点数据同步的临时存储,确保在复制过程中数据的顺序和完整性。备节点随后按照中继日志中的顺序,依次执行日志中的数据修改操作,将数据变更应用到本地数据库中,从而实现与主节点的数据同步。这种基于日志的异步复制机制在保障数据一致性的同时,能够有效减少主节点的复制负担,提高系统的整体性能。

1.4 部署需求

1.4.1 软件需求

  • 操作系统:本安装部署文档基于 CentOS 7 x86_64 操作系统。在安装前,确保操作系统已进行完整的安装,并且通过 yum 或其他官方软件包管理工具将系统更新到最新的补丁版本。这不仅有助于修复已知的安全漏洞,还能确保系统在运行过程中保持稳定。
  • 数据库软件:获取崖山数据库企业版 23.2 的官方安装介质,确保安装包来源可靠且未被篡改。在获取安装包后,建议对安装包进行哈希校验(如 MD5 或 SHA - 256),以验证其完整性。
  • 依赖软件包:CentOS 7 系统需要安装一系列的依赖软件包来支持崖山数据库的运行。这些软件包包括但不限于:
    • libaio - devel:用于支持异步 I/O 操作,提高数据库的 I/O 性能。
    • numactl - devel:在支持非均匀内存访问(NUMA)架构的服务器上,优化内存分配和访问效率。
    • openssl - devel:提供加密库支持,保障数据库在网络通信和数据存储过程中的安全性。

1.4.2 硬件需求

  • 服务器:
    • CPU:每个备节点的 CPU 核心数不少于 8 核,主频不低于 2.5GHz,以确保能够快速处理从主节点同步的数据和本地的读取操作。
    • 内存:配置不低于 32GB 的内存,确保在数据同步和读取操作过程中有足够的内存资源。
    • 存储:同样采用固态硬盘(SSD),容量建议不低于 500GB,以保障数据的快速同步和存储。
    • CPU:推荐采用多核心处理器,核心数不少于 12 核,且处理器主频不低于 3.0GHz。具备超线程技术的 CPU 将更有利于处理多线程操作,满足数据库在高并发写入和部分读取操作时的性能需求。
    • 内存:建议配置不低于 64GB 的内存容量。足够的内存能够缓存大量的数据和索引,减少磁盘 I/O 操作,提高数据库的响应速度。
    • 存储:应配备高速的固态硬盘(SSD)作为主要存储介质,用于存储数据库的数据文件、日志文件和临时文件等。存储容量应根据业务数据量和增长预期进行合理配置,初始配置建议不低于 1TB。
    • 主节点:
    • 备节点:
  • 网络:网络设备必须支持高速、稳定的网络连接。对于千兆以太网连接,应确保网络线缆质量优良,网卡工作正常且无网络瓶颈。在可能的情况下,优先选择万兆以太网连接,以提供更强大的网络带宽支持。网络的延迟和丢包率应控制在极低水平,确保数据在节点之间的可靠传输。

1.4.3 人员需求

  • 系统管理员:需具备丰富的 CentOS 7 操作系统管理经验,包括但不限于系统安装、内核参数优化、用户和权限管理、网络配置和存储管理等。系统管理员还应熟悉硬件设备的安装、调试和故障排除,能够确保操作系统环境的稳定和高效运行,为数据库的安装和运行提供坚实的基础。
  • 数据库管理员:必须掌握崖山数据库企业版 23.2 的专业知识,包括安装、配置、调优、备份恢复、安全管理和性能监控等方面。数据库管理员能够根据业务需求合理配置数据库参数,解决数据库运行过程中的性能瓶颈和故障问题,保障数据库的安全、稳定和高效运行。

1.4.4 时间需求

整个安装部署过程的时间消耗受多种因素影响,包括但不限于硬件性能、网络环境和操作人员的熟练程度。

  • 操作系统准备:从硬件设备上电到完成 CentOS 7 操作系统的安装、配置和更新,预计需要 3 - 5 小时。其中包括系统安装、基础软件包安装、网络配置和系统安全加固等操作。
  • 数据库安装:崖山数据库企业版 23.2 的安装过程,包括安装包解压、环境变量配置、依赖检查和安装脚本执行等步骤,预计需要 2 - 3 小时。
  • 配置和测试:在完成数据库安装后,进行集群配置、参数调整、网络连接测试和初步的功能验证,这一过程可能需要 4 - 6 小时。

综合考虑,从开始准备操作系统到完成数据库集群的初步测试和基本配置,预计总共需要 9 - 14 小时。在实际操作过程中,建议预留足够的时间进行全面的测试、优化和问题排查,确保数据库集群能够在生产环境中稳定、可靠地运行。

二、安装环境设置

集群环境各服务器应具有相同体系架构

  • 64bit 和 32bit 不能同一集群
  • ARM 和 x86 两类系统不能同一集群

2.1 硬件环境要求

集群环境各服务器应满足以下最低硬件需求,生产环境应根据业务需求适时调整硬件配置。

项目名称
最低配置
推荐配置
服务器数量
3(台)
1个MN组(MN节点1主2备)、2个CN、1个DN组(DN节点1主2备)
内存
>4(GB)
性能及商业部署建议单机不低于16(GB)
CPU
CPU核数>2
X86_64,ARM64
超线程,非超线程
推荐4C及以上
硬盘
> 4(GB)
系统盘建议配置RAID1
数据盘建议配置RAID5(规划4组RAID5数据盘安装
推荐使用SSD
推荐存储空间50G及以上
文件系统
不能为tmpfs
ext4或xfs
网络

建议设置双网卡冗余bond、千兆以上以太网,支持TCP和UDP

2.2 操作系统要求

2.2.1 软件环境要求

软件类型
最低配置
推荐配置
操作系统
如需使用大页内存,Linux内核版本为2.6及以上
CentOS 7.6以上,KylinOS V10,openEuler 22.03
inode个数

剩余inode个数>15(亿)

2.2.2 软件依赖要求

为保障 YashanDB 顺利安装与稳定运行,请依下述来源及最低版本要求,于所有服务器环境中配置必备依赖项。

动态库名称
来源
版本要求
作用
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及以上
守护进程

三、集群规划

3.1 主机名称规划

主机名称
描述说明
hostname-db1
主节点服务器名称
hostname-db2
备节点一服务器名称
hostname-db3
备节点二服务器名称

3.2 主机地址规划

IP地址
描述说明
10.xxx.xxx.131
主节点 IP 地址
10.xxx.xxx.132
备节点一 IP 地址
10.xxx.xxx.133
备节点二 IP 地址

3.3 端口号规划

端口号
参数名称
描述说明
1678
MN - Manager Node
管理节点 MN 端口号
1688
CN - Cordinator Node
协调节点 CN 端口号
1698
DN - Data Node
数据节点 DN 端口号

3.4 用户及组规划

项目名称
名称
所属类型
规划建议
用户名
yashan
操作系统
建议集群各节点密码及 ID 相同
组名
YASDBA
操作系统
建议集群各节点组 ID 相同

3.5 软件目录规划

目录名称
对应名称
目录作用
/data/yashan/yasdb_home
HOME目录
YashanDB 产品目录涵盖其命令集、运行库以及关键组件
/data/yashan/yasdb_data
数据目录
含数据库系统数据文件、部分日志文件、配置文件以及默认存储的用户数据

四、环境准备

4.1 操作系统参数调整

注:部署生产分布式集群时建议关闭生成 core 文件开关

-- 开发测试环境为方便定位问题可打开生成 core 文件开关
-- 查看当前是否开启系统 core 文件开关
# ulimit -c   [0 表示禁用核心转储]
-- 开启核心转储文件生成
# ulimit -c unlimited [ core 文件大小无限制,ulimit -c 100000 表示限制大小为 100000kb ]

# vi etc/security/limits.conf

## 添加以下信息并保存:
  - soft core unlimited
  - hard core unlimited

复制

4.2 关闭交换分区

注:为避免内存交换影响性能,建议关闭交换分区

-- 查看当前系统交换分区状态
# sysctl -a | grep swappiness 
-- 关闭系统交换分区
# sysctl -w vm.swappiness=0
# echo "vm.swappiness=0">> etc/sysctl.conf

复制

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

注:为减少端口冲突,建议调整本地端口范围

-- 查看当前系统本地端口范围
# cat proc/sys/net/ipv4/ip_local_port_range
-- 调整本地端口范围,建议大于 30000 
# sysctl -w net.ipv4.ip_local_port_range='32768 60999' 
# echo "net.ipv4.ip_local_port_range=32768 60999" >> etc/sysctl.conf

复制

4.4 调整进程虚拟内存地址上限

注:生产环境建议调整虚拟内存地址上线

-- [VMA(Virtual Memory Address)虚拟内存地址 ]
-- 查看当前 VMA 上限
# sysctl -a|grep vm.max_map_count
-- 调整系统 VMA 上限,建议生产环境不低于 2000000
# sysctl -w vm.max_map_count=2000000
# echo "vm.max_map_count=2000000" >> etc/sysctl.conf 

复制

4.5 调整资源限制值

注:调整部分资源限制,生产环境应不低于推荐值

资源项
推荐值
配置文件命令
注释说明
open files
1048576
ulimit -n 1048576
调整打开文件的最大数量
max user processes
1048576
ulimit -u 1048576
设置允许的最大进程数量
max memory size
无限制
ulimit -m unlimited
设置最大内存使用量为无限制
stack size
8192
ulimit -s 8192
设置堆栈大小

注:可通过如下命令写入

-- 使用 root 用户执行
sudo bash -c 'cat <<EOF >> etc/security/limits.conf
* 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'

复制

4.6 配置大页内存

注:生产环境建议 启用大页内存、关闭透明大页

-- 查看当前大页内存配置
# grep -i huge proc/meminfo
-- 查看当前透明大页配置
# cat sys/kernel/mm/transparent_hugepage/enabled [若显示 always madvise [never],表明透明大页已禁用]

-- BIOS 系统可通过如下脚本 启用大页内存和关闭透明大页
cat << 'EOF' > configure-hugepages-thp.sh
#!/bin/bash

# 确保脚本以root权限运行
if [ "$(id -u)" != "0" ]; then
   echo "此脚本必须以root权限运行" 1>&2
   exit 1
fi

# 配置大页数量
REQUIRED_HUGEPAGES=<required_hugepages>  # 替换为实际计算值
echo "配置 $REQUIRED_HUGEPAGES 大页内存..."
echo "vm.nr_hugepages=$REQUIRED_HUGEPAGES" | tee -a etc/sysctl.conf
sysctl -p

# 禁用透明大页
echo "正在修改GRUB配置以禁用透明大页..."
GRUB_CMDLINE="transparent_hugepage=never"
if grep -q '^GRUB_CMDLINE_LINUX' etc/default/grub; then
   sed -i "s/^\(GRUB_CMDLINE_LINUX=\".*\)\"/\1 $GRUB_CMDLINE\"/" etc/default/grub
else
   echo "GRUB_CMDLINE_LINUX=\"$GRUB_CMDLINE\"" | tee -a etc/default/grub
fi

# 更新GRUB配置
echo "更新GRUB配置..."
grub2-mkconfig -o boot/grub2/grub.cfg

# 重启系统
echo "准备重启系统以应用更改..."
read -p "是否现在重启系统?(y/n): " answer
if [[ $answer =~ ^[Yy]$ ]]
then
    reboot
else
    echo "更改将在下次重启后生效。"
fi
EOF

--设置权限
# chmod +x configure-hugepages-thp.sh
-- 执行脚本
# sh configure-hugepages-thp.sh
-- 根据提示重启操作系统,输入 y

复制

注:为优化YashanDB性能,建议配置适量大页内存以减少页表开销并提高内存效率。以下是配置示例。

计算总内存需求

1)基本内存配置:

  • DATA_BUFFER_SIZE: 32 MB
  • REDO_BUFFER_SIZE: 8 MB
  • VM_BUFFER_SIZE: 16 MB
  • SHARE_POOL_SIZE: 64 MB
  • LARGE_POOL_SIZE: 8 MB
  • DBWR_BUFFER_SIZE: 4 MB
  • WORK_AREA_POOL_SIZE: 16 MB
  • AUDIT_QUEUE_SIZE: 16 MB

总计基本内存需求(UserSize): 164 MB

2)额外内存需求:

  • 额外的内存需求(如MMS表空间)应该预先评估(MMSSize)。

计算大页所需空间

  • 根据公式 LargePageSize = (UserSize + MMSSize + 额外64 MB) * 1.2 【计算所需调整后的内存总量】
  • 假设MMSSize为100 MB,调整后的总内存需求为:(164+100+64)∗1.2=394.8(MB)

配置大页

  • 以2 MB为单个大页尺寸计算,所需大页数为:Ceil(394.8/2)=198
  • 配置大页内存需预留198个大页。

4.7 关闭SELinux

注意:建议关闭所有数据库服务器 SELinux

-- 临时关闭 SELinux
# setenforce 0
-- 永久关闭SELinux
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" etc/selinux/config
-- 检查 SELinux 状态
# getenforce
-- 状态为Disabled表明SELinux已关闭

复制

4.8 关闭防火墙

注意:建议关闭所有数据库服务器防火墙

-- 停止 firewalld 服务
# systemctl stop firewalld.service
-- 禁用 firewalld 服务
# systemctl disable firewalld.service
-- 查看 firewalld 服务状态 [ Active: inactive (dead) 表示已关闭防火墙 ]
# systemctl status firewalld  

-- 若防火墙不能关闭,可通过添加白名单方式将相关端口添加到白名单中
-- 以下演示将 1688 端口添加至防火墙白名单
-- 添加(--permanent表示永久生效,没有此参数重启后失效)
# firewall-cmd --zone=public --add-port=1688/tcp --permanent
-- 重新载入
# firewall-cmd --reload
-- 查看规则生效情况
# firewall-cmd --zone=public --query-port=1688/tcp

复制

4.9 开启 SSH 服务

-- 禁用 SSH 登录时的横幅(Banner)
# sed -i '/Banner/s/^/#/' etc/ssh/sshd_config
-- 目的是禁用允许以 root 用户登录的配置选项
# sed -i '/PermitRootLogin/s/^/#/' etc/ssh/sshd_config
# echo -e "\n" >> etc/ssh/sshd_config
# echo "Banner none " >> etc/ssh/sshd_config
# 修改Banner配置,去掉连接到系统时,系统提示的欢迎信息。欢迎信息会干扰安装时远程操作的返回结果,影响安装正常执行
# echo "PermitRootLogin yes" >> etc/ssh/sshd_config
# cat etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRootLogin|Banner'
-- 重启 SSH 服务生效
# systemctl restart sshd.service
-- 查看 SSH 服务状态
# systemctl status sshd.service

复制

4.10 设置时区和时间

注:建议安装配置 chrony 设置时钟同步

-- 可使用如下脚本安装配置 chrony 服务
cat << 'EOF' > setup_chrony.sh
#!/bin/bash

# 检查是否具有 root 权限
if [ "$EUID" -ne 0 ]; then
    echo "请以 root 用户或使用 sudo 执行此脚本。"
    exit 1
fi

# 安装 chrony
echo "安装 chrony..."
yum install -y chrony

# 配置 chrony(修改 etc/chrony.conf)
echo "配置 chrony..."
cat > etc/chrony.conf <<EOL
# 默认公共 NTP 服务器
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# 允许本地网络同步
allow 192.168.0.0/16

# 日志记录
logdir var/log/chrony
EOL

# 启动并启用 chrony 服务
echo "启动并设置 chrony 服务开机自启..."
systemctl start chronyd
systemctl enable chronyd

# 检查服务状态
echo "检查 chrony 服务状态..."
systemctl status chronyd

# 验证同步状态
echo "验证时钟同步状态..."
chronyc tracking

# 设置硬件时钟同步
echo "同步硬件时钟..."
hwclock --systohc

# 输出完成信息
echo "Chrony 安装与配置完成。"
EOF

--设置权限
# chmod +x setup_chrony.sh
-- 执行脚本
# sh setup_chrony.sh

复制

4.11 配置硬件时钟

注:硬件时钟(RTC,Real-Time Clock)在集群环境中是时间管理的关键,其准确性直接影响多节点间的协作效率、数据一致性和系统稳定性。建议生产环境配置硬件时钟同步。

-- 确认硬件时钟当前状态
# hwclock --show
-- 确保系统时钟与硬件时钟同步
# hwclock --systohc
-- 选择硬件时钟的时间基准
-- 设置为 UTC 时间(推荐,尤其是服务器和集群环境)
# timedatectl set-local-rtc 0
-- 验证时钟同步
# timedatectl
-- 配置自动同步硬件时钟 [示例]
0 * * * * sbin/hwclock --systohc 

复制

4.12 修改字符集

注:为避免操作系统因字符集异常,建议前期设置为所需字符集

-- 此处已修改字符集为 en_US.UTF-8 为例
-- 设置字符集到 etc/profile
# echo "export LANG=en_US.UTF-8" >> etc/profile
-- 重新加载配置文件
# source etc/profile
-- 检查字符集
# env | grep -i lang

复制

4.13 安装软件依赖包

-- 安装 tar、gz、openssl 依赖包
-- 通过如下脚本安装以上依赖包
cat << 'EOF' > install_openssl.sh
#!/bin/bash

# 检查是否具有 root 权限
if [ "$EUID" -ne 0 ]; then
    echo "请以 root 用户或使用 sudo 执行此脚本。"
    exit 1
fi

# 定义变量
OPENSSL_VERSION="1.1.1w"
OPENSSL_TAR="openssl-${OPENSSL_VERSION}.tar.gz"
OPENSSL_SHA256="openssl-${OPENSSL_VERSION}.tar.gz.sha256"
INSTALL_DIR="/usr/local/openssl"
SOURCE_DIR="/root/soft"

# 安装解压工具
echo "检查并安装必要的解压工具..."
yum install -y tar gzip

# 安装开发工具(如 gcc)
echo "检查并安装开发工具..."
yum groupinstall -y "Development Tools"
yum install -y gcc

# 检查安装包和校验文件是否存在
if [ ! -f "${SOURCE_DIR}/${OPENSSL_TAR}" ]; then
    echo "未找到 ${SOURCE_DIR}/${OPENSSL_TAR},请确认文件路径正确。"
    exit 1
fi

if [ ! -f "${SOURCE_DIR}/${OPENSSL_SHA256}" ]; then
    echo "未找到 ${SOURCE_DIR}/${OPENSSL_SHA256},请确认文件路径正确。"
    exit 1
fi

# 进入文件目录
cd "${SOURCE_DIR}" || exit

# 校验文件格式修复
if ! grep -q "${OPENSSL_TAR}" "${OPENSSL_SHA256}"; then
    echo "修复校验文件格式..."
    SHA256_VALUE=$(cat "${OPENSSL_SHA256}" | awk '{print $1}')
    echo "${SHA256_VALUE} ${OPENSSL_TAR}" > "${OPENSSL_SHA256}"
fi

# 校验文件完整性
echo "校验文件完整性..."
sha256sum -c "${OPENSSL_SHA256}"
if [ $? -ne 0 ]; then
    echo "校验失败,请检查安装包是否损坏或下载是否完整。"
    exit 1
fi

# 解压安装包
echo "解压安装包..."
tar xzf "${OPENSSL_TAR}"

# 进入解压后的目录
cd "openssl-${OPENSSL_VERSION}" || exit

# 编译安装 OpenSSL
echo "开始编译和安装 OpenSSL..."
./config --prefix="${INSTALL_DIR}"
make -j$(nproc) && make install

if [ $? -ne 0 ]; then
    echo "OpenSSL 编译或安装失败,请检查日志。"
    exit 1
fi

# 配置系统路径
echo "配置系统路径..."
ln -sf "${INSTALL_DIR}/bin/openssl" usr/bin/openssl
ln -sf "${INSTALL_DIR}/include/openssl" usr/include/openssl
echo "${INSTALL_DIR}/lib" >> etc/ld.so.conf
ldconfig -v

# 验证安装
echo "验证 OpenSSL 版本..."
openssl version -a

# 清理临时文件
cd ..
rm -rf "openssl-${OPENSSL_VERSION}"

echo "OpenSSL ${OPENSSL_VERSION} 安装和配置完成!"
EOF

--设置权限
# chmod +x install_openssl.sh
-- 执行脚本
# sh install_openssl.sh

复制

4.14 创建目录

-- 每个节点数据库服务器都要创建相同目录
# mkdir -p data/yashan
# chmod -R 777 data/yashan

复制

4.15 创建用户

-- 通过如下脚本方式创建 yashan 用户并设置 sudo 免密
cat << 'EOF' > setup_user.sh
#!/bin/bash

# 检查是否具有 root 权限
if [ "$EUID" -ne 0 ]; then
    echo "请以 root 用户或使用 sudo 执行此脚本。"
    exit 1
fi

# 定义变量
USERNAME="yashan"
HOMEDIR="/home/${USERNAME}"
USERGROUP="YASDBA"
PASSWORD="yashan!1234"  # 定义密码变量

# 创建用户及设置密码
echo "创建用户 ${USERNAME}..."
if ! id -u "${USERNAME}" >/dev/null 2>&1; then
    useradd -m -d "${HOMEDIR}" -s bin/bash "${USERNAME}"
    echo "${USERNAME}:${PASSWORD}" | chpasswd
    echo "用户 ${USERNAME} 已创建,密码设置为 '${PASSWORD}'。"
else
    echo "用户 ${USERNAME} 已存在,跳过创建步骤。"
fi

# 配置 sudo 免密权限
echo "配置 sudo 免密权限..."
if ! grep -q "^${USERNAME} ALL=(ALL) NOPASSWD: ALL" etc/sudoers; then
    echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> etc/sudoers
    echo "已为用户 ${USERNAME} 配置 sudo 免密权限。"
else
    echo "用户 ${USERNAME} 已配置 sudo 免密权限,跳过。"
fi

# 确保 etc/sudoers 文件属性恢复为只读
echo "恢复 etc/sudoers 文件为只读属性..."
chmod 440 etc/sudoers

# 创建用户组并将用户加入组
echo "创建用户组 ${USERGROUP} 并将用户加入组..."
if ! grep -q "^${USERGROUP}:" etc/group; then
    groupadd "${USERGROUP}"
    echo "用户组 ${USERGROUP} 已创建。"
else
    echo "用户组 ${USERGROUP} 已存在,跳过创建。"
fi

usermod -aG "${USERGROUP}" "${USERNAME}"
echo "用户 ${USERNAME} 已加入用户组 ${USERGROUP}。"

echo "所有操作已完成。"

EOF

--设置权限
# chmod +x setup_user.sh
-- 执行脚本
# sh setup_user.sh

复制

4.16 下载软件安装包

4.16.1 下载安装包

方式一:

登录崖山数据库官网 https://download.yashandb.com/download 下载页面,下载 YashanDB 企业版,截止到 2024年12月-11日,当前官网可供下载的最新企业版为 YashanDB 23.2.4 版本,并选择对应的 Linux X86 数据库版本进行下载,然后将下载的数据库软件上传到数据库服务器指定目录下。

方式二:

如果服务器可以连接外网,可以在数据库服务器上通过如下方式进行下载。

-- 下载数据库软件
$ cd home/yashan/install
$ wget https://linked.yashandb.com/upload1010/yashandb-23.2.4.100-linux-x86_64.tar.gz

复制

4.16.2 解压安装包

$ cd home/yashan/install
$ tar zxf yashandb-23.2.4.100-linux-x86_64.tar.gz

复制

五、数据库软件安装

5.1 生成部署文件

注:执行yasboot package命令生成 toml 配置文件

-- 使用 yashan 用户在其中节点执行
# su - yashan
$ cd install
$ ./bin/yasboot package de gen --cluster yashandb --recommend-param \
-u yashan -p 'yashan!1234' --ip 10.xxx.xxx.131,10.xxx.xxx.132,10.xxx.xxx.133 --port 22 \
--install-path data/yashan/yasdb_home --data-path data/yashan/yasdb_data \
--begin-port 1688 --mn 3 --cn 2 --dn 1-3

-- 参数说明
-- cluster 指定数据库集群名称,该名称也将作为初始数据库名称
-- port 指定SSH服务端口
-- install-path 指定数据库安装路径
-- data-path 指定数据存放目录
-- begin-port 指定第一个CN节点上数据库监听端口
-- mn/cn/dn 分别指定MN节点/CN节点/DN组-节点数量

-- 上述命令执行后会在 install 目录下生成 yashandb.toml 和 hosts.toml 两个配置文件
-- yashandb.toml:数据库集群配置文件。
-- hosts.toml:服务器配置文件
-- toml 配置文件如附件

复制

5.2 执行安装

场景一:直接安装

-- 使用 yashan 用户在生成 toml 配置文件的服务器上进行安装
$ cd install
$ ./bin/yasboot package install -t hosts.toml -i yashandb-23.2.1.100-linux-x86_64.tar.gz 

复制

场景二:扩展插件安装

注:如需使用DBLINK功能和更丰富的内置函数,可借助 plugin 插件包进行安装,若前期采用了直接安装,安装后,无法再单独安装插件包

-- 本次采用了扩展插件安装
-- 首先登录官网下载并上传 yashandb-plugins-all-23.2.4.100-linux-x86_64.tar.gz 插件到 home/yashan/install 目录
-- 执行安装命令
$ cd install
$ ./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

复制

5.3 数据库部署

-- 使用 yashan 用户执行
-- 使用参数 “-d” 或 “--child”,可展示任务及其子任务信息,便于查看部署进度。
$ cd install
$ ./bin/yasboot cluster deploy -t yashandb.toml -d
-- 执行结果出现 task completed, status: SUCCESS 提示安装部署成功
-- 执行过程可查看 data/yashan/yasdb_home/yashandb/23.2.4.100/om/yashandb/log 目录下 yasom.log 和 yasagent.log 查看安装过程日志

复制

5.4 配置环境变量

注:为确保 YashanDB 相关命令正常执行,需将生成的环境变量配置文件加入当前用户环境,请参照如下步骤配置环境变量。

登录到每台服务器执行如下相同操作

1)定位环境变量文件

-- 部署完成后,环境变量文件存于 $YASDB_HOME/conf 目录,示例路径:
-- yashan 用户操作
$ cd data/yashan/yasdb_home/yashandb/23.2.4.100/conf

复制

2)更新用户环境变量

-- 将文件内容追加至 ~/.bashrc:
-- yashan 用户操作
$ cat yashandb.bashrc >> ~/.bashrc

复制

3)立即生效

-- 执行以下命令生效:
$ source ~/.bashrc

复制

以上操作可通过如下脚本实现:

#!/bin/bash

# 定义变量
CONF_DIR="/data/yashan/yasdb_home/yashandb/23.2.4.100/conf"
ENV_FILE="yashandb.bashrc"
BASHRC="$HOME/.bashrc"
TEST_VAR="YASDB_HOME"  # 用于验证的环境变量名
YASHAN_CMD="yasboot --help"  # 用于验证的 YashanDB 命令
BIN_DIR="bin"  # 假设 yasboot 在 $YASDB_HOME/bin 下

# 检查环境变量文件是否存在
if [[ ! -f "$CONF_DIR/$ENV_FILE" ]]; then
    echo "环境变量文件不存在:$CONF_DIR/$ENV_FILE"
    exit 1
fi

# 备份原有的 .bashrc 文件
echo "备份当前 .bashrc 文件为 .bashrc.bak"
cp "$BASHRC" "$BASHRC.bak"

# 删除已有的 YashanDB 环境变量
echo "清除旧的 YashanDB 环境变量配置"
sed -i '/# YashanDB 环境变量配置开始/,/# YashanDB 环境变量配置结束/d' "$BASHRC"

# 添加新环境变量配置
echo "添加新的 YashanDB 环境变量配置"
echo -e "\n# YashanDB 环境变量配置开始" >> "$BASHRC"
cat "$CONF_DIR/$ENV_FILE" >> "$BASHRC"
echo "export PATH=\$YASDB_HOME/$BIN_DIR:\$PATH" >> "$BASHRC"  # 添加 bin 目录到 PATH
echo "# YashanDB 环境变量配置结束" >> "$BASHRC"

# 使环境变量立即生效
echo "使环境变量立即生效"
source "$BASHRC"
export PATH=$YASDB_HOME/$BIN_DIR:$PATH  # 确保当前会话生效

# 检查环境变量是否配置成功
if [[ -z "${!TEST_VAR}" ]]; then
    echo "环境变量未生效,请检查配置!"
    exit 1
else
    echo "环境变量已成功配置,$TEST_VAR=${!TEST_VAR}"
fi

# 测试 YashanDB 命令
echo "执行 YashanDB 测试命令:$YASHAN_CMD"
if command -v yasboot >/dev/null 2>&1; then
    if $YASHAN_CMD >/dev/null 2>&1; then
        echo "YashanDB 命令执行成功,环境变量已正确配置!"
    else
        echo "YashanDB 命令执行失败,请检查数据库状态!"
        exit 1
    fi
else
    echo "yasboot 未找到,请检查 PATH 配置或 yasboot 是否存在!"
    exit 1
fi

echo "所有配置完成!"
source $HOME/.bashrc

--设置权限
# chmod +x setup_env.sh 
-- 执行脚本
# sh setup_env.sh 

复制

5.4 修改初始口令

注:YashanDB 无初始系统口令,可通过安装用户使用 yasboot 工具设置 sys 用户密码。

-- 使用如下命令初始 sys 密码
-- yasboot cluster password set -n newpasswd -c yashandb
-- 注意:如果密码有特殊字符要加 '' 符号
$ yasboot cluster password set -n 'yashan!a1357' -c yashandb

复制

5.5 查看集群状态

5.5.1 查看数据库状态

-- 通过 yasboot 命令查看集群和数据库状态  
$ yasboot cluster status -c yashandb -d

复制

注:

表格列解析

  • hostid
    每个节点的主机名或标识符。

  • node_type
    节点类型,通常包括:

    • mn:管理节点(Management Node)。
    • cn:计算节点(Compute Node)。
    • dn:数据节点(Data Node)。
  • nodeid
    节点唯一标识符,格式 x-y-z,表示集群逻辑分区。

  • pid
    每个节点对应进程 ID,用于标识该节点进程。

  • instance_status
    节点实例运行状态为 open,表示节点正常运行。

  • database_status
    数据库状态,通常包括:

    • normal:数据库运行正常。
    • abnormal:数据库运行异常。
  • database_role
    数据库角色,包括:

    • primary :主节点,负责处理读写请求。
    • standby:备用节点,负责故障切换或备份。
  • listen_address
    节点的监听地址,用于通信和连接。

  • data_path
    节点数据存储路径指向该节点在磁盘上的数据目录。

5.5.2 查看实例状态

注:使用 yasql 工具连接数据库,查看实例状态。

-- 如密码包含特殊字符,请对特殊字符进行转义处理。
-- 使用如下命令登录数据库
-- yasql sys/sys_password@cn_hostname:port
$ yasql sys/'yashan!a1357'@10.xxx.xxx.132:1688

复制

5.6 配置守护进程

注:通过命令行安装的 YashanDB 默认不支持 monit 守护进程功能,需安装配置。

5.6.1 检查 monit 是否安装

-- 使用 yashan 用户
$ cd home/yashan/install
-- 执行如下命令检查 monit 状态
yasboot monit status --cluster cluster_name
$ ./bin/yasboot monit status --cluster yashandb
-- 以下表示未启动 monit



复制

5.6.2 启动守护进程

-- 使用 yashan 用户
$ cd home/yashan/install
$ ./bin/yasboot monit start --cluster yashandb

复制

5.6.3 查看守护进程状态

-- 使用 yashan 用户
$ cd home/yashan/install
$ ./bin/yasboot monit status --cluster yashandb

复制

5.6.4 配置开机自启动[可选]

注:可通过如下脚本实现

#!/bin/bash

# 检查 monit 是否已安装
MONIT_PATH=$(which monit)
if [ -z "$MONIT_PATH" ]; then
  echo "[ERROR] monit 未安装,请先安装 monit。"
  exit 1
fi

echo "[INFO] monit 安装路径为: $MONIT_PATH"

# 检查 monit 是否运行
if ! pgrep -x "monit" > dev/null; then
  echo "[INFO] monit 服务未运行,正在启动..."
  $MONIT_PATH
  if [ $? -ne 0 ]; then
    echo "[ERROR] monit 服务启动失败,请检查配置。"
    exit 1
  fi
else
  echo "[INFO] monit 服务已运行。"
fi

# 启动守护进程
cd home/yashan/install || exit 1
./bin/yasboot monit start --cluster yashandb
if [ $? -ne 0 ]; then
  echo "[ERROR] 无法启动守护进程,请检查配置。"
  exit 1
fi

echo "[INFO] 守护进程已成功启动。"

# 打印服务信息
./bin/yasboot monit status --cluster yashandb
if [ $? -ne 0 ]; then
  echo "[ERROR] 无法获取守护进程状态,请检查配置。"
  exit 1
fi

echo "[INFO] 服务信息已打印。"

# 配置开机启动
RC_LOCAL="/etc/rc.local"
START_COMMAND="su yashan -c '$MONIT_PATH -c data/yashan/yasdb_home/yashandb/23.2.4.100/ext/monit/monitrc'"

if [ -f "$RC_LOCAL" ]; then
  sudo chmod +x "$RC_LOCAL"
  grep -q "$START_COMMAND" "$RC_LOCAL" || echo "$START_COMMAND" | sudo tee -a "$RC_LOCAL" > dev/null
  echo "[INFO] 开机启动配置完成。"
else
  echo "[ERROR] $RC_LOCAL 文件不存在,请检查系统。"
  exit 1
fi

exit 0

--设置权限
# chmod +x setup_yashandb_autostart.sh
-- 执行脚本
# sh setup_yashandb_autostart.sh

复制

5.6 分布式高可用运维

5.6.1 配置分布式高可用

5.6.1.1 自动选主开关

注:自动选主功能由参数 HA_ELECTION_ENABLED 控制,默认值为 false,即默认关闭自动选主功能。若需启用,可将该参数设置为 true。

在分布式集群部署中,自动选主功能默认启用。

HA_ELECTION_ENABLED 参数支持在线调整,可通过以下命令在主备节点上查看或修改:

--查看参数HA_ELECTION_ENABLED值
SQL> SHOW PARAMETER HA_ELECTION_ENABLED;

--修改参数HA_ELECTION_ENABLED值
SQL> ALTER SYSTEM SET HA_ELECTION_ENABLED=TRUE;

复制


5.6.1.2 自动选主心跳时间

注:

自动选主功能依赖以下两个时间参数:

  • 心跳超时时间
    :HA_ELECTION_TIMEOUT
  • 发送心跳周期
    :HA_HEARTBEAT_INTERVAL

当备节点在超过 HA_ELECTION_TIMEOUT 时间未收到心跳信号时,会自动发起选举。

在配置文件中,需在对应节点的 group.node.config 配置域下新增参数 ha_election_timeout 和 ha_heartbeat_interval,并设置为规划值。

注意事项:

  • 默认值
    如果未指定上述参数,系统将按默认值配置:

    • HA_ELECTION_TIMEOUT:9秒
    • HA_HEARTBEAT_INTERVAL:3秒
  • 参数调整

    • 两个参数均支持在线调整,用户可根据业务需求进行设置。
  • 组内一致性

    • 同一组内所有节点的 HA_ELECTION_TIMEOUT、HA_HEARTBEAT_INTERVAL 和 HA_ELECTION_ENABLED 参数需保持一致,否则可能导致异常。
  • 参数修改方法

    • 部署完成后,若需修改上述两个参数,必须通过 ALTER SYSTEM 语句进行调整,直接修改 toml 配置文件无效。
-- 查看心跳超时时间
SQL> SHOW PARAMETER HA_ELECTION_TIMEOUT                                                                 
-- 查看心跳发送周期
SQL> SHOW PARAMETER HA_HEARTBEAT_INTERVAL

-- 修改心跳超时时间
SQL> ALTER SYSTEM SET HA_ELECTION_TIMEOUT=10;

-- 使用yasboot工具批量修改心跳超时时间
$ yasboot group config set --key HA_ELECTION_TIMEOUT --value 10 --cluster yashandb --group-id 1

复制


5.6.1.3 自动降备功能开关

注:

自动降备由 HA_ELECTION_LEADER_LEASE_ENABLED 参数控制,仅对主节点有效,用户可改,默认 FALSE 即关闭。

当设为 TRUE 时,在以下情况主节点心跳超 HA_ELECTION_TIMEOUT 后自动降备:

  • 最大保护模式,主节点收备节点心跳数< QUORUM_SYNC_STANDBY 中的 syncNum。
  • 非最大保护模式,主节点未收到多数(N/2 + 1,N 为所有节点数)备节点心跳。

其中N为所有节点(包含主节点)数量,syncNum为用户定义的同步备数量。

--查看是否开启主节点自动降备功能
SHOW PARAMETER HA_ELECTION_LEADER_LEASE_ENABLED;

--开启主节点自动降备功能
ALTER SYSTEM SET HA_ELECTION_LEADER_LEASE_ENABLED=TRUE;

复制

5.6.1.4 节点优先级功能

注:

节点优先级通过 HA_ELECTION_PRIORITY 参数设定数值,数值越大则优先级越高。在自动选主开启时,较高优先级的节点,只要能保障数据安全,就更有机会成为主节点;而当此参数值为 0 时,该节点不会参与自动选主的选举过程。

此参数支持在线修改,默认值是 1,用户可依据自身业务系统的实际状况灵活设置该参数值,以满足不同的业务需求和架构规划。

--查看主备节点优先级值
SHOW PARAMETER HA_ELECTION_PRIORITY;

--修改主备节点优先级值
ALTER SYSTEM SET HA_ELECTION_PRIORITY=2;

复制

5.6.1.5 自动换主功能开关

注:

自动换主功能由 HA_ELECTION_AUTO_PRIMARY_SWITCH 参数控制开关,仅对主库有效,支持在线修改,默认值为 FALSE,即关闭状态。

当该参数设为 TRUE 时,主库每 60 秒检测一次是否有更高优先级节点,若有则执行主备切换。如需调整 60 秒的检测间隔时间,需联系技术支持。用户可依业务情况自行设置该参数。

--查看是否开启主库自动换主功能
SHOW PARAMETER HA_ELECTION_AUTO_PRIMARY_SWITCH;                                                                        
--开启主库自动换主功能
ALTER SYSTEM SET HA_ELECTION_AUTO_PRIMARY_SWITCH=TRUE;

复制

5.6.2 保护模式切换

注:

YashanDB 提供三种保护模式:最大性能模式(MAXIMIZE PERFORMANCE)、最大可用模式(MAXIMIZE AVAILABILITY)和最大保护模式(MAXIMIZE PROTECTION)。使用 yasboot 部署时,根据组内节点数(MN组和DN组)自动调整保护模式:

  • 1个节点:默认最大性能模式;
  • 2个节点:调整为最大可用模式;
  • 超过2个节点:调整为最大保护模式,并启用自选举功能。
-- 切换前保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;          

-- 切换保护模式(分布式部署下需直连MN或DN节点)
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
 
-- 切换后保护模式
SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;

复制

切换前保护模式

切换后保护模式

5.6.3 主备切换

注:

YashanDB 支持以下切换功能:

  • 主备库同步正常时,可手动执行 Switchover 切换。
  • 主库异常时,可手动执行 Failover 切换。

5.6.3.1 Switchover切换

注:Switchover切换方式适用于主备库同步正常的情况,可选择任意一个备库执行操作。

  • 切换前集群状态:
  • 检查主备库同步状态,确保无异常,并确认主备库角色
-- 确认主备库角色
SELECT database_id,database_name,log_mode,open_mode,database_role FROM V$DATABASE;    

-- 确认备库连接状况
SELECT connection, status, peer_addr, transport_lag, apply_lag FROM V$REPLICATION_STATUS;

复制
  • 备库执行Switchover切换
-- 执行主备切换
ALTER DATABASE SWITCHOVER;

-- 确认主备库角色
SELECT database_id,database_name,log_mode,open_mode,database_role FROM V$DATABASE; 

复制
  • 查看原主库和另一备库状态
  • SWITCHOVER 切换后集群状态

5.6.3.2 Failover切换

注:Failover切换用于主库损坏或宕机等故障,需立即切换以快速恢复业务。

Failover 测试可参照如下方式:

-- 确认主备库角色
SELECT DATABASE_ID,DATABASE_NAME,LOG_MODE,OPEN_MODE,DATABASE_ROLE FROM V$DATABASE;

-- 确认备库连接已经断连,并且RECEIVED_LFN是剩余备库里最大的,GAP_SEQ#为0
SELECT CONNECTION,STATUS,RECEIVED_LFN,GAP_SEQ# FROM V$REPLICATION_STATUS;

-- 在被选定备库执行Failover,将备库激活为可读写状态
ALTER DATABASE FAILOVER;

-- 再次确认主备库角色
SELECT DATABASE_ID,DATABASE_NAME,LOG_MODE,OPEN_MODE,DATABASE_ROLE FROM V$DATABASE;

复制

通过集群检查,将当前 dn 为 primary 的节点选择宕,一段时间后,观察结果如下:


注:因为分布式集群一主二备环境默认配置了自动选主,当主节点宕后,在较短的时间内,可以观察到三个节点的 dn 都为 standby 角色,然后在较短的时间后会选择其中一个节点作为 primary。

六、附录

6.1 配置文件介绍

6.1.1 hosts.toml 配置文件

注:hosts.toml 是服务器的配置文件

# 整个配置文件的全局 UUID(用于唯一标识集群)
uuid = "6759b30f67de5c865896f3bee8996686"  # 集群的唯一标识符

# 集群名称
cluster = "yashandb"  # 集群名称

# yas_type 说明数据库的类型,可能是 DE (开发环境) 或者其他类型
yas_type = "DE"  # 数据库类型(开发环境)

# secret_key 用于配置中涉及的加密操作,通常用于验证
secret_key = "1dd20e0b3d78d136"  # 密钥

# add_yasdba 表示是否添加 DB 管理员(DBA),值为 true 表示添加
add_yasdba = true  # 是否添加数据库管理员

# recommend_param 可能用于启用或推荐某些数据库参数的配置
recommend_param = true  # 是否推荐数据库参数配置

# [om] 块是数据库集群的管理配置
[om]
  # 管理节点的 hostid,唯一标识每一个管理节点
  hostid = "host0001"  # 管理节点的 ID(host0001)

  # 管理节点的配置信息
  [om.config]
    # LISTEN_ADDR 是管理节点监听的 IP 地址和端口号
    LISTEN_ADDR = "10.xxx.xxx.131:1675"  # 管理节点的监听地址与端口

# [[host]] 用于定义每一个数据库节点的配置,下面列出了多个主机配置
[[host]]
  # 节点的唯一标识符
  hostid = "host0001"  # 数据库节点的 ID(host0001)

  # 节点所属的分组,可以根据需求分类多个节点
  group = "yashan"  # 节点分组,所有主机都属于同一个组

  # 节点的登录用户名
  user = "yashan"  # 数据库主机的登录用户名

  # 登录密码
  password = "yashan!1234"  # 数据库主机的登录密码

  # 主机的 IP 地址
  ip = "10.xxx.xxx.131"  # 节点的 IP 地址

  # SSH 端口号,默认为 22
  port = 22  # SSH 端口

  # 数据库安装路径(Yashan DB 的数据存储路径)
  path = "/data/yashan/yasdb_home"  # 数据库主机的数据目录

  # 每个节点的内存限制
  memory_limit = "7870M"  # 节点的内存限制(7870MB)

  # 配置该主机的 yasagent(崖山数据库的代理)设置
  [host.yasagent]
    # yasagent 配置块,下面定义了代理的详细配置
    [host.yasagent.config]
      # 代理监听的地址和端口
      LISTEN_ADDR = "10.xxx.xxx.131:1676"  # yasagent 监听的地址与端口

# 另外两个主机的配置与上面的配置结构相似,分别是 host0002 和 host0003。
[[host]]
  hostid = "host0002"  # 数据库节点的 ID(host0002)
  group = "yashan"  # 节点分组
  user = "yashan"  # 登录用户名
  password = "yashan!1234"  # 登录密码
  ip = "10.xxx.xxx.132"  # 节点的 IP 地址
  port = 22  # SSH 端口
  path = "/data/yashan/yasdb_home"  # 数据库安装路径
  memory_limit = "7870M"  # 内存限制
  [host.yasagent]
    [host.yasagent.config]
      LISTEN_ADDR = "10.xxx.xxx.132:1676"  # yasagent 监听的地址与端口

[[host]]
  hostid = "host0003"  # 数据库节点的 ID(host0003)
  group = "yashan"  # 节点分组
  user = "yashan"  # 登录用户名
  password = "yashan!1234"  # 登录密码
  ip = "10.xxx.xxx.133"  # 节点的 IP 地址
  port = 22  # SSH 端口
  path = "/data/yashan/yasdb_home"  # 数据库安装路径
  memory_limit = "7870M"  # 内存限制
  [host.yasagent]
    [host.yasagent.config]
      LISTEN_ADDR = "10.xxx.xxx.133:1676"  # yasagent 监听的地址与端口


复制

6.1.2 yashandb.toml 配置文件

注:yashandb.toml 是数据库集群的配置文件

# 全局配置部分
cluster = "yashandb"  # 定义集群名称,用于唯一标识当前崖山数据库集群。
create_simple_schema = false  # 是否创建简单的默认Schema,通常用于快速初始化。
deploy_mode = "NORMAL"  # 集群部署模式,支持NORMAL(标准模式)和其他模式。
recommend_param = true  # 是否启用推荐的系统参数配置,提升系统性能。
table_type = "LSC"  # 默认表存储类型,LSC表示日志结构合并表。
uuid = "6759b30f67de5c865896f3bee8996686"  # 唯一标识符,用于识别当前配置的集群。
yas_type = "DE"  # 数据库类型,DE表示分布式版。

# 组定义部分
[[group]]
group_type = "mn"  # 组类型,mn代表元数据节点(Meta Node)。
name = "mng1"  # 组名称,用于标识该组。
[group.config]
CHARACTER_SET = "utf8"  # 数据库字符集,默认utf8。
ISARCHIVELOG = true  # 是否启用归档日志,影响日志保留策略。
REDO_FILE_NUM = 4  # 重做日志文件数量。
REDO_FILE_SIZE = "128M"  # 单个重做日志文件大小。

  # 元数据节点配置
  [[group.node]]
  data_path = "/data/yashan/yasdb_data"  # 数据存储路径。
  hostid = "host0003"  # 节点主机标识符。
  memory_limit = "1536M"  # 节点内存限制。
  role = 1  # 节点角色,1代表主节点,2代表备份节点。
  [group.node.config]
  CGROUP_ROOT_DIR = "/sys/fs/cgroup"  # cgroup的根目录,用于资源限制。
  DB_BLOCK_SIZE = "8K"  # 数据块大小。
  DDL_LOCK_TIMEOUT = 60  # DDL锁超时时间(秒)。
  DEFAULT_TABLE_TYPE = "LSC"  # 默认表存储类型。
  DICTIONARY_CACHE_SIZE = 20  # 字典缓存大小。
  DIN_ADDR = "10.xxx.xxx.133:1679"  # 数据输入监听地址。
  DSTB_POOL_SIZE = 10  # 分布式池大小。
  LISTEN_ADDR = "10.xxx.xxx.133:1678"  # 节点监听地址。
  OPEN_CURSORS = 310  # 最大游标数。
  REPLICATION_ADDR = "10.xxx.xxx.133:1680"  # 复制监听地址。
  RUN_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/mn-1-1/run"  # 运行日志路径。
  RUN_LOG_LEVEL = "INFO"  # 日志级别。
  SLOW_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/mn-1-1/slow"  # 慢查询日志路径。
  SQL_POOL_SIZE = 45  # SQL线程池大小。
  TRANSACTION_LOCK_TIMEOUT = 300  # 事务锁超时时间(秒)。
  UNDO_RETENTION = 300  # Undo段保留时间(秒)。

  # 其他节点配置类似于上述,只更改特定的节点参数如地址、角色等。

[[group]]
group_type = "cn"  # 组类型,cn代表计算节点(Compute Node)。
name = "cng1"  # 组名称。
[group.config]
CHARACTER_SET = "utf8"  # 数据库字符集。
ISARCHIVELOG = true  # 是否启用归档日志。
REDO_FILE_NUM = 4  # 重做日志文件数量。
REDO_FILE_SIZE = "128M"  # 单个重做日志文件大小。

  [[group.node]]
  data_path = "/data/yashan/yasdb_data"  # 数据存储路径。
  hostid = "host0001"  # 主机标识。
  memory_limit = "2375M"  # 内存限制。
  role = 1  # 节点角色。
  [group.node.config]
  MAX_REACTOR_CHANNELS = 1  # Reactor模型的最大通道数。
  # 其余配置参数与元数据节点类似。

[[group]]
group_type = "dn"  # 组类型,dn代表数据节点(Data Node)。
name = "dng1"  # 组名称。
[group.config]
CHARACTER_SET = "utf8"  # 数据库字符集。
ISARCHIVELOG = true  # 是否启用归档日志。
REDO_FILE_NUM = 4  # 重做日志文件数量。
REDO_FILE_SIZE = "128M"  # 单个重做日志文件大小。

  [[group.node]]
  data_path = "/data/yashan/yasdb_data"  # 数据存储路径。
  hostid = "host0001"  # 主机标识。
  memory_limit = "3950M"  # 内存限制。
  role = 1  # 节点角色。
  [group.node.config]
  # 配置参数与其他节点类似。

注释说明
配置文件分为全局设置和分组设置两部分。分组按功能分为管理节点(mn)、协调节点(cn)和数据节点(dn)。
节点内的配置详细说明了资源限制(内存、线程池)、地址监听(数据输入、复制)、日志路径等关键信息。
添加了每个参数的详细描述,以便用户理解和调整配置文件。

复制

6.2 环境变量设置脚本

注:此脚本用于集群安装部署完成后对 yashan 用户的环境变量设置

-- setup_env.sh
#!/bin/bash

# 定义变量
CONF_DIR="/data/yashan/yasdb_home/yashandb/23.2.4.100/conf"
ENV_FILE="yashandb.bashrc"
BASHRC="$HOME/.bashrc"
TEST_VAR="YASDB_HOME"  # 用于验证的环境变量名
YASHAN_CMD="yasboot --help"  # 用于验证的 YashanDB 命令
BIN_DIR="bin"  # 假设 yasboot 在 $YASDB_HOME/bin 下

# 检查环境变量文件是否存在
if [[ ! -f "$CONF_DIR/$ENV_FILE" ]]; then
    echo "环境变量文件不存在:$CONF_DIR/$ENV_FILE"
    exit 1
fi

# 备份原有的 .bashrc 文件
echo "备份当前 .bashrc 文件为 .bashrc.bak"
cp "$BASHRC" "$BASHRC.bak"

# 删除已有的 YashanDB 环境变量
echo "清除旧的 YashanDB 环境变量配置"
sed -i '/# YashanDB 环境变量配置开始/,/# YashanDB 环境变量配置结束/d' "$BASHRC"

# 添加新环境变量配置
echo "添加新的 YashanDB 环境变量配置"
echo -e "\n# YashanDB 环境变量配置开始" >> "$BASHRC"
cat "$CONF_DIR/$ENV_FILE" >> "$BASHRC"
echo "export PATH=\$YASDB_HOME/$BIN_DIR:\$PATH" >> "$BASHRC"  # 添加 bin 目录到 PATH
echo "# YashanDB 环境变量配置结束" >> "$BASHRC"

# 使环境变量立即生效
echo "使环境变量立即生效"
source "$BASHRC"
export PATH=$YASDB_HOME/$BIN_DIR:$PATH  # 确保当前会话生效

# 检查环境变量是否配置成功
if [[ -z "${!TEST_VAR}" ]]; then
    echo "环境变量未生效,请检查配置!"
    exit 1
else
    echo "环境变量已成功配置,$TEST_VAR=${!TEST_VAR}"
fi

# 测试 YashanDB 命令
echo "执行 YashanDB 测试命令:$YASHAN_CMD"
if command -v yasboot >/dev/null 2>&1; then
    if $YASHAN_CMD >/dev/null 2>&1; then
        echo "YashanDB 命令执行成功,环境变量已正确配置!"
    else
        echo "YashanDB 命令执行失败,请检查数据库状态!"
        exit 1
    fi
else
    echo "yasboot 未找到,请检查 PATH 配置或 yasboot 是否存在!"
    exit 1
fi

echo "所有配置完成!"
source $HOME/.bashrc

复制
复制

6.3 某些 set 参数不可用

注:在登录数据库,对 SQL 语句做格式化时,某些 set 参数不可用


文章转载自山佳数峰寻道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论