达梦技术社区:https://eco.dameng.com
DM数据库中,数据守护集群有两种方式:

  • 主备模式
  • 主备+ 读写分离模式

二者在部署方面的区别(以下会有具体说明):

  • dmarch.ini 配置文件中,归档方式

    • 主备模式使用realtime实时归档方式
    • 读写分离模式使用timely即使归档方式
  • dm_svc.conf

一、安装前准备

01| 集群规划

  • A 与B节点的实例名不能相同
  • oguid 类型为int,精度10,为保险可配置为8-9位随机数
业务线      守护组名       OGUID   服务器角色        业务IP          心跳IP         实例名       实例端口    (外部->dmserver)           MAL端口      (InsA->mal<-InsB)             watcher监听端口  (->dmwatcher)           Ins监听watcher端口        (InsA<-watcherA InsB<-watcherB)                     安装目录          实例目录           归档上限M        说明  
测试 GDW1 83765937 A-primary 172.16.72.129 172.16.72.129 dm03 5237 5337 5437 5537 /home/dmdba/dmdbms /home/dmdba/dmdata 51200
B-standby 172.16.72.130 172.16.72.130 dm03_B 5237 5337 5437 5537 /home/dmdba/dmdbms /home/dmdba/dmdata 51200
C-monitor 172.16.72.128 172.16.72.128 - - - - - /home/dmdba/dmdbms - -

02| 参数调整

# 调整内核参数
tee /etc/sysctl.d/dm.conf<<-"EOF"
fs.file-max = 6815744
fs.aio-max-nr = 1048576
# 控制共享内存页数,Linux页为4K,取值= (9/16物理内存大小)/4K
kernel.shmall = 2097152
#大于memory_target最大可设置成物理内存,这里是2G
kernel.shmmax = 2147483648
#最大共享内存段数量,通常不需要修改
kernel.shmmni = 4096
# 信号灯的相关配置,cat proc/sys/kernel/sem
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576vm.overcommit_memory = 1
# 关闭swap
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
EOFsysctl -p
sysctl -p /etc/sysctl.conf
sysctl -q vm.swappiness# 关闭swap
swapoff -a
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab# 调整limits.conf
ulimit -n65536
tee /etc/security/limits.d/dmdba.conf <<-'EOF'
*  soft  nice    0
*  hard  nice    0
*  soft  as      unlimited
*  hard  as      unlimited
*  soft  fsize   unlimited
*  hard  fsize   unlimited
*  soft  nproc   65536
*  hard  nproc   65536
*  soft  nofile  65536
*  hard  nofile  65536
*  soft  core    unlimited
*  hard  core    unlimited
*  soft  data    unlimited
*  hard  data    unlimited
EOF
sysctl -ptee /etc/profile.d/dm.sh<<-"EOF"
ulimit -SHn 65536
IP=$(hostname -I|awk '{ print $1}')
PS1="\[\e[1;32m\]\u\[\e[m\]\[\e[1;33m\]@$(hostname) $IP\[\e[m\]\[\e[1;35m\] \t \[\e[m\][pwd:\w]\\$ "
EOF
source /etc/profile# 调整login
sed -i '/pam_limits.so/d' /etc/pam.d/login
tee >>/etc/pam.d/login<<-"EOF"
session  required  /lib64/security/pam_limits.so
session  required  pam_limits.so
EOF# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config# 修改时区
tee /etc/sysconfig/clock <<-"EOF"
ZONE=Asia/Shanghai
EOF
rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime systemctl stop firewalld
systemctl disable firewalld# 或者调整防火墙
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="tcp" port="5237" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="tcp" port="5337" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="tcp" port="5437" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="udp" port="5537" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="udp" port="5437" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="udp" port="5337" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.72.0/24" port protocol="udp" port="5237" accept"
firewall-cmd --reload

二、软件安装

01| 安装DM软件(A\B\C 都安装)

yum install zip unzip -y
groupadd dinstall -g 2001
useradd -g dinstall dmdba -u2001
echo 'admin1234' | passwd dmdba --stdinmkdir /home/dmdba/{dmdbms,dmdata} -p
chown -R dmdba:dinstall /home/dmdba/
mkdir /mnt/dm
mount /opt/dm*/dm8*.iso /mnt/dmcd /mnt/dm
./DMInstall.bin -i
注意:这里需要用root用户执行脚本
sudo sh /home/dmdba/dmdbms/script/root/root_installer.sh# 设置环境变量
cat >> /home/dmdba/.bash_profile <<-'EOF'
#export DM_HOME="/home/dmdba/dmdbms"
#export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${DM_HOME}/bin"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
EOF
source  /home/dmdba/.bash_profile

02| 配置服务器(A)

注意
以下三个参数一定要与客户确认好,在安装实例:

  • CASE_SENSITIVE # 大小敏感(Y),可选值:Y/N,1/0
  • CHARSET # 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
  • LENGTH_IN_CHAR # VARCHAR类型长度是否以字符为单位(N),可选值:Y/N,1/0
dminit PATH=/home/dmdba/dmdata EXTENT_SIZE=32 PAGE_SIZE=32 LOG_SIZE=2048 DB_NAME=dm03 instance_name=dm03 port_num=5237 CASE_SENSITIVE=Y CHARSET=1 LENGTH_IN_CHAR=N# 前台启动服务
cd $DM_HOME/bin/
dmserver /home/dmdata/dm03/dm.ini

设置归档(A)

# 新开一个session操作
# 设置归档
alter database mount;ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdata/dm03/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';alter database archivelog;
alter database open;# 备份
BACKUP DATABASE BACKUPSET 'BACKUP_FILE';/*
注:
【这里可能出现的问题一】
BACKUP DATABASE BACKUPSET 'BACKUP_FILE';
[-718]:收集到的归档日志不连续.
【处理】
前台启动服务时使用绝对路径;使用相对路径会报这个错【这里可能遇到的问题二】
[-7169]:bakres与DMAP消息通信失败.
【处理】
重启DmAPService,执行:DmAPService restart
*/

修改dm.ini参数,或者直接修改dm.ini

SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
--数据库兼容模式,默认0, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata
SP_SET_PARA_VALUE (2,'COMPATIBLE_MODE',2)          # 关闭前台服务

修归档配置

vi dmarch.ini[ARCHIVE_LOCAL1]ARCH_TYPE            = LOCALARCH_DEST            = /home/dmdba/dmdata/dm03/archARCH_FILE_SIZE       = 1024ARCH_SPACE_LIMIT     = 51200ARCH_FLUSH_BUF_SIZE  = 0ARCH_HANG_FLAG       = 1
## 以下为添加内容-主备集群
[ARCHIVE_REALTIME]ARCH_TYPE                = REALTIME  #实时归档类型ARCH_DEST                = DM03_B  #实时归档目标实例名## 以下为添加内容-读写分离集群
#[ARCHIVE_TIMELY1]
#  ARCH_TYPE                = TIMELY  #即时归档类型
#  ARCH_DEST                = DM03_B  #即时归档目标实例名

创建dmmal.ini

  • 如果服务器满足双网卡,两个IP就分别使用一个网卡‘
  • 两个节点的数据库实例名不能一样
MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /home/dmdba/dmdata/dm03/malpath/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE           = 2048  #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL         = 0  #MAL消息压缩等级,0表示不压缩[MAL_INST1]MAL_INST_NAME            = dm03  #实例名,和 dm.ini的INSTANCE_NAME一致MAL_HOST                 = 172.16.72.129  #MAL系统监听TCP连接的IP地址MAL_PORT                 = 5337  #MAL系统监听TCP连接的端口MAL_INST_HOST            = 172.16.72.129  #实例的对外服务IP地址MAL_INST_PORT            = 5237  #实例对外服务端口,和dm.ini的PORT_NUM一致MAL_DW_PORT              = 5437  #实例对应的守护进程watcher监听TCP连接的端口MAL_INST_DW_PORT         = 5537  #实例监听守护进程TCP连接的端口(dmserver<-dmwatcher)
[MAL_INST2]MAL_INST_NAME            = dm03_BMAL_HOST                 = 172.16.72.130MAL_PORT                 = 5337MAL_INST_HOST            = 172.16.72.130MAL_INST_PORT            = 5237MAL_DW_PORT              = 5437MAL_INST_DW_PORT         = 5537

创建dmwatcher.ini
关键参数说明:
[GDW1] # 组名

  • DW_MODE = AUTO #AUTO表示故障自动切换模式;MANUAL 表示手动切换模式
  • INST_OGUID # 必须是int 精度10(否则后边设置模式时将报错)

自动切换和手动切换说明:

  • 自动切换模式:需要3台服务器,为防止脑裂,确认服务器必须单独放置在一台服务器上
  • 手动切换模式:需要2台服务器,可将确认监视器部署在B服务器上,使用时启动,不用时关闭
[GDW1]DW_TYPE                  = GLOBAL  #全局守护类型DW_MODE                  = AUTO  #故障自动切换模式# DW_MODE                  = MANUAL  #故障手动切换模式DW_ERROR_TIME            = 20  #远程守护进程故障认定时间INST_ERROR_TIME          = 20  #本地实例故障认定时间INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间INST_OGUID               = 83765937  #守护系统唯一OGUID值INST_INI                 = /home/dmdba/dmdata/dm03/dm.ini  #dm.ini文件路径INST_AUTO_RESTART        = 1  #打开实例的自动启动功能INST_STARTUP_CMD         = /home/dmdba/dmdbms/bin/dmserver  #命令行方式启动RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

拷贝实例目录到备库(A–>B)

scp -r /home/dmdba/dmdata/dm03 dmdba@172.16.72.130:/home/dmdba/dmdata/
# 注册服务
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -p dm03 -t dmserver -dm_ini /home/dmdba/dmdata/dm03/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdata/dm03/dmwatcher.ini

如果不想使用systemctl管理,可以删除对应的.service 文件

cd /usr/lib/systemd/system
ll | grep Dm

02| 配置服务器(B)

# dm.ini
INSTANCE_NAME              = DM03_B  #数据库实例名,不能和A服务器相同,否则recovery的时候报错# dmarch.iniARCH_DEST                = DM03  #实时归档目标实例名,A服务器实例名
# 注册服务
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -p dm03_B -t dmserver -dm_ini /home/dmdba/dmdata/dm03/dm.ini -m mount
./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /home/dmdba/dmdata/dm03/dmwatcher.ini# 添加环境变量
cat >> /home/dmdba/.bash_profile <<-'EOF'
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
EOF
dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dmdata/dm03/dm.ini' from backupset '/home/dmdba/dmdata/dm03/bak/BACKUP_FILE'"/*注:
【这里最可能出现的问题一】
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
[-4558]:File exists
【解决办法】:
查看$DM_HOME/log/dm_BAKRES*.log,找到报错的文件将其改名(可能出现问题的文件为system.dbf,roll.dbf,main.dbf)
如"/data/dm8/dmdata/dm03/ROLL.DBF already exists." ,对应的处理方式:mv /data/dm8/dmdata/dm03/ROLL.DBF /data/dm8/dmdata/dm03/ROLL.DBF.bak【这里可能出现的问题二】
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:0.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
[-2406]:Invalid log file [/u01/dm8/dmdata/dm03/dm0301.log]
*/dmrman CTLSTMT="RECOVER  DATABASE '/home/dmdba/dmdata/dm03/dm.ini' from backupset '/home/dmdba/dmdata/dm03/bak/BACKUP_FILE'"/*注:
【这里可能出现的问题是】
archive_dest can not be self instance!
Read ini file(/data/dm8/dmdata/dm03/dmarch.ini) error in line 13, code(-952)
【原因】B服务器和A服务器中的INSTANCE_NAME不能相同
【解决办法】1.修改B服务器的dm.ini中INSTANCE_NAME2.修改B服务器中的dmarch.ini中的ARCH_DEST为A服务器实例名*/dmrman CTLSTMT="RECOVER  DATABASE '/home/dmdba/dmdata/dm03/dm.ini' UPDATE DB_MAGIC"

03| 配置监视服务器

监视服务器的配置文件,统一放置到$DM_HOME/bin下

关键性配置:

  • MON_DW_CONFIRM = 1 #0为非确认监视器,1为确认监视器(仅为服务器C配置为1
  • MON_INST_OGUID = 83765937 #组GDW1的唯一OGUID 值(必须是int,DM里int精度为10)
  • MON_DW_IP = 172.16.72.129:5437 # A.MAL_HOST:A.MAL_DW_PORT
  • MON_DW_IP = 172.16.72.130:5437 # B.MAL_HOST:B.MAL_DW_PORT

1. 配置服务器A/B

cat >$DM_HOME/bin/dmmonitor_DM03.ini_0<<-'EOF'
MON_DW_CONFIRM             = 0  #0为非确认,1为确认
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位MB[GDW1]
MON_INST_OGUID           = 83765937  #组GDW1的唯一OGUID 值
MON_DW_IP                = 172.16.72.129:5437      # A.MAL_HOST:A.MAL_DW_PORT
MON_DW_IP                = 172.16.72.130:5437      # B.MAL_HOST:B.MAL_DW_PORT
EOF

2. 配置服务器C

cat >$DM_HOME/bin/dmmonitor_DM03.ini_1 <<-'EOF'
MON_DW_CONFIRM             = 1  #0为非确认,1为确认监视器
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位MB[GDW1]
MON_INST_OGUID           = 83765937  #组GDW1的唯一OGUID 值
MON_DW_IP                = 172.16.72.129:5437      # A.MAL_HOST:A.MAL_DW_PORT
MON_DW_IP                = 172.16.72.130:5437      # B.MAL_HOST:B.MAL_DW_PORT
EOF# 注册监视器root执行(仅C执行)
exit
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor_DM03.ini_1

04| 启动instance,配置模式

# A 服务器
dmdba@dw1_01 [pwd:~/dmdbms/bin]$ ./DmServicedm03 start
dmdba@dw1_01 [pwd:~/dmdbms/bin]$disql SYSDBA/SYSDBA@172.16.72.129:5237
--这里的83765937要和配置文件中的OGUID保持一致
SP_SET_OGUID(83765937);
alter database primary;# B服务器
dmdba@dw1_02 [pwd:~/dmdbms/bin]$ ./DmServicedm03_B start
dmdba@dw1_02 [pwd:~/dmdbms/bin]$ disql SYSDBA/SYSDBA@172.16.72.130:5237
SP_SET_OGUID(83765937);
alter database standby;/*【这里可能出现的报错】
Starting DmServicedm03:                                    [ FAILED ]
file dm.key not found, use default license!
Instance DM03_B cannot find in dmmal.ini
Validate dmarch.ini error, code=-808
dmserver startup failed, code = -808 [Invalid archive config destination]
nsvr_ini_file_read failed, [code: -808]
【处理】
检查dmarch.ini中dest的实例名
*/

三、集群启停

01| 启动集群

说明:服务器A和B的实例默认都是已mount方式启动,当启动了监视器服务后,由监视器检测A.instance 和B.instance的数据是否一致,一致自动将AB实例启动到open状态;

# 1.启动实例A、B,(如果是第一次安装,前面已经启动了)
dmdba@dw1_01 [pwd:~/dmdbms/bin]$ ./DmServicedm03 start
dmdba@dw1_02 [pwd:~/dmdbms/bin]$ ./DmServicedm03_B start# 2.启动守护进程A、B(watcher)
dmdba@dw1_01 [pwd:~/dmdbms/bin]$ ./DmWatcherServiceWatcher start
dmdba@dw1_02 [pwd:~/dmdbms/bin]$ ./DmWatcherServiceWatcher start# 3.启动监视机上的监视器C(monitor)
dmdba@dmteset [pwd:/dm8/dm_home/bin]$ ./DmMonitorServiceMonitor start

02| 关闭集群

关闭集群有两种方式

  • 通过监视器执行命令:stop group
  • 手动关闭集群

Stop Group 命令内部流程如下:

  1. 通知守护进程切换为 Shutdown 状态 ,守护进程并未真正退出
  2. 通知主库退出
  3. 通知其他备库退出

手动关闭集群


# 1.退出监视器-C
dmdba@dmteset [pwd:/dm8/dm_home/bin]$ ./DmMonitorServiceMonitor stop# 2.关闭备机的守护进程
dmdba@dw1_01 [pwd:~/dmdbms/bin]$ ./DmWatcherServiceWatcher stop# 3.关闭主机的守护进程
dmdba@dw1_01 [pwd:~/dmdbms/bin]$ ./DmWatcherServiceWatcher stop# 4,关闭主机实例
SQL> shutdown immediate;# 5.关闭备机实例
SQL> shutdown immediate;

如果是只关闭主库,并且不想引发备库自动接管,有以下两种方法:

  • 方法一:

1.通过 Detach database 命令将所有备库分离
2.通过 Stop database 命令退出主库

  • 方法二:严格按照以下顺序执行:
  1. 通过 Stop dmwatcher 命令关闭所有守护进程监控
  2. 手动正常退出主库

如果是只关闭备库,并且不想引发主库发送日志失败进入 Suspend 状态,请严格按照
以下顺序执行:

  1. 通过 Detach database 命令将备库分离出数据守护系统
  2. 正常退出备库(手动退出或者通过 Stop database 命令退出)

⚠️警告关闭整个数据守护系统时,先关闭主库再关闭备库,顺序一定不能错。
对于本地守护类型的库,在关闭数据守护系统时,不受此顺序限制。
因为主库 Shutdown 过程中,需要 Purge 所有已提交事务,会修改数据,并 产生 Redo 日志。
如果先 Shutdown 备库,会导致主库发送归档日志失败, 并且由于主库已经处于 Shutdown 状态,会导致主库异常关闭。

四、验证集群

01| 验证集群的状态和切换

命令 含义
help 帮助
show、show global info 显示守护进程及其监控数据库的状态信息
exit 关闭监视器
list 查看守护进程的配置信息
tip 查看系统当前运行状态
login 登录监视器,登录监视器后可执行switchover等命令
logout 退出登录
open force 备机不启动,只启动主机及其守护进程时,强制OPEN主机及其守护进程。主机的实时归档变成无效模式
choose switchover GRWC1 主机正常:查看可切换为主机的实例列表
switchover、switchover GRWC1.实例名 主机正常:由系统判断或使用指定组的指定实例,切换为主机
takeover、takeover GRWC1.实例名 主机故障:使用指定组的指定实例,切换为主机
choose takeover GRWC1 主机故障:查看可切换为主机的实例列表
choose takeover force GRWC1 强制切换:查看可切换为主机的实例列表
takeover force GRWC1.实例名 强制切换:使用指定组的指定实例,切换为主机

主机故障后,在备机执行SELECT SF_DW_CHECK_TAKEOVER();【1:可接管 0:不可接管】

以上命令的用法:以前台启动的方式启动一个monitor,直接输入命令

# 1.在前台启动一个非确认监视器(A或B上的monitor)
dmdba@dw1_01 [pwd:~/dmdbms/bin]$ ./dmmonitor dmmonitor_DM03.ini_0
[monitor]         2022-04-28 21:45:40: DMMONITOR[4.0] V8
[monitor]         2022-04-28 21:45:46: DMMONITOR[4.0] IS READY.[monitor]         2022-04-28 21:45:46: 收到守护进程(DM03)消息WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN          CLSN            2022-04-28 21:45:46  OPEN           OK        DM03             OPEN        STANDBY   NULL     7        53157           53157           --> 关注点1                     -->关注点2                  --> 关注点3     -->关注点4    # NULL状态应该是还未获取到新的状态,可以稍后在show一下
[monitor]         2022-04-28 21:45:46: 收到守护进程(DM03_B)消息WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            2022-04-28 21:45:46  OPEN           OK        DM03_B           OPEN        PRIMARY   VALID    7        53157           53158           --> 关注点1                        -->关注点2                  --> 关注点3     -->关注点4
login     # 输入login 登录
用户名:SYSDBA
密码:
[monitor]         2022-04-28 21:48:47: 登录监视器成功!switchover   # 执行手动切换
。。。
[monitor]         2022-04-28 21:56:23: 清理守护进程(DM03)请求成功
2022-04-28 21:56:24
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG
[monitor]         2022-04-28 21:56:24: 清理守护进程(DM03_B)请求成功
[monitor]         2022-04-28 21:56:24: 实例DM03切换成功show     # 查看状态
2022-04-28 21:58:06
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG
GDW1             83765937    FALSE           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
172.16.72.129       5437         2022-04-28 21:58:06  GLOBAL    VALID     OPEN           DM03             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
172.16.72.129       5237       OK        DM03             OPEN        PRIMARY   0          0            REALTIME  VALID    7162            55850           7163            55851           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
172.16.72.130       5437         2022-04-28 21:58:06  GLOBAL    VALID     OPEN           DM03_B           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
172.16.72.130       5237       OK        DM03_B           OPEN        STANDBY   0          0            REALTIME  VALID    7126            55849           7126            55849           NONE                  DATABASE(DM03_B) APPLY INFO FROM (DM03), REDOS_PARALLEL_NUM (1):
DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[7161, 7161, 7162], (RLSN, SLSN, KLSN)[55849, 55849, 55850], N_TSK[0], TSK_MEM_USE[1024]
REDO_LSN_ARR: (55849)#================================================================================#

1. 判断集群状态正常

  • 守护系统正常运行时,同一个守护进程组中,只有一个主库,其他的都是备库。
  • 主库处于 Open 状态,主库**守护进程也处于 Open **状态, 其内存值是 Valid 有效状态。
  • 所有备库也处于 Open 状态,所有备库守护进程处于 Open 状态,其内存值是 Valid 有效状态。
  • 主库到所有备库的**归档也都处于 Valid **有效状态。
  • MPP 主备系统中,所有主库的 dmmpp.ctl 都处于一致状态。

如果通过监视器没有观察到主库或备库 Open, 可以借助监视器的 Check Open 命令查找原因

以下截图中,B的状态为invalid,集群无法同步,可以尝试重新备份A并恢复到B上,

02| 验证集群同步

# 在A上新建表并插入数据
create table test(a int);
insert into test values(1);
commit;
select * from user_tables where table_name='TEST';
SQL> SELECT * FROM TEST;行号     A
---------- -----------
1          1# 在B上查看表和数据
select * from user_tables where table_name='TEST';
SQL> SELECT * FROM TEST;行号     A
---------- -----------
1          1

五、配置集群服务名(对外连接使用)

使用DM数据守护,一般要求编辑DM_svc.conf文件配置连接服务名,以实现故障自动重连。

  • Windows平台下位于%SystemRoot%\system32目录
  • Linux平台下位于/etc目录
  • 编辑DM_svc.conf文件
TIME_ZONE=(+8:00)
LANGUAGE=(en)
DM_DW=(192.168.1.21:5236,192.168.1.23:5236)
LOGIN_MODE=(1)
[DM_DW]
LOGIN_MODE=(1)
SWITCH_TIME=2000
SWITCH_INTERVAL=10

应用连接串

# 以下为主备集群应用连接串配置
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DW1</URL># 以下为读写分离集群应用连接串配置
<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://RWC1</URL>
或<URL>jdbc:dm://192.168.0.206:5236?rwSeparate=1&rwPercent=10</URL>
  • LOGIN_MODE:指定优先登录的服务器模式。

    • 0:优先连接 Primary 模式的库,Normal 模式次之, 最后选择 Stantby 模式;
    • 1:只连接主库;
    • 2:只连接备库;
    • 3:优先连接 Standby 模式的库,Primary 模式次之,最后选择Normal模式;
    • 4:优先连接Normal模式的库,Primary 模式次之,最后选择 Standby 模式。默认值为 4
  • SWITCH_TIME:检测到数据库实例故障时,接口在服务器之间切换的次数;

    • 超过设置次数没有连接到有效数据库时,断开连接并报错。
    • 有效值范围 1~9223372036854775807,默认值为 3。
  • SWITCH_INTERVAL:表示在服务器之间切换的时间间隔 ,单位为毫秒

    • 有效值范围 1~9223372036854775807,默认值为 200。
  • RW_SEPARATE :指定是否启用读写分离。

    • 0 表示不启用读写分离;默认值为 0。
    • 1 表示启用读写分离
  • RW_PERCENT :启用读写分离时,读写分离的分发比例

    • 有效值范围 0~100,默认值为 25。

六、滚动升级

数据守护 V4.0 可以确保在不中断数据库服务的情况下,实现滚动升级。
这里以一主一备的配置方式举例说明

假设初始状态为:主库 DM1 部署在 DW_P 机器上,备库 DM2 部署在 DW_S 机器上,监视器部署在 DW_M 机器上,滚动升级操作步骤如下:

  1. 关闭备库 DM2 的守护进程,正常关闭备库实例 DM2;这个过程中,主库 DM1 的守护进程会检测到备库故障,并进行故障处理,修改归档状态无效。
  2. 升级 DW_S,重新安装新版本服务器,或者直接将新的执行程序和动态库替换旧版本。
  3. 启动 DM2 实例,启动 DM2 的守护进程。
  4. 等待历史数据同步完成,DM2 重新加入数据守护系统(可以通过监视器 DW_M 查看数据守护系统是否恢复正常)。
  5. 关闭主库 DM1 的守护进程,正常关闭实例 DM1;使用监视器的接管命令将 DM2 接管为新的主库。如果配置了自动接管,因为老主库正常退出之后,默认配置(监视器的
    MON_TAKEOVER_SHUTDOWN 配置为 0)无法触发自动接管,所以只能手动干预;如果MON_TAKEOVER_SHUTDOWN 非 0,主库正常退出后,超过设定的时间主库仍未重启,备库可以完成自动接管。
  6. 升级 DW_P,重新安装新版本服务器,或者直接将新的执行程序和动态库替换旧版本。
  7. 启动 DM1 实例,启动 DM1 的守护进程。
  8. 等待历史数据同步完成,DM1 作为备库重新加入数据守护系统(可以通过监视器DW_M 查看数据守护系统是否恢复正常)。
  9. 在 DW_M 监视器控制台上输入 Switchover 命令,重新将 DM1 切换为主库,至此滚动升级完成。
    达梦技术社区:https://eco.dameng.com

02_DM-DW(数据守护)安装部署相关推荐

  1. 大数据平台安装部署(适用虚拟机级真实服务器,亲测)

    大数据集群搭建 一.基础环境准备 (虚拟环境or服务器环境) 1. 虚拟环境准备(服务器安装跳过此步骤) 1.1 安装vmware 注意:安装centos8系统及以上需要高版本vmware,实测vmw ...

  2. 大数据Flink安装部署

    目录 1 Local本地模式 1.1 原理 1.2 操作 1.3 测试 2 Standalone独立集群模式 2.1 原理 2.2 操作 2.3 测试 3 Standalone-HA高可用集群模式 3 ...

  3. 克莱门特公司在俄罗斯一个数据中心安装其新型冷却系统

    日前,欧洲知名制冷厂商克莱门特公司在俄罗斯一个新建的数据中心安装部署了其冷却系统.这个位于雅罗斯拉夫尔数据中心达到了UptimeInstitute的TierIII级可靠性水平.该数据中心设施是一个大型 ...

  4. 4步搞定MySQL安装部署(附MySQL一键式部署脚本)

    墨墨导读:良好的开端是成功的一半,从MySQL安装开始. 学习数据库技术,实际动手的第一步是安装自己的MySQL.MySQL方面也提供多样式的安装方式rpm ,tar ,源码包.当安装完投入使用之后, ...

  5. Docker 安装 命令 数据卷 应用部署 网络优化 Dockerfile 服务编排Compose 私有仓库

    Docker 1. 初识docker 1.1 Docker是什么 了解Docker的前生LXC LXC与docker的关系 Docker 的特点 1.2 为什么使用Docker Docker的优势 缺 ...

  6. DM7数据守护集群部署

    环境介绍: 三台主机,分别为主库.备库.监视器 端口规划 准备工作 主库系统检查 CPU信息检查 #lscpu 内存信息检查 #free -m 检查/proc/sys/vm/overcommit_me ...

  7. 【大数据开发运维解决方案】Solr5.1+Jcseg分词器安装部署(中英文同义词、停止词配置)

    Solr5.1+Jcseg分词器安装部署(同义词.停止词) ###################################################################### ...

  8. DM数据守护集群部署

    DM数据守护集群部署 部署规划 A机器 B机器 心跳ip(MAL_HOST) 172.16.1.1 172.16.1.2 业务ip(对外ip) 192.168.56.145 192.168.56.14 ...

  9. 大数据增量采集OGGAdapter的安装部署与相关配置

    大数据云时代,数据上云ETL已成了最基础,最根本,最必须的一个步骤.目前数据传输迁移的工具非常多,比如dataX,DTS,kettle等等.为了保证云上存储空间的有效利用和数据的整体唯一性,就没必要每 ...

最新文章

  1. Transformer的前世今生
  2. VirtualBox在桥接模式下无网络处理
  3. php导出excel列数太多,php生成excel列名,超过26列大于Z问题解决办法
  4. sql语句之where子句
  5. import与require的区别
  6. android信息实现,Android 信息分享实现
  7. 鸿蒙智慧屏安装apk,亲测华为智慧屏支持安装以下第三方软件,大家赶紧试试!...
  8. Hyper-V固定虚拟机IP
  9. java实现百度识图后台
  10. matlab一维矩形积分,玩转matlab之一维 gauss 数值积分公式及matlab源代码
  11. Python 第二十八章 网络初识+五层协议+三次握手四次挥手
  12. word文档的数据损坏如何进行修复
  13. 乐视电商云的整体架构与技术实现
  14. 12306参数重要信息记录
  15. AI选择描边比例缩放钢笔文字形状线段、弧形渐变混合工具使用
  16. 小乌龟html5小游戏,晨会互动小游戏之《抓乌龟》
  17. 互联网应届生四项职场生存技能
  18. 跟踪 Ring3 - Ring0 的运行流程
  19. kali安装Aria2
  20. 基于Office Project 2010 管理软件研发项目新体验

热门文章

  1. matlab万花,万花尺的动态模拟程序
  2. TOJ2640 The nearest taller cow
  3. 关于写计算机作文,描写电脑的作文
  4. 对onreadystatechange属性的理解
  5. 解决idea切换窗口光标位置跑到本行最左边的问题
  6. 未明学院活动:新零售热门背景提升项目上线,阿里、腾讯都看重的项目经历,你来不来?
  7. 火车预购票系统设计JAVA_JSP火车票预定系统
  8. 88是python语言的整数类型_Python学习系列之数据类型(三)
  9. Vijos 雷曼兔(csapc)
  10. navigateTo传参问题