实例主备切换
功能描述
Vastbase在运行过程中,数据库管理员可能需要手工对数据库节点做主备切换。例如:
主机运行正常,因为维护等需求需要进行switchover操作,switchover之后主机降备,备机升主开始接管业务。这些操作需要主机和备机之间交互才能完成;
主机故障后,备机需要进行failover操作,failover后备机升主,开始接管业务。failover的过程由备机独立完成,不需要与主机进行交互。
主备切换为维护操作,确保Vastbase G100状态正常,所有业务结束后,再进行切换操作。
操作步骤
1、以操作系统用户vastbase登录数据库任意节点,执行如下命令,检查主备节点情况:
vb_ctl query
2、以操作系统用户vastbase登录需要升主的备节点,执行命令 :
vb_ctl switchover -D DATADIR -m SWITCHOVER -MODE
如果主机故障则执行:
vb_ctl failover -D DATADIR -m SWITCHOVER -MODE
参数说明:
- -D DATADIR : 指定数据目录的位置。
- -m SWITCHOVER -mode : 默认值为fast,目前暂不支持其他模式。所有活跃事务都被回滚并且客户端被强制断开,然后服务器被切换。
3、切换成功后检查主备状态及日志同步情况。
注意事项
- 对于同一个数据库,上一次主备切换未完成,不能执行下一次切换。
- switchover命令下发后,命令如果超时返回,后台进程的执行状态可能处于不可确定状态。
- 如果备机在standby wait状态,可以通过重复下发switch over命令消除,使集群恢复到正常状态。
示例
将数据库主实例切换为备实例。
1、查看数据库主备状态:
vb_ctl query
返回结果为:
//主库结果: HA state: local_role : Primary static_connections : 1 db_state : Normal detail_information : Normal //备库结果: HA state: local_role : Standby static_connections : 1 db_state : Normal detail_information : Normal
2、登录备节点执行主备切换命令:
vb_ctl switchover
返回结果为:
vb_ctl switchover ,datadir is /home/vastbase/data/vastbase switchover term (1) waiting for server to switchover....... switchover completed (/home/vastbase/data/vastbase)
当故障时,登录备节点执行:
vb_ctl failover
结果
[2022-08-02 10:37:53.887][28312][][vb_ctl]: vb_ctl failover ,datadir is /home/va stbase/data/vastbase [2022-08-02 10:37:53.887][28312][][vb_ctl]: failover term (1) [2022-08-02 10:37:53.893][28312][][vb_ctl]: waiting for server to failover... [2022-08-02 10:37:53.894][28312][][vb_ctl]: done [2022-08-02 10:37:53.894][28312][][vb_ctl]: failover completed (/home/vastbase/data/vastbase)
3、在原备机检查备机状态
vb_ctl status
返回结果为:
vb_ctl status,datadir is /home/vastbase/data/vastbase vb_ctl: server is running (PID: 9231) /home/vastbase/local/vastbase/bin/vastbase "-M" "primary"
错误排查
如果switchover过程中出现失败,请根据日志文件中的日志信息排查错误。
异常处理
其他备机正在build的情况下,主机需要发送日志到备机后才能降备,会导致主备切换时间长。应尽量避免build过程中进行主备切换。
切换过程中,因网络故障、磁盘满等原因造成主备实例连接断开,出现双主现象时,使用步骤如下步骤修复,否则可能会造成数据丢失:
1、确定降为备机的节点,在节点上执行关闭服务命令:
vb_ctl stop
2、以standby模式启动节点。
vb_ctl -M standby start
3、检查所有节点状态
vb_ctl query