DM-8 主备集群搭建
搭建目的:
使用DM-8搭建一主一从 并实现故障自动切换
规划明细表
主机地址+主机名 | 部署规划 | 归档目录 | 数据目录 | 实例名 |
---|---|---|---|---|
10.0.0.31(dm01) | DM-主 | /data/DAMENG/arch | /data/DAMENG | DM01 |
10.0.0.32(dm02) | DM-备 | /data/DAMENG/arch | /data/DAMENG | DM02 |
10.0.0.33(dm03) | DM-monitor | /data/DAMENG/arch | /data/DAMENG | DM03 |
1. 登陆dm01.dm02.dm03 初始化
初始化详细步骤在之前的帖子中,附地址链接
https://blog.csdn.net/ince130/article/details/126343684
注意: 初始化参数中 INSTANCE_NAME=规划明细表中主机名称
1.1 注册DMSERVER
检查归档是否开启
[dmdba@dm01 ~]$ sed -i ‘578s/0/1/’ /data/DAMENG/dm.ini
[dmdba@dm01 ~]$ cat /data/DAMENG/dm.ini |grep ARCH_INI
ARCH_INI = 1 #dmarch.ini
如果ARCH_INI=1则无需修改
配置归档
##DM01## ##DM02## 都需要配置
[dmdba@dm01 ~]$ cat>/data/DAMENG/dmarch.ini<<EOF
> ARCH_WAIT_APPLY = 0
> [ARCHIVE_LOCAL1]
> ARCH_TYPE = LOCAL #本地归档类型
> ARCH_DEST = /data/DAMENG/arch #本地归档存放路径
> ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
> ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
> ARCH_FLUSH_BUF_SIZE = 0
> ARCH_HANG_FLAG = 1
>
> [ARCHIVE_REALTIME]
> ARCH_TYPE = REALTIME #实时归档类型
> ARCH_DEST = DW02 #实时归档目标实例名
> EOF
1.2 启动DmAPServer并使用dmrman备份
[dmdba@dm01 ~]$ ./DmAPService start
[dmdba@dm01 ~]$ dmrman
dmrman V8
RMAN> backup database ‘/data/DAMENG/dm.ini’ full backupset ‘/data/DAMENG/bak’;
backup database ‘/data/DAMENG/dm.ini’ full backupset ‘/data/DAMENG/bak’;
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[40143], file_lsn[40143]
Processing backupset /data/DAMENG/bak
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00]
backup successfully!
time used: 00:00:05.410
RMAN>
使用scp命令将备份传输到从库中
[dmdba@dm01 bak]$ scp *.* dmdba@10.0.0.32:/data/DAMENG/bak
dmdba@10.0.0.32’s password:
bak.bak 100% 20MB 5.0MB/s 00:04
bak.meta 100% 85KB 1.3MB/s 00:00
从库恢复数据
[dmdba@dm02 bak]$ dmrman
dmrman V8
RMAN> check backupset ‘/data/DAMENG/bak’;RMAN> restore database ‘/data/DAMENG/dm.ini’ from backupset ‘/data/DAMENG/bak’;
RMAN> recover database ‘/data/DAMENG/dm.ini’ from backupset ‘/data/DAMENG/bak’;
RMAN> recover database ‘/data/DAMENG/dm.ini’ update DB_MAGIC;
1.3 dm.ini配置
#DM01# #DM02#都需要配置
[dmdba@dm01 ~]$ cat -n /data/DAMENG/dm.ini |grep -w INSTANCE_NAME
15 INSTANCE_NAME = DMSERVER #Instance name
[dmdba@dm01 ~]$ cat -n /data/DAMENG/dm.ini |grep -w MAL_INI
577 MAL_INI = 0 #dmmal.ini
[dmdba@dm01 ~]$ sed -i '15s/DMSERVER/DM01/' /data/DAMENG/dm.ini
[dmdba@dm01 ~]$ sed -i '577s/0/1/' /data/DAMENG/dm.ini
注:dm.ini 部分参数修改说明
INSTANCE_NAME = DW01
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 次的日志发送信息
1.4 配置dmmal.ini
##DM01## ##DM02##都需要配置
[dmdba@dm01 ~]$ cat>/data/DAMENG/dmmal.ini<<EOF
> MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
> MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
> MAL_TEMP_PATH = /data/malpath/ #临时文件目录
> MAL_BUF_SIZE = 512 #单个MAL缓存大小,单位MB
> MAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MB
> MAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压缩
>
> [MAL_INST1]
> MAL_INST_NAME = DM01 #实例名,和 dm.ini的INSTANCE_NAME一致
> MAL_HOST = 10.0.0.31 #MAL系统监听TCP连接的IP地址
> MAL_PORT = 5336 #MAL系统监听TCP连接的端口
> MAL_INST_HOST = 10.0.0.31 #实例的对外服务IP地址
> MAL_INST_PORT = 5236 #实例对外服务端口,和dm.ini的PORT_NUM一致
> MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
> MAL_INST_DW_PORT = 5536 #实例监听守护进程TCP连接的端口
>
> [MAL_INST2]
> MAL_INST_NAME = DM02
> MAL_HOST = 10.0.0.32
> MAL_PORT = 5336
> MAL_INST_HOST = 10.0.0.32
> MAL_INST_PORT = 5236
> MAL_DW_PORT = 5436
> MAL_INST_DW_PORT = 5536
> EOF
1.5 配置dmwatcher.ini
#DM01# #DM02#都需要配置
[dmdba@dm01 ~]$ cat>/data/DAMENG/dmwatcher.ini<<EOF
> [GDW1]
> DW_TYPE = GLOBAL #全局守护类型
> DW_MODE = MANUAL #故障手动切换模式(AUTO自动)
> DW_ERROR_TIME = 20 #远程守护进程故障认定时间
> INST_ERROR_TIME = 20 #本地实例故障认定时间
> INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
> INST_OGUID = 45331 #守护系统唯一OGUID值
> INST_INI = /data/DAMENG/dm.ini #dm.ini文件路径
> INST_AUTO_RESTART = 1 #打开实例的自动启动功能
> INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
> RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
> RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭6
>
> EOF
1.6 配置dmmonitor.ini
##DM03##
[dmdba@dm03 ~]$ mkdir /home/dmdba/dmmonitor
[dmdba@dm03 ~]$ cat>/home/dmdba/dmmonitor/dmmonitor.ini<<EOF
> MON_DW_CONFIRM = 0 #0为非确认,1为确认
> MON_LOG_PATH = ../log #监视器日志文件存放路径
> MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
> MON_LOG_FILE_SIZE = 512 #单个日志大小,单位MB
> MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位MB
>
> [GDW1]
> MON_INST_OGUID = 45331 #组GDW1的唯一OGUID 值
> MON_DW_IP = 10.0.0.31:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORT
> MON_DW_IP = 10.0.0.32:5436
> EOF
1.7 注册服务
## DM01##
[root@dm01 ~]# cd /home/dmdba/dmdbms/script/root
[root@dm01 root]# ./dm_service_installer.sh -t dmserver -p DW01 -dm_ini /data/DAMENG/dm.ini -m mount
[root@dm01 root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/DAMENG/dmwatcher.ini
## DM02##
[root@dm01 ~]# cd /home/dmdba/dmdbms/script/root
[root@dm01 root]# ./dm_service_installer.sh -t dmserver -p DW02 -dm_ini /data/DAMENG/dm.ini -m mount
[root@dm01 root]# ./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /data/DAMENG/dmwatcher.ini
##DM03##
[root@dm03 ~]# cd /home/dmdba/dmdbms/script/root/
[root@dm03 root]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmmonitor/dmmonitor.ini
1.8 启动并配置主备
#DM01#
[dmdba@dm01 bin]$ ./dmserver /data/DAMENG/dm.ini mount
[dmdba@dm01 bin]$ ./disql
disql V8
username:
password:
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time : 82.388(ms)
SQL> SP_SET_OGUID(45331);
DMSQL executed successfully
used time: 313.130(ms). Execute id is 0.
SQL> ALTER DATABASE PRIMARY;
executed successfully
used time: 294.776(ms). Execute id is 0.
SQL>exit;
#DM02#
[dmdba@dm02 bin]$ ./dmserver /data/DAMENG/dm.ini mount
[dmdba@dm02 bin]$ ./disql
disql V8
username:
password:
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time : 228.711(ms)
SQL> SP_SET_OGUID(45331);
DMSQL executed successfully
used time: 376.809(ms). Execute id is 0.
SQL> ALTER DATABASE STANDBY;
executed successfully
used time: 165.644(ms). Execute id is 0.
SQL>exit;
1.9 启动守护进程
#DM01# #DM02#
[dmdba@dm01 bin]$ ./dmwatcher /data/DAMENG/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
1.10 启动监视进程
#DM03#
[root@dm03 dmmonitor]# su - dmdba
Last login: Fri Oct 14 14:57:53 CST 2022 on pts/0
[dmdba@dm03 ~]$ cd dmdbms/bin
[dmdba@dm03 bin]$ ./DmMonitorServiceMonitor start
Starting DmMonitorServiceMonitor: [ OK ]
[dmdba@dm03 bin]$
1.10.1查看主备状态
#DM03#
[dmdba@dm03 bin]$ ./dmmonitor /home/dmdba/dmmonitor/dmmonitor_no.ini
[monitor] 2022-10-14 15:43:52: DMMONITOR[4.0] V8
[monitor] 2022-10-14 15:43:52: DMMONITOR[4.0] IS READY.
[monitor] 2022-10-14 15:43:52: 收到守护进程(DW02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-10-14 15:43:52 OPEN OK DW02 OPEN STANDBY NULL 3 45152 45152
[monitor] 2022-10-14 15:43:52: 收到守护进程(DW01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-10-14 15:43:52 OPEN OK DW01 OPEN PRIMARY VALID 3 45153 45153
[monitor] 2022-10-14 15:44:19: [!!! 提示:本监视器不是确认监视器,在故障自动切换模式下如果发生主库故障,本监视器无法执行自动接管 !!!]
[monitor] 2022-10-14 15:44:19: 实例DW01[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-10-14 15:44:19: 实例DW01[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-10-14 15:44:19: 实例DW01[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-10-14 15:44:19: 实例DW02[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例DW01[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-10-14 15:44:19: 实例DW02[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-10-14 15:44:19: 实例DW02[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-10-14 15:44:19: 组(GDW1)当前活动实例运行正常
[monitor] 2022-10-14 15:44:19: 所有组中的活动实例运行正常!