#备库扩缩容
YashanDB支持在线对备库进行在线扩缩,且不影响原主库的使用,具体包括在线增加备库节点和在线删除节点。
建议在对备库扩容/缩容操作前先备份数据库,以防操作失败时无新的备份集用于恢复。
# 扩缩容备库(通过yasboot)
支持对单机备库节点、分布式MN组内备库节点、分布式DN组内备库节点进行在线扩/缩容。
# 注意事项
在扩/缩容过程中请不要通过yasboot对当前数据库集群中的所有节点进行强制重启/停止,否则可能会造成扩/缩容失败后无法执行node remove --clean命令。如不可避免,可以尝试通过对扩容失败/缩容失败的节点进行强制操作(例如yasboot node stop -f)后,再通过node remove --node-ids的方式删除失败的节点。
备库扩/缩容不能与降备(Switchover)、表空间等数据文件增/删/RESIZE操作并发,需等待任一事件完成后才能进行下一个操作。
# 在线增加备库节点
以安装用户登录当前数据库集群中yasboot工具所在服务器。
结合实际场景执行相应命令,生成配置文件。
场景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。
部署新服务器。
如果是在数据库集群中现有服务器上增加备库节点,则跳过本步骤。
) 请先参照依赖清单检查并确保新服务器系统的各项环境已满足要求。
) 检查现有环境中是否已安装plugin插件包(例如安装路径下是否存在plugin-in/package/linux/libyspi_geometry.so),并根据检查结果下载相应软件包。
) 执行如下命令,部署新服务器。
若现有环境其他服务器已安装plugin插件包,则必须指定--plugin参数,扩容完成后,无法单独安装该插件包。
# 指定--plugin参数 $ yasboot host add -c yashandb -i yashandb-23.2.1.100-linux-x86_64.tar.gz -t hosts_add.toml --plugin yashandb-plugins-all-23.2.1.100-linux-x86_64.tar.gz # 不指定--plugin参数 $ yasboot host add -c yashandb -i yashandb-23.2.1.100-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
) (可选)若扩容前已开启monit,新服务器需开启monit功能,可参考守护进程完成相关配置。
执行如下命令,增加节点。
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 ------------------+-----------------------------+---------+--------------+----------+---------+----------+----------+---------------------+------
(可选)若现有环境已开启资源管理功能,新增的服务器中需要创建cgroup目录,可参考yasboot相关命令。
$ yasboot host cgroup create -c yashan --sudo-username root --sudo-password ****** --host-id host004
(可选)若现有环境已开启资源管理功能,新增的服务器中需要创建cgroup目录,可参考yasboot相关命令。
$ yasboot host cgroup create -c yashan --sudo-username root --sudo-password ****** --host-id host004
(可选)备份数据库。
建议对数据库进行备份,确保扩容后有可用于恢复的基线备份集。
# 在线删除备库节点
以安装用户登录当前数据库集群中yasboot工具所在服务器。
执行如下命令,删除节点。
$ 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
删除备库节点后,会将该节点停止。
(可选)备份数据库。
建议对数据库进行备份,确保缩容后有可用于恢复的基线备份集。
Note:
如果出现扩容/缩容失败,需要执行yasboot node remove --clean命令清理环境。无法通过yasboot对扩容/缩容失败的节点进行start/stop/restart操作。
# 扩缩容备库(手动配置)
手动配置备库扩/缩容只适用于单机部署的高可用环境。
Note:
# 在线增加备库
在线增加备库包含如下几种场景:
- 对一个非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:
如果其他节点还配置了到被删除备库的路径转换参数,建议更新相关配置。