我们的文章会在微信公众号IT民工的龙马人生和博客网站 ( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
在YashanDB的生产实践中,虽然yasboot提供了便捷的一键部署能力,但深入理解主备库的底层构建逻辑对于DBA排查故障、理解高可用架构至关重要。本文将通过“半手动”的方式,拆解YashanDB主备环境的构建过程:从软件分发、实例配置、数据同步(Build)到最终被OM(运维管理)平台纳管的完整技术链路。
1 环境规划与信息汇总
在开始部署之前,明确的网络规划与目录结构是成功的关键。以下是本次实战的环境配置摘要:
| 配置项 | 主库 (Primary) | 备库 (Standby) | 说明 |
|---|---|---|---|
| 主机IP | 10.10.10.135 |
10.10.10.130 |
建议配置千兆以上独立心跳网络 |
| 主机角色 | OM, Agent, DB | Agent, DB | OM部署在主库侧 |
| 节点 ID (Node ID) | 1-1:1 |
1-2:1 |
集群内唯一的实例标识符 |
| 操作系统用户 | yashan |
yashan |
拥有相关目录的读写权限 |
| 数据库软件路径 | /data/yashan/yasdb_home |
/data/yashan/yasdb_home |
建议保持路径一致 |
| 数据文件路径 | /data/yashan/yasdb_data |
/data/yashan/yasdb_data |
建议独立磁盘分区 |
| 服务监听端口 | 1688 |
1688 |
对外业务访问端口 |
| 复制监听端口 | 1689 |
1689 |
主备redo日志同步专用通道 |
| 集群名称 | yashandb |
yashandb |
|
| 系统用户密码 | aaBB11@@33$$ (OS) |
aaBB11@@33$$ (OS) |
2 安装主库:标准化环境构建
在配置高可用环境前,首先先全新的创建一个主库。我们将使用yasboot工具来完成标准化的单机(SE)部署,后期在补充YAC模式。
2.1 操作系统准备
操作系统层面的参数调优是数据库稳定运行的基础。在生产环境中,请务必参考《YashanDB安装部署手册》完成以下核心配置:
- 内核参数:调整
fs.aio-max-nr、net.core.somaxconn等,确保异步IO和网络高并发能力。 - 资源限制:配置
/etc/security/limits.conf,特别是nofile(句柄数)和nproc(进程数),避免数据库因资源不足而Crash。 - 防火墙与SELinux:建议关闭或开放TCP 1688(业务监听)、1689(复制链路)等关键端口。
2.2 主库软件部署
我们采用yasboot进行软件安装,它将原来复杂的数据库的安装工作进行了完全简化。。
2.2.1 创建安装目录
遵循最佳实践,我们将软件(Home)、数据(Data)和日志(Log)完全独立,便于后面管理。
sudo mkdir -p /data/yashan/yasdb_home
sudo mkdir -p /data/yashan/yasdb_data
sudo mkdir -p /data/yashan/log
sudo chown -R yashan:yashan /data/yashan
sudo mkdir -p /data/yashan/soft
2.2.2 解压软件
软件版本喧杂23.5.1.100版本,生产环境中请选择稳定版本。
sudo mkdir -p /home/yashan/install
sudo tar -zxf /data/yashan/soft/yashan/soft/yashandb/23.5.1.100/yashandb-23.5.1.100-linux-aarch64.tar.gz -C /home/yashan/install
sudo chown -R yashan:yashan /home/yashan/install
2.2.3 生成与安装主库
这里使用package se gen生成单机配置文件。注意--begin-port 1688,这是YashanDB的默认服务端口。
cd /home/yashan/install && /home/yashan/install/bin/yasboot package se gen --cluster yashandb --recommend-param \
-u yashan -p 'aaBB11@@33$$' --ip 10.10.10.135 --port 22 \
--install-path /data/yashan/yasdb_home \
--data-path /data/yashan/yasdb_data \
--log-path /data/yashan/log \
--begin-port 1688 \
--memory-limit 50 \
--node 1
执行安装:
cd /home/yashan/install && /home/yashan/install/bin/yasboot package install -t /home/yashan/install/hosts.toml
专家注: 安装完成后,系统中会启动yasom(运维管理进程)和yasagent(主机代理进程)。请确认对应的进程已经启动
[yashan@yashan install]$ ps -ef|grep "/data/yashan"
yashan 63415 1 0 11:44 ? 00:00:00 /data/yashan/yasdb_home/23.5.1.100/bin/yasagent --init -c yashandb -l 10.10.10.135:1676 --host-id host0001 -k -L /data/yashan/log -d
yashan 63435 1 0 11:44 ? 00:00:00 /data/yashan/yasdb_home/23.5.1.100/bin/yasom --init -c yashandb -l 10.10.10.135:1675 -k -L /data/yashan/log -d
yashan 63497 63086 0 11:44 pts/2 00:00:00 grep --color=auto /data/yashan
2.3 初始化主库实例
采用默认的参数来创建数据库,生产环境中请根据具体情况调整对应参数的值。
cd /home/yashan/install && /home/yashan/install/bin/yasboot cluster deploy -t yashandb.toml -p 'Yashan1!'
确认主库状态为READ_WRITE(读写模式):
[yashan@yashan install]$ yasql -s / as sysdba -c "select open_mode from v\$database"
OPEN_MODE
-----------------
READ_WRITE
3 手动搭建备库:深入核心流程
本节是文章的核心。我们将不完全依赖yasboot deploy的自动化流程,而是手动配置参数文件、启动实例并同步数据,让我们熟悉yasboot自动部署主从的流程。
3.1 检查主库环境
搭建主从环境时,主库需要满足在归档模式和配置了复制参数。
SQL> select log_mode from v$database;
LOG_MODE
-----------------
ARCHIVELOG
1 row fetched.
SQL> show parameter replication_addr
NAME VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
REPLICATION_ADDR 10.10.10.135:1689
1 row fetched.
注意:
- 非归档模式到归档模式的修改需要重启数据库。
- REPLICATION_ADDR为静态参数,修改也需要重启数据库。
3.2 安装备库软件环境
备库的软件二进制文件必须与主库保持版本一致。我们利用yasboot将备库主机(10.10.10.130)加入到集群的主机列表中,但暂不创建数据库实例。
3.2.1 目录与软件分发
# 在备库机器创建目录
sudo mkdir -p /data/yashan/yasdb_home
sudo mkdir -p /data/yashan/yasdb_data
sudo mkdir -p /data/yashan/log
sudo chown -R yashan:yashan /data/yashan
sudo mkdir -p /data/yashan/soft
# 在主库机器生成备库配置并分发软件
cd /home/yashan/install
yasboot config node gen \
-c yashandb -u yashan -p 'aaBB11@@33$$' \
--ip 10.10.10.130 --port 22 \
--install-path /data/yashan/yasdb_home \
--data-path /data/yashan/yasdb_data \
--log-path /data/yashan/log \
--node 1
# 添加主机(这步操作会将YashanDB软件分发到备库机器,并启动yasagent)
cd /home/yashan/install && yasboot host add -c yashandb -t /home/yashan/install/hosts_add.toml
3.3 手工配置备库实例
3.3.1 规划目录结构
YashanDB通过参数文件指定各组件路径。手动创建这些目录可以确保实例启动时不会因路径不存在而报错。
注意:db-1-2中的1-2为nodeid的信息的。
# 备库数据目录结构
mkdir -p /data/yashan/yasdb_data/db-1-2/archive
mkdir -p /data/yashan/yasdb_data/db-1-2/backup
mkdir -p /data/yashan/yasdb_data/db-1-2/config
mkdir -p /data/yashan/yasdb_data/db-1-2/data
mkdir -p /data/yashan/yasdb_data/db-1-2/dbfiles
mkdir -p /data/yashan/yasdb_data/db-1-2/diag
mkdir -p /data/yashan/yasdb_data/db-1-2/external
mkdir -p /data/yashan/yasdb_data/db-1-2/instance
mkdir -p /data/yashan/yasdb_data/db-1-2/local_fs
mkdir -p /data/yashan/yasdb_data/db-1-2/log
mkdir -p /data/yashan/yasdb_data/db-1-2/tmp
mkdir -p /data/yashan/log/db-1-2/slow
mkdir -p /data/yashan/log/db-1-2/run
mkdir -p /data/yashan/yasdb_data/db-1-2/log/alert
mkdir -p /data/yashan/yasdb_data/db-1-2/log/listener
mkdir -p /data/yashan/yasdb_data/db-1-2/instance
3.3.2 定制备库参数文件 (yasdb.ini)
这是手动建库最关键的一步。我们需要基于主库参数进行修改。
核心参数解析:
- _CLUSTER_ID:必须与主库完全一致,这是集群成员的身份标识。
- NODE_ID:集群内唯一节点ID,备库设为
1-2:1(组1-节点2:实例1)。 - REPLICATION_ADDR:高可用复制专用通道。YashanDB将业务流量(LISTEN_ADDR)与日志复制流量物理隔离,保障高负载下主备同步的稳定性。
- ARCHIVE_DEST_1:在此处配置指向主库的服务地址,用于建立反向链路或级联同步。
export YASDB_DATA=/data/yashan/yasdb_data/db-1-2
cat > $YASDB_DATA/config/yasdb.ini << 'HTZ'
_CLUSTER_ID=b48deb6d201288b780343156188fb3f2
NODE_ID=1-2:1
CONTROL_FILES=('/data/yashan/yasdb_data/db-1-2/dbfiles/ctrl1', '/data/yashan/yasdb_data/db-1-2/dbfiles/ctrl2', '/data/yashan/yasdb_data/db-1-2/dbfiles/ctrl3')
LISTEN_ADDR=10.10.10.130:1688
REPLICATION_ADDR=10.10.10.130:1689
RUN_LOG_FILE_PATH=/data/yashan/log/db-1-2/run
RUN_LOG_LEVEL=INFO
SLOW_LOG_FILE_PATH=/data/yashan/log/db-1-2/slow
CHARACTER_SET=UTF8
ARCH_CLEAN_IGNORE_MODE=BACKUP
CGROUP_ROOT_DIR=/sys/fs/cgroup
DATA_BUFFER_SIZE = 7803M
VM_BUFFER_SIZE = 2655M
WORK_AREA_POOL_SIZE = 64M
MEX_POOL_SIZE = 128M
SHARE_POOL_SIZE = 2655M
MAX_PARALLEL_WORKERS = 32
MAX_SESSIONS = 1500
RECOVERY_PARALLELISM = 8
TIME_ZONE = +08:00
ARCHIVE_DEST_1=SERVICE=10.10.10.135:1689 NODE_ID=1-1:1
DB_FILE_NAME_CONVERT='/data/yashan/yasdb_data/db-1-1', '/data/yashan/yasdb_data/db-1-2'
REDO_FILE_NAME_CONVERT='/data/yashan/yasdb_data/db-1-1', '/data/yashan/yasdb_data/db-1-2'
DB_BUCKET_NAME_CONVERT='/data/yashan/yasdb_data/db-1-1', '/data/yashan/yasdb_data/db-1-2'
HTZ
3.3.3 启动备库至 NOMOUNT 状态
此时备库只有参数文件,没有控制文件和数据文件,因此只能启动到 NOMOUNT 状态,等待主库推送数据。
[yashan@htz04 ~]$ export YASDB_DATA=/data/yashan/yasdb_data/db-1-2
[yashan@htz04 ~]$ yasdb nomount -D $YASDB_DATA
Starting instance nomount
Instance started
3.4 创建SYS密码文件
YashanDB主从之间同步没有采用用户认证默认,无需复制主库的密码,但是主从SYS用户的密码必须一致,否知OM和YCM平台在管理集群时会出现密码不一致的情况。
[yashan@htz04 ~]$ yaspwd file=/data/yashan/yasdb_data/db-1-2/instance/yasdb.pwd password='Yashan1!' sysbackup='Yashan1!'
3.5 初始化数据
3.5.1 执行数据同步 (Build Database)
传统数据库可能需要备份恢复或拷贝文件,YashanDB 提供了强大的 BUILD DATABASE 命令。
技术原理:该命令在主库执行,主库进程会自动连接到备库的 REPLICATION_ADDR,将全量数据文件、控制文件快照通过网络直接推送到备库,并自动利用 *_NAME_CONVERT 参数处理路径映射。
# 在主库执行
[yashan@yashan config]$ yasql / as sysdba -c " BUILD DATABASE TO REMOTE ('10.10.10.130:1688');"
Succeed.
注:这里的 IP:Port 是备库的监听地址。
3.5.2 备份与还原模式
利用备份文件来搭建备库环境,可减少对主库带来的负载,后续再完善这块内容。
3.6 配置主备同步链路
数据文件同步完成后,需要配置实时日志传输,使备库进入持续同步状态。
3.6.1 修改主库参数
- ARCHIVE_DEST_1:配置为
SERVICE=10.10.10.130:1689,指向备库的复制端口。这是主库向备库发送 Redo Log 的通道。 - NAME_CONVERT:在主库侧也配置转换参数,不仅用于 Build,也用于主从环境下的文件管理。
ALTER SYSTEM SET ARCHIVE_DEST_1='SERVICE=10.10.10.130:1689 NODE_ID=1-2:2';
ALTER SYSTEM SET db_bucket_name_convert="'/data/yashan/yasdb_home/db-1-2','/data/yashan/yasdb_data/db-1-1'" ;
ALTER SYSTEM SET redo_file_name_convert="'/data/yashan/yasdb_home/db-1-2','/data/yashan/yasdb_data/db-1-1'" ;
ALTER SYSTEM SET db_file_name_convert="'/data/yashan/yasdb_home/db-1-2','/data/yashan/yasdb_data/db-1-1'";
3.6.2 验证同步状态
备库应用日志后,查询 v$recovery_status 视图。STATUS 为 RUNNING 表示备库正在实时接收并回放主库的日志,高可用链路已打通。
[yashan@htz04 ~]$ yasql / as sysdba -c "select * from v\$recovery_status;"
THREAD# STATUS PARALLELISM START_RECOVERY_TIME STOP_RECOVERY_TIME REPLAY_POINT
------- ----------------- ----------- ------------------------------------------------ ------------------------------------------------ ---------------------------------
0 RUNNING 8 2026-01-31 0-2-342-3015
1 row fetched.
4 OM纳管实例:纳入统一管理
虽然备库已经运行,但 yasom(集群管理进程)的元数据中还只有主库的信息。我们需要通过 yasboot cluster load 命令将手动搭建的备库“注册”到集群拓扑中。
4.1 生成纳管配置文件
编写一个 load.toml 文件,描述集群的最新拓扑结构(包含原主库和新备库)。
关键点:group_id 必须一致(同属组1),nodeid 需与手动配置的 yasdb.ini 中的 ID 对应。
cat > /tmp/load.toml << 'HTZ'
[[group]]
group_type = "db"
group_id = 1
# 新增的备库节点
[[group.node]]
nodeid = "1-2:2"
role = 2
hostid = "host0002"
data_path = "/data/yashan/yasdb_data/db-1-2"
home_path = "/data/yashan/yasdb_home/23.5.1.100"
# 原有的主库节点
[[group.node]]
nodeid = "1-1:1"
role = 1
hostid = "host0001"
data_path = "/data/yashan/yasdb_data/db-1-1"
home_path = "/data/yashan/yasdb_home/23.5.1.100"
HTZ
4.2 执行纳管 (Cluster Load)
执行加载命令,系统会更新 yasom 的元数据,使其识别到新的备库节点。flush database metadata 确认操作会将数据库的实际状态同步到管理视图中。
[yashan@htz04 ~]$ yasboot cluster load -c yashandb -t /tmp/load.toml
+--------------------------------------------------------------------------+
| hostid | node_type | nodeid | host_ip | data_path |
+--------------------------------------------------------------------------+
| host0001 | SE | 1-1:1 | | /data/yashan/yasdb_data/db-1-1 |
+----------+-----------+--------+ +--------------------------------+
| host0002 | SE | 1-2:1 | | /data/yashan/yasdb_data/db-1-2 |
+----------+-----------+--------+---------+--------------------------------+
Are you sure you want to flush database metadata to yasom[yes/no]: yes
flush database metadata to yasom success
最后,通过 yasboot cluster status 验证,可以看到 1-2:1 节点已作为 standby 角色,状态 normal,正式成为受管集群的一部分。
[yashan@htz04 ~]$ yasboot cluster status -c yashandb -d
+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | source_node | data_path |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| host0001 | db | 1-1:1 | 63579 | open | normal | primary | 10.10.10.135:1688 | - | /data/yashan/yasdb_data/db-1-1 |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+-------------+--------------------------------+
| host0002 | db | 1-2:1 | 4289 | open | normal | standby | 10.10.10.130:1688 | 1-1:1 | /data/yashan/yasdb_data/db-1-2 |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+-------------+--------------------------------+
除了上面的cluster status验证外,还需要执行 cluster stop/start 和node stop/start、group stop/start等命令,确定所有的命令都可以成功。
5 总结
通过上述步骤,我们不仅完成了一个YashanDB主备环境的搭建,更深刻理解了以下技术点:
- yasboot se gen/deploy:快速构建标准化的主库。
- REPLICATION_ADDR:理解业务网络与复制网络的隔离设计。
- BUILD DATABASE:掌握YashanDB特有的高效在线建库技术。
- Cluster Load:理解OM元数据管理与实际运行实例的解耦与重组能力。
这种手动+自动结合的部署方式,在处理复杂网络环境、跨网段容灾或特定定制化参数场景下非常实用。


深度实战:YashanDB 主备库手动搭建与OM纳管全流程:等您坐沙发呢!