#备库扩缩容

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

建议在对备库扩容/缩容操作前先备份数据库,以防操作失败时无新的备份集用于恢复。

# 扩缩容备库(通过yasboot)

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

# 注意事项

  • 在扩/缩容过程中请不要通过yasboot对当前数据库集群中的所有节点进行强制重启/停止,否则可能会造成扩/缩容失败后无法执行node remove --clean命令。如不可避免,可以尝试通过对扩容失败/缩容失败的节点进行强制操作(例如yasboot node stop -f)后,再通过node remove --node-ids的方式删除失败的节点。

  • 备库扩/缩容不能与降备(Switchover)、表空间等数据文件增/删/RESIZE操作并发,需等待任一事件完成后才能进行下一个操作。

# 在线增加备库节点

  1. 以安装用户登录当前数据库集群中yasboot工具所在服务器。

  2. 结合实际场景执行相应命令,生成配置文件。

    • 场景1:向数据库集群新增服务器并增加备库节点

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

      执行成功后,会生成hosts_add.toml和yashandb_add.toml两个配置文件。

    • 场景2:在数据库集群中现有服务器上增加备库节点

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

      执行成功后,会生成yashandb_add.toml配置文件。

    配置文件的详细示例请查阅yashandb_add.toml以及hosts_add.toml

  3. 部署新服务器。

    如果是在数据库集群中现有服务器上增加备库节点,则跳过本步骤。

    1. ) 请先参照依赖清单检查并确保新服务器系统的各项环境已满足要求。

    2. ) 检查现有环境中是否已安装plugin插件包(例如安装路径下是否存在plugin-in/package/linux/libyspi_geometry.so),并根据检查结果下载相应软件包

    3. ) 执行如下命令,部署新服务器。

      若现有环境其他服务器已安装plugin插件包,则必须指定--plugin参数,扩容完成后,无法单独安装该插件包

      # 指定--plugin参数
      $ yasboot host add -c yashandb -i yashandb-23.1.0.2-linux-x86_64.tar.gz  -t hosts_add.toml --plugin yashandb-plugins-all-23.2.0.11-linux-x86_64.tar.gz
      
      # 不指定--plugin参数
      $ 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
      
    4. ) (可选)若扩容前已开启monit,新服务器需开启monit功能,可参考守护进程完成相关配置。

  4. 执行如下命令,增加节点。

    Note

    如果开启了CPU资源管理功能,在新增服务器上增加节点需通过yasboot工具的host cgroup create命令创建cgroup目录。

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

    任务显示成功并不表示扩容任务已全部成功,可能仍有部分后台任务在完成数据的同步等操作。可以通过task list命令查看扩容相关的任务是否都成功。

    $ 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    
    ------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------
    
  5. (可选)若现有环境已开启资源管理功能,新增的服务器中需要创建cgroup目录,可参考yasboot相关命令。

    $ yasboot host cgroup create -c yashan --sudo-username root --sudo-password ****** --host-id host004
    
  6. (可选)若现有环境已开启资源管理功能,新增的服务器中需要创建cgroup目录,可参考yasboot相关命令。

    $ yasboot host cgroup create -c yashan --sudo-username root --sudo-password ****** --host-id host004
    
  7. (可选)备份数据库。

    建议对数据库进行备份,确保扩容后有可用于恢复的基线备份集。

# 在线删除备库节点

  1. 以安装用户登录当前数据库集群中yasboot工具所在服务器。

  2. 执行如下命令,删除节点。

    $ 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
    

    删除备库节点后,会将该节点停止。

  3. (可选)备份数据库。

    建议对数据库进行备份,确保缩容后有可用于恢复的基线备份集。

Note

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

# 扩缩容备库(手动配置)

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

Note

  • 当手动增加备库或级联备库时,新增节点与现有节点处于不同的yasom运维服务集群中,因此配置完成后需对最新的主备节点进行托管,否则无法对该节点执行yasboot运维操作。
  • 如果开启了CPU资源管理功能,新增节点需通过yasboot工具的host cgroup create命令创建cgroup目录,详细参数说明参考一键开启命令章节。

# 在线增加备库

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

  • 对一个非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

如果其他节点还配置了到被删除备库的路径转换参数,建议更新相关配置。