前提条件
GaussDB双机正常运行,已经建立日志同步。双机需在同一地域,不同地域的双机无法进行切换。背景信息
场景一:当数据库升级时,先停止备机,升级备机数据库,然后启动备机,当主备关系稳定后切换主备机,然后升级原来的主机数据库,这样可保证业务零中断,数据零丢失,提供高可靠性数据库服务。场景二:在复杂的应用系统中,除数据库软件还有其他应用进程,当这些进程产生异常时需进行切换,则为了避免数据丢失,主备数据库也要跟着切换。switchover 命令必须在双机正常状态下执行,它会保证在切换过程中不会存在任何数据丢失。switchover 命令在平滑切换时可能会因为磁盘IO阻塞导致切换超时失败,此时switchover仍然可能继续进行,并最终切换成功。您在 switchover 命令执行失败后,仍可继续尝试执行此命令。说明: 可用相关命令设置切换等待时间,如果切换时间大于此等待时间,会导致切换超时失败。switchover 命令执行超时失败后可采取以下两种方案。
方案一:停止主机,并将备机强制升主。方案二:分别停止主机和备机,然后重新启动主机和备机。示例 在备机上执行gs_ctl query命令,查询双机状态看是否满足切换条件。
Ha state: LOCAL_ROLE : Standby STATIC_CONNECTIONS : 1 DB_STATE : Normal DETAIL_INFORMATION : Normal Senders info: No information Receiver info: RECEIVER_PID : 32388 LOCAL_ROLE : Standby PEER_ROLE : Primary PEER_STATE : Normal STATE : streaming SENDER_SENT_LOCATION : 0/B000000 SENDER_WRITE_LOCATION : 0/B000000 SENDER_FLUSH_LOCATION : 0/B000000 SENDER_REPLAY_LOCATION : 0/B000000 RECEIVER_RECEIVED_LOCATION : 0/B000000 RECEIVER_WRITE_LOCATION : 0/B000000 RECEIVER_FLUSH_LOCATION : 0/B000000 RECEIVER_REPLAY_LOCATION : 0/B000000 SYNC_PERCENT : 100% CHANNEL : 10.144.197.189:51506 <--10.144.197.188:1357说明:DB_STATE字段为Normal,SYNC_PERCENT为100%,说明双机状态正常,可以进行正常切换。
在备机上执行gs_ctl switchover命令,进行双机角色切换。
gaussdba@linux:~/opt/data> gs_ctl switchover waiting for server to switchover........ done switchover completed在备机上执行gs_ctl query命令,进行状态查询,确认角色切换成功。
gaussdba@linux:~> gs_ctl query Ha state: LOCAL_ROLE : Primary STATIC_CONNECTIONS : 1 DB_STATE : Normal DETAIL_INFORMATION : Normal Senders info: SENDER_PID : 6773 LOCAL_ROLE : Primary PEER_ROLE : Standby PEER_STATE : Normal ...... ...... ...... ......说明:在备机上查询LOCAL_ROLE:Primary,PEER_ROLE:Standby说明主机已经降为备机,备机已经升为主机,角色转换成功。
前提条件 主机出现故障,并且无法及时恢复。
说明: 本条件并不是必须条件,在主备机正常同步的情况下,也可以使用 failover 命令强行将备机升为主机,但并不建议这么做,因为这样会导致数据库双主。
failover操作可以加-M参数,指定数据库切换之后的模式,但只允许指定的模式高于自己的模式,这样允许将次级联备机、级联备机或备机升为主机,将次级联备机、级联备机升为备机,或者将次级联备机升为级联备机。如果不加-M参数,默认将数据库切换成主机。failover操作只会将备机升为主机,不会主动修复故障的原主机。场景一:failover操作不加-M参数,默认将数据库升为主机。在备机上执行如下命令。
gs_ctl failover在备机上查询是否升为主机。
gs_ctl query场景二:failover操作加-M 参数,指定数据库切换后的模式。在次级联备机上执行如下命令。
gs_ctl failover -M standby在次级联备机上查询是否升为备机。
gs_ctl query场景三:failover操作-M参数指定的模式低于自己的模式,报错退出。以级联备机模式启动数据库。
gs_ctl start -M cascadestandby将级联备机升为次级联备机,报错退出。
gs_ctl failover -M cascadestandby1示例一:failover操作不加-M参数,默认将数据库升为主机。
在备机上执行gs_ctl failover命令,进行升主。
gaussdba@linux:~/opt/data> gs_ctl failover waiting for server to failover.... done failover completed在备机上查询双机状态,确认本端已经升为主机。
Ha state: LOCAL_ROLE : Primary STATIC_CONNECTIONS : 2 DB_STATE : Normal DETAIL_INFORMATION : Normal Senders info: No information Receiver info: No information说明:可以看到LOCAL_ROLE:Primary ,说明备机已经升为主机。
示例二:failover操作加-M参数,指定数据库切换后的模式。
在次级联备机上执行gs_ctl failover -M standby命令,升为备机。
gaussdba@linux:~/opt/data> gs_ctl failover -M standby waiting for server to failover.... done failover completed在次级联备机上查询是否升为备机。
Ha state: LOCAL_ROLE : Standby STATIC_CONNECTIONS : 0 DB_STATE : NeedRepair DETAIL_INFORMATION : Disconnected Senders info: No information Receiver info: No information说明:可以看到LOCAL_ROLE:Standby ,说明次级联备机已经升为备机。
示例三:failover操作-M参数指定的模式低于自己的模式,报错退出。
以级联备机模式启动数据库。
gaussdba@linux:~/opt/data> gs_ctl start -M cascadestandby server starting.... done server started将级联备机升为次级联备机,报错退出。
gaussdba@linux:~/opt/data> gs_ctl failover -M cascadestandby1 server mode is higher than failover mode