1.部署主备机群
1.1 环境准备
安装准备前先在两台主备服务器安装好数据库,本示例中组名为“GRP1” ,配置为实时主备,主库命名为“CB01” ,备库命名为“CB02”。
机器名 | IP地址 | 初始状态 | 操作系统 | 备注 |
---|---|---|---|---|
DW_1 | 192.168.23.166 192.168.23.166 | 主库 | 麒麟V10 | 内网:192.168.23.166 外网:192.168.23.166 |
DW_2 | 192.168.23.177 192.168.23.177 | 备库 | 内网:192.168.23.177 外网:192.168.23.177 | |
DW_3 | 192.168.23.188 | 确认监视器 |
端口划分
实例名 | PORT_NUM | MAL_INST_DW_PORT | MAL_HOST | MAL_PORT | MAL_DW_PORT |
CB01 | 5800 | 5337 | 192.168.23.166 | 5338 | 5339 |
CB02 | 5800 | 5337 | 192.168.23.177 | 5338 | 5339 |
MAL系统是基于 TCP 协议实现的一种内部通信机制,DM通过 MAL系统实现 Redo日志传输, 以及其他一 些实例间的消息通讯。
守护进程 (dmwatcher ) 是数据库实例和监视器之间信息流转的桥梁。数据库实例向本地守护进程发送信息, 接收本地守护进程的消息和命令;
监视器 (dmmonitor) 接收守护进程的消息,并向守护进程发送命令;数据库实例与监视器之间没有直接的消 息交互;
守护进程解析并执行监视器发起的各种命令 (Switchover/Takeover/Open force 等) ,并在必要时通知数据库实例执行相应的操作。
MAL_DW_PORT:守护进程监听端口,其他守护进程或监视器使用 MAL_HOST + MAL_DW_ PORT创建 TCP 连 接。监视器配置文件 dmmonitor.ini 中,MON_DW_ IP 就是一组 MAL_HOST: MAL_DW_PORT。
MAL_INST_DW_PORT:实例对守护进程的监听端口,守护进程使用 MAL_HOST + MAL_INST_DW_PORT 创建到实例的 TCP连接。
1.2主库节点初始化实例
按实际需要初始化实例:
本例只指定数据库存放路径、DB_NAME、INSTANCE_NAME,页大小为32k,其它参数使用默认值:
[dmdba@kylin bin]$ ./dminit path=/dm8/dmdata DB_NAME=CB INSTANCE_NAME=CB01 PORT_NUM=5800 page_size=32
启动主库验证实例能否正常启动,启动完成后退出。
[dmdba@kylin bin]$ ./dmserver /dm8/dmdata/CB/dm.ini
1.3注册服务并启动实例
[root@kylin dm8]# cd script/root/
[root@kylin root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/dmdata/CB/dm.ini -p CB
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceCB.service → /usr/lib/systemd/system/DmServiceCB.service.
创建服务(DmServiceCB)完成
关闭DmServiceCB服务开机自启动
[root@kylin root]# systemctl disable DmServiceCB.service
Removed /etc/systemd/system/multi-user.target.wants/DmServiceCB.service.
启动DmServiceCB服务
[dmdba@kylin bin]$ ./DmServiceCB start
Starting DmServiceCB:
[ OK ]
1.4启动归档模式
[dmdba@kylin bin]$ ./disql SYSDBA/SYSDBA:5800
服务器[LOCALHOST:5800]:处于普通打开状态
登录使用时间 : 3.788(ms)
disql V8
SQL> alter database mount;
操作已执行
已用时间: 2.191(毫秒). 执行号:0.
SQL> alter database archivelog;
操作已执行
已用时间: 4.864(毫秒). 执行号:0.
SQL> alter database add archivelog 'dest=/dmdata/arch,type=local,file_size=128,space_limit=0';
操作已执行
已用时间: 1.730(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 10.293(毫秒). 执行号:0.
SQL> select arch_mode from v$database;
行号 ARCH_MODE
---------- ---------
1 Y
已用时间: 0.891(毫秒). 执行号:501.
SQL>
1.5使用主库备份还原备库
1.主库创建备份目录
我的在 /dm8/dmdata/CB/CB_01(路劲自己创)
2.备份主库:
[dmdba@kylin bin]$ ./dmrman CTLSTMT="BACKUP DATABASE '/dm8/dmdata/CB/dm.ini' FULL TO CB_01 BACKUPSET '/dm8/dmdata/CB/back/CB_01'"
可以使用联机备份:
SQL> backup database full backupset '/dm8/dmdata/CB/back/CB_FULL_01';
3.主库备份后创建测试表:
创建测试表造数据
[dmdba@kylin bin]$ ./disql SYSDBA/SYSDBA:5800
服务器[LOCALHOST:5800]:处于普通打开状态
登录使用时间 : 3.480(ms)
disql V8
SQL> create tablespace susu datafile '/dm8/dmdata/CB/susu.DBF' size 128;
操作已执行
已用时间: 38.463(毫秒). 执行号:901.
SQL> create user ss identified by WYFwyf123 default tablespace susu;
操作已执行
已用时间: 12.860(毫秒). 执行号:902.
SQL> create table ss.ss(C1 INT, time datetime);
操作已执行
已用时间: 12.305(毫秒). 执行号:903.
SQL> insert into ss.ss values (1,sysdate);
影响行数 1
已用时间: 0.750(毫秒). 执行号:904.
SQL> commit;
操作已执行
已用时间: 1.261(毫秒). 执行号:905.
SQL> select * from ss.ss;
行号 C1 TIME
---------- ----------- --------------------------
1 1 2024-06-05 16:00:28.000000
已用时间: 1.171(毫秒). 执行号:906.
4.到备库上创建备份目录和数据库文件目录:
mkdir -p /dm8/back
5.主备上拷贝备份到备库
[dmdba@kylin bin]$ scp -r /dm8/dmdata/CB/back/CB_FULL_01// 192.168.23.177:/dm8/back
Authorized users only. All activities may be monitored and reported.
dmdba@192.168.23.177's password:
CB_FULL_01.meta 100% 98KB 39.5MB/s 00:00
CB_FULL_01.bak 100% 25MB 148.4MB/s 00:00
1.6初始化备库实例
[dmdba@kylin bin]$ ./dminit PATH=/dm8/dmdata DB_NAME=CB INSTANCE_NAME=CB02 PORT_NUM=5800 page_size=32
启动备库验证实例能否正常启动:
[dmdba@kylin bin]$ ./dmserver /dm8/dmdata/CB/dm.ini
注册服务并启动实例:
[root@kylin dm8]# cd script/root/
[root@kylin root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/dmdata/CB/dm.ini -p CB
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceCB.service → /usr/lib/systemd/system/DmServiceCB.service.
创建服务(DmServiceCB)完成
关闭DmServiceCB服务开机自启动
[root@kylin root]# systemctl disable DmServiceCB.service
Removed /etc/systemd/system/multi-user.target.wants/DmServiceCB.service.
启动DmServiceCB服务
[dmdba@kylin bin]$ DmServiceCB start
Starting DmServiceCB:
[ OK ]
开启归档模式
[dmdba@kylin bin]$ ./disql SYSDBA/SYSDBA:5800
服务器[LOCALHOST:5800]:处于普通打开状态
登录使用时间 : 3.992(ms)
disql V8
SQL> alter database mount;
操作已执行
已用时间: 2.242(毫秒). 执行号:0.
SQL> alter database add archivelog 'DEST=/dmdata/arch,type=local,FILE_SIZE=128,space_limit=0';
操作已执行
已用时间: 1.721(毫秒). 执行号:0.
SQL> alter database archivelog;
操作已执行
已用时间: 6.216(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 6.914(毫秒). 执行号:0.
SQL> select arch_mode from v$database;
行号 ARCH_MODE
---------- ---------
1 Y
已用时间: 1.151(毫秒). 执行号:501.
1.7备库还原
[dmdba@kylin bin]$ cd /dm8/bin
[dmdba@kylin bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdata/CB/dm.ini' FROM BACKUPSET '/dm8/back/CB_FULL_01'"
[dmdba@kylin bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/CB/dm.ini' FROM BACKUPSET '/dm8/back/CB_FULL_01'"
[dmdba@kylin bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdata/CB/dm.ini' UPDATE DB_MAGIC"
1.8修改主备的 dm.ini 参数
修改主备库参数,注意 2 个库的 instance_name 参数不同。
INSTANCE_NAME = CB01
PORT_NUM = 5800 #数据库实例监听端口
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
1.9配置主备库 dmmal.ini 文件
主备库编辑dmmal.ini文件:集群中所有节点内容必须一致。
vi dmmal.ini
添加内容:
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = CB01 #与dm.ini中的INSTANCE_NAME一致
MAL_HOST = 192.168.23.166 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5338 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.23.166 #实例的对外服务 IP 地址
MAL_INST_PORT = 5800 # 实例的对外服务端口, 和dm.ini 中的 PORT_NUM
一致
MAL_INST_DW_PORT = 5337 #实例监听守护进程TCP 连接的端口
MAL_DW_PORT = 5339 #实例对应的守护进程监听 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME=CB02 #实例名,和dm.ini中 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.23.177 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5338 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.23.177 #实例的对外服务 IP 地址
MAL_INST_PORT = 5800 # 实例的对外服务端口, 和dm.ini 中的 PORT_NUM
一致
MAL_INST_DW_PORT = 5337 #实例监听守护进程TCP 连接的端口
MAL_DW_PORT = 5339 #实例对应的守护进程监听 TCP 连接的端口
1.10配置主备库的归档 dmarch.ini 文件
主库的:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = CB02 #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 Mb ,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 Mb ,0 表示无限制,范围 1024~4294967294M
1.11主备库配置守护进程
编辑数据守护配置文件:
vi dmwatcher.ini
添加内容:
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #手动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 20220608 #守护系统唯一OGUID值
INST_INI = /dm8/dmdata/CB/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭
1.12以 mount 模式启动主备库
[dmdba@kylin bin]$ ./dmserver /dm8/dmdata/CB/dm.ini mount
[dmdba@kylin bin]$ ./dmserver /dm8/dmdata/CB/dm.ini mount
1.13设置 OGUID 并修改主备库模式
启动主备库到mount,设置oguid,修改数据库模式
主库:
[dmdba@kylin bin]$ ./disql SYSDBA/SYSDBA:5800
服务器[LOCALHOST:5800]:处于普通配置状态
登录使用时间 : 3.646(ms)
disql V8
SQL> sp_set_oguid(20220610);
修改为主库模式:
SQL> alter database primary;
备库:
[dmdba@kylin bin]$ ./disql SYSDBA/SYSDBA:5800
服务器[LOCALHOST:5800]:处于普通配置状态
登录使用时间 : 3.358(ms)
disql V8
SQL> sp_set_oguid(20220610);
修改为备库模式
SQL> alter database standby;
1.14配置监控器
本例为自动切换需要配置确认监视器dmmonitor.ini文件(确认监视器只能配一个,一般选择主备库以外的其他机器,安装了达梦服务端的即可),其中 MON_DW_IP中的IP和PORT和dmmal.ini中的MAL_HOST和MAL_DW_PORT配置项保持一致。
vi dmmonitor.ini
添加内容:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dm8/data/DAMENG/log/ #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 20220610 #组 GRP1的唯一OGUID值
MON_DW_IP = 192.168.23.166:5339
MON_DW_IP = 192.168.23.177:5339
1.15启动数据守护和监控器
数据守护
主备库启动守护进程:(会自动启动数据库)
[dmdba@kylin bin]$ ./dmwatcher /dm8/dmdata/CB/dmwatcher.ini
[dmdba@kylin bin]$ ./dmwatcher /dm8/dmdata/CB/dmwatcher.ini
监控器
[dmdba@kylin bin]$ ./dmmonitor /dm8/data/SUSU/dmmonitor.ini
都要open状态才成功,感谢观看!