如果主设备出现故障,您可以执行数据库故障切换。本主题介绍运行的版本低于 9.0.0 的设备的故障切换过程。
注: 本主题仅适用于运行的版本低于 9.0.0 的设备。有关与较新设备相关的信息,请参阅
数据库故障切换 - 新版设备。
当主设备出现故障时,辅助数据库处于只读状态。进行故障切换时,请执行以下任务:
- 允许对辅助数据库执行写入操作
- 将辅助服务提供程序设备永久升级为主设备
- 将辅助租户设备永久升级为主设备
- 重新启动主设备
允许对辅助数据库执行写入操作
此过程的目的是,在主设备不可用时,将主数据库切换到辅助设备(租户或服务提供程序)。这样做是为了允许执行写入操作,以使辅助设备的数据库成为主数据源。
- 在主设备(如果可访问)和辅助设备上停止 dtService、av-manager 和诊断服务:
sudo service dtService stop sudo service av-manager stop sudo service diagnose stop
- 在主设备(如果可访问)和辅助设备上停止所有 slony 守护进程:
sudo killall slon
- 在辅助设备上,连接到 FDB 数据库并执行以下 SQL 命令:
drop schema _slony cascade;
- 如果设备属于租户组织,则对 EDB 和 AVDB 重复执行步骤 3。
- 如果主设备上的数据库仍然可访问,则对数据库进行备份,复制数据库文件,并将数据库还原到辅助设备(请参阅备份和还原数据库)。
- 打开 /usr/local/desktone/release/active/conf/fdb.properties 文件进行编辑,移除主设备的 IP 地址。
- 如果设备属于租户组织,请对 /usr/local/desktone/release/active/edb.properties 重复执行步骤 6。
- 如果设备属于租户组织,请对 /usr/local/desktone/release/active/avdb.properties 重复执行步骤 6。
- 设置 DB_HOST 和 DB_PASSWORD 环境变量:
export DB_HOST=IP_of_TA2_appliance export DB_PASSWORD=database_password
- 使用 sudo 执行 av-setup 脚本:
sudo /usr/local/desktone/scripts/av-setup
- 打开 applications.properties 文件进行编辑:
vi /usr/local/xmpms/diagnose/config/application.properties
- 在 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
- 在辅助设备上启动 dtService、av-manager 和诊断服务:
service dtService start service av-manager start service diagnose start
将辅助服务提供程序设备升级为主设备
要将辅助服务提供程序设备永久升级为主服务提供程序设备,请执行以下步骤。
在此示例中,主设备为“A”,辅助设备为“B”,且设备 A 可访问(此设备中的数据库可访问)。
- 在所有服务提供程序设备上停止 dtService:
service dtService stop
- 登录到所有服务提供程序设备。
- 打开 /usr/local/desktone/release/active/conf/fdb.properties 文件进行编辑,移除处于故障状态的主设备的 IP 地址。
- 在所有服务提供程序设备上停止所有 slony 守护进程:
killall slon
- 在主设备和辅助设备上,连接到 FDB 数据库并执行以下 SQL 命令:
drop schema _slony cascade;
- 在数据中心的辅助设备中执行以下 SQL 命令(将“A”和“B”替换为您的设备名称):
fdb=# update appliance set capabilities = (capabilities & 65343) where name='A'; fdb=# update appliance set capabilities = (capabilities | 192) where name='B';
- 在除故障设备以外的其他服务提供程序设备上启动 dtService:
service dtService start
在继续执行下一步之前,确认设备已启动且正在运行。
- 在除主服务提供程序设备之外的其他所有服务提供程序设备上停止 dtService(辅助服务提供程序设备为主设备):
service dtService stop
- 在所有服务提供程序设备中启动 slon 守护进程:
/usr/local/desktone/scripts/start_slon_fdb.sh
- 使用您的浏览器登录到主服务提供程序设备的服务中心(辅助服务提供程序设备为主设备),然后执行 slony 重新初始化操作:
- 导航到 。
- 在“组织 ID”下拉列表中,选择“1000”。
- 单击 按钮以重新初始化 slony。
- 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)
- 在除故障服务提供程序设备以外的其他所有设备上启动 dtService。
service dtService start
将辅助租户设备升级为主设备
要将辅助租户设备永久升级为主租户设备,请执行以下步骤。
在此示例中,主设备为“A”,辅助设备为“B”,且设备 A 可访问(此设备中的数据库可访问)。
- 在组织中的所有租户设备上停止 dtService:
service dtService stop
- 登录到组织中的所有租户设备。
- 打开 /usr/local/desktone/release/active/conf/fdb.properties 文件进行编辑,移除处于故障状态的主设备的 IP 地址。
- 在组织中的所有租户设备上停止所有 slony 守护进程:
killall slon
- 如果需要,备份主设备上的数据库并将其还原到辅助设备上。
- 在主设备和辅助设备上,连接到 FDB 数据库并执行以下 SQL 命令:
drop schema _slony cascade;
- 在主服务提供程序设备上执行以下 SQL 命令(将“A”和“B”替换为您的设备名称):
fdb=# update appliance set capabilities = (capabilities & 65343) where name='A'; fdb=# update appliance set capabilities = (capabilities | 192) where name='B';
- 在组织中的所有租户设备上启动 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
- 使用您的浏览器登录到主服务提供程序设备的服务中心,并执行 slony 重新初始化操作:
- 导航到 。
- 从“组织 ID”下拉列表中选择租户的组织 ID。
- 为数据库实例名称标签选择“架构”。
- 单击 按钮以重新初始化 slony。
- 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)
- 在除处于故障状态的租户设备以外的其他所有租户设备上启动 dtService。
service dtService start
重新启动主设备
在进行故障切换后重新启动主设备时,请对 EDB 和 AVDB 执行 slony 重新初始化操作。