DM8在CentOS7搭建两节点实时主备集群

📅 2026/7/26 23:50:50 👁️ 阅读次数 📝 编程学习
DM8在CentOS7搭建两节点实时主备集群

任务:

1. 在一台服务器上部署两个节点的实时主备集群

2. 完成实时主备集群的配置与部署

3. 进行同步测试

4. 进行主备切换测试

5. 模拟主机故障,验证备机自动接管能力

6. 恢复故障主机,将其重新加入集群

7.进行TPCC测试

一、前期准备:

1.1 规划:

机器名

IP地址

库名

实例名

PORT

_NUM

MAL_INST

_DW_PORT

MAL_HOST

MAL_PORT

MAL_DW

_PORT

主库

192.168.200.254

DAVE

DAVE1

5236

33141192.168.200.2546114152141

备库

192.168.201.47

DAVE

DAVE2

5237

33142

192.168.201.476114252142

监视器

192.168.201.47

1.2 安装DM8

DM8在CentOS上的安装过程可参考这篇文章达梦数据库DM8——Centos7安装部署和基本操作-CSDN博客

#安装路径 /home/dmdba/dmdbms

1.3 路径准备:

# 创建数据目录和归档目录 mkdir -p /data/dmdata1 /data/dmdata2 /data/dmarch1 /data/dmarch2 /data/dmbackup /data/dmlog

二、搭建实时集群

2.1 初始化实例

注意:初始化实例的时候必须要设置SYSDBA和SYSAUDITOR的密码

2.1.1主库初始化实例:

# 主库初始化实例命令 # PATH: 数据库文件存放路径 # DB_NAME: 数据库名称 # INSTANCE_NAME: 实例名称 # PORT_NUM: 数据库监听端口 # SYSDBA_PWD: SYSDBA用户密码 # SYSAUDITOR_PWD: SYSAUDITOR用户密码 ./dminit PATH=/data/dmdata1 DB_NAME=DAVE INSTANCE_NAME=DAVE1 PORT_NUM=5236 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

2.1.2 备库初始化实例

# 备库初始化实例命令 # PATH: 数据库文件存放路径 # DB_NAME: 数据库名称 # INSTANCE_NAME: 实例名称 # PORT_NUM: 数据库监听端口(与主库不同) # SYSDBA_PWD: SYSDBA用户密码 # SYSAUDITOR_PWD: SYSAUDITOR用户密码 ./dminit PATH=/data/dmdata2 DB_NAME=DAVE INSTANCE_NAME=DAVE2 PORT_NUM=5237 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

2.2 启动主库数据库

使用dmserver 启动数据库,在DM 数据库第一次必须正常启动,完成初始化的动作:

# 启动主库数据库服务 # /data/dmdata1/DAVE/dm.ini: 主库配置文件路径 ./dmserver /data/dmdata1/DAVE/dm.ini

2.3 设置主库为归档方式

克隆一个窗口设置主库为归档方式。

-- 设置数据库为归档模式 SQL> alter database mount; -- 将数据库挂载到mount状态 SQL> alter database archivelog; -- 启用归档模式 SQL> alter database add archivelog 'DEST=/data/dmarch1,TYPE=local,FILE_SIZE=128,space_limit=0'; -- 添加本地归档配置 SQL> alter database open; -- 打开数据库 SQL> select arch_mode from v$database; -- 查询归档模式状态

2.4 主库启动脱机备份

Ctrl+C停止主库

# 切换到dmdba用户 su - dmdba # 启动dmrman工具 ./dmrman # 执行脱机备份,备份主库数据库 backup database '/data/dmdata1/DAVE/dm.ini' full backupset '/data/dmbackup/DAVE_bak01';

2.5 在备库恢复数据库

# 在备库恢复数据库 restore database '/data/dmdata2/DAVE/dm.ini' from backupset '/data/dmbackup/DAVE_bak01'; -- 从备份集恢复数据库 recover database '/data/dmdata2/DAVE/dm.ini' from backupset '/data/dmbackup/DAVE_bak01'; -- 恢复数据库日志 recover database '/data/dmdata2/DAVE/dm.ini' update db_magic; -- 更新数据库魔数,完成恢复

2.6 修改配置参数

2.6.1 修改主备库dm.ini

# dm.ini 配置文件参数说明 INSTANCE_NAME = DAVE1 # 实例名称(主库为DAVE1,备库为DAVE2) #INSTANCE_NAME = DAVE2 # 备库实例名称(注释掉主库的,启用备库的) PORT_NUM = 5236 # 数据库实例监听端口 ALTER_MODE_STATUS = 0 # 不允许手工方式修改实例模式/状态 ENABLE_OFFLINE_TS = 2 # 不允许备库OFFLINE表空间 MAL_INI = 1 # 打开MAL(Message Access Layer)系统 ARCH_INI = 1 # 打开归档配置

2.6.2 修改主备库dmarch.ini

2.6.2.1 修改主库dmarch.ini
# 主库归档配置文件 dmarch.ini [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME # 实时归档类型 ARCH_DEST = DAVE2 # 归档目标为备库DAVE2 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL # 本地归档类型 ARCH_DEST = /data/dmarch1 # 本地归档目录 ARCH_FILE_SIZE = 2048 # 单个归档文件大小(单位:MB) ARCH_SPACE_LIMIT = 51200 # 归档空间限制(单位:MB)
2.6.2.2 修改备库dmarch.ini
[ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME ARCH_DEST = DAVE2 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dmarch1 ARCH_FILE_SIZE = 2048 ARCH_SPACE_LIMIT = 51200

2.6.3 修改主备库dmmal.ini

主备库dmmal.ini一致

vi /data/dmdata1/DAVE/dmmal.ini vi /data/dmdata2/DAVE/dmmal.ini
MAL_CHECK_INTERVAL = 10 MAL_CONN_FAIL_INTERVAL = 10 [MAL_INST1] MAL_INST_NAME = DAVE1 MAL_HOST = 192.168.200.254 MAL_PORT = 61141 MAL_INST_HOST = 192.168.200.254 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 33141 [MAL_INST2] MAL_INST_NAME = DAVE2 MAL_HOST = 192.168.201.47 MAL_PORT = 61142 MAL_INST_HOST = 192.168.201.47 MAL_INST_PORT = 5237 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142

2.6.4 修改主备库dmwatcher.ini

2.6.4.1 修改主库dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 10 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 10 INST_OGUID = 453331 INST_INI = /data/dmdata1/DAVE/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0
2.6.4.2 修改备库dmwatcher.ini
[GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO DW_ERROR_TIME = 10 INST_RECOVER_TIME = 60 INST_ERROR_TIME = 10 INST_OGUID = 453331 INST_INI = /data/dmdata2/DAVE/dm.ini INST_AUTO_RESTART = 1 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver RLOG_SEND_THRESHOLD = 0 RLOG_APPLY_THRESHOLD = 0

2.6.5 修改监视器配置文件

/data/dmmonitor.ini(放在任意位置,此处为 /data/dmmonitor.ini):

MON_DW_CONFIRM = 1 MON_LOG_PATH = /data/dmlog MON_LOG_INTERVAL = 60 [GRP1] MON_INST_OGUID = 453331 MON_DW_IP = 192.168.200.18:52141 MON_DW_IP = 192.168.201.90:52142

2.7 以mount方式启动主库和备库

启动后另开终端进行其他命令的输入

./dmserver /data/dmdata1/DAVE/dm.ini mount ./dmserver /data/dmdata2/DAVE/dm.ini mount

chown -R dmdba:dmdba /data/dmarch1

chmod -R 700 /data/dmarch1

2.8 设置OGUID

2.8.1 主库设置OGUID,改变数据库模式为primary模式

./disql SYSDBA/Dameng123@localhost:5236 SP_SET_OGUID(453331); ALTER DATABASE PRIMARY;

2.8.2 备库设置OGUID,改变数据库模式为standby模式

./disql SYSDBA/Dameng123@localhost:5237 SP_SET_OGUID(453331); ALTER DATABASE STANDBY;

注意:守护进程若开启,则数据库状态不能手动修改了

2.9 开启守护进程

2.9.1 启动主库守护进程

./dmwatcher /data/dmdata1/DAVE/dmwatcher.ini

2.9.2 启动备库守护进程

./dmwatcher /data/dmdata2/DAVE/dmwatcher.ini

2.10 开启确认监视器

另开一个终端,开启确认监视器

注意:确认监视器可以起一个,非确认监视器可以起多个,由于我们在监视器配置文件里设置MON_DW_CONFIRM = 1,因此为确认监视器;非确认监视器MON_DW_CONFIRM = 0

./dmmonitor /data/dmmonitor.ini

三、结果测试

3.1 同步测试

主库基于系统内置视图SYSOBJECTS创建一张普通业务表t_objects,自动复制所有数据与字段结构。然后统计表数据量

./disql SYSDBA/Dameng123@192.168.200.254:5236 SQL> create table t_objects as select * from sysobjects; SQL> select count(*) from t_objects;

备库能查询到主库插入的数据

./disql SYSDBA/Dameng123@192.168.201.47:5237 SQL> select count(*) from t_objects;

3.2 主备库切换测试

在监视器中输入如下命令将DAVE2切换为主库

切换成功,现在主库为DAVE2

3.3 模拟主机故障——现在主库为DAVE2

ctrl C关停主库实例

注意:要用确认监视器进行观察

如果用的不是确认监视器则会出现下面的情况

注意:如果确认监视器也没有观察到自动接管,则有后台还有进程

ps -ef|grep dmserver kill -9 pid

把进程杀死后,DAVE1成功接管,成为主库:

注意:只要DAVE2的守护进程没有关,一旦检测到dmserver实例消失,则会立刻重启数据库至mount模式,因为我们的dmwatcher.ini配置:INST_AUTO_RESTART = 1

3.4 恢复故障主库,加入集群——现在主库为DAVE1,故障主库为DAVE2

预先准备:我们先停止DAVE2的守护进程Ctrl+C,再停止残余的DAVE2实例

重启实例

重启守护进程然后观察监视器

./dmwatcher /data/dmdata2/DAVE/dmwatcher.ini

四、使用Benchmarksql进行TPCC测试

4.1 准备BenchmarkSQL和JDK

在达梦的知识库里面下载Benchmarksql5.0安装包,将解压后的文件夹放到Linux的/home/TPCC文件夹下。

由于我们下载的是Benchmarksql5.0,所以需要安装V1.8以上的JDK

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /home/jdk/jdk1.8 vi /etc/profile #解压完成后配置环境变量

export JAVA_HOME=/home/jdk/jdk1.8/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

source /etc/profile java -version

4.2 将dm8的jdbc驱动放到lib目录下

cp /home/dmdba/dmdbms/drivers/jdbc/DmJdbcDriver8.jar /home/TPCC/benchmarksql-5.0/lib/

4.3 初始化数据库并新建测试专门用户

SQL>CREATE TABLESPACE TB_BENCHMARKSQL DATAFILE 'TB_BENCHMARKSQL01.dbf' SIZE 1024; SQL>CREATE USER "BENCHMARKSQL" IDENTIFIED BY "Dameng123" DEFAULT TABLESPACE "TB_BENCHMARKSQL"; SQL>GRANT DBA TO BENCHMARKSQL;

用户:BENCHMARKSQL 密码Dameng123

4.4 配置参数

配置文件props.dm,文件中必须配置的是:

1)数据库链接信息;

2)压测参数

  • warehouses: 被测仓库数(数据规模)
  • terminals: 并发数
  • runMins: 测试时间(分钟)

注意:terminals并发数不能大于 warehouses 仓库数量的十倍

给集群配置服务名

vi /etc/dm_svc.conf

TIME_ZONE=(480)

LANGUAGE=(EN) # 自定义集群服务名,填写所有主备节点地址

GRP_DW=(192.168.200.254:5236,192.168.201.47:5236)

[GRP_DW]

LOGIN_MODE=(1) # 1=仅连接主库(压测主备切换场景必选)

SWITCH_TIME=(3) # 节点遍历重试次数

SWITCH_INTERVAL=(500) # 探测间隔(ms)

vi props.dm

修改props.dm配置参数

conn=jdbc:dm://GRP_DW?rwSeparate=0

4.5 准备测试数据

4.5.1 建表

cd /home/TPCC/benchmarksql-5.0/run chmod u+x *.sh ./runSQL.sh props.dm tableCreates #这里的tableCreates是在run目录下的sql.dm目录下的,但不需要写路径,会自动识别

注意:要看一下建表语句后面是否加了using partition group TPCC_GROUP by(s_w_id);这样的语法。因为partition group(分区组)是达梦 DPC 分布式集群专用语法。所以我们在这里用的话就会报错

所以在执行建表语句要删除分区组语句(我试了一下就把那些语句删掉就可以了)。可以在linux里面用vi 进去删除。

4.5.2 数据装载

./runLoader.sh props.dm numWarehouses 10

注意:这里的仓库数与配置文件对应的参数值要一致

4.5.3 执行测试

#如果想要看测试日志的话就要 mkdir ./log ./runBenchmark.sh props.dm 2>&1 | tee ./log/tpcc_run.log #如果不想看日志的话就直接执行 ./runBenchmark.sh props.dm

tpmC:代表每分钟内系统处理的新订单个数

tpmTOTAL(TPS):代表每分钟内系统处理的事务总数

Transaction Count:事务总数

参数关系如下:

tpmC ≈ tpmTOTAL * 45%

Transaction Count = tpmTOTAL * runMins

后续可根据自己需求逐渐加大prod.dm配置文件中的并发度参数,并进行主备集故障测试。

如果还有其他问题,欢迎到达梦社区来提问~
社区地址:https://eco.dameng.com