当前位置: 首页 > ORACLE > 正文

我们的文章会在微信公众号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-nrnet.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 视图。STATUSRUNNING 表示备库正在实时接收并回放主库的日志,高可用链路已打通。

[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主备环境的搭建,更深刻理解了以下技术点:

  1. yasboot se gen/deploy:快速构建标准化的主库。
  2. REPLICATION_ADDR:理解业务网络与复制网络的隔离设计。
  3. BUILD DATABASE:掌握YashanDB特有的高效在线建库技术。
  4. Cluster Load:理解OM元数据管理与实际运行实例的解耦与重组能力。

这种手动+自动结合的部署方式,在处理复杂网络环境、跨网段容灾或特定定制化参数场景下非常实用。

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

发表评论

gravatar

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen

快捷键:Ctrl+Enter