4.23. 为高可用性配置 leader-follower 代理部署
leader-follower 配置在单独的部署中有一个代理。每个部署中的代理必须配置为使用相同的 JDBC 数据库来持久保留消息。与获取 JDBC 锁定的代理实现高可用性,此代理授予对数据库的独占访问权限。获取 JDBC 锁定的代理会成为为客户端请求提供服务的领导代理。未能获取 JDBC 锁定的代理会成为后续。后续者不断尝试获取 JDBC 锁定,如果成功,则立即成为领导机来为客户端提供服务。
Leader-follower 部署提供了一种加快修复时间(MTTR)的时间,以便从节点故障中恢复,而不是 Openshift 为带有一个或多个代理的单一部署中恢复。在 leader-follower 部署中,代理可以在单独的集群中,以防止集群故障。这些集群可以位于不同的数据中心,以便代理服务对数据中心中断具有弹性。
前提条件
您有一个容器镜像,其中包含您要用于 AMQ Broker 的 JDBC 数据库的 JAR 文件。有关创建容器镜像的详情,请参考 Openshift 文档中的创建镜像。https://docs.openshift.com/container-platform/latest/openshift_images/create-images.html在每个代理的配置中,您可以指定 init 容器,将容器镜像中的 JAR 文件复制到运行时可用于代理的位置。
配置两个
ActiveMQArtemis
自定义资源实例,以创建单独的代理部署。在每个自定义资源中,指定一个唯一名称,并确保
cluster
和persistenceEnabled
属性设置为false
。将size
属性设置为1
,以便在每个部署中创建一个代理。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您要在同一 Openshift 集群中配置两个代理部署,请确保在集群的独立节点上置备代理 pod,因此两个代理都不受节点故障的影响。有关控制节点上 pod 放置的更多信息,请参阅 第 4.17 节 “控制 OpenShift Container Platform 节点上的代理 pod 放置”。
为每个代理配置添加一个存活度探测。
如果没有配置存活度探测,则会启用默认探测来检查代理的健康状况。默认探测检查 AMQ 管理控制台是否可访问。在 leader-follower 配置中,AMQ Management Console 在任何给定时间无法在代理中访问,这会导致存活度探测在该代理上失败。每次存活度探测失败时,它会重启代理,该代理会将代理置于持久重启循环中。因此,后续代理进入
CrashLoopBackOff
状态,如果当前领导失败则不可用。要防止默认存活度探测运行,您必须配置一个存活度探测,该探测可以在代理是领导或后续时成功运行。在以下示例中,存活度探测会检查运行代理的命令是否已执行,这通过存在
cli.lock
文件来指示。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关配置存活度探测的更多信息,请参阅 第 4.15.2 节 “配置存活度和就绪度探测”。
在每个代理配置中,使用
brokerProperties
属性启用 JDBC 数据库持久性。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关启用 JDBC 数据库持久性的更多信息,请参阅 第 4.5.2 节 “配置数据库持久性”。
在每个代理配置中,配置代理以加载连接到 JDBC 数据库所需的 JAR 文件。
-
使用
resourceTemplates
属性自定义每个代理的StatefulSet
资源。在自定义中,使用patch
属性指定一个 init 容器,该容器将 JAR 文件从您准备的自定义容器镜像复制到代理 Pod。 使用
env
属性创建ARTEMIS_EXTRA_LIBS
环境变量,以扩展代理的 Java 类路径,使其包含将 JDBC 数据库复制到的目录。通过扩展 Java 类路径,代理可以在运行时从 pod 上的指定目录中加载 JAR 文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关自定义 Operator 创建的 Openshift 资源的更多信息,请参阅 第 4.21 节 “自定义 Operator 创建的 Openshift 资源”。
-
使用
保存每个自定义资源。
- Example
以下示例显示了使用 Oracle 数据库的 leader-follower 代理部署的完整配置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow