故障转移是依赖于近乎恒定可用性的系统的一个重要功能。在 Hazelcast 中,当客户端无法连接到主集群时,故障转移客户端会自动将其流量重定向到辅助集群。考虑将故障转移客户端与 WAN 复制结合使用,作为灾难恢复策略的一部分。在本教程中,您将更新 Java 客户端中的代码,以便在辅助故障转移集群无法连接到其原始主集群时自动连接到该集群。您还将运行一个简单的测试,以确保您的配置正确无误,然后对其进行调整以包括异常处理。您将学习如何收集为主集群和辅助集群创建故障转移客户端所需的所有资源,基于示例 Java 客户端创建故障转移客户端,测试故障转移以及为操作添加异常处理。
步骤 1:设置集群和客户端
创建两个 Viridian Serverless 集群,用作主集群和辅助集群,然后下载示例 Java 客户端并将其连接到它们。
创建将用作主集群的 Viridian Serverless 集群。当集群准备好使用时,将显示“快速连接指南”。
选择 Java 图标,然后按照屏幕上的说明下载、提取预配置的 Java 客户端并将其连接到主集群。
创建将用作辅助集群的 Viridian Serverless 集群。
按照《快速连接指南》中的说明下载、解压缩预配置的 Java 客户端并将其连接到辅助集群。
现在,您有两个正在运行的集群,并且您已经检查了两个 Java 客户端是否可以连接。
步骤 2:配置故障转移客户端
要创建故障转移客户端,请更新主集群的 Java 客户端的配置和代码。
首先,从辅助集群的 Java 客户端添加密钥库文件。
转到将 Java 客户端解压缩到辅助集群的目录,然后导航到 。src/main/resources
重命名文件并重命名文件,以避免覆盖主集群密钥库中的文件。client.keystoreclient2.keystoreclient.truststoreclient2.truststore
将这两个文件复制到主集群的目录中。src/main/resources
在主集群的 Java 客户端 () 中更新代码,以包含故障转移类和辅助集群的连接详细信息。您可以在辅助集群的 Java 客户端中找到这些连接详细信息。ClientwithSsl.java
转到将主集群的 Java 客户端解压缩到的目录,然后导航到 。src/main/java/com/hazelcast/cloud/
打开 Java 客户端 () 并进行以下更新。此外,还提供了一个示例故障转移客户端供下载。ClientwithSsl.java
步骤 3:验证故障转移
检查故障转移客户端在主集群停止时是否自动连接到辅助集群。
确保两个 Viridian Serverless 集群都在运行。
按照在步骤 1 中执行的相同方式将故障转移客户端连接到主集群。
停止主集群。在主集群的仪表板中,在 Cluster Details 中,选择 Pause 。在控制台中,当客户端断开与主集群的连接并重新连接到辅助集群时,您将按顺序看到以下消息:
CLIENT_DISCONNECTED
CLIENT_CONNECTED
CLIENT_CHANGED_CLUSTER
如果您在示例 Java 客户端中使用 ,则您的客户端将停止。这是意料之中的,因为在集群断开连接时,写入操作不可重试。客户端已向集群发送了 put 请求,但尚未收到响应,因此请求的结果未知。为了防止客户端覆盖最近的写入操作,此写入操作将停止并引发异常。nonStopMapExample
步骤 4:异常处理
在故障转移客户端中更新函数,以捕获主集群断开连接时引发的异常。nonStopMapExample()
将以下 try-catch 块添加到函数的循环中。此代码替换原始函数。whilenonStopMapExample()map.put()
try {
map.put("key-" + randomKey, "value-" + randomKey);
} catch (Exception e) {
// Captures exception from disconnected client
e.printStackTrace();
}
再次验证您的代码(重复第 3 步)。这一次,客户端在连接到辅助集群后继续写入映射条目。