类似于在linux环境下进行单机部署前的检查:检查操作系统版本、CPU类型是否与达梦数据库安装包保持一致。若不一致,将会导致数据库安装失败。
首先介绍心跳网络和MAL通讯系统:
心跳网络(Heartbeat Network)是分布式系统、网络通信或高可用性架构中用于维持连接活性、实时监测节点状态的底层通信机制。其核心目的是通过周期性的信号交换(即“心跳包”),确保各方确认彼此在线,并及时发现连接中断或节点故障。
MAL通讯系统是达梦数据库实现的基于TCP协议的内部高速通信机制,主要用于实例间的Redo日志传输和消息通讯。其核心特性包括:
MAL_CHECK_INTERVAL
:链路检测间隔(默认30s);MAL_CONN_FAIL_INTERVAL
:链路断开判定时间(默认10s);MAL_BUF_SIZE
:单缓存大小限制(默认100MB);MAL_MESSAGE_CHECK
:消息体校验开关(默认开启);配置时需在所有节点保持DMMAL.INI文件一致性,通过MAL_INI=1
参数启用系统。其性能直接影响集群的故障切换响应速度和数据一致性保障能力。
心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影响 mal 系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。
本次实验环境搭建一主一备集群,服务器IP和端口规划如下:
类别 | 实例名 | MAL_INST_HOST | MAL_HOST | PORT_NUM | MAL_PORT | MAL_DW_PORT | MAL_INST_DW_PORT |
---|---|---|---|---|---|---|---|
主库 | GRP1_RT_01 | 192.168.1.101 | 10.0.0.1 | 9001 | 10001 | 11001 | 12001 |
备库 | GRP1_RT_02 | 192.168.1.102 | 10.0.0.1 | 9002 | 10002 | 11002 | 12002 |
MAL_HOST:MAL IP地址;
MAL_INST_HOST:实例对外服务的 IP 地址。若 dm.ini 中配置了 LISTEN_IP,MAL_INST_HOST 必须与 LISTEN_IP 保持一致;
PORT_NUM:数据库实例端口;
MAL_PORT:MAL 监听端口;
MAL_DW_PORT:MAL_INST_NAME 实例守护进程的监听端口;
MAL_INST_DW_PORT:节点实例监听守护进程的端口;
如果是在一台虚拟机上进行的试验环境搭建,需要设置虚拟业务IP和心跳IP:
主库
ip addr add 192.168.1.101/24 dev lo label lo:0 # 业务IP
ip addr add 10.0.0.1/24 dev lo label lo:1 # 心跳IP
备库
ip addr add 192.168.1.102/24 dev lo label lo:0 # 业务IP
ip addr add 10.0.0.2/24 dev lo label lo:1 # 心跳IP
数据安装目录可以自行规划。
使用命令行方式安装,过程和在linux环境下进行单机部署一致,在此不再赘述。
部分步骤会需要root权限,遇到权限不够的问题切换root即可。
主库:
/opt/dm/bin/dminit PATH=/opt/dameng DB_NAME=DataWatch_01 INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=123456Aa SYSAUDITOR_PWD=123456Bb PORT_NUM=9001
备库:
/opt/dm/bin/dminit PATH=/opt/dameng DB_NAME=DataWatch_02 INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=123456Aa SYSAUDITOR_PWD=123456Bb PORT_NUM=9002
这里暂时不注册数据库服务,实例初始化后以前台方式启动一次主库实例进程:
/opt/dm/bin/dmserver /opt/dameng/DataWatch_01/dm.ini
;
等到出现SYSTEM IS READY
即可,然后输入EXIT
退出进程。
主库与备库同时创建备份路径,主库执行rman备份,拷贝备份文件至备库服务器:
/opt/dm/bin/dmrman use_ap=2
;
backup database '/opt/dameng/DataWatch_01/dm.ini' backupset '/opt/dameng/DataWatch_01/bak/fullbak'
;
如果实验环境使用了两台分离的服务器或主机,需要使用scp命令传输命令,例如:scp D:\file_name.iso dmdba@ip_address:/home/dmdba/
;
如果在一台机器上部署,下一步直接读备份文件即可。
在备机上,使用dmrman工具还原备库:
restore database '/opt/dameng/DataWatch_02/dm.ini' from backupset '/opt/dameng/DataWatch_01/bak/fullbak';
recover database '/opt/dameng/DataWatch_02/dm.ini' from backupset '/opt/dameng/DataWatch_01/bak/fullbak';
recover database '/opt/dameng/DataWatch_02/dm.ini' update db_magic;
修改dm.ini配置
vim /opt/dameng/DataWatch_01/dm.ini
#修改以下参数
INSTANCE_NAME = GRP1_RT_01 #该参数应当正确
PORT_NUM = 9001 #该参数应当正确
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
配置dmarch.ini
vim /opt/dameng/DataWatch_01/dmarch.ini
#创建此文件,并添加以下内容
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dameng/DataWatch_01/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 51200
配置dmmal.ini
vim /opt/dameng/DataWatch_01/dmmal.ini
#创建此文件,并添加以下内容
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 10.0.0.1 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 10001 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.1.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 9001 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 11001 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 12001 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.0.0.2
MAL_PORT = 10002
MAL_INST_HOST = 172.16.1.102
MAL_INST_PORT = 9002
MAL_DW_PORT = 11002
MAL_INST_DW_PORT = 12002
配置dmwatcher.ini
vim /opt/dameng/DataWatch_01/dmwatcher.ini
#创建此文件,并添加以下内容
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /opt/dameng/DataWatch_01/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dm/bin/DmDW01Service #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
启动主库为mount状态
/opt/dm/bin/dmserver /opt/dameng/DataWatch_01/dm.ini mount
等到出现SYSTEM IS READY
即可。
修改OGUID值&数据库状态
/opt/dm/bin/disql SYSDBA/123456Aa@localhost:9001
;
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
EXIT
备库的配置与主库的配置大致相同,仅有一些细节的不同。主要区别点在于部署位置是否是两台独立的机器还是位于一台机器上。
修改dm.ini配置
vim /opt/dameng/DataWatch_02/dm.ini
#修改以下参数
INSTANCE_NAME = GRP1_RT_02 #该参数应当正确
PORT_NUM = 9002 #该参数应当正确
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
配置dmarch.ini
vim /opt/dameng/DataWatch_02/dmarch.ini
#创建此文件,并添加以下内容
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dameng/DataWatch_02/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 51200
配置dmmal.ini
与主库配置完全一致。
vim /opt/dameng/DataWatch_02/dmmal.ini
#创建此文件,并添加以下内容
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 10.0.0.1 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 10001 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.1.101 #实例的对外服务 IP 地址
MAL_INST_PORT = 9001 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 11001 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 12001 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 10.0.0.2
MAL_PORT = 10002
MAL_INST_HOST = 172.16.1.102
MAL_INST_PORT = 9002
MAL_DW_PORT = 11002
MAL_INST_DW_PORT = 12002
配置dmwatcher.ini
vim /opt/dameng/DataWatch_02/dmwatcher.ini
#创建此文件,并添加以下内容
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /opt/dameng/DataWatch_02/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dm/bin/DmDW02Service #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
启动主库为mount状态
/opt/dm/bin/dmserver /opt/dameng/DataWatch_02/dm.ini mount
等到出现SYSTEM IS READY
即可。
修改OGUID值&数据库状态
/opt/dm/bin/disql SYSDBA/123456Aa@localhost:9002
;
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
EXIT
由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。
修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。
mkdir -p /opt/dm/bin/log
;
vim /opt/dm/bin/dmmonitor_auto.ini
;
#创建此文件,并添加以下内容
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /opt/dm/bin/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 10.0.0.1:11001 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 10.0.0.2:11002
vim /opt/dm/bin/dmmonitor_manual.ini
;
#创建此文件,并添加以下内容
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = /opt/dm/bin/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 0 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 10.0.0.1:11001 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 10.0.0.2:11002
前面配置oguid&状态时数据库实例已处于mount状态,所以在这里配置结束就不再重新启动实例。
前台启动方法:
启动主库实例:
./dmserver /opt/dameng/DataWatch_01/dm.ini mount
启动备库实例:
./dmserver /opt/dameng/DataWatch_02/dm.ini mount
启动主库守护进程:
./dmwatcher /opt/dameng/DataWatch_01/dmwatcher.ini
启动备库守护进程:
./dmwatcher /opt/dameng/DataWatch_02/dmwatcher.ini
启动监视器:
./dmmonitor dmmonitor_manual.ini
停止前台启动的集群:
停止监视器:exit
停止备库守护进程:exit
停止主库守护进程:exit
停止主库实例:exit
停止备库实例:exit
注册服务参数说明:
主库注册实例服务:
#在bin文件夹下执行
cp service_template/DmService DmDW01Service
vim DmDW01Service
INI_PATH=/opt/dameng/DataWatch_01/dm.ini
主库注册守护进程服务:
cd /opt/dm/script/root
./dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dameng/DataWatch_01/dmwatcher.ini -p GRP1_RT_01
备库注册服务:
#在bin文件夹下执行
cp service_template/DmService DmDW02Service
vim DmDW02Service
INI_PATH=/opt/dameng/DataWatch_02/dm.ini
备库注册守护进程服务:
cd /opt/dm/script/root
./dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dameng/DataWatch_02/dmwatcher.ini -p GRP1_RT_02
注册监视器服务:
cd /opt/dm/script/root
./dm_service_installer.sh -t dmmonitor -monitor_ini /opt/dm/bin/dmmonitor_auto.ini -p GRP1
启动过程:
主库实例:
/opt/dm/bin/DmDW01Service start mount
备库实例:
/opt/dm/bin/DmDW02Service start mount
主库守护进程:
/opt/dm/bin/DmWatcherServiceGRP1_RT_01 start
备库守护进程:
/opt/dm/bin/DmWatcherServiceGRP1_RT_02 start
确认监视器:
/opt/dm/bin/DmMonitorServiceGRP1 start
若是要查看监视器监视的主备信息,则需关闭确认监视器的后台服务进程,然后前台启动(确认监视器只能打开一个,输入help可以查看监视器指令内容):
./dmmonitor dmmonitor_manual.ini
停止顺序:
确认监视器:
/opt/dm/bin/DmMonitorServiceGRP1 stop
备库守护进程:
/opt/dm/bin/DmWatcherServiceGRP1_RT_02 stop
主库守护进程:
/opt/dm/bin/DmWatcherServiceGRP1_RT_01 stop
主库实例:
/opt/dm/bin/DmDW01Service stop
备库实例:
/opt/dm/bin/DmDW02Service stop
查看dmserver进程:
ps -ef|grep dmserver
;
查看dmwatcher进程:
ps -ef|grep dmwatcher
;
主备启停顺序要严格按照下面的顺序依次进行:
主备启动:实例服务(先主后备) – 守护进程服务(先主后备) – 确认监视器;
主备停止:确认监视器 – 守护进程服务(先备后主) – 实例服务(先主后备);
前台启动监视器后,输入show
命令或tip
命令查看集群状态:
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 REALTIME,归档状态 RSTAT 为VALID。
主库和备库状态也可用disql工具登录后查看:
登录主备库:
/opt/dm/bin/disql SYSDBA/123456Aa@localhost:9001
/opt/dm/bin/disql SYSDBA/123456Aa@localhost:9002
查询:
select instance_name,status$,mode$ from V$instance;
select file_lsn,cur_lsn,n_magic,db_magic from v$rlog;
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
create table t1(id int);
insert into t1 values(1);
insert into t1 values(2);
commit;
exit
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
select * from t1;
查看数据是否正常同步。
文章
阅读量
获赞