签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦 数据库 数据守护(Data Watch) (10) -- 动态增加读写分离集群节点

2019-09-13 18:23 2395 0 原创 DM 达梦
作者: dave

1 环境说明

在之前的博客我们搭建了3节点的读写分离集群,如下:http://www.cndba.cn/cndba/dave/article/3680

DM7 达梦 数据库 数据守护(Data Watch) (7) — 读写分离集群搭建
https://www.cndba.cn/dave/article/3677

http://www.cndba.cn/cndba/dave/article/3680

本篇我我们对这个环境添加备库3。

配置环境说明

http://www.cndba.cn/cndba/dave/article/3680
http://www.cndba.cn/cndba/dave/article/3680

主机类型 IP地址 实例名 操作系统
主库 192.168.20.193(外部服务)
192.168.56.193(内部通信)
GRP2_RWW_01 NeoKylin Linux General Server release 6.0 (Dhaulagiri)
备库1 192.168.20.194(外部服务)
192.168.56.194(内部通信)
GRP2_RWW_02 NeoKylin Linux General Server release 6.0 (Dhaulagiri)
备库2 192.168.20.195(外部服务)
192.168.56.195(内部通信)
GRP2_RWW_03 NeoKylin Linux General Server release 6.0 (Dhaulagiri)
备库3 192.168.20.192(外部服务)
192.168.56.192(内部通信)
GRP2_RWW_04 NeoKylin Linux General Server release 6.0 (Dhaulagiri)
监控 192.168.56.190 确认监视器 NeoKylin Linux General Server release 6.0 (Dhaulagiri)

端口规划http://www.cndba.cn/cndba/dave/article/3680

实例名 PORT_NUM DW_PORT MAL_HOST MAL_PORT MAL_DW_PORT
GRP2_RWW_01 5236 5336 192.168.56.193 5436 5536
GRP2_RWW_02 5237 5337 192.168.56.194 5437 5537
GRP2_RWW_03 5238 5338 192.168.56.195 5438 5538
GRP2_RWW_04 5239 5339 192.168.56.192 5439 5539

2 数据准备

2.1 初始化备库3

DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580http://www.cndba.cn/cndba/dave/article/3680

在主库使用dminit 创建GRP2_RWW_04实例:

[dave@www.cndba.cn2 GRP1_DAVE_02]$ dminit PATH=/dm/dmdbms/data DB_NAME=CNDBA INSTANCE_NAME=GRP2_RWW_04
initdb V7.6.0.95-Build(2018.09.13-97108)ENT 
db version: 0x7000a
file dm.key not found, use default license!
License will expire in 14 day(s) on 2019-09-27

 log file path: /dm/dmdbms/data/CNDBA/CNDBA01.log


 log file path: /dm/dmdbms/data/CNDBA/CNDBA02.log

write to dir [/dm/dmdbms/data/CNDBA].
create dm database success. 2019-09-13 17:14:01
[dave@www.cndba.cn2 GRP1_DAVE_02]$ 

#注册服务:
[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -i /dm/dmdbms/data/CNDBA/dm.ini -p GRP2_RWW_04
Move the service script file(/dm/dmdbms/bin/DmServiceGRP2_RWW_04 to /etc/rc.d/init.d/DmServiceGRP2_RWW_04)
Finished to create the service (DmServiceGRP2_RWW_04)
[root@dm2 ~]# 

#启动DB:
[dave@www.cndba.cn2 bin]$ service DmServiceGRP2_RWW_04 start
Starting DmServiceGRP2_RWW_01:                             [ OK ]
[dave@www.cndba.cn2 bin]$

#启动归档模式:
[dave@www.cndba.cn2 CNDBA]$  disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.480(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> alter database mount;
executed successfully
used time: 00:00:01.905. Execute id is 0.
SQL> alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
executed successfully
used time: 2.864(ms). Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 8.586(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 741.576(ms). Execute id is 0.
SQL>

2.2 使用DMRMAN备份主库

对主库进行联机备份:

[dave@www.cndba.cn3 GRP1_LOCAL_03]$ cd /dm/dmdbms/bin
[dave@www.cndba.cn3 bin]$ ./disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 9.169(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> backup database full backupset '/dm/dwbak/dave_full_03';    
executed successfully
used time: 00:00:01.485. Execute id is 20.
SQL> 

#将备份发到备库3:
[dave@www.cndba.cn3 bin]$ cd /dm/dwbak
[dave@www.cndba.cn3 dwbak]$ ls
dave_full_02  dave_full_03
[dave@www.cndba.cn3 dwbak]$ scp -r dave_full_03 192.168.20.192:`pwd`
dmdba@192.168.20.192's password: 
dave_full_03.meta                                                                                                                         100%   73KB  72.5KB/s   00:00    
dave_full_03_1.bak                                                                                                                        100% 5120     5.0KB/s   00:00    
dave_full_03.bak                                                                                                                          100%  120MB  23.9MB/s   00:05    
[dave@www.cndba.cn3 dwbak]$

2.3 还原并恢复备库


#还原数据库
[dave@www.cndba.cn2 bin]$ service DmServiceGRP2_RWW_04 stop
Stopping DmServiceGRP2_RWW_04:                             [ OK ]
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT 
RESTORE DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[4].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[3].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[2].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[1].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[0].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running, write dmrman info.
RESTORE DATABASE  CHECK......
RESTORE DATABASE , dbf collect......
RESTORE DATABASE , dbf refresh ......
RESTORE BACKUPSET [/dm/dwbak/dave_full_03] START......
total 6 packages processed...
RESTORE DATABASE , UPDATE ctl file......
RESTORE DATABASE , REBUILD key file......
RESTORE DATABASE , CHECK db info......
RESTORE DATABASE , UPDATE db info......
total 7 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 8189.784(ms)

#恢复
[dave@www.cndba.cn2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'"
dmrman V7.6.0.95-Build(2018.09.13-97108)ENT 
RECOVER DATABASE '/dm/dmdbms/data/CNDBA/dm.ini' FROM BACKUPSET '/dm/dwbak/dave_full_03'
file dm.key not found, use default license!
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[4].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[3].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[2].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[1].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running...[0].
checking if the database under system path [/dm/dmdbms/data/CNDBA] is running, write dmrman info.
EP[0] max_lsn: 257098
RESTORE RLOG  CHECK......
RESTORE RLOG ,gen tmp file......
RESTORE RLOG FROM BACKUPSET [/dm/dwbak/dave_full_03] START......
total 0 packages processed...
total 2 packages processed!
CMD END.CODE:[0]

EP[0] Recover LSN from 257099 to 257101.
Recover from archive log finished, time used:0.003s.
recover successfully!
time used: 7041.288(ms)
[dave@www.cndba.cn2 bin]$

3 配置新备库

3.1 配置 dm.ini

配置备库实例名 GRP1_RWW_04的dm.ini 参数:

#实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RWW_04
PORT_NUM = 5239 #数据库实例监听端口
DW_PORT = 5339 #守护环境下,监听守护进程连接端口
DW_ERROR_TIME = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息

3.2 配置 dmmal.ini

拷贝一份原系统 dmmal.ini 文件,并加上自己一项,最终配置如下:http://www.cndba.cn/cndba/dave/article/3680

[dave@www.cndba.cn3 CNDBA]$ cat dmmal.ini 
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间

[MAL_INST1]
MAL_INST_NAME = GRP2_RWW_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.56.193 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5436 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.20.193 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 5536 #实例对应的守护进程监听 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME = GRP2_RWW_02
MAL_HOST = 192.168.56.194
MAL_PORT = 5437
MAL_INST_HOST = 192.168.20.194
MAL_INST_PORT = 5237
MAL_DW_PORT = 5537

[MAL_INST3]
MAL_INST_NAME = GRP2_RWW_03
MAL_HOST = 192.168.56.195
MAL_PORT = 5438
MAL_INST_HOST = 192.168.20.195
MAL_INST_PORT = 5238
MAL_DW_PORT = 5538

[MAL_INST4]
MAL_INST_NAME = GRP2_RWW_04
MAL_HOST = 192.168.56.192
MAL_PORT = 5439
MAL_INST_HOST = 192.168.20.192
MAL_INST_PORT = 5239
MAL_DW_PORT = 5539

3.3 配置 dmarch.ini

修改 dmarch.ini,配置本地归档和即时归档。

[dave@www.cndba.cn2 CNDBA]$ cat dmarch.ini 
#DaMeng Database Archive Configuration file
#this is comments

    ARCH_WAIT_APPLY      = 1        

[ARCHIVE_TIMELY1] 
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP2_RWW_01 #即时归档目标实例名
[ARCHIVE_TIMELY2] 
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP2_RWW_02 #即时归档目标实例名
[ARCHIVE_TIMELY3] 
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = GRP2_RWW_03 #即时归档目标实例名

[ARCHIVE_LOCAL1]
    ARCH_TYPE            = LOCAL        
    ARCH_DEST            = /dm/dmarch        
    ARCH_FILE_SIZE        = 128        
    ARCH_SPACE_LIMIT        = 0

3.4 配置 dmwatcher.ini

修改 dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。

[GRP2]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453332 #守护系统唯一 OGUID 值
INST_INI = /dm/dmdbms/data/CNDBA/dm.ini  #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动拉起功能
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭

3.5 配置 dmwatcher.ctl

同一个守护进程组,直接拷贝主库的 dmwatcher.ctl 文件到本地数据文件目录。http://www.cndba.cn/cndba/dave/article/3680

3.6 注册守护进程

[root@dm2 ~]# /dm/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -i /dm/dmdbms/data/CNDBA/dmwatcher.ini -p CNDBA
Move the service script file(/dm/dmdbms/bin/DmWatcherServiceCNDBA to /etc/rc.d/init.d/DmWatcherServiceCNDBA)
Finished to create the service (DmWatcherServiceCNDBA)
[root@dm2 ~]#

3.7 启动备库

以 mount 方式启动备库

dmserver /dm/dmdbms/data/CNDBA/dm.ini mount

3.8 设置 OGUID

启动命令行工具 disql,登录备库设置 OGUID 值。http://www.cndba.cn/cndba/dave/article/3680

[dave@www.cndba.cn2 ~]$ disql SYSDBA/SYSDBA@LOCALHOST:5239

Server[LOCALHOST:5239]:mode is primary, state is mount
login used time: 9.732(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> sp_set_oguid(453332);
DMSQL executed successfully
used time: 17.328(ms). Execute id is 1.

3.9 修改数据库模式

启动命令行工具 disql,登录备库修改数据库为 Standby 模式:

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 9.774(ms). Execute id is 2.
SQL> ALTER DATABASE STANDBY;
executed successfully
used time: 7.611(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 7.376(ms). Execute id is 3.
SQL>

4 动态添加 MAL 配置

本小节的步骤需要分别连接原系统中每个实例单独执行:

1.允许手工修改服务器的模式和状态。
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 10.275(ms). Execute id is 21.
SQL> 

2.退出原系统所有守护进程。
注意守护进程退出后,需要等待对应实例 dm.ini 中配置的 DW_ERROR_TIME 时间后才允许后续操作,否则未超过故障认定时间,服务器认为守护进程仍然处于活动状态,不允许手工修改服务器为 mount 状态。

[dave@www.cndba.cn3 GRP1_LOCAL_03]$ service DmWatcherServicedm3 stop
Stopping DmWatcherServicedm3:                              [ OK ]
[dave@www.cndba.cn3 GRP1_LOCAL_03]$ 

3.修改数据库状态为 MOUNT。
SQL> ALTER DATABASE MOUNT;
executed successfully
used time: 00:00:01.926. Execute id is 0.
SQL> 

4.重新修改 ALTER_MODE_STATUS 值为 0,不允许手工修改服务器的模式和状态
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 13.684(ms). Execute id is 2.
SQL> 

5.动态增加 mal 中 GRP1_RWW_04 的相关配置信息
SQL> SF_MAL_CONFIG(1,0);
DMSQL executed successfully
used time: 1.051(ms). Execute id is 23.
SQL> SF_MAL_INST_ADD('MAL_INST4','GRP2_RWW_04','192.168.56.192',5439,'192.168.20.192', 5239, 5539);
DMSQL executed successfully
used time: 1.916(ms). Execute id is 24.
SQL> SF_MAL_CONFIG_APPLY();
DMSQL executed successfully
used time: 2.593(ms). Execute id is 25.
SQL> SF_MAL_CONFIG(0,0);
DMSQL executed successfully
used time: 0.913(ms). Execute id is 26.
SQL>

在其他节点重复以上步骤。

5 动态添加归档配置

分别连接原系统中的所有实例(此时处于 MOUNT 状态),动态添加 dmarch.ini 中归档节点

SQL> alter database add archivelog ‘DEST=GRP2_RWW_04, TYPE=TIMELY’;

6 修改监视器 dmmonitor.ini

在 dmmonitor.ini 中添加新增的备库 GRP1_RWW_04:

MON_DW_IP = 192.168.0.144:52144

http://www.cndba.cn/cndba/dave/article/3680

7 启动所有守护进程以及监视器

分别启动主库和备库(包括 GRP1_RWW_04)的所有守护进程,最后启动监视器。

[dave@www.cndba.cn2 ~]$ service DmWatcherServiceCNDBA start
Starting DmWatcherServiceCNDBA:                            [ OK ]
[dave@www.cndba.cn2 ~]$ 

[dave@www.cndba.cn3 GRP1_LOCAL_03]$ service DmWatcherServicedm3 start
Starting DmWatcherServicedm3:                              [ OK ]
[dave@www.cndba.cn3 GRP1_LOCAL_03]$ 

[dave@www.cndba.cn4 CNDBA]$ service DmWatcherServicedm4 start
Starting DmWatcherServicedm4:                              [ OK ]
[dave@www.cndba.cn4 CNDBA]$ 

[dave@www.cndba.cn5 CNDBA]$ service DmWatcherServicedm5 start
Starting DmWatcherServicedm5:                              [ OK ]
[dave@www.cndba.cn5 CNDBA]$ 


[dmdba@monitor data]$ service DmMonitorServicedave start
Starting DmMonitorServicedave:                             [ OK ]
[dmdba@monitor data]$

8 验证

8.1 数据同步测试

#主库:
[dave@www.cndba.cn3 ~]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is primary, state is open
login used time: 9.332(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> create table yueshan as select * from sysobjects;
executed successfully
used time: 47.511(ms). Execute id is 27.
SQL> 

#备库1,同步正常:
[dave@www.cndba.cn4 CNDBA]$ disql SYSDBA/SYSDBA@LOCALHOST:5237

Server[LOCALHOST:5237]:mode is standby, state is open
login used time: 9.617(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select count(1) from yueshan;

LINEID     COUNT(1)            
---------- --------------------
1          1276

used time: 6.754(ms). Execute id is 7.
SQL> 

#备库2,同步正常:
[dave@www.cndba.cn5 CNDBA]$ disql SYSDBA/SYSDBA@LOCALHOST:5238

Server[LOCALHOST:5238]:mode is standby, state is open
login used time: 9.059(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select count(1) from yueshan;

LINEID     COUNT(1)            
---------- --------------------
1          1276

used time: 6.476(ms). Execute id is 7.
SQL> 

#备库4,同步正常:
[dave@www.cndba.cn2 ~]$ disql SYSDBA/SYSDBA@LOCALHOST:5239

Server[LOCALHOST:5239]:mode is standby, state is open
login used time: 9.175(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL>  select count(1) from yueshan;

LINEID     COUNT(1)            
---------- --------------------
1          1276

used time: 6.491(ms). Execute id is 1.
SQL>

8.2 查看进程状态

SQL> select * from V$MAL_LINK_STATUS;

LINEID     SRC_SITE    DEST_SITE   CTL_LINK_STATUS DATA_LINK_STATUS
---------- ----------- ----------- --------------- ----------------
1          GRP2_RWW_04 GRP2_RWW_01 CONNECTED       CONNECTED
2          GRP2_RWW_04 GRP2_RWW_02 CONNECTED       CONNECTED
3          GRP2_RWW_04 GRP2_RWW_03 CONNECTED       CONNECTED

used time: 2.335(ms). Execute id is 2.
SQL> 

SQL> select arch_dest,arch_type from V$ARCH_SEND_INFO;

LINEID     ARCH_DEST   ARCH_TYPE  
---------- ----------- -----------
1          GRP2_RWW_04 5
2          GRP2_RWW_03 5
3          GRP2_RWW_02 5

used time: 0.624(ms). Execute id is 34.
SQL>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2283
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8185645次
  • 积分:4428
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ