麒麟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

http://blog.itpub.net/29785807/viewspace-2917691/

https://blog.csdn.net/qq_37358909/article/details/111246534

posted @ 2023-12-11 15:39  hukey  阅读(506)  评论(0编辑  收藏  举报