#一主一备配置
本文所述一主一备配置基于主机已安装完成的情况,部署过程中可能需要重启数据库,若主机为正在使用的生产环境,请确保在可对其执行重启的时间段内进行主备部署。
# Step1:备机准备
主备部署前,需要先进行备机上的数据库安装,请按运维手册安装部署所述步骤完成安装,且需注意如下事项:
- 备机的各项资源参数建议与主机一致。
- 备机所安装的数据库版本必须为与主机一致的数据库版本。
- 备机安装过程中所定义的DATA目录应尽量与主机保持一致,无法保持一致(例如主备机位于同一台服务器)的情况下,必须设置路径转换参数,详见下面描述。
- YashanDB默认安装完成后会创建一个初始数据库,需使用DROP DATABASE语句卸载该数据库。
--登录初始数据库,该数据库安装后为open状态
$ yasql sys/sys
--重启至nomount状态
SQL> SHUTDOWN;
exit
$ nohup yasdb nomount &
--卸载初始数据库
SQL> DROP DATABASE;
# Step2:开启主机归档
检查主机归档是否打开,如未打开,需要按如下步骤将主机调整为归档模式:
重启主机实例至MOUNT状态。
调整数据库的归档模式。
打开数据库。
示例
$ 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状态(未建库)。
在线传输方式的工作流程为:
- 用户在主机或备机上发起BUILD DATABASE命令。
- 收到命令后,主机将控制文件、数据文件、redo日志文件和归档日志文件等通过网络传输直接发送到备机,不会生成临时备份文件,效率较高。
- 备机根据收到的文件直接在线恢复。
- 备机恢复完成之后,打开数据库。
备机发起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状态(已建库)。
备份集恢复方式的操作步骤如下:
- 在主机上执行全量备份。
- 将备机实例重启到NOMOUNT状态。
- 将主机的备份集拷贝到备机上。
- 在备机执行RESTORE命令。
- 将数据库转换成物理备库。
- 在备机上进行RECOVER命令。
- 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;
此外,还可以通过在主机中创建表、插入数据,提交事务,然后在备机查看表数据信息,确认主备机数据同步是否正常。