1,断开备库server
初始状态:CHEN1主库,CHEN2备库
目标状态:CHEN2 server被自动拉起,恢复初始状态
(1)杀掉备库server进程
(2)备库守护进程会自动尝试拉起server
(3)成功拉起后,恢复初始状态
2,断开备库watcher
初始状态:CHEN1主库,CHEN2备库
目标状态:CHEN2 watcher死了,备库CHEN2和主库CHEN1正常运行,数据同步正常
(1)杀掉备库watcher进程
(2)监视器连接备库守护进程超时
(3)备库数据守护状态error
(4)在主库插入数据,备库仍然能同步
(5)守护进程断开不能自动重启,需要手动打开
(6)监视器自动收到备库守护进程的连接
(7)备库恢复正常,依旧是CHEN1主库,CHEN2备库
3,手动switchover
初始状态:CHEN2主库,CHEN1备库
目标状态:CHEN1主库,CHEN2备库
(1)登录监视器,执行switchover命令
(2)切换成功,CHEN1为主库,CHEN2为备库
4,断开主库server
初始状态:CHEN1主库,CHEN2备库
目标状态:CHEN1 server被自动拉起,恢复初始状态
(1)杀掉主库server进程
(2)主库守护进程会自动尝试拉起server
(3)成功拉起后,恢复初始状态
5,断开主库watcher
初始状态:CHEN1主库,CHEN2备库
目标状态:CHEN1 watcher死了,主库CHEN1和备库CHEN2正常运行,数据同步正常
(1)杀掉主库watcher进程
(2)监视器连接主库守护进程超时
(3)主库数据守护状态error
(4)在主库删除数据,备库仍然能同步
(5)守护进程断开不能自动重启,需要手动打开
(6)监视器自动收到备库守护进程的连接
(7)备库恢复正常,依旧是CHEN1主库,CHEN2备库
6,server和watcher都断开
什么时候会触发自动接管呢?只有server和watcher都失联,或者watcher尝试拉起失败了才能触发takeover。
如果配置了自动接管,满足条件时备库就会自动接管,不需要手动干预,自动接管出错了才需要手动干预。
初始状态:CHEN1主库,CHEN2备库
目标状态:CHEN2主库,CHEN1备库
(1)退出主库watcher进程
(2)监视器连接主库守护进程超时
(3)主库数据守护状态error
(4)不能手动执行takeover命令,因为CHEN1的server现在是正常的。
(5)把server进程也杀掉
(6)监视器检测到CHEN1故障,开始自动接管
(7)接管成功,CHEN1成为备库,CHEN2成为主库
(8)但此时CHEN1还是故障的,CHEN1的server和watcher还是死的
(9)手动开启CHEN1的watcher
(10)监视器会自动检测到状态变化,并尝试拉起server
(11)拉起成功,CHEN1作为备库恢复正常
7,拉起失败
初始状态:CHEN1主库,CHEN2备库
目标状态:CHEN2主库,CHEN1备库
模拟一个主库的watcher尝试拉起失败并触发自动接管的情况,让服务没办法正常启动,然后把server进程杀掉
(1)把主库CHEN2的dm.ini文件名字改成dm0.ini,杀掉server进程后,监视器发现实例出错
但是没有自动接管,可能因为归档相关的信息保存在dm.ini文件里面,现在没有这个文件就不知道下一步怎么办,只能死机
(2)换一个不那么大的改动,把dm.ini还原,把主库CHEN2的/home/dmdba/dmdbms目录下的include文件夹改名为include2
然后杀掉server进程,监视器会马上检测到主库CHEN2实例故障,并自动接管
查看接管后的数据守护组状态,CHEN1变成主库,CHEN2变为备库