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

达梦数据库主备集群

1:服务器硬件需求

按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下:

硬件要求
物理内存>=16 GB
交换区Swap 空间>=物理内存
/tmp大小> 1000 MB
网络物理机器需要 4 个网卡,2 个 public 网卡做 band,2 个 private 网卡做 band
磁盘根据实际应用系统需要挂载合适大小磁盘
时间服务器按机房要求配置连接时间服务器

操作系统版本安装

DM 数据库安装在 Linux 操作系统所需条件:glibc 2.3 以上,内核 2.6,预先安装 UnixODBC,系统性能监控等组件。这里使用Centos 7.6。

目录与存储规划

用途目录路径备注
数据库软件安装目录/home/dmdba/dmdbms可用空间>50 GB
实例安装目录/data/dmdata单独挂载性能最好的磁盘建议 SSD
归档日志存放目录/data/dmarch单独挂载磁盘
备份文件存放目录/data/dmbak单独挂载磁盘

用户与组

DM 数据库不应该使用 root 用户安装和维护。需要在安装之前为 DM 数据库创建一个专用的系统用户 (dmdba) 和用户组 (dinstall)。

执行以下命令,新建用户组 dinstall、新用户dmdba

groupadd dinstall
useradd  -g dinstall -m -d /home/dmdba -s /bin/bash  dmdba执行以下命令,修改 dmdba 用户密码:
passwd dmdba

用户资源限制

执行以下命令,修改 dmdba 用户资源限制:

vim /etc/security/limits.conf
文件末尾添加如下内容:dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc  65536
dmdba hard nproc  65536
dmdba soft stack  65536
dmdba hard stack  65536

用户环境变量

执行以下命令,修改 dmdba 用户环境变量:

vi /home/dmdba/.bash_profile
文件末尾添加如下内容:export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
端口规划

搭建 2 节点主备集群,端口规划如下:(实际中可以按需要修改端口号)

主机名public ipprivate ip实例名端口用途
dmdsc1192.168.1.3110.10.10.31dmrw15236数据库实例 dmrw1 监听端口
dmdsc1192.168.1.3110.10.10.31dmrw161141MAL 系统监听 TCP 连接的端口
dmdsc1192.168.1.3110.10.10.31dmrw152141实例本地的守护进程监听 TCP 连接的端口
dmdsc1192.168.1.3110.10.10.31dmrw133141实例监听守护进程 TCP 连接的端口
dmdsc2192.168.1.3210.10.10.32dmrw25236数据库实例 dmrw2 监听端口
dmdsc2192.168.1.3210.10.10.32dmrw261141MAL 系统监听 TCP 连接的端口
dmdsc2192.168.1.3210.10.10.32dmrw252141实例本地的守护进程监听 TCP 连接的端口
dmdsc2192.168.1.3210.10.10.32dmrw233141实例监听守护进程 TCP 连接的端口

防火墙集群之间需开放以上所有端口, 集群对客户端只需要开通数据库实例监听端口。

2:安装数据库

数据库软件安装详见单机规范化部署。

软件安装目录:/home/dmdba/dmdbms,实例初始化目录:/data/dmdata,初始化脚本如下:

主库和备库都需要配置实例,监视器可以不用配置
使用dmdba用户配置实例,进入达梦安装bin目录

[dmdba@dmdsc1 bin]$ pwd
/home/dmdba/dmdbms/bin主库进入/home/dmdba/dmdbms/bin目录下执行,初始化实例:
dminit path=/data/dmdata db_name=dmrw INSTANCE_NAME=dmrw1 EXTENT_SIZE=32 PAGE_SIZE=32 LOG_SIZE=2048备库进入/home/dmdba/dmdbms/bin目录下执行
dminit path=/data/dmdata db_name=dmrw INSTANCE_NAME=dmrw2 EXTENT_SIZE=32 PAGE_SIZE=32 LOG_SIZE=2048

主库前台启动实例,生成实例对应文件,启动后关闭即可。

 ./dmserver /data/dmdata/dmrw/dm.ini

3:主库进行脱机备份

脱机备份前要关闭数据库实例,否则备份会出错
备份的目的是为了确保主备数据库在自动同步前数据是一致的

[dmdba@dmdsc1 bin]$ ./dmrman 
dmrman V8RMAN> BACKUP DATABASE '/data/dmdata/dmrw/dm.ini' FULL BACKUPSET '/data/dmbak/full_database';
BACKUP DATABASE '/data/dmdata/dmrw/dm.ini' FULL BACKUPSET '/data/dmbak/full_database';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39830], file_lsn[39830]
Processing backupset /data/dmbak/full_database
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 
backup successfully!
time used: 00:00:03.346

主库复制备份文件到备库

[dmdba@dmdsc1 dmbak]$ scp -r full_database 192.168.1.32:/data/dmbak/

备库进入/home/dmdba/dmdbms/bin进行恢复

[dmdba@dmdsc2 bin]$ ./dmrman 
dmrman V8
RMAN> RESTORE DATABASE '/data/dmdata/dmrw/dm.ini' FROM BACKUPSET '/data/dmbak/full_database';
RESTORE DATABASE '/data/dmdata/dmrw/dm.ini' FROM BACKUPSET '/data/dmbak/full_database';
file dm.key not found, use default license!
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.475RMAN> RECOVER DATABASE '/data/dmdata/dmrw/dm.ini' FROM BACKUPSET '/data/dmbak/full_database';
RECOVER DATABASE '/data/dmdata/dmrw/dm.ini' FROM BACKUPSET '/data/dmbak/full_database';
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39830], file_lsn[39830]
recover successfully!
time used: 671.697(ms)RMAN> RECOVER DATABASE '/data/dmdata/dmrw/dm.ini' UPDATE DB_MAGIC;
RECOVER DATABASE '/data/dmdata/dmrw/dm.ini' UPDATE DB_MAGIC;
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[39830], file_lsn[39830]
recover successfully!
time used: 00:00:01.066
RMAN> 

4:配置文件设置

实例配置文件:dm.ini
归档配置文件:dmarch.ini
MAL系统配置文件:dmmal.ini
守护进程配置文件:dmwatcher.ini
监视器配置文件:dmmonitor.ini
为了便于管理,将所有配置文件都与dm.ini配置文件放在同一个目录下。 

1)实例配置文件 dm.ini

主备库进入/data/dmdata/dmrw目录下修改dm.ini文件

vi /data/dmdata/dmrw/dm.ini主库:
INSTANCE_NAME = DMRW1  #修改实例名
MAL_INI = 1            #打开 MAL 系统
ARCH_INI = 1           #打开归档配置
ALTER_MODE_STATUS = 0  #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2  #不允许备库 OFFLINE 表空间备库:
INSTANCE_NAME = DMRW2  #修改实例名
MAL_INI = 1            #打开 MAL 系统
ARCH_INI = 1           #打开归档配置
ALTER_MODE_STATUS = 0  #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2  #不允许备库 OFFLINE 表空间

 2)归档配置文件dmarch.ini

vi /data/dmdata/dmrw/dmarch.ini主库:
[ARCHIVE_REALTIME]
ARCH_TYPE     = REALTIME  #归档类型
ARCH_DEST     = DMRW2      #归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL     #本地归档类型
ARCH_DEST     = /data/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE    = 128   #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 0     #单位 MB,0 表示无限制,范围 1024~4294967294 MB备库:
[ARCHIVE_REALTIME]
ARCH_TYPE     = REALTIME  #归档类型
ARCH_DEST     = DMRW1   	  #归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL     #本地归档类型
ARCH_DEST     = /data/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE    = 128   #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 0     #单位 MB,0 表示无限制,范围 1024~4294967294 MB

 3)MAL系统配置文件 dmmal.ini,主库与备库内容一致

vi /data/dmdata/dmrw/dmmal.iniMAL_CHECK_INTERVAL   = 5  # MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL  = 5  # 判定 MAL链路断开的时间
[MAL_INST1]MAL_INST_NAME = DMRW1  #与 dm.ini中的 INSTANCE_NAME一致MAL_HOST      = 192.168.1.31  # MAL系统监听 TCP 内部网络 IPMAL_PORT      = 61141  # MAL系统监听 TCP连接的端口MAL_INST_HOST = 192.168.1.31  #实例的对外服务 IP地址MAL_INST_PORT = 5236  #与 dm.ini中的 PORT_NUM一致MAL_DW_PORT   = 52141  #实例对应的守护进程监听 TCP 端口MAL_INST_DW_PORT = 33141
[MAL_INST2]MAL_INST_NAME = DMRW2  #与 dm.ini中的 INSTANCE_NAME 一致MAL_HOST      = 192.168.1.32  # MAL系统监听 TCP内部网络 IPMAL_PORT      = 61141  # MAL系统监听 TCP连接的端口MAL_INST_HOST = 192.168.1.32  #实例的对外服务 IP地址MAL_INST_PORT = 5236  #与 dm.ini中的 PORT_NUM一致MAL_DW_PORT   = 52141  #实例对应的守护进程监听 TCP端口MAL_INST_DW_PORT = 33141

 4)守护进程配置文件 dmwatcher.ini

主库与备库内容一致

vi /data/dmdata/dmrw/dmwatcher.ini[GRP_RW] 
DW_TYPE            = GLOBAL  #全局守护类型
DW_MODE            = AUTO  #自动切换模式
DW_ERROR_TIME      = 10  #远程守护进程故障认定时间
INST_RECOVER_TIME  = 60  #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME    = 10  #本地实例故障认定时间
INST_OGUID         = 453331  #守护系统唯一 OGUID 值
INST_INI           = /data/dmdata/dmrw/dm.ini  # dm.ini 配置文件路径
INST_AUTO_RESTART  = 1   #打开实例的自动启动功能
INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动

5)监视器配置文件 dmmonitor.ini

集群任意节点(一般在备库),配置监视器配置文件 dmmonitor.ini,本文配置在备库服务器上。 

vi /data/dmdata/dmrw/dmmonitor.iniMON_DW_CONFIRM    = 1   #确认监视器模式
MON_LOG_PATH    = /data/dmdata/dmmonitor_auto/log #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT  = 0  #不限定日志文件总占用空间[GRP_RW] MON_INST_OGUID    = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORTMON_DW_IP     = 192.168.1.31:52141MON_DW_IP     = 192.168.1.32:52141

5:启动主备服务

1)启动数据库实例
主备库在/home/dmdba/dmdbms/bin目录下执行

./dmserver /data/dmdata/dmrw/dm.ini mount

[dmdba@dmdsc1 bin]$ ./dmserver /data/dmdata/dmrw/dm.ini mount
file dm.key not found, use default license!
version info: develop
DM Database Server 64 V8 03134284094-20231109-208042-20067 startup...
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
Database mode = 0, oguid = 0
License will expire on 2024-11-09
file lsn: 39830
ndct db load finished, code:0
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct second level fill fast pool finished
ndct third level fill fast pool finished
ndct fill fast pool finished
nsvr_startup end.
uthr_pipe_create, create pipe[read:18, write:19]
uthr_pipe_create, create pipe[read:20, write:21]
uthr_pipe_create, create pipe[read:22, write:23]
uthr_pipe_create, create pipe[read:24, write:25]
uthr_pipe_create, create pipe[read:26, write:27]
uthr_pipe_create, create pipe[read:28, write:29]
uthr_pipe_create, create pipe[read:30, write:31]
uthr_pipe_create, create pipe[read:32, write:33]
uthr_pipe_create, create pipe[read:34, write:35]
uthr_pipe_create, create pipe[read:36, write:37]
uthr_pipe_create, create pipe[read:38, write:39]
uthr_pipe_create, create pipe[read:40, write:41]
uthr_pipe_create, create pipe[read:42, write:43]
uthr_pipe_create, create pipe[read:44, write:45]
uthr_pipe_create, create pipe[read:46, write:47]
uthr_pipe_create, create pipe[read:48, write:49]
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info finished, code:0.
SYSTEM IS READY.

 另外开一个新的终端,使用 disql 工具连接数据库。

主库执行:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBASQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331);      #修改 oguid
SQL> alter database primary;    #修改为 primary 模式
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);备库执行:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBASQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331);      #修改 oguid
SQL> alter database standby;    #修改为 standby 模式
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

2)启动守护进程

守护进程启动后,会将 Mount 的实例 Open。主备执行相同的操作。如有报错,请参考:

 达梦数据库主从备份搭建_达梦数据库主从配置-CSDN博客

cd /home/dmdba/dmdbms/bin
[dmdba@dmdsc1 bin]$ ./dmwatcher /data/dmdata/dmrw/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

3)启动监视器

在192.168.1.32备库机器上启动监视器
重新打开一个连接,执行:./dmmonitor /data/dmdata/dmrw/dmmonitor.ini

[dmdba@dmdsc2 bin]$ ./dmmonitor /data/dmdata/dmrw/dmmonitor.ini
[monitor]         2024-01-12 17:11:56: DMMONITOR[4.0] V8
[monitor]         2024-01-12 17:11:57: DMMONITOR[4.0] IS READY.[monitor]         2024-01-12 17:11:57: 
#--------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DMRW2), THE FIRST LINE IS SELF INFO.DW_CONN_TIME         MON_CONFIRM    MID            MON_IP                   MON_VERSION                                                     
2024-01-12 17:11:57  TRUE           129505858      ::ffff:192.168.1.106     DMMONITOR[4.0] V8#--------------------------------------------------------------------------------#[monitor]         2024-01-12 17:11:57: 收到守护进程(DMRW2)消息WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            2024-01-12 17:11:57  OPEN           OK        DMRW2            OPEN        STANDBY   NULL     2        39998           39998           [monitor]         2024-01-12 17:11:57: 收到守护进程(DMRW1)消息WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            2024-01-12 17:11:57  OPEN           OK        DMRW1            OPEN        PRIMARY   VALID    2        39998           39998           show
2024-01-12 18:35:22 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP_RW           453331      TRUE            AUTO            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.1.31  52141        2024-01-12 18:35:21  GLOBAL    VALID     OPEN           DMRW1            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.1.31  5236       OK        DMRW1            OPEN        PRIMARY   0          0            REALTIME  VALID       4843            40075           4843            40075           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.1.32  52141        2024-01-12 18:35:21  GLOBAL    VALID     OPEN           DMRW2            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.1.32  5236       OK        DMRW2            OPEN        STANDBY   0          0            REALTIME  VALID       4843            40075           4843            40075           NONE                  DATABASE(DMRW2) APPLY INFO FROM (DMRW1), REDOS_PARALLEL_NUM (1), WAIT_APPLY[FALSE]:
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4843, 4843, 4843], (RLSN, SLSN, KLSN)[40075, 40075, 40075], N_TSK[0], TSK_MEM_USE[0] 
REDO_LSN_ARR: (40075)#================================================================================#

 监视器显示以上数据,说明主备搭建成功。需要注意的数据有WSTATUS(OPEN)、ISTATUS(OPEN)、RTYPE(REALTIME)、RSTAT(VALID)。

6:验证数据同步

主库:使用 disql 客户端登录,创建测试表,插入数据。

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA[dmdba@dmdsc1 bin]$ ./disql SYSDBA/SYSDBA服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间 : 3.624(ms)
disql V8
SQL> create table test(id int, name varchar2(20));
操作已执行
已用时间: 9.349(毫秒). 执行号:601.
SQL> insert into test values (1, 'one');
影响行数 1已用时间: 0.938(毫秒). 执行号:602.
SQL> select * from test;行号     ID          NAME
---------- ----------- ----
1          1           one已用时间: 0.753(毫秒). 执行号:603.
SQL> commit;
操作已执行
已用时间: 1.702(毫秒). 执行号:604.
SQL> 

 备库:使用 disql 客户端登录,查询测试表验证。

[dmdba@dmdsc2 bin]$ ./disql SYSDBA/SYSDBA服务器[LOCALHOST:5236]:处于备库打开状态
登录使用时间 : 4.497(ms)
disql V8
SQL> select * from test;行号     ID          NAME
---------- ----------- ----
1          1           one已用时间: 1.656(毫秒). 执行号:101.
SQL> 

数据正常同步。

7:服务注册

上述服务启动都是前台启动,关闭窗口服务就会退出,可以将启动命令注册为系统服务,便于操作。

使用 root 用户,到数据库安装目录的 script/root 下,执行。

[root@dmdsc1 root]# pwd
/home/dmdba/dmdbms/script/root#注册守护进程服务(主备库都执行)
[root@dmdsc1 root]# ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /data/dmdata/dmrw/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServicedmrw.service to /usr/lib/systemd/system/DmWatcherServicedmrw.service.
创建服务(DmWatcherServicedmrw)完成#注册数据库实例服务(主备库都执行)。
[root@dmdsc1 root]# ./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /data/dmdata/dmrw/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicedmrw.service to /usr/lib/systemd/system/DmServicedmrw.service.
创建服务(DmServicedmrw)完成#注册监视器服务(只需在监视器服务器上执行),执行以下命令:
[root@dmdsc2 root]# ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /data/dmdata/dmrw/dmmonitor.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceconfirm.service to /usr/lib/systemd/system/DmMonitorServiceconfirm.service.
创建服务(DmMonitorServiceconfirm)完成

服务方式启动

启动数据库实例,执行以下命令(主备执行):
systemctl start DmServicedmrw启动守护进程,执行以下命令(主备执行):
systemctl start DmWatcherServicedmrw启动监视器,执行以下命令(在监视器节点执行):
systemctl start DmMonitorServiceconfirm

 8:参数优化

集群部署完成后,需要优化 dm.ini 参数主备库都需要修改。参数值优化详见参数优化部分。

9:重启集群

主备集群重启有顺序要求:

关闭监视器:systemctl stop DmMonitorServiceconfirm
关闭主库守护进程:systemctl stop DmWatcherServicedmrw
关闭备库守护进程:systemctl stop DmWatcherServicedmrw
关闭主库实例:systemctl stop DmServicedmrw
关闭备库实例:systemctl stop DmServicedmrw
启动主库实例:systemctl start DmServicedmrw
启动备库实例:systemctl start DmServicedmrw
启动主库守护进程:systemctl start DmWatcherServicedmrw
启动备库守护进程:systemctl start DmWatcherServicedmrw
启动监视器:systemctl start DmMonitorServiceconfirm

注意启动和关闭顺序!!

启动:主备库实例 → 主备库守护进程 → 监视器

关闭:监视器 → 主备库守护进程 → 主备库实例

10:客户端连接集群

客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:

32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc 目录。

文件内容:

# 以#开头的行表示是注释
# 全局配置区
DMRW=(192.168.1.31:5236,192.168.1.32:5236)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
# 服务配置区
[DMRW]
TIME_ZONE=(+540) #表示+9:00 时区
LOGIN_MODE=(1)
SWITCH_TIME=(3)
SWITCH_INTERVAL=(10)

 客户端程序连接数据库时,需要指定 IP 端口处替换为服务名即可,例如:

disql SYSDBA/SYSDBA@DMRW

注意:当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效。

11:故障切换

通过上述配置,达梦数据库在主库故障后,会自动切换到备库。故障恢复后会自动加入到集群中,不过不再是主库,而是备库。

参考文档:

主备集群规范化部署 | 达梦技术文档

达梦数据库主从备份搭建_达梦数据库主从配置-CSDN博客

相关文章:

达梦数据库主备集群

1&#xff1a;服务器硬件需求 按实际业务需求&#xff0c;选择合适的服务器&#xff0c;准备 3 台服务器&#xff0c;一台主库服务器&#xff0c;一台备库服务器&#xff0c;一台监视器服务器&#xff0c;服务器参数建议如下&#xff1a; 硬件要求物理内存>16 GB交换区Swa…...

Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决

1、版本介绍&#xff1a; doris版本&#xff1a; 1.2.8Spark Connector for Apache Doris 版本&#xff1a; spark-doris-connector-3.3_2.12-1.3.0.jar:1.3.0-SNAPSHOTspark版本&#xff1a;spark-3.3.1 2、Spark Doris Connector Spark Doris Connector - Apache Doris 目…...

深入理解 go chan

go 里面&#xff0c;在实际程序运行的过程中&#xff0c;往往会有很多协程在执行&#xff0c;通过启动多个协程的方式&#xff0c;我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信&#xff0c;不同于以往多线程程序的那种通信方式&#xff0c;在 go 里面是通过…...

java+vue基于Spring Boot的渔船出海及海货统计系统

该渔船出海及海货统计系统采用B/S架构、前后端分离进行设计&#xff0c;并采用java语言以及springboot框架进行开发。该系统主要设计并完成了管理过程中的用户注册登录、个人信息修改、用户信息、渔船信息、渔船航班、海货价格、渔船海货、非法举报、渔船黑名单等功能。该系统操…...

Linux第25步_在虚拟机中备份“ST官方的TF-A源码”

TF-A是ARM公司提供的&#xff0c;ST公司通过修改它&#xff0c;做了一个自己的TF-A代码。因为在后期开发中&#xff0c;若硬件被改变了&#xff0c;我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了&#xff0c;我们需要将"S…...

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要&#xff0c;已有的R包或函数不能满足&#xff0c;可以在R中编写自己的函数。函数的定义格式如下所示&#xff1a; …...

C++(1) —— 基础语法入门

目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型&#xff08;浮点型&#xff09; 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…...

构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包

本文适用&#xff1a;rhel8系列&#xff0c;或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...

Vue-插槽(Slots)

1. 介绍 在Vue.js中&#xff0c;插槽是一种强大的功能&#xff0c;它允许你创建可重用的模板&#xff0c;并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式&#xff0c;可以在父组件中定义一些“插槽”&#xff0c;然后在子组件中使用这些插槽&#xff0c;插…...

新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?

作者&#xff1a;小岩 编辑&#xff1a;彩云 Sam Altman在整个AI领域&#xff0c;乃至整个科技领域都被看作是极具影响力的存在&#xff0c;而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感&#xff0c;他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…...

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性&#xff0c;它可以支持国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…...

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1&#xff1a;准备 1.1&#xff1a;理论 对于一个系统来说&#xff0c;最重要的就是高可用&#xff0c;那么如何实现高可用呢&#xff1f;你可能会说&#xff0c;集群部署不就可以了&#xff0c;但事实并…...

让车辆做到“耳听八方”,毫米波雷达芯片与系统设计

摘要: 毫米波雷达,是指工作在毫米波波段(一般为30~300GHz频域,波长1~10mm)探测的雷达。毫米波雷达体积小、质量轻、空间分辨率高,穿透“雾烟灰”的能力强,还具备全天候全天时工作的优势。在智能网联汽车体系中,毫米波雷达是系统感知层不可或缺的重要硬件,能让智能驾…...

Python如何实现数据驱动的接口自动化测试

大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff0c;token,mobile,email三个参数 token为必填项mobil…...

高级分布式系统-第15讲 分布式机器学习--联邦学习

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 联邦学习 两种常见的架构&#xff1a;客户-服务器架构和对等网络架构 联邦学习在传统的分布式机器学习基础上的变化。 传统的分布式机器学习&#xff1a;在数据中心或计算集群中使用并行训练&#xff0c;因为…...

小程序基础学习(事件处理)

原理&#xff1a;组件内部设置点击事件&#xff0c;然后冒泡到页面捕获点击事件 在组件内部设置点击事件 处理点击事件&#xff0c;并告诉页面 页面捕获点击事件 页面处理点击事件 组件代码 <!--components/my-info/my-info.wxml--> <view class"title"…...

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09; 物理层&#xff1a;PPPOE宽带拨号&#xff08;应用场景&#xff1a;宽带拨号&#xff0c;运营商切网过来没有固定IP就需要拨号&#xff0c;家庭带宽一般都采用的是拨号方式&#xff09;数据链路层网络层…...

【linux学习笔记】网络

目录 【linux学习笔记】网络检查、监测网络ping-向网络主机发送特殊数据包traceroute-跟踪网络数据包的传输路径netstat-检查网络设置及相关统计数据 通过网络传输文件ftp 【linux学习笔记】网络 检查、监测网络 ping-向网络主机发送特殊数据包 最基本的网络连接命令就是pin…...

JUC-线程中断机制和LockSupport

线程中断机制 概念 java提供了一种用于停止线程的协商机制-中断。称为中断标识协商机制。 常用API public void interrupt() 仅仅让线程的中断标志位设置为true。不进行其他操作。public boolean isInterrupted() 获取中断标志位的状态。public static boolean interrupted…...

哈希表与哈希算法(Python系列30)

在讲哈希表数据结构和哈希算法之前&#xff0c;我想先刨析一下数组和python中的列表 首先来讲一下数组&#xff0c;我想在这提出一个疑问&#xff1a; 为什么数组通过索引查询数据的时间复杂度为O(1)&#xff0c;也就是不管数组有多大&#xff0c;算法的执行时间都是不变的。…...

『 C++ 』AVL树详解 ( 万字 )

&#x1f988;STL容器类型 在STL的容器中,分为几种容器: 序列式容器&#xff08;Sequence Containers&#xff09;: 这些容器以线性顺序存储元素&#xff0c;保留了元素的插入顺序。 支持随机访问&#xff0c;因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…...

Python下载安装pip方法与步骤_pip国内镜像

前提&#xff1a;下载安装好 python 打开命令提示符winR->cmd&#xff08;不需要进入 python&#xff0c;直接在终端输入指令执行即可&#xff0c;也可以再 pycharm 终端执行命令&#xff09;加入要安装ipython&#xff0c;需要执行以下命令&#xff1a; pip install **<…...

自动化测试框架pytest系列之基础概念介绍(一)

如果你要打算学习自动化测试 &#xff0c;无论是web自动化、app自动化还是接口自动化 &#xff0c;在学习的道路上&#xff0c;你几乎会遇到pytest这个测试框架&#xff0c;因为自动化编写没有测试框架&#xff0c;根本玩不了 。 如果你已经是一位自动化测试人员 &#xff0c;…...

编码技巧:如何在Golang中高效解析和生成XML

编码技巧&#xff1a;如何在Golang中高效解析和生成XML 引言Golang中的XML基础解析XML文件生成XML文件错误处理和调试高级技巧和最佳实践总结 引言 在当今数据驱动的编程世界中&#xff0c;有效地处理各种数据格式是每个开发人员必备的技能之一。其中&#xff0c;XML&#xff…...

24校招,帆书测试开发工程师一面

前言 樊高读书是帆书的前身&#xff0c;我之前还看过他们的书&#xff0c;缘分闭环了 时间&#xff1a;25min 平台&#xff1a;飞书视频面试 过程 自我介绍为啥从后端转测试&#xff1f;通过实习经历&#xff0c;对测试有什么了解&#xff1f;讲一下游戏测试经历负责什么业…...

Java 方法以及在计算机内部的调用问题

修饰符 返回值类型 方法名( 形参列表 ){ 方法体代码(需要执行的功能代码) return 返回值; } 方法在内种没有先后顺序&#xff0c;但是不能把一个方法定义在另一个方法中。 方法的返回值类型写void&#xff08;无返回申明&#xff09;时&#xff0c;方法内不能使用return返回数…...

【算法与数据结构】343、LeetCode整数拆分

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;博主做这道题的时候一直在思考&#xff0c;如何找到 k k k个正整数&#xff0c; k k k究竟为多少合适。…...

中级Python面试问题

文章目录 专栏导读1、xrange 和 range 函数有什么区别&#xff1f;2、什么是字典理解&#xff1f;举个例子3、元组理解吗&#xff1f;如果是&#xff0c;怎么做&#xff0c;如果不是&#xff0c;为什么&#xff1f;4、 列表和元组的区别&#xff1f;5、浅拷贝和深拷贝有什么区别…...

Lede(OpenWrt)安装和双宽带叠加

文章目录 一、Lede介绍1. 简介2. 相关网站 二、Lede安装1. 编译环境2. SHELL编译步骤3. 腾讯云自动化助手 三、Lede配置1. 电信接口配置2. 联通接口配置3. 多线多播配置4. 网速测试效果 一、Lede介绍 1. 简介 LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。 …...

HTML+JS + layer.js +qrcode.min.js 实现二维码弹窗

HTMLJSVUE qrcode.min.js 实现二维码生成 引入qrcode.js创建二维码显示位置编写JS 引入qrcode.js <script type"text/javascript" src"https://static.runoob.com/assets/qrcode/qrcode.min.js"></script>创建二维码显示位置 id 作为 定位标识…...

公司做影视网站侵权/百度seo霸屏软件

原标题&#xff1a;iOS便签如何实现扫描二维码界面功能这是一款多功能便签软件工具&#xff0c;有“二维码”功能&#xff1a;它支持用户将便签内容制作成二维码&#xff0c;然后通过敬业签app扫描该二维码&#xff0c;显示相应的便签内容。那么&#xff0c;如何扫描便签二维码…...

it服务商/seo自学网官方

1、下载空白包 2、用自己应用的签名文件&#xff08;.keystore或.jks&#xff09;进行签名&#xff0c;步骤如下&#xff08;应用宝为例&#xff09; &#xff08;1&#xff09;进入到签名文件的路径下&#xff0c; &#xff08;2&#xff09;签名&#xff1a;jarsigner -verbo…...

wordpress 后台好卡/网站站长工具

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。这个算法的名字由来是因…...

网站建设服务哪家便宜/湖南广告优化

把瞬间服务器的请求处理换成异步处理&#xff0c;缓解服务器的压力&#xff0c;实现数据顺序排列获取。本文主要和大家分享php和redis如何实现消息队列&#xff0c;希望能帮助到大家。 redis实现消息队列步骤如下&#xff1a; 1&#xff09;.redis函数rpush,lpop 2&#xff0…...

黄石建设网站/搜索排名竞价

ASP.NET Core是一个开放源代码&#xff0c;跨平台&#xff0c;精益和模块化的框架&#xff0c;用于构建高性能&#xff0c;可伸缩的Web应用程序。 ASP.NET Core带有一个现成的内置日志记录框架。 它可作为Microsoft.Extensions.Logging命名空间的一部分使用。 LoggerMessage是…...

英国帮人做设计作业网站/北京疫情最新消息

varchar(5)和varchar(100)占用的空间是一样的&#xff0c;那么我们都会设置足够大以备不足吗&#xff0c; 错&#xff0c;如果设置的比较大&#xff0c;会使用更多的内存 最好的策略是只分配真正需要的空间。...