如果主设备出现故障,您可以执行数据库故障切换。本主题介绍运行的版本低于 9.0.0 的设备的故障切换过程。

注: 本主题仅适用于运行的版本低于 9.0.0 的设备。有关与较新设备相关的信息,请参阅 数据库故障切换 - 新版设备

当主设备出现故障时,辅助数据库处于只读状态。进行故障切换时,请执行以下任务:

  • 允许对辅助数据库执行写入操作
  • 将辅助服务提供程序设备永久升级为主设备
  • 将辅助租户设备永久升级为主设备
  • 重新启动主设备

允许对辅助数据库执行写入操作

此过程的目的是,在主设备不可用时,将主数据库切换到辅助设备(租户或服务提供程序)。这样做是为了允许执行写入操作,以使辅助设备的数据库成为主数据源。

  1. 在主设备(如果可访问)和辅助设备上停止 dtService、av-manager 和诊断服务:
    sudo service dtService stop
    sudo service av-manager stop
    sudo service diagnose stop
  2. 在主设备(如果可访问)和辅助设备上停止所有 slony 守护进程:
    sudo killall slon
  3. 在辅助设备上,连接到 FDB 数据库并执行以下 SQL 命令:
     drop schema _slony cascade;
  4. 如果设备属于租户组织,则对 EDB 和 AVDB 重复执行步骤 3。
  5. 如果主设备上的数据库仍然可访问,则对数据库进行备份,复制数据库文件,并将数据库还原到辅助设备(请参阅备份和还原数据库)。
  6. 打开 /usr/local/desktone/release/active/conf/fdb.properties 文件进行编辑,移除主设备的 IP 地址。
  7. 如果设备属于租户组织,请对 /usr/local/desktone/release/active/edb.properties 重复执行步骤 6。
  8. 如果设备属于租户组织,请对 /usr/local/desktone/release/active/avdb.properties 重复执行步骤 6。
  9. 设置 DB_HOST 和 DB_PASSWORD 环境变量:
    export DB_HOST=IP_of_TA2_appliance
    export DB_PASSWORD=database_password
    
  10. 使用 sudo 执行 av-setup 脚本:
    sudo /usr/local/desktone/scripts/av-setup
  11. 打开 applications.properties 文件进行编辑:
    vi /usr/local/xmpms/diagnose/config/application.properties
  12. 在 applications.properties 文件中,按如下方式编辑以下行:
    db.jdbc.url=jdbc:postgresql://<ip address>:5432/avdb?ssl=true
    db.fdb.jdbc.url=jdbc:postgresql://<ip address>:5432/fdb?ssl=true
    
  13. 在辅助设备上启动 dtService、av-manager 和诊断服务:
    service dtService start
    service av-manager start
    service diagnose start

将辅助服务提供程序设备升级为主设备

要将辅助服务提供程序设备永久升级为主服务提供程序设备,请执行以下步骤。

在此示例中,主设备为“A”,辅助设备为“B”,且设备 A 可访问(此设备中的数据库可访问)。

  1. 在所有服务提供程序设备上停止 dtService:
    service dtService stop
  2. 登录到所有服务提供程序设备。
  3. 打开 /usr/local/desktone/release/active/conf/fdb.properties 文件进行编辑,移除处于故障状态的主设备的 IP 地址。
  4. 在所有服务提供程序设备上停止所有 slony 守护进程:
    killall slon
  5. 在主设备和辅助设备上,连接到 FDB 数据库并执行以下 SQL 命令:
    drop schema _slony cascade;
  6. 在数据中心的辅助设备中执行以下 SQL 命令(将“A”和“B”替换为您的设备名称):
    fdb=# update appliance set capabilities = (capabilities & 65343) where name='A'; 
    fdb=# update appliance set capabilities = (capabilities | 192) where name='B';
  7. 在除故障设备以外的其他服务提供程序设备上启动 dtService:
    service dtService start

    在继续执行下一步之前,确认设备已启动且正在运行。

  8. 在除主服务提供程序设备之外的其他所有服务提供程序设备上停止 dtService(辅助服务提供程序设备为主设备):
    service dtService stop
  9. 在所有服务提供程序设备中启动 slon 守护进程:
    /usr/local/desktone/scripts/start_slon_fdb.sh
  10. 使用您的浏览器登录到主服务提供程序设备的服务中心(辅助服务提供程序设备为主设备),然后执行 slony 重新初始化操作:
    1. 导航到设备 > 维护 > Slony 操作
    2. 在“组织 ID”下拉列表中,选择“1000”。
    3. 单击初始化 Slony 按钮以重新初始化 slony。
  11. slony 重新初始化完成后,在数据中心内辅助设备的 FDB 中执行以下命令:
    SELECT a.set_id, a.set_comment, (SELECT last_value FROM _slony.sl_local_node_id) AS local_id, CASE WHEN a.set_origin = (SELECT  last_value FROM _slony.sl_local_node_id)THEN TRUE ELSE FALSE END AS master_node from _slony.sl_set a;

    输出应如下所示:

    set_id | set_comment | local_id | master_node
    --------+--------------------------+----------+-------------   
    1 | All tables and Sequences | 1 | t  
    (1 row)
  12. 在除故障服务提供程序设备以外的其他所有设备上启动 dtService。
    service dtService start

将辅助租户设备升级为主设备

要将辅助租户设备永久升级为主租户设备,请执行以下步骤。

在此示例中,主设备为“A”,辅助设备为“B”,且设备 A 可访问(此设备中的数据库可访问)。

  1. 在组织中的所有租户设备上停止 dtService:
    service dtService stop
  2. 登录到组织中的所有租户设备。
  3. 打开 /usr/local/desktone/release/active/conf/fdb.properties 文件进行编辑,移除处于故障状态的主设备的 IP 地址。
  4. 在组织中的所有租户设备上停止所有 slony 守护进程:
    killall slon
  5. 如果需要,备份主设备上的数据库并将其还原到从属设备上。
  6. 在主设备和从属设备中,连接到 FDB 数据库并执行以下 SQL 命令:
    drop schema _slony cascade;
  7. 在主服务提供程序设备上执行以下 SQL 命令(将“A”和“B”替换为您的设备名称):
    fdb=# update appliance set capabilities = (capabilities & 65343) where name='A';  
    fdb=# update appliance set capabilities = (capabilities | 192) where name='B';
  8. 在组织中的所有租户设备上启动 slon 守护进程:
    /usr/local/desktone/scripts/start_slon_fdb.sh  
    /usr/local/desktone/scripts/start_slon_edb.sh  
    /usr/local/desktone/scripts/start_slon_avdb.sh
  9. 使用您的浏览器登录到主服务提供程序设备的服务中心,并执行 slony 重新初始化操作:
    1. 导航到设备 > 维护 > Slony 操作
    2. 从“组织 ID”下拉列表中选择租户的组织 ID。
    3. 为数据库实例名称标签选择“架构”。
    4. 单击初始化 Slony 按钮以重新初始化 slony。
  10. slony 重新初始化完成后,在数据中心内辅助租户设备的 FDB 中执行以下命令:
    SELECT a.set_id, a.set_comment, (SELECT last_value FROM _slony.sl_local_node_id) AS local_id, CASE WHEN a.set_origin = (SELECT  last_value FROM _slony.sl_local_node_id) THEN TRUE ELSE FALSE END AS master_node from _slony.sl_set a;

    输出应如下所示(如果第一个数据中心内的主设备出现故障):

    set_id | set_comment | local_id | master_node  
    --------+--------------------------+----------+-------------   
    1 | All tables and Sequences | 1 | t
    (1 row)
  11. 在除处于故障状态的租户设备以外的其他所有租户设备上启动 dtService。
     service dtService start

重新启动主设备

在进行故障切换后重新启动主设备时,请对 EDB 和 AVDB 执行 slony 重新初始化操作。