麒麟ARM系统 - 双机达梦8主备搭建
环境说明
1.1 硬件需求
至少需要三台服务器,1主、1从、1监视器。由于资源有限,将监视器安装在主库机器上,本次实验使用 2 台虚拟机。
操作系统:麒麟arm64服务器版V10
uname -r
4.19.90-17.ky10.aarch64
master节点:
192.168.1.175
backup节点:
192.168.1.176
1.2 网络需求
心跳 IP 和外部 IP 不同网段,本次实验没有单独配置,和外部 IP 相同。
1.3 注意事项
- 各实例使用的DM版本必须一致;
- 主机操作系统位数及版本一致;
- 系统时区时间一致;
- 同一个用户启动DM服务及守护进程 dmwatcher
主库 | 备库 | 监视库 | |
---|---|---|---|
主机名 | master | backup | bakcup |
物理IP | 192.168.1.175 | 192.168.1.176 | 192.168.1.176 |
心跳IP | 192.168.1.175 | 192.168.1.176 | 192.168.1.176 |
数据库端口 | 5236 | 5236 | 5236 |
MAL_INST_DW_PORT | 33141 | 33141 | 不涉及 |
MAL_PORT | 61141 | 61141 | |
MAL_DW_PORT | 52141 | 52141 | |
DBNAME | DM | DM | |
数据库版本 | V8 | V8 | V8 |
通过实际操作,对DM8进行冷备份可行。
实际操作
修改文件句柄
cat << EOF >> /etc/security/limits.conf
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
EOF
创建用户
groupadd -g 1000 dinstall
useradd -u 1000 -g 1000 -d /home/dmdba -s /bin/bash dmdba
echo dmdba|passwd --stdin dmdba
安装DM8
mkdir /root/tmp
export DM_INSTALL_TMPDIR=/root/tmp
./DMInstall.bin -i
配置数据库实例
主:
./dminit path=/data/dmdbms/data EXTENT_SIZE=32 PAGE_SIZE=4 CASE_SENSITIVE=0 CHARSET=1 INSTANCE_NAME=DM1
从:
./dminit path=/data/dmdbms/data EXTENT_SIZE=32 PAGE_SIZE=4 CASE_SENSITIVE=0 CHARSET=1 INSTANCE_NAME=DM2
命令启动主节点
./dmserver /data/dmdbms/data/DAMENG/dm.ini
...
SYSTEM IS READY. --启动成功后应该出现如下字样,否则请稍微等待一会。
主库关闭连接并使用 dmrman 备份主库
直接按 ctrl+c 结束上面启动命令,开两个会话
一个启动dmap
./dmap
dmap V8
dmap is ready
-------------------------
一个操作备份:
./dmrman
RMAN> BACKUP DATABASE '/data/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/data/backup';
...
backup successfully!
拷贝文件到备节点还原数据库
scp -r /data/backup dm2:/data/
还是开两个会话:
./dmap
dmap V8
dmap is ready
一个操作还原数据:
./dmrman
RMAN> RESTORE DATABASE '/data/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/data/backup';
RMAN> RECOVER DATABASE '/data/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/data/backup';
RMAN> RECOVER DATABASE '/data/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
配置主备两节点 dm.ini 文件【主备两个节点都需要修改】
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
配置 dmmal.ini(主备库配置必须一致)
MAL_CHECK_INTERVAL= 5
#MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL= 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME= DM1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST= 192.168.1.175 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT= 61141
#MAL 系统监听 TCP 连接的端口
MAL_INST_HOST= 192.168.1.175 #实例的对外服务 IP 地址
MAL_INST_PORT= 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT= 52141 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT= 33141 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME= DM2
MAL_HOST= 192.168.1.176
MAL_PORT= 61141
MAL_INST_HOST= 192.168.1.176
MAL_INST_PORT= 5236
MAL_DW_PORT= 52141
MAL_INST_DW_PORT= 33141
配置 dmarch.ini( 主备库归档目标实例名不一致)
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM1 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmdbms/data/DAMENG/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 500000 #单位 Mb,0 表示无限制,范围 1024~4294967294M
配置 dmwatcher.ini(主备库配置相同)
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO # MANUAL # 手工切换 AUTO 自动切换模式必须部署一个确认监视器
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一 OGUID 值
INST_INI= /data/dmdbms/data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /data/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
配置 dmmonitor.ini(生产环境自动切换需单独配置一台监视器)
单独一台服务器配置监视器:
MON_DW_Confirm = 1 # 确认监视器模式
MON_LOG_PATH = /data/dmdbms/dmmointor/log # 监视器日志文件存放路径
MON_LOG_INTERVAL = 60 # 每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 # 每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 # 不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 # 组 GRP1 的唯一 OGUID 值
以下配置为监视器到组 GRP1 的守护进程的连接信息,以 ―IP:PORT‖ 的形式配置
IP 对应 dmmal.ini 中的 MAL_HOST , PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.1.175:52141
MON_DW_IP = 192.168.1.176:52141
不是单独一台服务器配置监视器:
MON_DW_Confirm = 0 # 0 表示普通监视器 ,最多配置 8 个,1 确认监视器模式
MON_LOG_PATH = /data/dmdba/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID= 453332 #组 GRP1 的唯一 OGUID 值
#配置为监视器到组 GRP1 的守护进程的连接信息以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.1.175:52141
MON_DW_IP = 192.168.1.176:52141
以 mount 方式启动主备库
主:
./dmserver /data/dmdbms/data/DAMENG/dm.ini mount
备:
./dmserver /data/dmdbms/data/DAMENG/dm.ini mount
disql 登录配置主备库
主:
./disql SYSDBA/SYSDBA
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453332);
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
alter database primary;
备:
./disql SYSDBA/SYSDBA
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(453332);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
启动各个主备库上的守护进程
新开会话启动
主:
./dmwatcher /data/dmdbms/data/DAMENG/dmwatcher.ini
备:
./dmwatcher /data/dmdbms/data/DAMENG/dmwatcher.ini
启动监视器
在DM2节点上启动
./dmmonitor /data/dmdbms/data/DAMENG/dmmonitor.ini
#启动后,输入show global info 查看信息
show global info
2023-12-06 14:18:11
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453332 FALSE AUTO FALSE
GROUP SPLIT:
1: DATABASE(DM1):
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.1.175 52141 2023-12-06 14:18:10 GLOBAL VALID STARTUP DM1 OK 1 1 MOUNT PRIMARY DSC_OPEN NONE VALID
2: DATABASE(DM2):
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.1.176 52141 2023-12-06 14:18:10 GLOBAL VALID STARTUP DM2 OK 1 1 MOUNT STANDBY DSC_OPEN NONE INVALID
#================================================================================#
注册后台启动服务
将前面的服务全部关闭,注册后台启动服务
主:
/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DAMENG -dm_ini /data/dmdbms/data/DAMENG/dm.ini -m mount
/data/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DAMENG -watcher_ini /data/dmdbms/data/DAMENG/dmwatcher.ini
备:
/data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DAMENG -dm_ini /data/dmdbms/data/DAMENG/dm.ini -m mount
/data/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DAMENG -watcher_ini /data/dmdbms/data/DAMENG/dmwatcher.ini
备库注册监视器
/data/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p DAMENG -monitor_ini /data/dmdbms/data/DAMENG/dmmonitor.ini
启动服务注意权限问题
chmod 755 /data
chown -R dmdba:dinstall /data/dmdbms/data
主备集群重启有顺序要求:
关闭监视器:systemctl stop DmMonitorServiceDAMENG
关闭主库守护进程:systemctl stop DmWatcherServiceDAMENG
关闭备库守护进程:systemctl stop DmWatcherServiceDAMENG
关闭主库实例:systemctl stop DmServiceDAMENG
关闭备库实例:systemctl stop DmServiceDAMENG
启动主库实例:systemctl start DmServiceDAMENG
启动备库实例:systemctl start DmServiceDAMENG
启动主库守护进程:systemctl start DmWatcherServiceDAMENG
启动备库守护进程:systemctl start DmWatcherServiceDAMENG
启动监视器:systemctl start DmMonitorServiceDAMENG
测试
查看监视器情况
./dmmonitor /data/dmdbms/data/DAMENG/dmmonitor.ini
show global info
2023-12-06 14:50:14
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453332 FALSE AUTO FALSE
GROUP SPLIT:
1: DATABASE(DM1):
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.1.175 52141 2023-12-06 14:50:14 GLOBAL VALID STARTUP DM1 OK 1 1 MOUNT PRIMARY DSC_OPEN REALTIME VALID
2: DATABASE(DM2):
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.1.176 52141 2023-12-06 14:50:13 GLOBAL VALID STARTUP DM2 OK 1 1 MOUNT STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
手动切换
./dmmonitor /data/dmdbms/data/DAMENG/dmmonitor.ini
login
用户名:SYSDBA
密码:
[monitor] 2023-12-06 14:52:08: 登录监视器成功!
switchover DM2
[monitor] 2023-12-06 16:06:45: 开始切换实例DM2
[monitor] 2023-12-06 16:06:45: 通知守护进程DM1切换SWITCHOVER状态
[monitor] 2023-12-06 16:06:45: 守护进程(DM1)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2023-12-06 16:06:46: 切换守护进程DM1为SWITCHOVER状态成功
[monitor] 2023-12-06 16:06:46: 通知守护进程DM2切换SWITCHOVER状态
[monitor] 2023-12-06 16:06:46: 守护进程(DM2)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2023-12-06 16:06:46: 切换守护进程DM2为SWITCHOVER状态成功
[monitor] 2023-12-06 16:06:46: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2023-12-06 16:06:47: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2023-12-06 16:06:47: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2023-12-06 16:06:47: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2023-12-06 16:06:47: 实例DM1开始执行ALTER DATABASE MOUNT语句
[monitor] 2023-12-06 16:06:47: 实例DM1执行ALTER DATABASE MOUNT语句成功
[monitor] 2023-12-06 16:06:47: 实例DM2开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2023-12-06 16:06:47: 实例DM2执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2023-12-06 16:06:47: 实例DM2开始执行ALTER DATABASE MOUNT语句
[monitor] 2023-12-06 16:06:47: 实例DM2执行ALTER DATABASE MOUNT语句成功
[monitor] 2023-12-06 16:06:47: 实例DM1开始执行ALTER DATABASE STANDBY语句
[monitor] 2023-12-06 16:06:48: 实例DM1执行ALTER DATABASE STANDBY语句成功
[monitor] 2023-12-06 16:06:48: 实例DM2开始执行ALTER DATABASE PRIMARY语句
[monitor] 2023-12-06 16:06:48: 实例DM2执行ALTER DATABASE PRIMARY语句成功
[monitor] 2023-12-06 16:06:48: 通知实例DM2修改所有归档状态无效
[monitor] 2023-12-06 16:06:48: 修改所有实例归档为无效状态成功
[monitor] 2023-12-06 16:06:48: 实例DM1开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2023-12-06 16:06:49: 实例DM1执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2023-12-06 16:06:49: 实例DM2开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2023-12-06 16:06:50: 实例DM2执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2023-12-06 16:06:50: 实例DM1开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2023-12-06 16:06:50: 实例DM1执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2023-12-06 16:06:50: 实例DM2开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2023-12-06 16:06:50: 实例DM2执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2023-12-06 16:06:50: 通知守护进程DM1切换OPEN状态
[monitor] 2023-12-06 16:06:51: 守护进程(DM1)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2023-12-06 16:06:51: 切换守护进程DM1为OPEN状态成功
[monitor] 2023-12-06 16:06:51: 通知守护进程DM2切换OPEN状态
[monitor] 2023-12-06 16:06:52: 守护进程(DM2)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2023-12-06 16:06:53: 切换守护进程DM2为OPEN状态成功
[monitor] 2023-12-06 16:06:53: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2023-12-06 16:06:53: 清理守护进程(DM1)请求成功
[monitor] 2023-12-06 16:06:53: 清理守护进程(DM2)请求成功
[monitor] 2023-12-06 16:06:53: 实例DM2切换成功
手动关闭主节点
systemctl stop DmServiceDAMENG
监视器状态变化:
[monitor] 2023-12-06 16:07:58: 守护进程(DM1)状态切换 [OPEN-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2023-12-06 16:07:58 STARTUP ERROR DM1 SHUTDOWN PRIMARY VALID 7 44772 44772
[monitor] 2023-12-06 16:07:59: [!!! 实例DM1的守护进程配置为故障自动切换模式,但本监视器不是确认监视器,无法对实例DM1执行自动接管 !!!]
[monitor] 2023-12-06 16:08:11: 守护进程(DM1)状态切换 [STARTUP-->UNIFY EP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2023-12-06 16:08:10 UNIFY EP OK DM1 MOUNT PRIMARY VALID 7 44935 44935
[monitor] 2023-12-06 16:08:11: 守护进程(DM1)状态切换 [UNIFY EP-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2023-12-06 16:08:10 OPEN OK DM1 OPEN PRIMARY VALID 8 44936 45103
show global info
2023-12-06 16:08:42
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 453332 FALSE AUTO FALSE
<<DATABASE GLOBAL INFO:>>
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.1.180 52141 2023-12-06 16:08:41 GLOBAL VALID OPEN DM1 OK 1 1 OPEN PRIMARY DSC_OPEN REALTIME VALID
DW_IP MAL_DW_PORT WTIME WTYPE WCTLSTAT WSTATUS INAME INST_OK N_EP N_OK ISTATUS IMODE DSC_STATUS RTYPE RSTAT
192.168.1.181 52141 2023-12-06 16:08:42 GLOBAL VALID OPEN DM2 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
主备测试
(1)主库新增数据
root@dm1(192.168.1.180)/data/dmdbms/bin>./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 3.781(ms)
disql V8
SQL> select name,status$,role$ from v$database;
行号 name status$ role$
---------- ------ ----------- -----------
1 DAMENG 4 1
SQL> create table t1(id int);
操作已执行
SQL> insert into t1 values(1),(2),(3);
影响行数 3
SQL> commit;
操作已执行
(2)备库查看
root@dm2(192.168.1.181)/data/dmdbms/bin>./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于备库打开状态
登录使用时间 : 3.520(ms)
disql V8
SQL> select * from t1;
行号 id
---------- -----------
1 1
2 2
3 3
SQL> insert into t1 values(4),(5);
insert into t1 values(4),(5);
[-710]:试图在STANDBY模式下,修改用户库.
已用时间: 0.671(毫秒). 执行号:0.
【备库只读】
参考链接
https://blog.csdn.net/weixin_48039295/article/details/125932013