02_DM-DW(数据守护)安装部署

达梦技术社区: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       说明  
测试GDW183765937A-primary172.16.72.129172.16.72.129dm035237533754375537/home/dmdba/dmdbms/home/dmdba/dmdata51200
B-standby172.16.72.130172.16.72.130dm03_B5237533754375537/home/dmdba/dmdbms/home/dmdba/dmdata51200
C-monitor172.16.72.128172.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 = 1048576

vm.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
EOF

sysctl -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 -p

tee /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 --stdin

mkdir /home/dmdba/{dmdbms,dmdata} -p
chown -R dmdba:dinstall /home/dmdba/
mkdir /mnt/dm
mount /opt/dm*/dm8*.iso /mnt/dm

cd /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            = LOCAL
        ARCH_DEST            = /home/dmdba/dmdata/dm03/arch
        ARCH_FILE_SIZE       = 1024
        ARCH_SPACE_LIMIT     = 51200
        ARCH_FLUSH_BUF_SIZE  = 0
        ARCH_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_B
  MAL_HOST                 = 172.16.72.130
  MAL_PORT                 = 5337
  MAL_INST_HOST            = 172.16.72.130
  MAL_INST_PORT            = 5237
  MAL_DW_PORT              = 5437
  MAL_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.ini
  ARCH_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_NAME
 2.修改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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值