#分布式自动选主配置

YashanDB分布式主备支持基于Raft算法的自动选主功能。当DN组内的节点数量不小于3时,即至少有2个备节点的情况下,可以开启自动选主功能。

Caution

基于Raft选举算法规则,Raft集群节点数至少包括三个才能形成多数派,因此,在一主一备架构上扩展Raft集群将无效,即无法实现自动选主后的主备自动切换。如果DN组是一主一备部署,需要实现一主一备的自动切换,请使用基于yasom的仲裁选主

# 开启自动选主

以下按一主两备(主节点、备节点1、备节点2)模式介绍自动选主配置过程。

# 步骤1:自动选主的心跳时间

自动选主功能依赖如下两个时间参数:

  • 心跳超时时间HA_ELECTION_TIMEOUT
  • 发送心跳的周期HA_HEARTBEAT_INTERVAL

当超过HA_ELECTION_TIMEOUT设置时间备节点仍未收到心跳时,备节点自动发起选举。

在配置文件中,在节点对应的group.node.config配置域下新建参数ha_election_timeoutha_heartbeat_interval并设为规划的值。

Note

  • 上述两个时间参数可以不指定,则系统按照默认值配置,HA_ELECTION_TIMEOUT值为9,HA_HEARTBEAT_INTERVAL值为3,单位均为秒。

  • HA_ELECTION_TIMEOUT参数和HA_HEARTBEAT_INTERVAL参数支持在线调整,用户可以根据自身业务系统情况进行适当设置。

  • 同一个组内节点的HA_ELECTION_TIMEOUT、HA_HEARTBEAT_INTERVAL和HA_ELECTION_ENABLED参数均应保持一致,否则可能出现异常。

  • 部署完成后,如需修改上述两个时间参数可执行ALTER SYSTEM语句,直接修改toml配置文件无效。

[[group.node]]
    data_path = "/data/yashan/yasdb_data"
    hostid = "host0001"
    role = 1

[group.node.config]
	ha_election_timeout = 9
	ha_heartbeat_interval = 3

部署完成后,用户可以连接到具体节点实例上,通过以下语句查看或修改该节点的参数值:

-- 查看心跳超时时间
SHOW PARAMETER HA_ELECTION_TIMEOUT
NAME                      VALUE     
------------------------- --------- 
HA_ELECTION_TIMEOUT       9                                                                    

-- 查看心跳发送周期
SHOW PARAMETER HA_HEARTBEAT_INTERVAL
NAME                      VALUE     
------------------------- --------- 
HA_HEARTBEAT_INTERVAL     3  

-- 修改心跳超时时间
ALTER SYSTEM SET HA_ELECTION_TIMEOUT=10;

-- 使用yasboot工具批量修改心跳超时时间
$ yasboot group config set --key HA_ELECTION_TIMEOUT --value 10 --cluster yashandb --group-id 1

# 步骤2:调整主备节点保护模式

查看主备节点的保护模式

分布式集群部署时,如果DN组节点个数不小于3,则默认部署为最大保护模式,可在主备节点上分别执行以下查询:

SELECT database_id,database_name,open_mode,database_role,protection_mode FROM V$DATABASE;

切换主备节点的保护模式

为了保证在任意节点故障后,选出来的新主不丢失已提交成功的事务,必须将主节点和备节点的保护模式均调整为最大保护模式,即MAXIMUM PROTECTION。

如果发现保护模式不是最大保护,请在主节点上,使用如下语句执行切换:

ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

主节点的保护模式会随着心跳同步到备节点,这可能需要一次心跳的时间。为了加快保护模式设置速度,可以在主节点修改保护模式后,在备节点上也执行此操作。

再次查看主备节点的保护模式

在主备节点上分别执行以下查询:

SELECT database_id,database_name,open_mode,database_role,protection_mode FROM V$DATABASE;

protection_mode字段值为MAXIMUM PROTECTION表示最大保护模式。

Caution

保护模式不为MAXIMUM PROTECTION时,连续多次故障后,可能存在数据丢失风险。因此在自动选主的主备部署架构中,强烈建议使用最大保护模式。

# 步骤3:自动选主开关

自动选主开关由HA_ELECTION_ENABLED参数控制,默认值为false,即自动选主默认处于关闭状态,如需开启自动选主功能则需将该参数设置为true。分布式集群部署时会默认打开自选开关。

HA_ELECTION_ENABLED参数支持在线调整,在主备节点上执行如下语句进行查看和修改:

-- 查看参数HA_ELECTION_ENABLED值
SHOW PARAMETER HA_ELECTION_ENABLED;

-- 修改参数HA_ELECTION_ENABLED值
ALTER SYSTEM SET HA_ELECTION_ENABLED=TRUE;

Caution

  • 当Raft集群启动后,如需开启自动选主,开启顺序必须为先开启主节点的自动选主,再开启备节点的自动选主,否则容易发生备节点自动升主,导致双主。
  • 自动选主功能开启时,手动执行SQL语句shutdown主节点可能会触发备节点自动升主。如需避免,请使用yasboot进行整个group的关闭。或者,应在执行shutdown前先手动关闭自动选主,关闭顺序必须为先关闭备节点的自动选主,再关闭主节点的自动选主

# 步骤4(可选):自动降备功能开关

自动降备用于控制主节点未收到多数派备节点心跳响应时是否进行主动降备,通过HA_ELECTION_LEADER_LEASE_ENABLED参数配置开关,该开关只对主节点生效,用户可自行修改配置。

该参数默认值为FALSE,即不开启。

当参数设置为TRUE时,下述情况中主节点会在心跳超时时间(HA_ELECTION_TIMEOUT)后自动降备:

  • 处于最大保护模式下,主节点收到备节点心跳数 < QUORUM_SYNC_STANDBY中的syncNum
  • 处于非最大保护模式下,主节点未收到多数(N/2 +1)备节点心跳。

其中N为所有节点(包含主节点)的数量,syncNum为用户定义的同步备数量。

-- 查看是否开启主节点自动降备功能
SHOW PARAMETER HA_ELECTION_LEADER_LEASE_ENABLED;
NAME                               VALUE     
---------------------------------  --------- 
HA_ELECTION_LEADER_LEASE_ENABLED   FALSE      

-- 开启主节点自动降备功能
ALTER SYSTEM SET HA_ELECTION_LEADER_LEASE_ENABLED=TRUE;

# 步骤5(可选):节点优先级功能

节点的优先级,值越大表示其节点优先级越高,通过HA_ELECTION_PRIORITY参数配置数值。开启自动选主的场景下,节点的优先级越高,在保障数据安全的前提下会更优先成为主节点。当节点优先级为0时,该节点不会发起选举,即不会通过自动选主机制成为下一任主节点。支持在线修改该参数的配置,用户可根据自身业务系统情况自行设置。

该参数默认值为1。

-- 查看主备的节点优先级值
SHOW PARAMETER HA_ELECTION_PRIORITY;
NAME                               VALUE     
---------------------------------  --------- 
HA_ELECTION_PRIORITY               1                                                                             

-- 修改主备的节点优先级值
ALTER SYSTEM SET HA_ELECTION_PRIORITY=2;

# 步骤6(可选):自动换主功能开关

自动换主用于控制主节点发现高优先级备节点时是否进行主备切换,通过HA_ELECTION_AUTO_PRIMARY_SWITCH参数配置开关,该开关只对主节点生效。支持在线修改该参数的配置,用户可根据自身业务系统情况自行设置。

该参数默认值为FALSE,即不开启。

当参数设置为TRUE时,主节点每隔一定时间会检测是否存在更高优先级的节点,如存在则进行主备切换。间隔时间默认为60s,如需调整该间隔时间请联系我们的技术支持处理。

-- 查看是否开启主节点自动换主功能
SHOW PARAMETER HA_ELECTION_AUTO_PRIMARY_SWITCH;
NAME                                      VALUE     
------------------------------------  --------- 
HA_ELECTION_AUTO_PRIMARY_SWITCH           FALSE                                                                             

-- 开启主节点自动换主功能
ALTER SYSTEM SET HA_ELECTION_AUTO_PRIMARY_SWITCH=TRUE;

HA_ELECTION_TIMEOUT、HA_ELECTION_AUTO_PRIMARY_SWITCH、HA_ELECTION_PRIORITY、HA_HEARTBEAT_INTERVAL以及HA_ELECTION_LEADER_LEASE_ENABLED参数支持在线调整,用户可以根据自身业务系统情况进行适当设置。

# 关闭自动选主

自动选主的开关由HA_ELECTION_ENABLED参数控制,如需关闭自动选主功能只需将该参数设置为FALSE即可。

为避免误触自动选主机制,关闭自动选主时应遵循先备后主的操作顺序。

分布式高可用环境中,可以直接指定组或指定节点修改HA_ELECTION_ENABLED的值。

-- 指定DN修改HA_ELECTION_ENABLED的值,对所有DN组生效
ALTER SYSTEM SET ha_election_enabled = FALSE SCOPE = BOTH TYPE = DN;

-- 指定MN修改HA_ELECTION_ENABLED的值,对所有MN组生效
ALTER SYSTEM SET ha_election_enabled = FALSE SCOPE = BOTH TYPE = MN;
  
-- 指定某个节点修改HA_ELECTION_ENABLED的值,仅对该节点生效
ALTER SYSTEM SET ha_election_enabled = FALSE SCOPE = BOTH TYPE = 3-1;
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流