实时主备集群标准化部署+切换测试

发布于:2022-11-28 ⋅ 阅读:(305) ⋅ 点赞:(0)

1主备集群(2节点)规划

1.1服务器IP规划

类别 实例名 服务器地址 心跳IP
主库 ZB1 192.168.11.128 10.10.1.128
备库 ZB2 192.168.11.129 10.10.1.129

1.2端口规划

名称 端口
PORT_NUM 5236
MAL_PORT 7336
MAL_DW_PORT 7536
MAL_INST_DW_PORT 7436
MAL_INST_PORT 5236

注意:上述IP地址对应的服务器端口要求双向互通,监视器心跳IP要求和主备服务器心跳IP在同一网段。

1.3目录规划

目录 路径
安装目录 /home/dmdba/dmdbms
数据文件目录 /home/dmdba/dbdata/dmdata
备份目录 /home/dmdba/dbbak/dmbak
归档目录 /home/dmdba/dbarch/dmarch

2.集群部署

2.1.数据库软件安装

可参考我之前的博文:DM数据库安装及启动教程(Linux超详细版)

注意:两台服务器都需要安装

2.2初始化实例

2个节点都有实例初始化,执行以下命令:
主机ZB1:

[dmdba@LH01 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@LH01 bin]$./dminit path=/home/dmdba/dbdata/dmdata page_size=32 log_size=1024 instance_name=ZB1

开启服务

[dmdba@ZB1 bin]$ cp service_template/DmService dmserverd
[dmdba@ZB1 bin]$ vim dmserverd
INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dm.ini
[dmdba@ZB1 bin]$ dmserverd start

开机自启配置

[root@ZB1 ~]# cd /home/dmdba/dmdbms/bin
[root@ZB1 bin]# cp dmserverd /etc/init.d/
[root@ZB1 bin]# chkconfig --add dmserverd
[root@ZB1 bin]# chkconfig --list

备机ZB2:

[dmdba@ZB2 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@ZB2 bin]$ ./dminit path=/home/dmdba/dbdata/dmdata page_size=32 log_size=1024 instance_name=ZB2

开启服务

[dmdba@ZB2 bin]$ cp service_template/DmService dmserverd
[dmdba@ZB2 bin]$ vim dmserverd
INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dm.ini
[dmdba@ZB2 bin]$ dmserverd start

开机自启配置

[root@ZB2 ~]# cd /home/dmdba/dmdbms/bin
[root@ZB2 bin]# cp dmserverd /etc/init.d/
[root@ZB2 bin]# chkconfig --add dmserverd
[root@ZB2 bin]# chkconfig --list

2.3数据库参数优化

主备机前台启动实例,出现system is ready后即为启动完成

[dmdba@ZB1 bin]$ ./dmserver /home/dmdba/dbdata/dmdata/DAMENG/dm.ini
[dmdba@ZB2 bin]$ ./dmserver /home/dmdba/dbdata/dmdata/DAMENG/dm.ini

登录数据库执行以下脚本


脚本文件百度网盘自取:
链接:https://pan.baidu.com/s/1WttHVgBR8DABQYI1oWf8xg?pwd=taux
提取码:taux


[dmdba@ZB1 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.128:5236
SQL> start /home/dmdba/dm.sql

[dmdba@ZB2 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.129:5236
SQL> start /home/dmdba/dm.sql

2.4脱机备份主机数据库

在主机ZB1上执行以下命令,确认主库dmap服务已启动:

ps -ef|grep dmap

若未启动,则先启动 DMAP 服务,使用dmdba用户切换到安装目录的 bin 下执行以下命令:

./DmAPService start

若已启动,则执行以下命令进行脱机备份

[dmdba@ZB1 bin]$ ./dmserverd stop
[dmdba@ZB1 bin]$ ./dmrman use_ap=2
[dmdba@ZB1 bin]$backup database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' backupset '/home/dmdba/dbbak/dmbak/bakfull';

2.5脱机还原备机数据库

将备份的文件/home/dmdba/dbbak/dmbak/bakfull拷贝到备库服务器上。

[dmdba@ZB1 dmbak]# scp -r bakfull/ dmdba@192.168.11.129:/home/dmdba/dbbak/dmbak

在备机ZB2上,使用 dmrman 工具还原备库,dmdba 用户执行:

[dmdba@ZB2 dmbak]$ cd /home/dmdba/dmdbms/bin
[dmdba@ZB2 bin]$ ./dmserverd stop
[dmdba@ZB2 bin]$ ./dmrman
##执行restore
RMAN> restore database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/dbbak/dmbak/bakfull';
##执行recover
RMAN> recover database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/dbbak/dmbak/bakfull';
##执行recover update db_magic
RMAN> recover database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' update db_magic;

2.6配置文件修改

2.6.1修改dm.ini参数

在ZB1和ZB2上分别修改dm.ini参数值:

vi /dmdata/DAMENG/dm.ini
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
2.6.2配置归档配置文件 dmarch.ini

在ZB1和ZB2上分别修改dmarch.ini参数值:

[dmdba@ZB1 DAMENG]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmarch.ini
[dmdba@ZB2 DAMENG]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmarch.ini

##注意:如果没有dmarch.ini需要新建
主机ZB1上添加以下内容:

[ARCHIVE_REALTIME]
ARCH_TYPE     = REALTIME  #实时归档类型
aRCH_DEST     = ZB2   #实时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL #本地归档类型
ARCH_DEST     = /home/dmdba/dbarch/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE    = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 10240    #单位 MB,0 表示无限制,范围 1024~4294967294 MB

备机ZB2上添加以下内容:

[ARCHIVE_REALTIME]
ARCH_TYPE     = REALTIME  #实时归档类型
aRCH_DEST     = ZB1   #实时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL #本地归档类型
ARCH_DEST     = /home/dmdba/dbarch/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE    = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 10240    #单位 MB,0 表示无限制,范围 1024~4294967294 MB  
2.6.3配置MAL系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令。

[dmdba@ZB1 DAMENG]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmmal.ini

##注意:主备库2个节点文件内容要相同,内容如下:

MAL_CHECK_INTERVAL   = 5
MAL_CONN_FAIL_INTERVAL  = 15
[MAL_INST1]
  MAL_INST_NAME = ZB1
  MAL_HOST     = 10.10.1.128
  MAL_PORT     = 7336
  MAL_INST_HOST   = 192.168.11.128
  MAL_INST_PORT   = 5236
  MAL_DW_PORT   = 7536
  MAL_INST_DW_PORT = 7436
[MAL_INST2]
  MAL_INST_NAME = ZB2
  MAL_HOST      = 10.10.1.129
  MAL_PORT          = 7336
  MAL_INST_HOST         = 192.168.11.129
  MAL_INST_PORT         = 5236
  MAL_DW_PORT  = 7536
  MAL_INST_DW_PORT = 7436
2.6.4配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

vi /home/dmdba/dbdata/dmdata/DAMENG/dmwatcher.ini

##注意:主备库2个节点文件内容相同(由于实例路径的原因),内容如下:

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

修改主库oguid和数据库状态,在ZB1上执行以下命令
(1)主库mount方式后台启动
在ZB1上目录/dmdbms/bin/service_template拷贝DmService文件到/ dmdbms/bin目录下改名为dmserverd,然后修改dmserverd中INI_PATH为主库dm.ini路径(/dmdata/DAMENG/dm.ini),修改START_MODE为mount,保存修改后,执行命令:

./dmserverd start  #启动主库数据库后台服务

(2)使用disql工具连接主库

[dmdba@ZB1 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.128:5236

(3)修改oguid

SQL> sp_set_oguid(453331);

(4)修改数据库模式为primary

SQL> alter database primary;

修改备库oguid和数据库状态,在ZB2上执行以下命令
(1)备库mount方式后台启动
在ZB2上目录/dmdbms/bin/service_template拷贝DmService文件到/ dmdbms/bin目录下改名为dmserverd,然后修改dmserverd中INI_PATH为主库dm.ini路径(/dmdata/DAMENG/dm.ini),修改START_MODE为mount,保存修改后,执行命令:

./dmserverd start  #启动主库数据库后台服务

(2)使用disql工具连接备库

[dmdba@ZB2 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.129:5236

(3)修改oguid

sp_set_oguid(453331);

(4)修改数据库模式为standby

alter database standby;

如果不慎配成了primary,解决办法如下:

SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);
SQL> alter database standby;

就可以了

2.6.6修改后台启动脚本

(1)守护进程后台启动脚本
在ZB1和ZB2上的目录/dmdbms/bin/service_template拷贝DmWatcherService文件到/ dmdbms/bin目录下,然后修改DmWatcherService中 INI_PATH为ZB1和ZB2指定守护进程配置文件dmwatcher.ini的路径(比如/ dmdata/DAMENG/dmwatcher.ini)。

[root@ZB1 dmdbms]# cp ./bin/service_template/DmWatcherService ./bin/DmWatcherService
[root@ZB1 bin]# vi DmWatcherService
INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dmwatcher.ini

(2)监视器进程后台脚本
在要部署的监视服务器ZB2上的/dmdbms/bin/service_template拷贝DmMonitorService到/dmdbms/bin目录下,然后修改DmMonitorService中INI_PATH为监视器配置文件dmmonitor.ini路径(比如/ dmdata/DAMENG/dmmonitor.ini).

[dmdba@ZB2 DAMENG]$ cd /home/dmdba/dmdbms/bin
[dmdba@ZB2 bin]$ cp ./service_template/DmMonitorService DmMonitorService
[dmdba@ZB2 bin]$ vi DmMonitorService
INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dmmonitor.ini

[dmdba@ZB2 bin]$ cd /home/dmdba/dbdata/dmdata/DAMENG/
[dmdba@ZB2 DAMENG]$ vi dmmonitor.ini
MON_DW_CONFIRM    = 1 #确认监视器模式
MON_LOG_PATH    = /home/dmdba/dbdata/dmdata/log  #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT  = 1024  #不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID    = 453331 #组 GRP_DW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP     = 10.10.1.128:7536
MON_DW_IP     = 10.10.1.129:7536
2.6.7配置sql日志

ZB1和ZB2切换到/dmdata/DAMENG/目录下,执行vi sqllog.ini(记录1.5s以上sql),修改内容如下:

[dmdba@ZB1 bin]$ cd /home/dmdba/dbdata/dmdata/DAMENG/
[dmdba@ZB1 DAMENG]$ vi sqllog.ini
BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = /sqllog
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 10
ITEMS = 0
SQL_TRACE_MASK = 7:14:15:22:24:25:26:27:28
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS = 

备注:SQL_TRACE_MASK请按实际需求配置。如果在服务器启动过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过SQL> SP_REFRESH_SVR_LOG_CONFIG();就会生效。

2.7启动集群

(1)启动守护进程
dmdba 用户切换到数据库安装目录的 bin 下执行以下命令(主备库都执行):

[dmdba@ZB1 bin]$ ./DmWatcherService start
[dmdba@ZB2 bin]$ ./DmWatcherService start

守护进程启动后,会将 Mount 的实例 Open。

(2)启动监视器进程
建议配置在第三台独立的服务器上(需安装和主备相同 版本的DM 数据库软件(不必初始化实例),且与主备心跳网络端口开放),守护进程配置为自动切换时,必须配置确认监视器。
使用执行以下命令,启动监视器。

[dmdba@ZB2 bin]$ ./DmMonitorService start

启动后到 /dmdbms/log查找监视器日志,其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
注意:数据库日常运行情况下,监视器保持后台运行,一旦数据库有异常,可打印出监视器日志,帮助工程师分析。如果需要实时监测,可以临时关掉后台进程,改成前台启动或者重新配置一个监视器前台启动(总共可以配置8个非确认监视器):
用dmdba用户执行以下命令,前台启动监视器:

[dmdba@ZB2 bin]$ ./dmmonitor /home/dmdba/dbdata/dmdata/DAMENG/dmmonitor.ini

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

(3)disql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:

[dmdba@ZB1 bin]$./disql SYSDBA/SYSDBA@192.168.11.128:5236
SQL 提示符下执行以下命令:
SQL> create table t1(id int);
操作已执行
已用时间: 160.022(毫秒). 执行号:600.
SQL> insert into t1 values(1);
影响行数 1

已用时间: 37.799(毫秒). 执行号:601.
SQL> commit;
操作已执行

使用 disql 客户端登录备库,查询测试表验证,执行以下命令:

[dmdba@ZB1 bin]$./disql SYSDBA/SYSDBA@192.168.11.129:5236
SQL 提示符下执行以下命令:
SQL>select * from t1;

查看数据是否正常同步。

2.8制定备份策略

备份与单机相同(主库上备份)。

SP_INIT_JOB_SYS(1);
---全备:
call SP_CREATE_JOB('dbbak',1,0,'',0,0,'',0,'bak');

call SP_JOB_CONFIG_START('dbbak');

call SP_ADD_JOB_STEP('dbbak', 'full_bak', 6, '01040000/dbbak/dmbak', 3, 1, 0, 0, NULL, 0);

call SP_ADD_JOB_STEP('dbbak', 'delbak', 0, 'call SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dbbak/dmbak'');
call SF_BAKSET_REMOVE_BATCH(''DISK'',NOW()-7,NULL,NULL);', 1, 1, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('dbbak', 'bak_time', 1, 2, 1, 64, 0, '00:30:00', NULL, '2022-03-28 11:02:45', NULL, '');

call SP_JOB_CONFIG_COMMIT('dbbak');


---增备:
call SP_CREATE_JOB('increbak',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('increbak');

call SP_ADD_JOB_STEP('increbak', 'incre_bak', 6, '11040000/dbbak/dmbak|/dbbak/dmbak', 1, 1, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('increbak', 'incre_time', 1, 2, 1, 63, 0, '00:30:00', NULL, '2022-03-10 11:34:42', NULL, '');

call SP_JOB_CONFIG_COMMIT('increbak');

2.9问题:

2.9.1 code=-6010, oguid or group_name mismatch

[monitor] 2022-10-10 09:25:43: dmmonitor(mid:1665365142) create link to dmwatcher(10.10.1.129:7536) error, code=-9402, please check configuration!!!
[monitor] 2022-10-10 09:25:43: dmmonitor(mid:1665365142) create link to dmwatcher(10.10.1.129:7536) error, code=-6010, oguid or group_name mismatch, please check configuration!!!

分析:配置文件dmwatcher.ini与dmmonitor.ini配置文件中的组名[GRP_DW]不一致造成的。

2.9.2集群状态中主库状态是挂起

在这里插入图片描述
解决办法:修改监控配置文件

[dmdba@ZB2 bin]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmmonitor.ini

将MON_DW_CONFIRM =1 #修改为确认监视器模式(0为普通,1为确认)

3.切换测试

3.1确认数据库守护和监控状态

(1)主库

[dmdba@ZB1 ~]$ ps -ef | grep dms
[dmdba@ZB1 ~]$ ps -ef | grep dmw

在这里插入图片描述
(2)备库

[dmdba@ZB2 ~]$ ps -ef | grep dms
[dmdba@ZB2 ~]$ ps -ef | grep dmw
[dmdba@ZB2 bin]$  ps -ef | grep dmm

在这里插入图片描述

3.2手动切换主备库

查询监视情况
在这里插入图片描述
ZB1为集群主库,ZB2为集群备库,主备集群状态正常。
不用exit退出监视器,直接输入以下命令登录监视器进行切换

login
用户名:SYSDBA
密码:
[monitor]         2022-10-10 19:25:08: 登录监视器成功!
switchover GRP_DW.ZB2

在这里插入图片描述
切换之后show可以看见ZB2备库的状态变为了PRIMARY,而主库ZB1则变为了STANDBY。切换成功!
在这里插入图片描述

3.3主备集群故障切换测试

3.3.1主库停守护
[dmdba@ZB1 bin]$ ./DmWatcherService stop
Stopping DmWatcherService:                                 [ OK ]

在这里插入图片描述
监视器监控到主库ZB1异常,并将ZB2备库切换为主库。

主库ZB1重启守护之后,监视器显示ZB1重新成为主库,ZB2成为备库

在这里插入图片描述

3.3.2主库停数据库服务
[dmdba@ZB1 bin]$ ./dmserverd stop
Stopping dmserverd:                                        [ OK ]

在这里插入图片描述
停掉主库ZB1数据库服务后,ZB2仍然是备库,但监视器显示主库ZB1已经SHUTDOWN关机。

重启主库服务后,ZB1为主库,ZB2为备库
在这里插入图片描述

3.3.3备库停守护

当数据库守护停止时,监视器监控不到备库信息
在这里插入图片描述
备库重启守护之后,备库重新加入集群

3.3.4备库停服务

监视器监控到备库异常
在这里插入图片描述
在这里插入图片描述

重启备库服务,监视器收到备库信息,备库重新加入到集群当中。

在这里插入图片描述


达梦在线服务平台: https://eco.dameng.com


本文含有隐藏内容,请 开通VIP 后查看