#级联备扩缩容

级联备库是从某个物理备库接收日志的物理备库,YashanDB支持为现有某个备库(上级备库)添加新的级联备库。

Note:

  • 目前无法直接删减级联备库。

  • 如果在准备新备库时操作失败,请参考扩缩容异常处理进行处理。

# 步骤1:准备新备库

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

  2. 生成向数据库环境新增服务器并增加备库的配置文件。

    $ yasboot config node gen -c yashandb \
    -u yashan -p password --ip 192.168.1.7 --port 22 \
    --install-path /data/yashan/yasdb_home \
    --data-path /data/yashan/yasdb_data \
    --log-path /data/yashan/log \
    --node 1
    

    执行成功后,会生成yashandb_add.tomlhosts_add.toml两个配置文件,命令详情请查阅yasboot config node gen

  3. 部署新服务器。

    1. ) 请先参照安装前准备检查并确保新服务器系统的各项环境已满足要求。

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

      $ yasboot host add -c yashandb -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
      
    3. ) 若扩容前其他服务器均已配置开机自启动,新服务器也必须配置开机自启动

  4. 执行如下命令,增加备库。

    $ 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命令查看扩容相关的任务是否都成功。

    $ yasboot task list -c yashandb --search type=NodeAdd
    

# 步骤2:转换新备库为级联备

将新备库转换为级联备角色由ARCHIVE_DEST_*参数配置控制,通过VALID_FOR关键字区分复制链路生效范围:

  • VALID_FOR = PRIMARY_ROLE(默认值):表示只有当前数据库为主库时,该链路才生效,这条链路只能是主库→备库的链路。

  • VALID_FOR = STANDBY_ROLE:表示只有当前数据库为备库时,该链路才生效,这条链路只能是备库→级联备的链路。

  • VALID_FOR = ALL_ROLES:表示该链路一直生效。当前数据库为主库时,这条链路是主库→备库的链路;当前数据库为备库时,这条链路是备库→级联备的链路。

新级联备配置示例(重启新级联备后生效,每个新级联备库上均需要执行)

-- 清空当前备库上已有的ARCHIVE_DEST_*参数配置,下述语句中的{n}需替换为具体数值,n表示当前备库已有的存量备库数
ALTER SYSTEM SET ARCHIVE_DEST_{1}='' scope=both;
……
ALTER SYSTEM SET ARCHIVE_DEST_{n}='' scope=both;

-- 可选操作
-- 扩容时已由yasboot自动完成所有主备节点间的路径转换配置调整,作为级联备库只需保留其与上级备库1的路径转换即可,如有需要可手动删除多余配置,不修改也不影响使用
-- /data/yashan/yasdb_data/db-1-2为上级备库1的路径,/data/yashan/yasdb_data/db-1-{n+1}为新级联备的路径
ALTER SYSTEM SET DB_FILE_NAME_CONVERT=
'/data/yashan/yasdb_data/db-1-2','/data/yashan/yasdb_data/db-1-{n+1}' scope=both; 
ALTER SYSTEM SET REDO_FILE_NAME_CONVERT=
'/data/yashan/yasdb_data/db-1-2','/data/yashan/yasdb_data/db-1-{n+1}' scope=both; 
ALTER SYSTEM SET DB_BUCKET_NAME_CONVERT=
'/data/yashan/yasdb_data/db-1-2','/data/yashan/yasdb_data/db-1-{n+1}' scope=both; 

上级备库1配置示例

-- 下述语句中的{n+1}~{n+m}需替换为具体数值,n表示上级备库1已有的存量级联备库数,此次新增几个级联备库则需要对应配置几个ARCHIVE_DEST_*参数
ALTER SYSTEM SET ARCHIVE_DEST_{n+1}='SERVICE=192.168.1.7:1689 VALID_FOR=ALL_ROLES' scope=both;
……
ALTER SYSTEM SET ARCHIVE_DEST_{n+m}='SERVICE=新级联备m的REPLICATION_ADDR VALID_FOR=ALL_ROLES' scope=both;

-- 扩容时已由yasboot自动完成路径转换配置调整,此处无需手动处理

环境中其他主备库配置示例

-- 可选操作
-- 扩容时已由yasboot自动完成所有主备节点间的路径转换配置调整,其他与新级联备无关联的主备库上配置的与新级联备库之间的路径转换信息无意义,如有需要可手动删除多余配置,不修改也不影响使用
ALTER SYSTEM SET DB_BUCKET_NAME_CONVERT=
'/data/yashan/yasdb_data/db-1-2','/data/yashan/yasdb_data/db-1-{n+1}' scope=both; 

# 步骤3:扩容后操作

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

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

  2. 将hosts_add.toml中的[[host]]内容复制粘贴到hosts.toml的末尾,以免升级时仍用旧的hosts信息。

edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流