WildFly 35高可用配置:如何配置JDBC_PING2协议及推荐方案
一、JDBC_PING2 配置步骤
JDBC_PING2 是 JGroups 用于集群节点发现的协议,依赖数据库存储节点信息,配置分为以下几个环节:
1. 准备数据库表
首先在数据库中创建用于存储集群节点信息的表,SQL 示例如下(以 MySQL 为例,其他数据库可适配语法):
CREATE TABLE jgroups_ping ( cluster_name VARCHAR(255) NOT NULL, node_name VARCHAR(255) NOT NULL, physical_addr BLOB NOT NULL, ping_data BLOB, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (cluster_name, node_name) );
2. 配置数据源
在 WildFly 的配置文件(standalone-ha.xml 或 domain.xml)中添加可被集群所有节点访问的数据源,示例:
<datasource jndi-name="java:jboss/datasources/JGroupsPingDS" pool-name="JGroupsPingDS"> <connection-url>jdbc:mysql://your-db-host:3306/jgroups_db</connection-url> <driver>mysql</driver> <security> <user-name>db_user</user-name> <password>db_pass</password> </security> <pool> <min-pool-size>2</min-pool-size> <max-pool-size>5</max-pool-size> </pool> </datasource>
确保驱动已正确部署到 WildFly 的 modules 目录或通过 jboss-cli 安装。
3. 替换 JGroups 栈中的发现协议
找到配置文件中 JGroups 子系统的栈配置(默认 udp 或 tcp 栈),将原有 PING 协议替换为 JDBC_PING2,示例:
<subsystem xmlns="urn:jboss:domain:jgroups:11.0"> <channels default="ee"> <channel name="ee" stack="udp"/> </channels> <stacks> <stack name="udp"> <transport type="UDP" socket-binding="jgroups-udp"/> <!-- 替换原有 PING 协议为 JDBC_PING2 --> <protocol type="JDBC_PING2"> <property name="datasource_jndi_name">java:jboss/datasources/JGroupsPingDS</property> <property name="table_name">jgroups_ping</property> <property name="cluster_name">${jboss.cluster.name:ejb}</property> <!-- 可选:自动清理过期节点,单位毫秒 --> <property name="cleanup_interval">30000</property> <property name="max_age">60000</property> </protocol> <!-- 保留其他协议如 MERGE3、FD_SOCK、VERIFY_SUSPECT 等 --> <protocol type="MERGE3"/> <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/> ... </stack> </stacks> </subsystem>
二、推荐配置方式
优先采用域模式统一管理
若集群节点数量较多,使用 WildFly 域模式(Domain Mode),通过主机控制器统一配置数据源和 JGroups 栈,避免每个节点单独修改配置,减少配置不一致风险。优化数据源连接池
JDBC_PING2 对数据库的访问频率较低,无需配置过大的连接池,建议设置min-pool-size为 2-3,max-pool-size为 5-10,避免资源浪费。启用自动清理机制
务必配置cleanup_interval和max_age参数,自动清理数据库中长时间未更新的无效节点记录,防止无效数据堆积影响集群发现效率。保证数据库高可用
JDBC_PING2 依赖的数据库需具备高可用能力(如主从复制、数据库集群),避免数据库单点故障导致整个集群的节点发现功能失效。按需选择 XA 数据源
仅当集群涉及分布式事务场景时,才需要使用 XA 数据源;普通 HA 场景下,非 XA 数据源已足够满足需求,可降低配置复杂度。验证集群发现有效性
配置完成后,启动多个集群节点,检查数据库表中是否生成对应节点记录;模拟节点宕机,确认过期记录是否被自动清理,验证集群节点能否正常发现与退出。
内容的提问来源于stack exchange,提问作者László Tóth

