#一主一备配置

本文所述一主一备配置基于主机已安装完成的情况,部署过程中可能需要重启数据库,若主机为正在使用的生产环境,请确保在可对其执行重启的时间段内进行主备部署。

# Step1:备机准备

主备部署前,需要先进行备机上的数据库安装,请按运维手册安装部署所述步骤完成安装,且需注意如下事项:

  • 备机的各项资源参数建议与主机一致。
  • 备机所安装的数据库版本必须为与主机一致的数据库版本。
  • 备机安装过程中所定义的DATA目录应尽量与主机保持一致,无法保持一致(例如主备机位于同一台服务器)的情况下,必须设置路径转换参数,详见下面描述。
  • YashanDB默认安装完成后会创建一个初始数据库,需使用DROP DATABASE语句卸载该数据库。
--登录初始数据库,该数据库安装后为open状态
$ yasql sys/sys

--重启至nomount状态
SQL> SHUTDOWN;
exit
$ nohup yasdb nomount &

--卸载初始数据库
SQL> DROP DATABASE;

# Step2:开启主机归档

检查主机归档是否打开,如未打开,需要按如下步骤将主机调整为归档模式:

  1. 重启主机实例至MOUNT状态。

  2. 调整数据库的归档模式。

  3. 打开数据库。

示例

$ nohup yasdb mount &
$ yasql sys/sys
SQL> SELECT database_name,log_mode,open_mode FROM V$DATABASE;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

# Step3:主备机参数配置

与主备部署相关的参数有:

  • LISTEN_ADDR:本机数据库的IP与监听端口,该参数在安装时已配置。
  • NODE_ID:各节点编号,该参数在创建节点时已配置,且不能重复,主要用于主备机自动选举。
  • REPLICATION_ADDR:本机数据库的IP与同步复制端口,可不配置,则与LISTEN_ADDR共享一个端口。
  • ARCHIVE_DEST_1:对端数据库的IP与同步复制端口(该类型的参数有32个,从ARCHIVE_DEST_1到 ARCHIVE_DEST_32,每个参数表示一个备机的链路属性,所以一个主机最多支持32个备机),必须配置。
  • DB_FILE_NAME_CONVERT:对端到本机的数据文件转换路径,支持递归转换,主备数据文件路径不同时必须配置。
  • REDO_FILE_NAME_CONVERT:对端到本机的日志文件转换路径,支持递归转换,主备日志文件路径不同时必须配置。
  • DB_BUCKET_NAME_CONVERT:对端到本机的LSC表的bucket转换路径,支持递归转换,主备bucket路径不同时必须配置。
  • HA_SSL_ENABLE(SSL_ENABLE):主备间SSL加密传输开关。当REPLICATION_ADDR和LISTEN_ADDR共享端口,主备加密传输参照SSL_ENABLE,否则参照HA_SSL_ENABLE; 主备之间的开关参数必须一致;当开启时,主备需要配置SSL_CERT_FILE/SSL_KEY_FILE/SSL_DH_PARAM_FILE参数,配置方式见运维手册SSL连接配置

Note

递归转换:

逐一设置文件路径转换非常繁琐且易出错,所以当主备文件路径上的某个节点开始往后一致时,只用设置这个节点路径的转换参数,系统对具有相同父目录的文件或文件夹进行递归转换。

假设主机和备机的DATA目录分别为'/home/yashan/node_1'和'/home/yashan/node_2',主机的数据文件有'/home/yashan/node_1/spc1/datafile1'和'/home/yashan/node_1/spc2/datafile2'。设置备机的转换路径为"DB_FILE_NAME_CONVERT='/home/yashan/node_1', '/home/yashan/node_2'",那么备机上创建的datafile1和datafile2将分别位于'/home/yashan/node_2/spc1/datafile1'和'/home/yashan/node_2/spc2/datafile2'。

主机配置示例(LISTEN_ADDR和REPLICATION_ADDR参数重启数据库后生效,其他立即生效,ARCHIVE_DEST_XXX参数在REPLICATION_ADDR参数重启生效后再进行设置)

ALTER SYSTEM SET LISTEN_ADDR=192.168.1.2:1688 scope=spfile;
ALTER SYSTEM SET REPLICATION_ADDR=192.168.1.2:1689 scope=spfile;
ALTER SYSTEM SET ARCHIVE_DEST_1='SERVICE=192.168.1.3:1789' scope=both;

--以下参数当主备机上路径完全一致时无须配置
--/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; 

备机配置示例(重启数据库后生效)

ALTER SYSTEM SET LISTEN_ADDR=192.168.1.3:1678 scope=spfile;
ALTER SYSTEM SET REPLICATION_ADDR=192.168.1.3:1789 scope=spfile;
ALTER SYSTEM SET ARCHIVE_DEST_1='SERVICE=192.168.1.2: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=spfile; 
ALTER SYSTEM SET REDO_FILE_NAME_CONVERT=
'/home/yasdb/YASDB_DATA','/home/db1/yashandb/yasdb_data' scope=spfile; 
ALTER SYSTEM SET DB_BUCKET_NAME_CONVERT=
'/home/yasdb/YASDB_DATA','/home/db1/yashandb/yasdb_data' scope=spfile; 

Note

1.转换路径仅在当前节点角色为备机时起作用,但由于主备角色可能发生切换,所以应该对所有节点均设置转换路径。

2.转换路径如果设置不正确,可能会导致备机找错文件或者误改文件。如果备机所需要的文件路径找不到,备机回放进程将挂起并上报告警,此时用户需手动执行shutdown abort关闭备机数据库。

3.ARCHIVE_DEST_1一旦配置即生效,复制链路被占用且不允许修改,部署过程中如用户发现配置错误,需重新设置该参数时,直接修改将被提示YAS-02425错误,此时应该先将该参数设置为空,释放链路后再重新设为正确的值。

# Step4:备机初始化

备机的初始化,即对其进行与主机的数据同步,YashanDB支持通过在线传输或备份恢复的方式进行数据同步。

# 方式1:在线传输

执行此种方式的初始化要求主机为open状态,备机为nomount状态(未建库)。

在线传输方式的工作流程为:

  1. 用户在主机或备机上发起BUILD DATABASE命令。
  2. 收到命令后,主机将控制文件、数据文件、redo日志文件和归档日志文件等通过网络传输直接发送到备机,不会生成临时备份文件,效率较高。
  3. 备机根据收到的文件直接在线恢复。
  4. 备机恢复完成之后,打开数据库。

备机发起build示例

--以下操作均在备机上执行:

--检查网络是否连通,CONNECTION为CONNECTED则主备网络连接正常,为DISCONNECTED则主备网络不相通
SELECT CONNECTION,STATUS,PEER_ADDR,TRANSPORT_LAG,APPLY_LAG
FROM V$REPLICATION_STATUS;
 
--主备网络连接正常时,在备机上执行在线同步操作
BUILD DATABASE;

--检查备机的实例状态是否正常,STATUS应为OPEN
SELECT STATUS FROM V$INSTANCE;

--检查备机的状态、打开模式和角色信息是否异常,STATUS应为NORMAL,OPEN_MODE应为READ_ONLY,DATABASE_ROLE应为STANDBY
SELECT STATUS, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;

主机发起build示例

--以下操作在主机上执行:

--检查网络是否连通,CONNECTION为CONNECTED则主备网络连接正常,为DISCONNECTED则主备网络不相通,DATABASE_MODE应为STARTED
SELECT CONNECTION,STATUS,DATABASE_MODE
FROM V$ARCHIVE_DEST_STATUS
WHERE DEST_ID = 1;

--查询备机的DB_UNIQUE_NAME
SELECT DB_UNIQUE_NAME FROM V$ARCHIVE_DEST WHERE DEST_ID = 1;

--发起build,参数为备机的DB_UNIQUE_NAME
BUILD DATABASE TO STANDBY (standby1);

--以下操作在备机上执行:

--检查备机的实例状态是否正常,STATUS应为OPEN
SELECT STATUS FROM V$INSTANCE;

# 方式2:备份集恢复

本方式要求先在主机上生成一份最新的全量备份,且主机在此备份开始之后的归档不被删除,否则备机恢复后,可能会因缺少归档而故障。

执行此种方式的初始化要求主机为open状态,备机为nomount状态(已建库)。

备份集恢复方式的操作步骤如下:

  1. 在主机上执行全量备份。
  2. 将备机实例重启到NOMOUNT状态。
  3. 将主机的备份集拷贝到备机上。
  4. 在备机执行RESTORE命令。
  5. 将数据库转换成物理备库。
  6. 在备机上进行RECOVER命令。
  7. open数据库。

示例

--以下操作在主机上执行:

--执行全量备份,生成全量备份集fulldir
BACKUP DATABASE;

--以下操作在备机上执行:
 
--获取主机的全量备份集fulldir,放至备机本地,例如/tmp/backup/fulldir
--从备份集中恢复
RESTORE DATABASE FROM '/tmp/backup/fulldir'; 
--转换成物理备库
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
--recover
RECOVER DATABASE;
--打开数据库
ALTER DATABASE OPEN;

--检查备机状态、打开模式和角色信息是否异常
--STATUS应为NORMAL,OPEN_MODE应为READ_ONLY,DATABASE_ROLE应为STANDBY
SELECT STATUS, OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;

--检查网络是否连通
--CONNECTION为CONNECTED则主备网络连接正常,为DISCONNECTED则主备网络不相通
SELECT CONNECTION,STATUS,PEER_ADDR,TRANSPORT_LAG,APPLY_LAG 
FROM V$REPLICATION_STATUS;

# Step5:部署后检查

备机初始化后,需要检查主备机的日志传输是否正常,及主备同步是否有延时,可在备机上执行如下操作检查:

1.查询V$INSTANCE视图,status为OPEN,表示备机数据库正常开启。

2.查询V$DATABASE视图,status为NORMAL,log_mode为ARCHIVELOG,open_mode为READ_ONLY,database_role为STANDBY,表示备机数据库已经创建成功,数据库运行正常且为归档模式,提供只读业务。

3.查询V$REPLICATION_STATUS视图,如果connection为CONNECTED,status为NORMAL,peer_mode为OPEN,peer_addr为主机的IP,则主备同步正常;如果status为NEED REPAIR,表示同步有间隙,需要介质恢复。如果transport_lag与apply_lag的值均为0,表示备机同步主机的日志和自身应用日志均无延时情况,同步正常;如果不为0,尝试切换一两个日志,再看是否为0,否则需要重新初始化备机。

SELECT * FROM V$INSTANCE;
SELECT database_id, database_name, status, log_mode, open_mode, database_role 
FROM V$DATABASE;
SELECT connection, status, peer_mode, peer_addr, transport_lag, apply_lag 
FROM V$REPLICATION_STATUS;

此外,还可以通过在主机中创建表、插入数据,提交事务,然后在备机查看表数据信息,确认主备机数据同步是否正常。