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之后再次查询当前实例可知,该连接已将只读查询再次分发到备库

https://eco.dameng.com

posted @   大龄骑手兼码农  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示