#级联备扩缩容
级联备库是从某个物理备库(称为”父级备库”)接收日志的物理备库,YashanDB支持为现有某个备库添加新的级联备、删减已有级联备。
Note:
# 前置操作
以安装用户登录数据库的现有节点所在服务器。
执行如下命令,查看当前环境配置。
$ yasboot cluster status -c yashandb -d +--------------------------------------------------------------------------------------------------------------------------------------------------------------+ | hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | source_node | data_path | +--------------------------------------------------------------------------------------------------------------------------------------------------------------+ | host0001 | db | 1-1:1 | 25283 | open | normal | primary | 192.168.1.2:1688 | - | /data/yashan/yasdb_data/db-1-1 | +----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+-------------+--------------------------------+ | host0002 | db | 1-2:2 | 31194 | open | normal | standby | 192.168.1.3:1688 | 1-1:1 | /data/yashan/yasdb_data/db-1-2 | +----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+-------------+--------------------------------+ | host0003 | db | 1-3:3 | 13384 | open | normal | standby | 192.168.1.4:1688 | 1-1:1 | /data/yashan/yasdb_data/db-1-3 | +----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------------+-------------+--------------------------------+source_node字段用于标识当前节点的上级节点(备库的主库或级联备的父级备库):
若source_node的值集仅有主库(database_role=primary的节点),则说明当前环境无级联备,相应也不存在父级备库。此时,可以使用yasboot为某1个备库添加级联备。
若source_node的值集为主库+1个备库(database_role=standby的节点),则说明当前环境仅1个父级备库。此时,可以使用yasboot为该父级备库添加或删减级联备。如需为其他备库添加级联备,则需联系我们的技术支持。
若source_node的值集不符合上述两种情形,则说明当前环境已存在多个父级备库,如需添加或删减级联备需联系我们的技术支持。
此时,建议记录下需要进行级联备添加或删减操作的目标父级备库的nodeid,便于后续操作。
# 在线增加级联备
每个级联备将由单独的1台服务器承载(后文将称之为“新服务器”),新服务器的操作系统版本建议与现有服务器保持一致。
准备扩容所需的新服务器,并参照安装前准备检查并确保新服务器系统的各项环境已满足要求。
以安装用户登录数据库的现有节点所在服务器。
检查并关闭yasom仲裁选主:
$ yasboot election config show -c yashandb group 1 Protection Mode: MAXIMUM PROTECTION Members: [1-1:1] - Primary database [1-2:2] - Physical standby database …… Automatic Failover: Enabled in Zero Data Loss Mode # Enabled表示已开启yasom仲裁选主,需将其关闭再进行后续操作 $ yasboot election enable off -c yashandb执行如下命令,查看待增加级联备库的目标备库ID。
$ yasboot cluster status -c yashandb -d # nodeid中冒号前的部分即为节点ID,例如1-2:2对应的节点ID为1-2执行yasboot config node gen命令,生成增加级联备的配置文件。
# 若当前环境中已有1个父级备库,--cascade-parent参数只能指定为该父级备库 $ yasboot config node gen -c yashandb \ -u yashan -p yashan_password --ip ip1,ip2 --port 22 \ --install-path /data/yashan/yasdb_home \ --data-path /data/yashan/yasdb_data \ --log-path /data/yashan/log \ --cascade-node 2 --cascade-parent 1-2执行成功后,会生成yashandb_add.toml和hosts_add.toml两个配置文件。
执行如下命令,远程连接新服务器并为其安装YashanDB。
$ yasboot host add -c yashandb -t hosts_add.toml执行如下命令,增加级联备库。
# 若扩容前数据库已开启密钥管理,则必须指定--wallet-password Your_keystore_password $ yasboot node add -c yashandb -t yashandb_add.toml任务显示成功并不表示扩容任务已全部成功,可能仍有部分后台任务在完成数据的同步等操作。可以通过
task list命令查看扩容相关的任务是否都成功。$ yasboot task list -c yashandb --search type=NodeAdd(可选)备份数据库。
建议对数据库进行备份,确保扩容后有可用于恢复的基线备份集。
将hosts_add.toml中的[[host]]内容复制粘贴到hosts.toml的末尾,以免升级时仍用旧的hosts信息。
若为顺利执行扩容而临时调整过某些配置(例如关闭yasom仲裁选主),在扩容完成后应按需还原配置(例如重新开启yasom仲裁选主)。
若扩容前其他服务器均已配置开机自启动,新服务器也必须配置开机自启动。
# 在线删除级联备
以安装用户登录数据库安装服务器。
检查并关闭yasom仲裁选主:
$ yasboot election config show -c yashandb group 1 Protection Mode: MAXIMUM PROTECTION Members: [1-1:1] - Primary database [1-2:2] - Physical standby database …… Automatic Failover: Enabled in Zero Data Loss Mode # Enabled表示已开启yasom仲裁选主,需将其关闭再进行后续操作 $ yasboot election enable off -c yashandb执行如下命令,查看待删除的目标级联备库ID。
$ yasboot cluster status -c yashandb -d # nodeid中冒号前的部分即为节点ID,例如1-5:5对应的节点ID为1-5执行如下命令,删除级联备库。
场景1:删除正常级联备库
# 单次缩容1个级联备库 $ yasboot node remove -c yashandb -n 1-5 --purge -f +----------------------------------------------------------------------------------------------------+ | type | uuid | name | hostid | index | status | return_code | progress | cost | +----------------------------------------------------------------------------------------------------+ | task | 7c7d71db43810b33 | NodeRemove | - | yashandb | SUCCESS | 0 | 100 | 5 | +------+------------------+------------+--------+----------+---------+-------------+----------+------+ task completed, status: SUCCESS # 单次删除多个级联备库,ID间使用逗号隔开 $ yasboot node remove -c yashandb --node-ids 1-5,1-6 --purge +----------------------------------------------------------------------------------------------------+ | type | uuid | name | hostid | index | status | return_code | progress | cost | +----------------------------------------------------------------------------------------------------+ | task | 7c7d71db43810b33 | NodeRemove | - | yashandb | SUCCESS | 0 | 100 | 5 | +------+------------------+------------+--------+----------+---------+-------------+----------+------+ +----------------------------------------------------------------------------------------------------+ | task | 7c7d71db43810b34 | NodeRemove | - | yashandb | SUCCESS | 0 | 100 | 5 | +------+------------------+------------+--------+----------+---------+-------------+----------+------+ task completed, status: SUCCESS删除级联备库后,会将其停止。
场景2:删除断连级联备库
若待删除的级联备库所在服务器已无法连接,须指定--with-unconnected-host参数进行缩容。
# 删除服务器使用强制删除方式,仅删除服务器在yasom的数据,yasagent进程和安装包都将保留 $ yasboot node remove --node-ids 1-5 --purge --force -c yashandb --with-unconnected-host +----------------------------------------------------------------------------------------------------+ | type | uuid | name | hostid | index | status | return_code | progress | cost | +----------------------------------------------------------------------------------------------------+ | task | 7c7d71db43810b33 | NodeRemove | - | yashandb | SUCCESS | 0 | 100 | 5 | +------+------------------+------------+--------+----------+---------+-------------+----------+------+ task completed, status: SUCCESS删除级联备库后,不会停止该级联备库,如果该级联备库被monit监控,也不会关闭对该级联备库的进程监控。
(可选)备份数据库。
建议对数据库进行备份,确保缩容后有可用于恢复的基线备份集。
若为顺利执行缩容而临时调整过某些配置,在缩容完成后应按需还原配置。
(可选)若缩容时指定了--with-unconnected-host参数(即删除了无法连接的实例),缩容完成后可对无法连接的服务器进行环境清理:
清理可能残留的路径,例如$YASDB_DATA路径、$YASDB_HOME路径、日志路径、本地表空间路径。
清理可能残留的进程,例如yasdb。
清理可能残留的脚本,例如开机自启动脚本。
清理可能残留的YashanDB相关的环境变量。

