1.IP地址配置规划
1.1 IP地址配置
服务器名称 | IP地址 | 实例名称 | 操作系统 |
---|---|---|---|
DM01 | 192.168.1.101 | DM01 | 中标麒麟7 |
DM02 | 192.168.1.102 | DM02 | 中标麒麟7 |
1.2 端口配置
服务器类型 | 数据库名 | 实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_DW_PORT |
---|---|---|---|---|---|---|
主机服务器 | DM | DM01 | 5236 | 33141 | 61141 | 52141 |
备机服务器 | DM | DM02 | 5236 | 33142 | 61142 | 52142 |
监视器 | __ | __ | __ | __ | __ | __ |
2.初始化数据库
主库和备库两台机器上,都按以下方法初始化数据库(示例),注意主库与备库的数据库名相同,服务名不同,注意区分。
主库安装
dmdba@yankai-linux:/dm8/bin$ ./dminit path=/dm8/data DB_NAME=DMDB INSTANCE_NAME=DM01
# cd到/dm8/script/root目录下
root@yankai-linux:/dm8/script/root# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DMDB/dm.ini -p DM01
# 打开数据库服务
dmdba@yankai-linux:/dm8/bin$ systemctl start DmServiceDM02
# 连接disql
[dmdba@localhost ~]$ disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.175(ms)
disql V8
SQL> create user test identified by "dameng123";
操作已执行
已用时间: 10.264(毫秒). 执行号:51400.
SQL> create table test.t01 (id int ,name varchar(20));
操作已执行
已用时间: 7.493(毫秒). 执行号:51401.
SQL> exit
备库安装
dmdba@yankai-linux:/dm8/bin$ ./dminit path=/dm8/data DB_NAME=DMDB INSTANCE_NAME=DM02
# cd到/dm8/script/root目录下
root@yankai-linux:/dm8/script/root# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DMDB/dm.ini -p DM02
# 打开数据库服务
dmdba@yankai-linux:/dm8/bin$ systemctl start DmServiceDM02
# 连接disql
[dmdba@localhost ~]$ disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.175(ms)
disql V8
SQL> create user test identified by "dameng123";
操作已执行
已用时间: 10.264(毫秒). 执行号:51400.
SQL> create table test.t01 (id int ,name varchar(20));
操作已执行
已用时间: 7.493(毫秒). 执行号:51401.
SQL> exit
3.备份还原
3.1 备份主库
备份主库,关闭主库实例、执行备份脚本
# 关闭主库实例
dmdba@yankai-linux:/dm8/bin$ systemctl stop DmServiceDM01.service
# 执行备份脚本
dmdba@yankai-linux:/dm8/bin$ ./dmrman CTLSTMT="BACKUP DATABASE '/dm8/data/DMDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/'"
dmrman V8
BACKUP DATABASE '/dm8/data/DMDB/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dm8/backup/'
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39586], file_lsn[39586]
Processing backupset /dm8/backup [Percent:100.00%][Speed:0.00M/s][Cost:00:00:05][Remaining:00:00:00]
backup successfully!
time used: 00:00:07.461
dmdba@yankai-linux:/dm8/bin$ cd /dm8/backup/
dmdba@yankai-linux:/dm8/backup$ ls
backup.bak backup.meta
3.2 还原备库
还原备库,备库执行数据恢复,先关闭实例,再执行恢复。
# 关闭备机实例
dmdba@yankai-linux:/home/yankai/Desktop$ cd /dm8/bin
dmdba@yankai-linux:/dm8/bin$ systemctl stop DmServiceDM02
dmdba@yankai-linux:/home/yankai/Desktop$ cd /dm8/bin
# 执行恢复
dmdba@yankai-linux:/dm8/bin$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/backup'"
dmrman V8
RESTORE DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/backup'
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:14][Remaining:00:00:00]
restore successfully.
time used: 00:00:15.959
dmdba@yankai-linux:/dm8/bin$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/backup'"
dmrman V8
RECOVER DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/backup'
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39586], file_lsn[39586]
备份集[/dm8/backup]备份过程中未产生日志
recover successfully!
time used: 00:00:20.981
dmdba@yankai-linux:/dm8/bin$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/DMDB/dm.ini' UPDATE DB_MAGIC"
dmrman V8
RECOVER DATABASE '/dm8/data/DMDB/dm.ini' UPDATE DB_MAGIC
file dm.key not found, use default license!
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39586], file_lsn[39586]
recover successfully!
time used: 00:00:02.776
4.配置参数文件
4.1 主库配置文件
dm.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dm.ini
INSTANCE_NAME = DM01
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近64次的日志发送信息
dmarch.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dmmal.ini
MAL_CHECK_INTERVAL= 5
MAL_CONN_FAIL_INTERVAL = 5
#MAL 链路检测时间间隔
#判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.1.101 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141
MAL_INST_HOST = 192.168.233.131 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
#MAL 系统监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DM02
MAL_HOST = 192.168.1.102
MAL_PORT = 61142
MAL_INST_HOST = 192.168.233.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
dmarch.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/DM/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
dmwatcher.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60
#全局守护类型
#主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm8/data/DM/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver #打开实例的自动启动功能
RLOG_SEND_THRESHOLD = 0
#dm.ini 配置文件路径
#命令行方式启动
#指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0
#指定备库重演日志的时间阈值,默认关闭
4.2 备库配置文件
dm.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dm.ini
INSTANCE_NAME = DM02
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库OFFLINE表空间
MAL_INI = 1 #打开MAL系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近64次的日志发送信息
dmarch.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dmmal.ini
MAL_CHECK_INTERVAL= 5
MAL_CONN_FAIL_INTERVAL = 5
#MAL 链路检测时间间隔
#判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.1.101 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141
MAL_INST_HOST = 192.168.233.131 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口
#MAL 系统监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DM02
MAL_HOST = 192.168.1.102
MAL_PORT = 61142
MAL_INST_HOST = 192.168.233.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
dmarch.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM01 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/DM/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
dmwatcher.ini
dmdba@yankai-linux:/dm8/data/DM$ vi dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60
#全局守护类型
#主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dm8/data/DM/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver #打开实例的自动启动功能
RLOG_SEND_THRESHOLD = 0
#dm.ini 配置文件路径
#命令行方式启动
#指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0
#指定备库重演日志的时间阈值,默认关闭
5.修改主备库模式
启动主库
dmdba@yankai-linux:/dm8/bin$ ./dmserver /dm8/data/DM/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-144-20.11.06-129436-ENT startup...
Database mode = 0, oguid = 0
License will expire on 2024-5-9
file lsn: 40751
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
设置OGUID并修改数据库模式
dmdba@yankai-linux:/dm8/bin$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 4.292(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
DMSQL 过程已成功完成
已用时间: 15.355(毫秒). 执行号:0.
SQL> SP_SET_OGUID(453331);
DMSQL 过程已成功完成
已用时间: 2.191(毫秒). 执行号:1.
SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
DMSQL 过程已成功完成
已用时间: 2.331(毫秒). 执行号:2.
SQL> ALTER DATABASE PRIMARY;
操作已执行
已用时间: 3.028(毫秒). 执行号:0.
启动备库
dmdba@yankai-linux:/dm8/bin$ ./dmserver /dm8/data/DM/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-144-20.11.06-129436-ENT startup...
Database mode = 0, oguid = 0
License will expire on 2024-5-9
file lsn: 40751
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
设置OGUID并修改数据库模式
dmdba@yankai-linux:/dm8/bin$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 3.758(ms)
disql V8
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 6.499(毫秒). 执行号:0.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 4.835(毫秒). 执行号:1.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 10.242(毫秒). 执行号:2.
SQL> alter database standby;
操作已执行
已用时间: 4.248(毫秒). 执行号:0.
6. 启动主备守护进程
启动主库上的守护进程:
dmdba@yankai-linux:/dm8/bin$ ./dmwatcher /dm8/data/DM/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
启动备库上的守护进程:
dmdba@yankai-linux:/dm8/bin$ ./dmwatcher /dm8/data/DM/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
8.配置监视器
在主库或备库上添加配置文件dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm8/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.233.131:52141
MON_DW_IP = 192.168.233.132:52142
启动监视器
dmdba@yankai-linux:/dm8/bin$ ./dmmonitor /dm8/data/dmmonitor.ini
[monitor] 2023-05-24 15:44:02: DMMONITOR[4.0] V8
[monitor] 2023-05-24 15:44:02: DMMONITOR[4.0] IS READY.
[monitor] 2023-05-24 15:44:03: 收到守护进程(DM02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2023-05-24 15:44:02 OPEN OK DM02 OPEN PRIMARY NULL 5 40751 40751
[monitor] 2021-05-24 22:44:03: 收到守护进程(DM01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2023-05-24 15:44:02 OPEN OK DM01 OPEN STANDBY NULL 5 40751 40751
show
2023-05-24 15:44:05
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453331 TRUE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.233.131 52141 2023-05-24 15:44:05 GLOBAL VALID OPEN DM01 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK DM01 OPEN PRIMARY 0 0 REALTIME VALID 4023 40751 4023 40751 NONE
<<DATABASE GLOBAL INFO:>>
IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.233.132 52142 2021-05-24 22:44:10 GLOBAL VALID OPEN DM02 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
EP INFO:
INST_PORT INST_OK INAME ISTATUS IMODE DSC_SEQNO DSC_CTL_NODE RTYPE RSTAT FSEQ FLSN CSEQ CLSN DW_STAT_FLAG
5236 OK DM02 OPEN STANDBY 0 0 REALTIME VALID 4018 40751 4018 40751 NONE
DATABASE(DM02) APPLY INFO FROM (DM01):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[4023, 4023, 4023], (ALSN, SLSN, KLSN)[40751, 40751, 40751], N_TSK[0], TSK_MEM_USE[0]
#================================================================================#
至此守护配置已完成。提示:如果到了这一步,监听不到从节点,在你确保你的配置文件没出错的前提下,一定要注意从节点的防火墙,我首次搭建也是监听不打,后面关闭防火墙重新启动监听,就可以了。