#备机扩缩容

YashanDB支持在线对备机进行在线扩缩,且不影响原主机的使用,具体包括在线增加备机节点和在线删除节点。

# 手工配置备机扩缩容

手工配置备机扩缩容只适用于单机部署的高可用环境。

Note

当手工增加备机或级联备机节点时,新增节点与现有节点处于不同的yasom运维服务集群中,因此配置完成后需对最新的主备节点进行托管,否则无法对该节点执行yasboot运维操作。

# 在线增加备机节点

在线增加备机包含如下几种场景:

  • 对一个非HA环境在线增加备机,使其扩展为HA环境,部署指导参见一主一备配置
  • 对一个已有HA环境在线增加备机,部署指导参见一主多备配置。其中,若该HA环境为启用了自动选举的Raft集群,新增备机在安装时必须设置NODE_ID,其值必须为Raft集群中唯一的值,可参考自动选举配置
  • 对一个已有HA环境在线增加级联备机,部署指导参见级联备配置

其中,在执行上述各部署指导的备机初始化步骤时,如只增加一台备机,初始化在备机上执行即可,如同时增加多个备机时,可以从主机发起build请求并行初始化,提升效率,可参考一主多备配置的备机初始化操作。

# 在线删除备机节点

删除单个节点对应的备机

单个节点对应的备机,即该备机只与这个节点间存在链路,例如某个备机的级联备机,一主一备环境中的备机。

此类情况只需要将该节点与备机之间的配置参数ARCHIVE_DEST_n设置为空,该节点与备机之间的主备关系即解除,将不会再对备机发送REDO信息。

示例

--在节点上将ARCHIVE_DEST_2对应的备机去除
ALTER SYSTEM SET ARCHIVE_DEST_2='' SCOPE=BOTH;

从集群中删除某个备机

集群中的备机,即备机与多个节点间存在链路,例如一主多备中的各节点,存在级联备机的备机节点。

此类情况不仅主机需要将该备机的配置参数ARCHIVE_DEST_n设置为空,与其建立了配置的其他节点都需要将对应的配置参数设为空,这样该备机才完全从集群中删除。

示例(一主两备删除备机2为例)

--主机将备机2对应的配置信息设置为空
ALTER SYSTEM SET ARCHIVE_DEST_2='' SCOPE=BOTH;

--备机1将备机2对应的配置信息置为空
ALTER SYSTEM SET ARCHIVE_DEST_2='' SCOPE=BOTH;

Note

如果其他节点还配置了到该备机的路径转换参数,建议重新配置,不重新配置并不会影响高可用的正常运行。

# yasboot扩缩容运维指导

支持对单机备机节点、分布式MN组内备机节点、分布式DN组内备机节点进行在线扩缩容。

Warn

在扩缩容过程中请不要通过yasboot对节点进行强制重启/停止节点的操作,否则可能会造成扩缩容失败后无法执行node remove --clean命令。如果不可避免地造成了这种情况,可以通过对扩容失败/缩容失败的节点进行强制操作(如yasboot node stop -f)后,通过node remove --node-ids的方式删除失败的节点。 备机扩缩容不能和表空间等数据文件增删、RESIZE操作并发,所以需等待任一事件完成之后才可进行下个操作。

# 在线增加备机节点

Step1:生成配置文件

情况1:在新增主机上增加备机节点,会生成hosts_add.toml和yashandb_add.toml两个配置文件。

$ yasboot config node gen -c yashandb -u yashan -p password --ip ip1,ip2...ipn --port 22  --install-path /var/database/yashan -g 1 --node 2

情况2:在已有主机上增加备机节点,会生成yashandb_add.toml配置文件。

$ yasboot config node gen -c yashandb --host-id host0001,host0002 -g 1 --node 2

Step2:部署新主机

如果是在已有主机上增加备机节点,则跳过该步骤。

$ yasboot host add -c yashandb -i yashandb-23.1.0.2-linux-x86_64.tar.gz  -t hosts_add.toml
 type | uuid             | name    | hostid | index    | status  | return_code | progress | cost 
-------------------------------------------------------------------------------------------------
 task | b5328fe3dbf4a2be | HostAdd | -      | yashandb | SUCCESS | 0           | 100      | 9    
------+------------------+---------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS

Step3:扩容

$ yasboot node add -c yashandb -t yashandb_add.toml 
 type | uuid             | name    | hostid | index    | status  | return_code | progress | cost 
-------------------------------------------------------------------------------------------------
 task | 834a8c23c37ca1f4 | NodeAdd | -      | yashandb | SUCCESS | 0           | 100      | 3    
------+------------------+---------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS

任务显示成功并不代表着扩容任务成功,因为仍有后台任务在完成数据的同步等操作。

可以通过task list命令查看和扩容相关的任务是否都成功。

Note

扩缩容和降备操作无法并行执行。

Step 4:查看扩容相关的任务

$ yasboot task list -c yashandb --search type=NodeAdd
 uuid             | name                        | type    | index        | hostid   | status  | ret_code | progress | created_at          | cost 
-------------------------------------------------------------------------------------------------------------------------------------------------
 008140f6c2277717 | AddDBAlterHA                | NodeAdd | yashandb     | -        | SUCCESS | 0        | 100      | 2023-06-13 15:50:40 | 1    
------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------
 2038cda6b14ddbff | BuildDatabaseToMultiAddress | NodeAdd | yashandb.1-1 | host0001 | SUCCESS | 0        | 100      | 2023-06-13 15:50:40 | 3    
------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------
 834a8c23c37ca1f4 | NodeAdd                     | NodeAdd | yashandb     | -        | SUCCESS | 0        | 100      | 2023-06-13 15:50:40 | 3    
------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------

# 在线删除备机节点

$ yasboot node remove --node-ids 1-4,1-5 --purge --force -c yashandb
 type | uuid             | name       | hostid | index    | status  | return_code | progress | cost 
----------------------------------------------------------------------------------------------------
 task | 7c7d71db43810b33 | NodeRemove | -      | yashandb | SUCCESS | 0           | 100      | 5    
------+------------------+------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS

删除备机节点后,会将其停止下来。

如果出现扩容/缩容失败,需要执行 yasboot node remove --clean 命令清理环境。无法通过yasboot对扩容/缩容失败的节点进行start/stop/restart操作。