达梦数据库读写分离集群,发生故障的处理方式

达梦数据库读写分离集群简介

读写分离集群(DMRWC)是一个用于提升并发事务处理性能的集群组件。在一个高并发的事务型系统中,当写事务占的比例相对读事务较小时,这种独具创新的方案DMRWC,可通过客户端来实现读、写事务的自动分离,读事务在备机执行,写事务在主机执行,减轻主机的负载。可配置多台备机,通过增加备机节点资源,提高系统的并发能力,增强系统性能。
达梦数据库读写分离集群还具备数据保护、容灾等高可用性,提供数据同步、备库故障自动处理、故障恢复自动数据同步等功能,也支持自动故障切换和手动故障切换两种守护模式。

自动故障处理

当备库发生故障时,主库的数据库服务不会受到不影响,守护进程会自动通知主库修改归档为 Invalid 状态,将备库失效。

自动数据同步

当备库故障恢复后,守护进程自动通知主库发送归档和 Redo 日志,继续进行主备库数据同步。在历史数据同步完成后,修改主库的归档状态为 Valid,恢复备库功能。
当主库发生故障,由备库接管后,原主库故障恢复,守护进程会自动将原主库以备库的模式重新入主备系统。

备库接管

当主库发生故障后,可以通过监视器执行 Takeover 命令,将备库切换为主库,继续对外提供服务。如果配置为自动切换模式,确认监视器可以自动检测主库故障,并通知备库接管,这个过程不需要人工干预。

必须使用监视器进行操作
1.登录监视器为交互模式(这里不能使用后台模式,否则无法使用监视器自带的相关命令)
例:./dmmonitor …/data/dameng/dmmonitor.ini
2.登录(会提示输入用户名和密码,使用SYSDBA/SYSDBA即可)
Login
用户名:
密码:
登录成功提示:Login dmmonitor success!
3.接管
takeover 组名.实例名
4.查看确认
show

备库强制接管

如果执行 Takeover 命令不成功,但主库又由于硬件损坏等原因无法马上恢复,为了及时恢复数据库服务,DM 提供了 Takeover Force 命令,强制将备库切换为主库。但需要由用户确认主库故障前,主库与接管备库的数据是一致的(主库到备库的归档是 Valid状态),避免引发守护进程组分裂。
执行 Takeover Force 有可能引发组分裂,而 Takeover 命令是在确保不会产生组分裂情况下才会执行成功。

必须使用监视器进行操作
1.登录监视器为交互模式(这里不能使用后台模式,否则无法使用监视器自带的相关命令)
例:./dmmonitor …/data/dameng/dmmonitor.ini
2.登录(会提示输入用户名和密码,使用SYSDBA/SYSDBA即可)
Login
用户名:
密码:
登录成功提示:Login dmmonitor success!
3.接管
takeover force 组名.实例名
4.查看确认
show

在某些极端情况下或人为因素,导致的硬件故障或者组分裂等集群处于无法自动恢复的状态时,通常处理方式如下:

可以手动关闭故障服务器的守护进程和数据库进程(如果发生故障时进程仍然在运行),只使用单一主库+确认监视器继续对外提供服务。在合适的时候再重新动态搭建备库,搭建过程不需要停止数据库服务。

示例:集群发生组分裂的恢复

发生组分裂时,通过监视查看集群状态:
产生了2个主库,一个open状态一个mount状态

show
2021-05-25 20:20:00 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453332      TRUE            AUTO            FALSE     

GROUP SPLIT:
1: DATABASE(GRP1_RWW_02):

<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.10.12   52141        2021-05-25 20:20:00  GLOBAL    VALID     OPEN           GRP1_RWW_02      OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_02      OPEN        PRIMARY   0          0            TIMELY    VALID    3998            41551           3998            41551           NONE                  

2: DATABASE(GRP1_RWW_01):

<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.10.11   52141        2021-05-25 20:20:00  GLOBAL    SPLIT     STARTUP        GRP1_RWW_01      OK        1     1     MOUNT       PRIMARY   DSC_OPEN       TIMELY    VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_01      MOUNT       PRIMARY   0          0            TIMELY    VALID    3997            40199           3997            40199           NONE                  

#================================================================================#

动态重建备库

在不停服务的情况下进行动态搭建

先后关闭mount主库GRP1_RWW_01上的守护进程和数据库进程

[dmdba@localhost bin]$ disql 
disql V8
用户名:
密码:

服务器[LOCALHOST:5236]:处于主库配置状态
登录使用时间 : 7.448(ms)
SQL> exit
[dmdba@localhost bin]$ DmWatcherServiceDMWATCHER stop
Stopping DmWatcherServiceDMWATCHER:                        [ OK ]
[dmdba@localhost bin]$ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER:                                [ OK ]

对open的主库GRP1_RWW_02进行热备

SQL> backup database full backupset '/home/dmdba/full_bak';
操作已执行
已用时间: 00:00:01.102. 执行号:400.

将备份考到GRP1_RWW_01上进行恢复

[dmdba@localhost ~]$ scp -r full_bak/ 192.168.10.11:/home/dmdba
dmdba@192.168.10.11's password: 
full_bak.bak                                                                                                                                  100%   27MB  84.7MB/s   00:00    
full_bak_1.bak                                                                                                                                100%   34KB   2.0MB/s   00:00    
full_bak.meta   

将GRP1_RWW_01的原数据目录重命名,在相同位置重新初始化实例

[dmdba@localhost data]$ mv DAMENG bak_DAMENG
[dmdba@localhost data]$ dminit PATH=/home/dmdba/dmdbms/data
initdb V8
db version: 0x7000b
file dm.key not found, use default license!
License will expire on 2021-11-06

 log file path: /home/dmdba/dmdbms/data/DAMENG/DAMENG01.log


 log file path: /home/dmdba/dmdbms/data/DAMENG/DAMENG02.log

write to dir [/home/dmdba/dmdbms/data/DAMENG].
create dm database success. 2021-05-25 20:33:36

[dmdba@localhost data]$ dmrman 
dmrman V8
RMAN> restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/full_bak';
restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/full_bak';
file dm.key not found, use default license!
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]                                 
restore successfully.
time used: 312.129(ms)
RMAN> recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/full_bak';
recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/full_bak';
Database mode = 1, oguid = 453332
EP[0]’s cur_lsn[41551]
EP:0 total 1 pkgs applied, percent: 50%
EP:0 total 2 pkgs applied, percent: 100%
recover successfully!
time used: 241.618(ms)
RMAN> recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic;
recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic;
Database mode = 1, oguid = 453332
EP[0]'s cur_lsn[41562]
recover successfully!
time used: 982.844(ms)

GRP1_RWW_01恢复完成后将原来的ini文件拷贝到数据目录中,并启动守护进程

[dmdba@localhost data]$ cp bak_DAMENG/*.ini DAMENG/
[dmdba@localhost data]$ DmWatcherServiceDMWATCHER start
Starting DmWatcherServiceDMWATCHER:                        [ OK ]

查看监视器

[monitor]         2021-05-25 20:42:33: 守护进程(GRP1_RWW_01)状态切换 [NONE-->STARTUP]
[monitor]         2021-05-25 20:42:49: 守护进程(GRP1_RWW_01)状态切换 [STARTUP-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2021-05-25 20:42:49  OPEN           OK        GRP1_RWW_01      OPEN        STANDBY   INVALID  4        41562           41562           

[monitor]         2021-05-25 20:42:53: 守护进程(GRP1_RWW_02)状态切换 [OPEN-->RECOVERY]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2021-05-25 20:42:52  RECOVERY       OK        GRP1_RWW_02      OPEN        PRIMARY   VALID    4        41571           41571           

[monitor]         2021-05-25 20:42:55: 守护进程(GRP1_RWW_02)状态切换 [RECOVERY-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2021-05-25 20:42:55  OPEN           OK        GRP1_RWW_02      OPEN        PRIMARY   VALID    4        41571           41571   

GRP1_RWW_01恢复后将以备库状态加入集群

show
2021-05-25 20:44:54 
#================================================================================#
GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
GRP1             453332      TRUE            AUTO            FALSE     


<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.10.12   52141        2021-05-25 20:44:53  GLOBAL    VALID     OPEN           GRP1_RWW_02      OK        1     1     OPEN        PRIMARY   DSC_OPEN       TIMELY    VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_02      OPEN        PRIMARY   0          0            TIMELY    VALID    4005            41571           4005            41571           NONE                  

<<DATABASE GLOBAL INFO:>>
IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
192.168.10.11   52141        2021-05-25 20:44:53  GLOBAL    VALID     OPEN           GRP1_RWW_01      OK        1     1     OPEN        STANDBY   DSC_OPEN       TIMELY    VALID    

EP INFO:
INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
5236       OK        GRP1_RWW_01      OPEN        STANDBY   0          0            TIMELY    VALID    4001            41571           4001            41571           NONE                  

DATABASE(GRP1_RWW_01) APPLY INFO FROM (GRP1_RWW_02):
DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[4005, 4005, 4005], (ALSN, SLSN, KLSN)[41571, 41571, 41571], N_TSK[0], TSK_MEM_USE[0]


#================================================================================#

动态重建备库完成。

达梦数据库配置读写分离的准备工作包括以下步骤: 1. 首先,需要进行数据库的快速安装。可以将数据库安装路径设置为/data/soft/database/dmdba。 2. 接下来,需要初始化数据库实例。可以使用以下命令进行初始化: ``` su - dmdba cd /data/soft/database/dmdba/bin 初始化命令 ``` 具体的初始化命令需要根据数据库版本和具体需求进行设置。 3. 然后,需要准备读写分离的配置。可以使用达梦数据库提供的脱机备份工具dmrman来备份主库DM160。具体的步骤如下: ``` su - dmdba cd /data/soft/database/dmdba/bin 使用dmrman备份主库DM160的命令 ``` 备份命令需要根据具体的数据库配置和要备份的主库进行设置。 完成以上准备工作后,数据库就可以进行读写分离的配置了。具体的配置过程需要根据数据库版本和具体需求进行设置,可以参考数据库的官方文档或咨询达梦数据库的技术支持团队。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [猿创征文|达梦数据库如何实现读写分离?](https://blog.csdn.net/m0_59492087/article/details/127246085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值