当前位置: 首页 > news >正文

达梦主备集群部署

DM 数据守护(Data Watch)介绍

DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。达梦数据守护可快速恢复服务,只需数秒时间就可以将备库切换为主库对外提供数据库服务。

DM 数据守护提供多种解决方案,可以配置成实时主备、MPP主备、DMDSC主备或读写分离集群。

实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。主库修改数据产生的 Redo 日志,通过实时归档机制,在写入联机 Redo 日志文件之前发送到备库,实时备库通过重演 Redo 日志与主库保持数据同步。当主库出现故障时,备库在将所有 Redo 日志重演结束后,就可以切换为主库对外提供数据库服务。

MPP 主备就是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些实时主备系统一起构成了 MPP 主备系统。我们将一个 MPP 节点对应的主备系统称为一个数据守护组(Group),MPP 主备系统中各个数据守护组保持相对独立,当某个 MPP 主节点出现故障时,在其对应的数据守护组内挑选一个备库切换为主库后,就可以确保整个 MPP 集群的正常使用。

DMDSC 主备与单节点主备功能一致,DMDSC 主备支持 DMDSC 集群和单节点之间互为主备库,一般建议将 DMDSC 集群部署为主库,将单节点部署为备库。当 DMDSC 集群为主库时,DMDSC 集群控制节点收集所有节点的 Redo 日志发送到备库,备库严格按照各节点修改数据页的先后顺序重演 Redo 日志保持数据同步;当 DMDSC 集群为备库时,主库将 Redo 日志发送至 DMDSC 集群控制节点,DMDSC 集群控制节点重演 Redo 日志保持数据同步。

读写分离集群由一个主库以及一个或者多个配置了即时(Timely)归档或实时(Realtime)归档的备库组成,其主要目标是在保障数据库可用性基础上,实现读、写操作的自动分离,进一步提升数据库的业务支撑能力。读写分离集群通过配置事务一致模式保证主、备库数据一致性,并配合达梦数据库管理系统的各种接口(JDBC、DPI 等),将只读操作自动分流到备库,有效降低主库的负载,提升系统吞吐量。

DM 数据守护(DM Data Watch)的实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM 数据守护系统结构:主要由主库(Primary模式)、备库(Standby模式)、Redo 日志、Redo 日志传输、Redo 日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

系统特性:
完整功能的主库:主库提供完整的数据库服务,与普通单节点数据库相比,主要的功能限制包括:不支持修改表空间文件名、不支持修改 arch_ini 参数。

活动的备库:
基于独特的字典缓存技术和日志重演技术,备库在 Open 状态下执行数据同步,是真正意义上的热备库;在实现异地容灾的同时,用户可以只读访问备库,执行报表生成、数据备份等功能,减轻主库的系统负载,提高资源利用率。

多重数据保护:
每个备库都是一个完整的数据库备份,可以同时配置多个备库,为数据安全提供全方位的保护。

高可用性:
主库出现故障时,可以快速将备库切换为主库,继续提供数据库服务,确保数据库服务不中断。切换过程一般在数秒钟之内完成。


多种守护模式:
提供自动切换和手动切换两种守护模式,满足用户不同需求。其中,配置自动切换的前提是已经部署确认监视器。在提供第三方机器部署确认监视器情况下,可以配置为故障自动切换模式,主库出现故障时,系统自动将备库切换为主库对外提供数据库服务。

多种守护类型:
守护进程可以配置为全局守护(提供实时主备、MPP 主备、读写分离集群功能)或者本地守护,适应各种应用需求。

故障自动重连:
配置、使用连接服务名访问数据库,在发生主备库切换后,接口会自动将连接迁移到新的主库上。

故障库自动重加入:
主库故障,发生主备库切换。故障主库重启后,可以自动切换为 Standby 模式,作为备库重新加入数据守护系统。

历史数据自动同步:
故障备库恢复后,可以自动同步历史数据,无需用户干预,并在同步完成以后,自动恢复为可切换备库。

自动负载均衡:
配置读写分离集群,可以将只读操作分流到备库上执行,减轻主库访问压力,提高数据库系统的吞吐量。读写分离的过程由 JDBC 等接口配合服务器自动完成,无需用户干预,也不需要修改应用程序。


更多详情可参考官方文档介绍:https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-overview.html


达梦数据守护与读写分离集群的配置文件说明:
与 DM 数据守护相关的配置文件包括:
数据库配置文件 dm.ini
数据库控制文件 dm.ctl
MAL 配置文件 dmmal.ini
Redo 日志归档配置文件 dmarch.ini
守护进程配置文件 dmwatcher.ini
监视器配置文件 dmmonitor.ini
定时器配置文件 dmtimer.ini
MPP 控制文件 dmmpp.ctl 等等
其中,dmmpp.ctl 在 2.5.2 dmmpp.ctl 维护中介绍;dm.ctl 不需要用户修改,只要放在指定的目录即可。

各配置文件的存放路径:
dm.ini 存放目录没有限制,一般直接放在数据库目录中。
dmmal.ini、dmarch.ini、dmtimer.ini 存放目录由 dm.ini 的 CONFIG_PATH 配置项指定
dmwatcher.ini 存放目录没有限制,一般和 dm.ini 存放在同一个目录。
dmmonitor.ini 存放目录没有限制,一般和 dm.ini 存放在同一个目录。
dm.ctl 存放目录由 dm.ini 的 CTL_PATH 配置项指定。
dmmpp.ctl 存放目录由 dm.ini 的 SYSTEM_PATH 配置项指定。

更多内容(包括配置文件内的参数)可参考官方文档介绍:https://eco.dameng.com/document/dm/zh-cn/pm/configuration-description.html

达梦实时主备集群部署规划

IP规划:
主机名  服务IP       心跳IP          数据库名  实例名
dm01    192.168.100.44     192.168.100.44    testdb    dmsrv01
dm02      192.168.100.45     192.168.100.45    testdb      dmsrv02

节点1主机名设置:
hostnamectl set-hostname dm01
echo -e "192.168.100.44  dm01\n192.168.100.45  dm02" >> /etc/hosts

节点2主机名设置:
hostnamectl set-hostname dm02
echo -e "192.168.100.44  dm01\n192.168.100.45  dm02" >> /etc/hosts


端口规划:
实例名   实例端口  端口1  端口2   端口3
dmsrv01  5236      7336   7436    7536
dmsrv02  5236      7336   7436    7536

端口1:MAL系统监听TCP连接的端口
端口2:实例本地的守护进程监听TCP连接的端口
端口3:实例监听守护进程TCP连接的端口


用户&用户组规划:
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba


规划好存储dm数据库文件的目录
我这里放在/opt/dm/目录下(如果需要挂载单独的磁盘,提前挂载好,我这里忽略)
mkdir -p /opt/dm
mkdir -p /opt/dm/dmdbms      #数据库软件安装目录(安装目录必须是空目录才允许安装),我没有用/home/dmdba/dmdbms
mkdir -p /opt/dm/dmarch      #归档日志目录
mkdir -p /opt/dm/dmbak       #备份文件目录
chown -R dmdba:dinstall /opt/dm/
chmod -R 775 /opt/dm/

/opt/dm/dmdbms/data #数据库实例目录(该目录无需提前创建、数据库实例初始化时指定 PATH=/opt/dm/dmdbms/data 后、会自动创建目录)


DM8单机安装详细步骤可参考:https://blog.csdn.net/sunny05296/article/details/104639254

分别在2个节点上安装好DM8单机数据库软件以后(注意:单机安装时只安装完软件就切换过来、不进行数据库实例初始化和注册服务等操作),再进行主备集群的配置,继续往下操作:


主备集群的初始化数据库实例:

主节点:
cd /opt/dm/dmdbms/bin/
./dminit PATH=/opt/dm/dmdbms/data DB_NAME=testdb INSTANCE_NAME=dmsrv01 PORT_NUM=5236 CHARSET=1 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=1024

备节点:
cd /opt/dm/dmdbms/bin/
./dminit PATH=/opt/dm/dmdbms/data DB_NAME=testdb INSTANCE_NAME=dmsrv02 PORT_NUM=5236 CHARSET=1 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=1024


启动数据库实例:
注意:这里还没有注册服务(后面会注册服务)、先用 dmserver 启动


主节点前台方式启动数据库:
[root@dm01 bin]# dmserver /opt/dm/dmdbms/data/testdb/dm.ini
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 1-2-38-21.07.09-143359-10018-ENT  startup...
Normal of FAST
Normal of DEFAULT
......
pseg_crash_trx_rollback end
SYSTEM IS READY.

等待出现 SYSTEM IS READY 提示后表示启动成功。再手动输入 exit 退出停止数据库:

exit
Server is stopping...
listener closed  and all sessions disconnected
purge undo records in usegs...OK
......
shutdown dtype subsystem...OK
shutdown huge buffer and memory pools...OK
close lsnr socket
DM Database Server shutdown successfully.
[root@dm01 bin]# 


备节点前台方式启动数据库:
[root@dm02 bin]# dmserver /opt/dm/dmdbms/data/testdb/dm.ini
file dm.key not found, use default license!
version info: develop
DM Database Server x64 V8 1-2-38-21.07.09-143359-10018-ENT  startup...
Normal of FAST
Normal of DEFAULT
......
pseg_crash_trx_rollback end
SYSTEM IS READY.

等待出现 SYSTEM IS READY 提示后表示启动成功。再手动输入 exit 退出停止数据库:

exit
Server is stopping...
listener closed  and all sessions disconnected
purge undo records in usegs...OK
......
shutdown dtype subsystem...OK
shutdown huge buffer and memory pools...OK
close lsnr socket
DM Database Server shutdown successfully.
[root@dm02 bin]# 

脱机备份主库数据库:

在主节点 dm01 上执行以下命令,确认主库 dmap 服务已启动:
ps aux |grep dmap

DmAPService status

注意:如果 dmap 服务没有启动的话,需要先启动:DmAPService start


以 dmdba 用户启动 dmrman 工具
[root@dm01 bin]# su - dmdba
[dmdba@dm01 ~]$ dmrman use_ap=2
dmrman V8
RMAN> 

说明:use_ap=2 参数作用是在备份过程中不使用 DmAPservice 的插件服务


执行全库备份:
RMAN> backup database '/opt/dm/dmdbms/data/testdb/dm.ini' backupset '/home/dmdba/testdb_fullback';


备份还原备库
主节点退出 RMAN、并将备份的文件 /home/dmdba/testdb_fullback 从主库拷贝到备节点所在服务器上:
RMAN> exit
[dmdba@dm01 ~]$ 
[dmdba@dm01 ~]$ ls -l
total 0
drwxr-xr-x 2 dmdba dinstall 61 Mar 10 16:49 testdb_fullback
[dmdba@dm01 ~]$ scp -r testdb_fullback dmdba@dm02:/home/dmdba/


在备节点上操作,使用以 dmdba 用户操作、使用 dmrman 工具还原备库:
[root@dm02 bin]# su - dmdba
Last login: Mon Mar 10 16:56:32 CST 2025 on pts/0

进入rman
[dmdba@dm02 ~]$ dmrman
dmrman V8
RMAN> 

执行 restore 命令
RMAN> restore database '/opt/dm/dmdbms/data/testdb/dm.ini' from backupset '/home/dmdba/testdb_fullback';
restore database '/opt/dm/dmdbms/data/testdb/dm.ini' from backupset '/home/dmdba/testdb_fullback';
file dm.key not found, use default license!
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]Normal of FAST                     
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:02.475
RMAN> 

继续执行 recover 命令
RMAN> recover database '/opt/dm/dmdbms/data/testdb/dm.ini' from backupset '/home/dmdba/testdb_fullback';

最后执行命令更新 db_magic 值:
RMAN> recover database '/opt/dm/dmdbms/data/testdb/dm.ini' update db_magic;

退出rman
RMAN> exit

修改dm.ini参数(主备节点都要修改):

修改主库的dm.ini参数:
vi /opt/dm/dmdbms/data/testdb/dm.ini

INSTANCE_NAME = DMSRV01
MAL_INI = 1            #默认值是0
ARCH_INI = 1           #默认值是0
ALTER_MODE_STATUS = 0  #默认值是1
ENABLE_OFFLINE_TS = 2  #默认值是1


修改备库的dm.ini参数:
vi /opt/dm/dmdbms/data/testdb/dm.ini

INSTANCE_NAME = DMSRV02
MAL_INI = 1            #默认值是0
ARCH_INI = 1           #默认值是0
ALTER_MODE_STATUS = 0  #默认值是1
ENABLE_OFFLINE_TS = 2  #默认值是1

配置归档配置文件 dmarch.ini
在数据库实例目录下创建/修改 dmarch.ini 文件、配置 REALTIME 归档:

主节点上操作:
vi /opt/dm/dmdbms/data/testdb/dmarch.ini

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME          #实时归档(远程)
ARCH_DEST = DMSRV02           #实时归档(远程)目标实例
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL             #本地归档类型
ARCH_DEST = /opt/dm/dmarch    #本地归档路径
ARCH_FILE_SIZE = 1024         #本地单个归档文件最大值,单位 MB(每文件)
ARCH_SPACE_LIMIT = 204800     #本地归档文件总大小,单位 MB。0 表示无限制,范围:1024~4294967294


备节点上操作:
vi /opt/dm/dmdbms/data/testdb/dmarch.ini

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME          #实时归档(远程)
ARCH_DEST = DMSRV01           #实时归档(远程)目标实例
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL             #本地归档类型
ARCH_DEST = /opt/dm/dmarch    #本地归档路径
ARCH_FILE_SIZE = 1024         #本地单个归档文件最大值,单位 MB(每文件)
ARCH_SPACE_LIMIT = 204800     #本地归档文件总大小,单位 MB。0 表示无限制,范围:1024~4294967294

配置 MAL 系统配置文件 dmmal.ini(主备节点都要操作)
在实例目录下新建文件 dmmal.ini,执行以下命令:
vi /opt/dm/dmdbms/data/testdb/dmmal.ini

主备库2个节点文件内容要相同:

MAL_CHECK_INTERVAL = 5  
MAL_CONN_FAIL_INTERVAL = 15  
[MAL_INST1]
MAL_INST_NAME = DMSRV01 
MAL_HOST = 192.168.100.44
MAL_PORT = 7336
MAL_INST_HOST = 192.168.100.44
MAL_INST_PORT = 5236 
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = DMSRV02 
MAL_HOST = 192.168.100.45 
MAL_PORT = 7336
MAL_INST_HOST = 192.168.100.45
MAL_INST_PORT = 5236 
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536

配置守护进程配置文件 dmwatcher.ini:
在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /opt/dm/dmdbms/data/testdb/dmwatcher.ini

主备库2节点文件内容要相同:

[DMSRV]                #守护进程组名(长度不能超过16)
DW_TYPE = GLOBAL       #守护类型:GLOBAL 全局守护类型
DW_MODE = AUTO         #切换模式(自动|手动):如果是非确认监视器配置成手动切换 MANUAL,如果是确认监视器配置成自动切换 AUTO
DW_ERROR_TIME = 30     #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 20   #本地实例故障认定时间 
INST_OGUID = 453331    #数据守护唯一标识码,同一守护进程组中的所有数据库、守护进程和监视器,都必须配置相同的 OGUID 值,取值范围为 0~2147483647
INST_INI = /opt/dm/dmdbms/data/testdb/dm.ini 
INST_AUTO_RESTART = 1  #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dm/dmdbms/bin/dmserver  #命令行方式启动命令
#RLOG_SEND_THRESHOLD = 0  #指定主库发送日志到备库的时间阈值,默认关闭       
#RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

注意:
1)主节点和备节点的 INST_OGUID 值必须相同,组名必须相同,各服务端口不能重复,除了 PORT_NUM 端口之外。
2)如果故障自动切换,DW_MODE 需要配置成 AUTO,如果手动切换则配置成 MANUAL。

以 mount 方式启动集群、设置主备角色和oguid(需要以 dmdba 用户操作):

主备节点-以mount方式启动数据库实例(以 dmdba 用户操作):
启动数据库时,主备库都要是 ready 状态,表示启动数据库实例成功。

主节点-mount启动:
dmserver /opt/dm/dmdbms/data/testdb/dm.ini mount

主节点-终端登录数据库修改 oguid 和设置角色 primary(主库)
新开终端操作
disql SYSDBA/SYSDBA      #disql SYSDBA/SYSDBA:5236  SYSDBA默认密码是SYSDBA,如果非默认端口则显式指定端口
sp_set_oguid(453331);
alter database primary;


执行结果如下:
[root@dm01 ~]# 
[root@dm01 ~]# su - dmdba
Last login: Wed Mar 12 16:21:15 CST 2025 on pts/0
[dmdba@dm01 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is normal, state is mount
login used time : 6.981(ms)
disql V8
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 19.353(ms). Execute id is 0.
SQL> alter database primary;
executed successfully
used time: 2.836(ms). Execute id is 0.
SQL> 

备节点-mount启动:
dmserver /opt/dm/dmdbms/data/testdb/dm.ini mount

备节点-终端登录数据库修改 oguid 和设置角色 standby(备库)
新开终端操作
disql SYSDBA/SYSDBA      #disql SYSDBA/SYSDBA:5236  SYSDBA默认密码是SYSDBA,如果非默认端口则显式指定端口
sp_set_oguid(453331);
alter database standby;


执行结果如下:
[root@dm02 ~]# 
[root@dm02 ~]# su - dmdba
Last login: Wed Mar 12 16:22:03 CST 2025 on pts/0
[dmdba@dm02 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is normal, state is mount
login used time : 20.398(ms)
disql V8
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 9.669(ms). Execute id is 0.
SQL> alter database standby;
executed successfully
used time: 10.513(ms). Execute id is 0.
SQL> 

配置完成后,主备节点输入 exit 退出,然后再次登录确定主、备数据库是否处于主、备状态:

主节点:
SQL> exit
[dmdba@dm01 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is primary, state is mount
login used time : 1.264(ms)
disql V8
SQL> 


备节点:
SQL> exit
[dmdba@dm02 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is standby, state is mount
login used time : 1.218(ms)
disql V8
SQL> 


主备库前台启动数据库守护进程:

以 dmdba 用户下操作,脚本位置在数据库软件安装目录下($DM_HOME 即 /opt/dm/dmdbms)的 bin 目录下,执行以下命令(主备库都执行):

主库:
dmwatcher /opt/dm/dmdbms/data/testdb/dmwatcher.ini

备库:
dmwatcher /opt/dm/dmdbms/data/testdb/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open。
这里暂时是前台启动的方式,等后面我们注册了服务名称以后,就没必要前台启动了。

配置监视器
配置监视器(可以在任意一个节点上配置,一般在备节点上配置)
如果守护进程配置为自动切换时、必须配置确认监视器模式,否则手动切换则配置为非确认监视器模式。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:

vi /opt/dm/dmdbms/data/testdb/dmmonitor.ini

如果手动切换、则非确认监视器模式配置内容如下:
 
MON_DW_CONFIRM = 0                      #1为确认监视器模式(自动)、0为非确认监视器(手动)
MON_LOG_PATH = /opt/dm/dmdbms/log       #监视器日志文件存放路径
MON_LOG_INTERVAL = 60                   #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 128                 #每个日志文件最大值(MB),取值范围16~2048
MON_LOG_SPACE_LIMIT = 0                 #不限定日志文件总占用空间
[DMSRV]                                 #守护进程组名,与 dmwatcher.ini 中的守护进程组名保持一致
MON_INST_OGUID = 453331                 #数据守护唯一标识码,与 dmwatcher.ini 中的 INST_OGUID 保持一致
#以下配置为监视器到组 DMSRV 的守护进程的连接信息,以守护进程的 IP:PORT 的形式配置
#其中 IP 地址和 dmmal.ini 中的 MAL_HOST 保持一致,端口和 dmmal.ini 中的 MAL_DW_PORT 保持一致
#如果需要监控的是 DMDSC 集群,作为一个整体的库,将 DMDSC 集群中所有守护进程的 IP:PORT 配置为一个 MON_DW_IP 项,每个守护进程的 IP:PORT 以 / 分隔。比如:MON_DW_IP=192.168.0.73:9236/192.168.0.73:9237 
MON_DW_IP = 192.168.100.44:7436
MON_DW_IP = 192.168.100.45:7436


如果自动切换、则确认监视器模式配置内容如下:

MON_DW_CONFIRM = 1                      #1为确认监视器模式(自动)、0为非确认监视器(手动)
MON_LOG_PATH = /opt/dm/dmdbms/log       #监视器日志文件存放路径
MON_LOG_INTERVAL = 60                   #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 128                 #每个日志文件最大值(MB),取值范围16~2048
MON_LOG_SPACE_LIMIT = 0                 #不限定日志文件总占用空间
[DMSRV]                                 #守护进程组名,与 dmwatcher.ini 中的守护进程组名保持一致
MON_INST_OGUID = 453331                 #数据守护唯一标识码,与 dmwatcher.ini 中的 INST_OGUID 保持一致
#以下配置为监视器到组 DMSRV 的守护进程的连接信息,以守护进程的 IP:PORT 的形式配置
#其中 IP 地址和 dmmal.ini 中的 MAL_HOST 保持一致,端口和 dmmal.ini 中的 MAL_DW_PORT 保持一致
#如果需要监控的是 DMDSC 集群,作为一个整体的库,将 DMDSC 集群中所有守护进程的 IP:PORT 配置为一个 MON_DW_IP 项,每个守护进程的 IP:PORT 以 / 分隔。比如:MON_DW_IP=192.168.0.73:9236/192.168.0.73:9237 
MON_DW_IP = 192.168.100.44:7436
MON_DW_IP = 192.168.100.45:7436


执行以下命令,前台方式启动监视器:
dmmonitor /opt/dm/dmdbms/data/testdb/dmmonitor.ini


执行结果如下:
[dmdba@dm02 ~]$ dmmonitor /opt/dm/dmdbms/data/testdb/dmmonitor.ini
[monitor]         2025-03-12 16:45:27: DMMONITOR[4.0] V8
[monitor]         2025-03-12 16:45:27: DMMONITOR[4.0] IS READY.

[monitor]         2025-03-12 16:45:28: Received message from(DMSRV02)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2025-03-12 16:45:27  OPEN           OK        DMSRV02          OPEN        STANDBY   NULL     2        27725           27725           

[monitor]         2025-03-12 16:45:28: Received message from(DMSRV01)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2025-03-12 16:44:48  OPEN           OK        DMSRV01          OPEN        PRIMARY   VALID    2        27725           27725           

输入 show 命令、tip 命令查看集群状态是否正确。
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。


show
2025-03-12 16:47:06 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
DMSRV            453331      TRUE            MANUAL          FALSE     


<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.100.44         7436         2025-03-12 16:46:26  GLOBAL    VALID     OPEN           DMSRV01          OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
192.168.100.44         5236       OK        DMSRV01          OPEN        PRIMARY   0          0            REALTIME  VALID    4325            27725           4325            27725           NONE                  

<<DATABASE GLOBAL INFO:>>
DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.100.45         7436         2025-03-12 16:47:06  GLOBAL    VALID     OPEN           DMSRV02          OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

EP INFO:
INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
192.168.100.45         5236       OK        DMSRV02          OPEN        STANDBY   0          0            REALTIME  VALID    4295            27725           4295            27725           NONE                  

DATABASE(DMSRV02) APPLY INFO FROM (DMSRV01), REDOS_PARALLEL_NUM (1):
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4325, 4325, 4325], (RLSN, SLSN, KLSN)[27725, 27725, 27725], N_TSK[0], TSK_MEM_USE[0] 
REDO_LSN_ARR: (27725)


#================================================================================#

tip
[monitor]         2025-03-12 16:47:22: Instance DMSRV01[PRIMARY, OPEN, ISTAT_SAME:TRUE] cannot join other instances, dmwatcher status is OPEN, SYSOPENHISTORY status is VALID
[monitor]         2025-03-12 16:47:22: Instance DMSRV01[PRIMARY, OPEN, ISTAT_SAME:TRUE] has no command to execute currently
[monitor]         2025-03-12 16:47:22: Instance DMSRV01[PRIMARY, OPEN, ISTAT_SAME:TRUE] is OK, dmwatcher status is OPEN, dw_type is GLOBAL
[monitor]         2025-03-12 16:47:22: Instance DMSRV02[STANDBY, OPEN, ISTAT_SAME:TRUE] can join instance DMSRV01[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor]         2025-03-12 16:47:22: Instance DMSRV02[STANDBY, OPEN, ISTAT_SAME:TRUE] has no command to execute currently
[monitor]         2025-03-12 16:47:22: Instance DMSRV02[STANDBY, OPEN, ISTAT_SAME:TRUE] is OK, dmwatcher status is OPEN, dw_type is GLOBAL
[monitor]         2025-03-12 16:47:22: Group(DMSRV) current active instances are OK
[monitor]         2025-03-12 16:47:22: All groups' current active instances are OK!


输入 exit 命令退出监视器:
exit
[dmdba@dm02 ~]$ 

备节点输入 exit 退出守护(dmwatcher):
DMWATCHER[4.0] IS READY
exit
[dmdba@dm02 ~]$ 

主节点输入 exit 退出守护(dmwatcher):
DMWATCHER[4.0] IS READY
exit
[dmdba@dm01 ~]$ 

主节点输入 exit 退出主库服务:
exit

备节点输入 exit 退出备库服务:
exit


停止前台启动的数据库集群服务后,接下来注册后台启动服务。


注册服务
注册后台启动服务(root用户操作)。
前面的启动都是前台方式启动,仅用户搭建过程中验证配置,等配置完毕、确认配置没问题后需要将实例、守护进程和确认监视器注册为系统服务(以 root 用户注册服务)。
注册服务以后就可以通过服务名后台启动服务(以 dmdba 用户后台启动服务)。


以 root 用户操作注册服务,注册服务脚本在数据库软件安装目录下($DM_HOME 即 /opt/dm/dmdbms)的 script/root 目录:
主备节点都切换到root用户
su - root
cd $DM_HOME/script/root


注册数据库实例服务(主备库都要执行):
主节点:
./dm_service_installer.sh -t dmserver -dm_ini /opt/dm/dmdbms/data/testdb/dm.ini -p DMSRV01

备节点:
./dm_service_installer.sh -t dmserver -dm_ini /opt/dm/dmdbms/data/testdb/dm.ini -p DMSRV02 


注册守护进程服务(主备库都要执行):
主节点:
./dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dm/dmdbms/data/testdb/dmwatcher.ini -p DMSRV01

备节点:
./dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dm/dmdbms/data/testdb/dmwatcher.ini -p DMSRV02

注册监视器后台启动服务(-p 指定守护进程组名)
./dm_service_installer.sh -t dmmonitor -monitor_ini /opt/dm/dmdbms/data/testdb/dmmonitor.ini -p DMSRV

注册之后先不启动,启动服务不以 root 用户操作,而是要用 dmdba 用户操作,启动脚本位置在数据库软件安装目录下($DM_HOME 即 /opt/dm/dmdbms)的 bin 目录下:
[root@dm01 script]# ls -l $DM_HOME/bin |grep Dm       
-rwxr-xr-x 1 dmdba dinstall    13829 Mar  5 16:35 DmAPService
-rwxr-xr-x 1 dmdba dinstall    14493 Mar  5 16:35 DmAuditMonitorService
-rwxr-xr-x 1 dmdba dinstall    13657 Mar  5 16:35 DmInstanceMonitorService
-rwxr-xr-x 1 dmdba dinstall    14130 Mar  5 16:35 DmJobMonitorService
[root@dm01 script]# 

主备集群的启动和关闭操作流程

启动关闭集群的顺序如下:
启动:主库服务->备库服务->主库守护->备库守护->监视器
关闭:监视器->备库守护->主库守护->主库服务->备库服务

启动:
su - dmdba
cd $DM_HOME/bin
DmServiceDMSRV01 start        #启动主库服务
DmServiceDMSRV02 start        #启动备库服务
DmWatcherServiceDMSRV01 start #启动主库守护
DmWatcherServiceDMSRV02 start #启动备库守护
DmMonitorServiceDMSRV start   #启动监视器


停止:
DmMonitorServiceDMSRV stop   #停止监视器
DmWatcherServiceDMSRV02 stop #停止备库守护
DmWatcherServiceDMSRV01 stop #停止主库守护
DmServiceDMSRV01 stop        #停止主库服务
DmServiceDMSRV02 stop        #停止备库服务


到此主备集群搭建完毕。

登录验证
disql多种登录方式

disql登录命令格式:
disql user/'"password"'@ip:port

1)disql本地登录
[dmdba@dm01 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is primary, state is open
login used time : 1.704(ms)
disql V8
SQL>

2)disql集群登录
修改 /etc/dm_svc.conf 配置文件(客户端 disql 登录集群默认使用该配置文件,未安装 DM 数据库的机器新建文件即可)
vim /etc/dm_svc.conf

#全局配置区
TIME_ZONE=(480) #表示+8:00 时区
LANGUAGE=(en)
DMSRV=(10.80.93.44:5236,10.80.93.45:5236)

#服务配置区
[DMSRV]
LOGIN_MODE=(1)  #0:优先连接 Primary 模式的库,Normal 模式次之,最后选择 Stantby 模式;
                #1:只连接主库;
                #2:只连接备库;
                #3:优先连接 Standby 模式的库,Primary 模式次之,最后选择 Normal 模式;
                #4:优先连接 Normal 模式的库,Primary 模式次之,最后选择 Standby 模式;
                #缺省值为 4。


说明:
1)服务名自己可以根据实际需求定义(我这里取名 DMSRV,但和守护进程组名无关,可以不同),如果有多个环境需要连接,则配置文件中可以配置多个服务名和多个服务配置区。
2)客户端程序连接数据库时,需要指定 IP 端口处替换为 dm_svc.conf 配置文件中的服务名即可,例如:disql SYSDBA/‘“password”’@DMSRV。
jdbc 的 url 为:jdbc:dm://DMSRV

如果客户端没有配置 /etc/dm_svc.conf 文件,则 jdbc 连接时可以在连接参数上指定对应配置参数:
jdbc:dm://DMSRV?DMSRV=(192.168.100.44:5236,192.168.100.45:5236)&user=xxx&password=xxx

只连主库则:
jdbc:dm://DMSRV?DMSRV=(192.168.100.44:5236,192.168.100.45:5236)&user=xxx&password=xxx&loginMode=1

JDBC连接时的连接服务名可以自己随便定义,例如:
jdbc:dm://DM_HA?DM_HA=(192.168.100.44:5236,192.168.100.45:5236)&user=xxx&password=xxx&loginMode=1
 

注意:修改 dm_svc.conf 后需要重启客户端程序才能生效。


disql集群登录
[dmdba@dm01 ~]$ disql SYSDBA@DMSRV

Server[192.168.100.44:5236]:mode is primary, state is open
login used time : 4.280(ms)
disql V8
SQL> 


3)disql远程登录主库:
[dmdba@dm01 ~]$ disql SYSDBA/SYSDBA@192.168.100.44:5236

Server[192.168.100.44:5236]:mode is primary, state is open
login used time : 1.950(ms)
disql V8
SQL> 


4)disql远程登录备库:
[dmdba@dm01 ~]$ disql SYSDBA/SYSDBA@192.168.100.45:5236

Server[192.168.100.45:5236]:mode is standby, state is open
login used time : 1.910(ms)
disql V8
SQL> 


主备同步测试验证

登录主库、创建测试表&插入数据:
disql SYSDBA/SYSDBA@192.168.100.44
CREATE TABLE TEST01(
    ID BIGINT NOT NULL, 
    INFO NVARCHAR2(255) NULL, 
    CNT BIGINT, 
    CONSTRAINT PK_JF_TEST41 PRIMARY KEY (ID)
);
INSERT INTO TEST01(ID,INFO,CNT) VALUES (1,'aaa',55);
COMMIT;
SELECT * FROM TEST01;


登录备库查询数据验证是否同步:
disql SYSDBA/SYSDBA@192.168.100.45
SELECT * FROM TEST01;
 


http://www.mrgr.cn/news/94256.html

相关文章:

  • 阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
  • ROS实践(四)机器人SLAM建图(gmapping)
  • 推理框架SGLang安装与调试
  • LVS + Keepalived 高可用集群
  • 《YOLOE: Real-Time Seeing Anything》论文速览翻译,支持文本提示,视觉提示等开放世界检测算法!
  • Java常见的并发设计模式
  • maven wrapper的使用
  • 爬虫中一些有用的用法
  • Qt:绘图API
  • 【Pytorch Transformers Fine-tune】使用BERT进行情感分类任务微调
  • Selenium 自动化测试学习总结
  • 本地Git仓库搭建(DevStar)与Git基本命令
  • MySQL的安装与建表
  • PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别
  • java中小型公司面试预习资料(四):微服务架构
  • Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能
  • Visual Studio 安装及使用教程(Windows)【安装】
  • JavaScript_Day2
  • 江科大51单片机笔记【16】AD/DA(上)
  • 环境配置 | 5分钟极简Git入门:从零上手版本控制