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

【江月】yashandb备库搭建(23.2.4版本),国产“dataguard”体验

原创 春江花月夜 2024-11-26
333

本文可以接力《【江月】yashandb单机部署》
崖山可以在初始安装时就装成一主备。
我这篇文档适用于主库已经有,新搭建备库的需求。
崖山的备库搭建和oracle一样(有duplicate方式也有rman方式),我这里用duplicate方式记录
依旧是脚本化文档,供大家参考

准备一个和主库一样的环境,最好配置目录一模一样
大致步骤为:
(1)在备库安装软件,默认会创建一个primary角色的db,删掉它变成空壳子集群
注意,如果顺手部署了monit,要关闭掉他才能顺利删库
(2)duplicate备库搭建

一、安装备库

#上传安装包
数据库包和插件包
yashandb-23.2.4.100-linux-x86_64.tar.gz
yashandb-plugins-all-23.2.4.100-linux-x86_64.tar.gz

#配置/etc/hosts
echo "192.168.100.142 zcloudos" >> /etc/hosts

#配置本地ssh
略

#开始部署
su - yashan
cd /yssoft
tar zxf yashandb-23.2.4.100-linux-x86_64.tar.gz

# 生成配置文件
./bin/yasboot package se gen --cluster lhqdg --recommend-param \
-u yashan -p 123456 --ip 192.168.100.142 --port 22 \
--install-path /yshome  --data-path /ysdata \
--begin-port 1688

#会生成两个文件
#lhqdg.toml:数据库集群的配置文件。
#hosts.toml:服务器的配置文件。

#注意lhqdg.toml中的memory_limit参数的大小,虽然使用了--recommend-param自动推荐参数,还是建议根据实际情况改小一点,否则会出现安装失败
#我这里修改成8192m

#开始安装
/yssoft/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

#创建数据库
/yssoft/bin/yasboot cluster deploy -t /yssoft/lhqdg.toml
 type | uuid             | name               | hostid | index | status  | return_code | progress | cost 
---------------------------------------------------------------------------------------------------------
 task | 91641fd4a567a009 | DeployYasdbCluster | -      | lhqdg | SUCCESS | 0           | 100      | 31   
------+------------------+--------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS

[root@yasdb:/monit]$ ps -eaf | grep yas
root       1027      1  0 17:21 ?        00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-d2db79a9-163a-4833-add4-7d8d640db172-eth0.lease -pf /var/run/dhclient-eth0.pid -H yasdb eth0
yashan    25500      1  0 21:12 ?        00:00:00 /yshome/yashandb/23.2.4.100/bin/yasagent --init -c lhqdg -l 192.168.100.141:1676 --host-id host0001 -k                  -d
yashan    25530      1  0 21:12 ?        00:00:03 /yshome/yashandb/23.2.4.100/bin/yasom --init -c lhqdg -l 192.168.100.141:1675 -k                  -d
yashan    25973      1  7 21:15 ?        00:05:45 /yshome/yashandb/23.2.4.100/bin/yasdb nomount -D /ysdata/db-1-1
yashan    29172      1  0 22:13 ?        00:00:00 monit -c /yshome/yashandb/23.2.4.100/ext/monit/monitrc
root      30114   1349  0 22:29 pts/0    00:00:00 grep --color=auto yas


#配置环境变量
cd /yshome/yashandb/23.2.4.100/conf
# 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除
cat lhqdg.bashrc >> ~/.bashrc
source ~/.bashrc
cat ~/.bashrc

#配置sys密码
[yashan@yasdb:/ysdata/db-1-1]$ yasboot cluster password set -n XXXXXXXX -c lhqdg
 type | uuid             | name             | hostid | index | status  | return_code | progress | cost 
-------------------------------------------------------------------------------------------------------
 task | 1153ee18c7ecd1ee | YasdbPasswordSet | -      | lhqdg | SUCCESS | 0           | 100      | 2    
------+------------------+------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS

#检查安装结果
[yashan@yasdb:/ysdata/db-1-1]$ yasboot cluster status -c lhqdg -d
 hostid   | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address       | data_path      
-----------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 25973 | open            | normal          | primary       | 192.168.100.141:1688 | /ysdata/db-1-1 
----------+-----------+--------+-------+-----------------+-----------------+---------------+----------------------+----------------

#登录数据库
yasql sys/XXXXXXXX@192.168.100.141:1688
或者
yasql / as sysdba


#启动monit
/yssoft/bin/yasboot monit start --cluster lhqdg
#开机自动启动数据库
which monit
ysmonit=`ps -eaf | grep moni | grep -v grep | awk -F '-c' '{print $2}'`
echo "su yashan -c '/usr/bin/monit -c ${ysmonit}'" |sudo tee -a /etc/rc.local
cat /etc/rc.local
sudo chmod +x /etc/rc.local
sudo chmod +x /etc/rc.d/rc.local

二、关闭monit(如果没有部署可以省略)

#如果配置了monit
要先停掉monit否则关闭数据库monit会自动拉起
如下
[2024-11-23T15:18:10+0000] info     : 'lhqdg-db-1-1' process is running with pid 15285
[2024-11-23T15:19:46+0000] error    : 'lhqdg-db-1-1' process is not running
[2024-11-23T15:19:46+0000] info     : 'lhqdg-db-1-1' trying to restart
[2024-11-23T15:19:46+0000] info     : 'lhqdg-db-1-1' start: '/yshome/yashandb/23.2.4.100/bin/yasboot process yasdb start -c lhqdg -n 1-1'
[2024-11-23T15:19:47+0000] info     : 'lhqdg-db-1-1' monitor on user request
[2024-11-23T15:19:47+0000] info     : Monit daemon with PID 15142 awakened
[2024-11-23T15:19:47+0000] info     : Awakened by User defined signal 1
[2024-11-23T15:19:47+0000] info     : 'lhqdg-db-1-1' monitor action done
[2024-11-23T15:19:47+0000] info     : 'lhqdg-db-1-1' process is running with pid 15451



[yashan@zcloudos:/yshome/yashandb/23.2.4.100/log]$ /yssoft/bin/yasboot monit stop --cluster lhqdg
 type | uuid             | name            | hostid | index | status  | return_code | progress | cost 
------------------------------------------------------------------------------------------------------
 task | 12b03bf56fb328a5 | MonitParentStop | -      | lhqdg | SUCCESS | 0           | 100      | 1    
------+------------------+-----------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS

三、删除备库里默认创建的数据库

[yashan@zcloudos:/home/yashan]$ yasql / as sysdba
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 open_mode from v$database;

OPEN_MODE         
----------------- 
READ_WRITE       

1 row fetched.

SQL> 
SQL> shutdown abort;

Succeed.

SQL> exit

[yashan@zcloudos:/yshome/yashandb/23.2.4.100/log]$ yasboot cluster start -c lhqdg -m nomount
 type | uuid             | name              | hostid | index | status  | return_code | progress | cost 
--------------------------------------------------------------------------------------------------------
 task | 39649e7628a2ab7e | StartYasdbCluster | -      | lhqdg | SUCCESS | 0           | 100      | 2    
------+------------------+-------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS
[yashan@zcloudos:/yshome/yashandb/23.2.4.100/log]$ yasql / as sysdba
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 open_mode from v$database;

YAS-02072 the database is not mounted

SQL> 
SQL> drop database;  

Succeed.


[yashan@zcloudos:/yshome/yashandb/23.2.4.100/log]$ yasboot cluster status -c lhqdg -d
 hostid   | node_type | nodeid | pid  | instance_status | database_status | database_role | listen_address       | data_path      
----------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 1627 | started         | -               | -             | 192.168.100.142:1688 | /ysdata/db-1-1 
----------+-----------+--------+------+-----------------+-----------------+---------------+----------------------+----------------

四、主库开归档【如果已经是归档模式略过】

[yashan@yasdb:/home/yashan]$ yasboot cluster status -c lhqdb -d
 hostid   | node_type | nodeid | pid  | instance_status | database_status | database_role | listen_address       | data_path      
----------------------------------------------------------------------------------------------------------------------------------
 host0001 | db        | 1-1:1  | 1475 | open            | normal          | primary       | 192.168.100.141:1688 | /ysdata/db-1-1 
----------+-----------+--------+------+-----------------+-----------------+---------------+----------------------+----------------


[yashan@yasdb:/home/yashan]$ yasql / as sysdba
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 database_name,log_mode,open_mode FROM V$DATABASE;

DATABASE_NAME                                                    LOG_MODE          OPEN_MODE         
---------------------------------------------------------------- ----------------- ----------------- 
lhqdb                                                            ARCHIVELOG        READ_WRITE       

1 row fetched.

SQL> 


#####如果没有开启,则需要重启主库设置
yasboot cluster restart -c lhqdb -m mount
yasql / as sysdba
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

五、配置主备参数(主库需要重启才能生效,所以生产环境要窗口做)

5.1主库参数

#LISTEN_ADDR、REPLICATION_ADDR、ARCHIVE_DEST_1参数重启数据库后生效,其他立即生效
#ARCHIVE_DEST_XXX参数在REPLICATION_ADDR参数重启生效后再进行设置
ALTER SYSTEM SET LISTEN_ADDR=192.168.100.141:1688 scope=spfile;
ALTER SYSTEM SET REPLICATION_ADDR=192.168.100.141:1689 scope=spfile;
ALTER SYSTEM SET ARCHIVE_DEST_1='SERVICE=192.168.100.142:1689' scope=spfile;     

#以下参数当主备库上路径完全一致时无须配置
#/home/yasdb/YASDB_DATA为主库路径,/home/db1/yashandb/yasdb_data为备库路径
ALTER SYSTEM SET DB_FILE_NAME_CONVERT=
'/home/db1/yashandb/yasdb_data','/home/yasdb/YASDB_DATA' scope=both; 
ALTER SYSTEM SET REDO_FILE_NAME_CONVERT=
'/home/db1/yashandb/yasdb_data','/home/yasdb/YASDB_DATA' scope=both; 
ALTER SYSTEM SET DB_BUCKET_NAME_CONVERT=
'/home/db1/yashandb/yasdb_data','/home/yasdb/YASDB_DATA' scope=both; 

#重启主库
yasboot cluster restart -c lhqdb

#验证
yasql / as sysdba
show parameter LISTEN_ADDR;
show parameter REPLICATION_ADDR;
show parameter ARCHIVE_DEST_1;

5.2备库参数

#LISTEN_ADDR和REPLICATION_ADDR参数重启数据库后生效,其他立即生效,ARCHIVE_DEST_XXX参数在REPLICATION_ADDR参数重启生效后再进行设置
ALTER SYSTEM SET LISTEN_ADDR=192.168.100.142:1688 scope=spfile;
ALTER SYSTEM SET REPLICATION_ADDR=192.168.100.142:1689 scope=spfile;
ALTER SYSTEM SET ARCHIVE_DEST_1='SERVICE=192.168.100.141:1689' scope=spfile;

-- 以下参数当主备库上路径完全一致时无须配置
-- /home/yasdb/YASDB_DATA为主库路径,/home/db1/yashandb/yasdb_data为备库路径
ALTER SYSTEM SET DB_FILE_NAME_CONVERT=
'/home/yasdb/YASDB_DATA','/home/db1/yashandb/yasdb_data' scope=both; 
ALTER SYSTEM SET REDO_FILE_NAME_CONVERT=
'/home/yasdb/YASDB_DATA','/home/db1/yashandb/yasdb_data' scope=both; 
ALTER SYSTEM SET DB_BUCKET_NAME_CONVERT=
'/home/yasdb/YASDB_DATA','/home/db1/yashandb/yasdb_data' scope=both; 


#重启备库
yasboot cluster restart -c lhqdg -m nomount

#验证
yasql / as sysdba
show parameter LISTEN_ADDR;
show parameter REPLICATION_ADDR;
show parameter ARCHIVE_DEST_1;

库参数

六、搭建备库

#搭建备库可以在主库执行命令,也可以在备库执行命令,我习惯沿用oracle的习惯,所以我这里只演示在备库操作
#先检查网络连通性,CONNECTION字段显示为CONNECTED则代表正常
SQL> SELECT CONNECTION,STATUS,PEER_ADDR,TRANSPORT_LAG,APPLY_LAG FROM V$REPLICATION_STATUS;

CONNECTION        STATUS            PEER_ADDR                                                        TRANSPORT_LAG    APPLY_LAG 
----------------- ----------------- ---------------------------------------------------------------- ------------- ------------ 
CONNECTED         NORMAL            192.168.100.141:1689                                                         0            0

1 row fetched.

#开始构建备库
SQL> BUILD DATABASE;

Succeed.

#检查状态
SQL> SELECT STATUS, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;

STATUS                            OPEN_MODE         DATABASE_ROLE     
--------------------------------- ----------------- ----------------- 
NORMAL                            READ_ONLY         STANDBY

SQL> SELECT STATUS FROM V$INSTANCE;

STATUS        
------------- 
OPEN         

1 row fetched.

#备库检查是否有延迟,如果transport_lag与apply_lag的值均为0,表示备库同步主库的日志和自身应用日志均无延时情况,同步正常;如果不为0,尝试切换一两个日志,再看是否为0,否则需要重新初始化备库。
SQL> SELECT connection, status, peer_mode, peer_addr, transport_lag, apply_lag FROM V$REPLICATION_STATUS;

CONNECTION        STATUS            PEER_MODE         PEER_ADDR                                                        TRANSPORT_LAG    APPLY_LAG 
----------------- ----------------- ----------------- ---------------------------------------------------------------- ------------- ------------ 
CONNECTED         NORMAL            OPEN              192.168.100.141:1689                                                         0            0

1 row fetched.

七、收尾

#主库切换日志
SQL> alter system switch logfile;

Succeed.


#主库日志显示:
2024-11-24 12:13:19.283 1748 [INFO] [REDO] instance: 0, switch redo target asn: 4294967295, current asn: 14
2024-11-24 12:13:19.285 1748 [INFO] [REDO] instance 0, switch redo file, type 1, point 0-14-186-15619
2024-11-24 12:13:19.287 1748 [INFO] [REDO] switch redo file, new asn 15
2024-11-24 12:13:19.303 1709 [INFO] [HA] scf sender 0 load scfMgr with lfn 15619 success
2024-11-24 12:13:19.771 1725 [INFO] [REDO] instance 0, switch redo file, type 8, point 0-15-1-15620
2024-11-24 12:13:20.142 1703 [INFO] [ARCH] instance: 0, itemCounts: 13, add archive file filename /ysdata/db-1-1/archive/arch_0_14.ARC, asn: 14, ctrlId: 13, used: 1
2024-11-24 12:13:20.143 1703 [INFO] [ARCH] add new archive file /ysdata/db-1-1/archive/arch_0_14.ARC

#备库日志显示:
2024-11-24 12:13:19.772 1806 [INFO] [HA] redo receiver receive message, type 69, length 312
2024-11-24 12:13:19.774 1806 [INFO] [REDO] switch redo file, new asn 15
2024-11-24 12:13:19.828 1837 [INFO] [ARCH] instance: 0, itemCounts: 0, add archive file filename /ysdata/db-1-1/archive/arch_0_14.ARC, asn: 14, ctrlId: 0, used: 1
2024-11-24 12:13:19.829 1837 [INFO] [ARCH] add new archive file /ysdata/db-1-1/archive/arch_0_14.ARC

日常排障

--在主库排查
SELECT dest_id,connection,status,database_mode,received_lfn,applied_lfn,synchronized FROM V$ARCHIVE_DEST_STATUS;

--在备库排查
#分析连通性和同步性
SELECT connection, status, peer_mode, peer_addr, transport_lag, apply_lag FROM V$REPLICATION_STATUS;

#分析同步性能,一般情况下,Remain Time应小于1秒。
SELECT item,units,value FROM V$RECOVERY_PROGRESS;

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

文章被以下合辑收录

评论