DM8主备集群搭建
1 安装环境
- 操作系统:CentOS Linux release 7.9.2009 x64
- 硬盘空间:20G
- 软件版本:DM8企业版
1.1 服务器信息
IP地址 | 节点类型 | 操作系统 | 备注 |
---|---|---|---|
192.168.11.131 | Primary | CentOS Linux release 7.9.2009 x64 | 主节点 |
192.168.11.132 | Standby | CentOS Linux release 7.9.2009 x64 | 备节点 |
192.168.11.139 | Monitor | CentOS Linux release 7.9.2009 x64 | 确认监视器 |
1.2 节点配置信息
组名/实例 | MAL_HOST/ MAL_INST_ | MAL_PORT | MAL_INST_PORT | MAL_DW_PORT | MAL_INST_DW_PORT |
---|---|---|---|---|---|
DMDW.DW1 | 192.168.11.131 | 11131 | 5236 | 51131 | 61131 |
DMDW.DW2 | 192.168.11.132 | 11132 | 5236 | 51132 | 61132 |
2 安装前准备
2.1 安装DM8并初始化
略
2.2 准备初始化数据
2.2.1 物理备份初始数据库
# 联机、脱机均可
[dmdba@localhost ~]$ dmrman ctlstmt="backup database '/opt/dmdb/data/DAMENG/dm.ini' backupset '/opt/dmdb/dwbak_2022-01-07'"
[dmdba@localhost ~]$ scp -r /opt/dmdb/dwbak_2022-01-07 root@192.168.11.131:/opt/dmdb/
[dmdba@localhost ~]$ scp -r /opt/dmdb/dwbak_2022-01-07 root@192.168.11.132:/opt/dmdb/
# 主从节点服务器上将备份集目录权限设置为dmdba
[root@localhost ~]# chown -R dmdba:dminstall /opt/dmdb/dwbak_2022-01-07/
# 主从节点服务器上还原同一备份集
[root@localhost ~]# su - dmdba
[dmdba@localhost ~]$ dmrman ctlstmt="restore database '/opt/dmdb/data/DAMENG/dm.ini' from backupset '/opt/dmdb/dwbak_2022-01-07'"
# 热备需要recover
[dmdba@localhost ~]$ dmrman ctlstmt="recover database '/opt/dmdb/data/DAMENG/dm.ini' from backupset '/opt/dmdb/dwbak_2022-01-07'"
# 更新用于区分不同节点的数据库魔数
[dmdba@localhost ~]$ dmrman ctlstmt="recover database '/opt/dmdb/data/DAMENG/dm.ini' update db_magic"
2.3 主备节点服务器
2.3.1 主备设置全局配置 — dm.ini
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dm.ini
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
2.3.2 主节点设置归档配置 — dmarch.ini
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARC_TL]
ARCH_TYPE = TIMELY
ARCH_DEST = DW2
[ARC_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdb/data/DAMENG/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 204800
2.3.3 备节点设置归档配置 — dmarch.ini
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARC_TL]
ARCH_TYPE = TIMELY
ARCH_DEST = DW1
[ARC_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdb/data/DAMENG/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 204800
2.3.4 主备均设置通信配置 — dmmal.ini
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = DW1
MAL_HOST = 192.168.11.131
MAL_PORT = 11131
MAL_INST_HOST = 192.168.11.131
MAL_INST_PORT = 5236
MAL_DW_PORT = 51131
MAL_INST_DW_PORT = 61131
[MAL_INST2]
MAL_INST_NAME = DW2
MAL_HOST = 192.168.11.132
MAL_PORT = 11132
MAL_INST_HOST = 192.168.11.132
MAL_INST_PORT = 5236
MAL_DW_PORT = 51132
MAL_INST_DW_PORT = 61132
2.3.5 主备均设置守护配置 — dmwatcher.ini
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dmwatcher.ini
[DMDW]
DW_TYPE = GLOBA
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 654321
INST_INI = /opt/dmdb/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /opt/dmdb/dmdbms/bin/dmserver
2.3.6 主节点注册数据库、守护服务
# 注意:注册服务需要root权限
[root@localhost ~]# /opt/dmdb/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dmdb/data/DAMENG/dm.ini -p DW1
[root@localhost ~]# /opt/dmdb/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dmdb/data/DAMENG/dmwatcher.ini -p DW1
2.3.7 备节点注册数据库、守护服务
[root@localhost ~]# /opt/dmdb/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dmdb/data/DAMENG/dm.ini -p DW2
[root@localhost ~]# /opt/dmdb/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dmdb/data/DAMENG/dmwatcher.ini -p DW2
2.3.8 主备节点数据库以mount启动
[dmdba@localhost ~]$ /opt/dmdb/dmdbms/bin/DmServiceDW1 start mount
[dmdba@localhost ~]$ /opt/dmdb/dmdbms/bin/DmServiceDW2 start mount
2.3.9 设置主节点OGUID和模式
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(654321);
SQL> alter database primary;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.3.10 设置备节点OGUID和模式
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(654321);
SQL> alter database standby;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.3.11 启动主备守护服务(进程)
# 131节点
[dmdba@localhost ~]$ /opt/dmdb/dmdbms/bin/DmWatcherServiceDW1 start
# 132节点
[dmdba@localhost ~]$ /opt/dmdb/dmdbms/bin/DmWatcherServiceDW2 start
2.4 监视器服务器
2.4.1 设置监视器配置 — dmmonitor.ini
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dmmonitor.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /opt/dmdb/data/DAMENG/log/monitor
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[DMDW]
MON_INST_OGUID = 654321
MON_DW_IP = 192.168.11.131:51131
MON_DW_IP = 192.168.11.132:51132
2.4.2 注册监控服务
[root@localhost ~]# /opt/dmdb/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini /opt/dmdb/data/DAMENG/dmmonitor.ini -p MT
2.4.3 启动监视器服务
[dmdba@localhost ~]$ /opt/dmdb/dmdbms/bin/DmMonitorServiceMT start
2.5 功能测试
2.5.1 数据同步
2.5.1.1 主节点写入数据
SQL> CREATE USER "TEST" IDENTIFIED BY testuserpwd;
SQL> CREATE TABLE "TEST"."USERS"("ID" INT IDENTITY(1, 1) NOT NULL, "USERNAME" VARCHAR(50) );
SQL> insert into "TEST"."USERS"("USERNAME") VALUES ("jc");
SQL> commit;
2.5.1.2 备节点查询数据
SQL> select * from test.users;
2.5.2 自动接管
2.5.2.1 模拟主节点网络故障
# 主节点服务器
[root@localhost ~]# service network stop
# 原备节点服务器
[root@localhost ~]# su - dmdba
Last login: Thu Jan 6 23:45:06 CST 2022 on pts/1
-bash-4.2$ disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于主库打开状态
2.5.2.2 模拟主节点网络恢复
# 原主节点服务器
[root@localhost ~]# service network start
# 检测原主节点是否重新已备库加入
[root@localhost ~]# su - dmdba
Last login: Fri Jan 7 02:59:36 CST 2022 on pts/0
-bash-4.2$ disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于备库打开状态
2.5.3 手动切换
2.5.3.1 登陆监视器
[dmdba@localhost ~]$ vim /opt/dmdb/data/DAMENG/dmmonitor_normal.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /opt/dmdb/data/DAMENG/log/monitor
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[DMDW]
MON_INST_OGUID = 654321
MON_DW_IP = 192.168.11.131:51131
MON_DW_IP = 192.168.11.132:51132
# 登陆监视器
[dmdba@localhost ~]$ dmmonitor /opt/dmdb/data/DAMENG/dmmonitor_normal.ini
login
用户名:
密码:
[monitor] 2022-01-07 15:24:36: 登录监视器成功!
2.5.3.2 选择可切换为主库的节点
choose switchover
Can choose one of the following instances to do switchover:
1: DW1
2.5.3.3 手动切换主节点
switchover dw1
[monitor] 2022-01-07 15:24:45: 开始切换实例DW1……
2.5.4 读写分离
2.5.4.1 配置客户端服务名
[dmdba@localhost ~]$ vim /etc/dm_svc.conf
dmdw=(192.168.11.132:5236,192.168.11.131:5236)
RW_SEPARATE=(1)
2.5.4.2 使用服务名登陆
[dmdba@localhost ~]$ disql SYSDBA/SYSDBA@dmdw
服务器[192.168.11.131:5236]:处于主库打开状态 <----- 由此提示符可知,disql默认首先连接到了主库(为了路由分发可用备库)
SQL> select instance_name,host_name,STATUS$,MODE$ from v$instance;
行号 INSTANCE_NAME HOST_NAME STATUS$ MODE$
---------- ------------- --------- ------- -------
1 DW2 dmdw2 OPEN STANDBY <------ 只读查询默认被分配到了备份
SQL> select * from test.users limit 1 for update; <------ 使用for update语句指示该查询是为了修改而读取
行号 ID USERNAME
---------- ----------- --------
1 1 jc
SQL> select instance_name,host_name,STATUS$,MODE$ from v$instance;
行号 INSTANCE_NAME HOST_NAME STATUS$ MODE$
---------- ------------- --------- ------- -------
1 DW1 dmdw1 OPEN PRIMARY <------ 未commit之前再次查询当前实例可知,该连接仍是连接的主库
SQL> commit;
SQL> select instance_name,host_name,STATUS$,MODE$ from v$instance;
行号 INSTANCE_NAME HOST_NAME STATUS$ MODE$
---------- ------------- --------- ------- -------
1 DW2 dmdw2 OPEN STANDBY <------ commit之后再次查询当前实例可知,该连接已将只读查询再次分发到备库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义