在wildfly 21中搭建cluster集群

article/2025/9/25 19:43:08

文章目录

  • 简介
  • 下载软件和相关组件
  • 配置domain
  • 创建应用程序
  • 部署应用程序
  • 集群配置
  • 总结

简介

wildfly是一个非常强大的工具,我们可以轻松的使用wildfly部署应用程序,更为强大的是,wildfly可以很方便的部署cluster应用。

今天我们通过一个例子来讲解下wildfly如何构建cluster应用。

下载软件和相关组件

假如我们有两个host,一个称为master,一个称为slave,我们需要在两个机子上面安装wildfly,构建成domain模式。然后需要在Domain controller主机上面安装mod_cluster和httpd以组成集群。

首先我们需要下载wildfly-21.0.0.Final.zip,解压之后,运行domain.sh以开启domain模式。

配置domain

我们需要将master配置为domain controller,根据我们之前的文章,首先配置interfaces,我们需要修改domain/configuration/host.xml:

<interfaces><interface name="management"<inet-address value="${jboss.bind.address.management:10.211.55.7}"/></interface><interface name="public"><inet-address value="${jboss.bind.address:10.211.55.7}"/></interface>    <interface name="unsecured"><inet-address value="10.211.55.7" />    </interface>
</interfaces> 

因为我们master的ip地址是10.211.55.7,所以需要修改相应的值。这里使用的是master对外的ip地址,从而可以供slave连接到master。

同样的,我们需要修改slave的interface值:

<interfaces><interface name="management"><inet-address value="${jboss.bind.address.management:10.211.55.2}"/></interface><interface name="public"><inet-address value="${jboss.bind.address:10.211.55.2}"/></interface><interface name="unsecured">       <inet-address value="10.211.55.2" />    </interface>
</interfaces>

也需要修改相应的ip地址。

接下来是修改host name :

//master
<host name="master" xmlns="urn:jboss:domain:3.0">
//slave
<host name="slave" xmlns="urn:jboss:domain:3.0">

在slave中,我们还需要配置domain-controller,从而让slave可以连接到master:

<domain-controller><remote security-realm="ManagementRealm" ><discovery-options><static-discovery name="master-native" protocol="remote"  host="10.211.55.7" port="9999" /><static-discovery name="master-https" protocol="https-remoting" host="10.211.55.7" port="9993" security-realm="ManagementRealm"/><static-discovery name="master-http" protocol="http-remoting" host="10.211.55.7" port="9990" /></discovery-options></remote>
</domain-controller>

接下来,我们需要创建用于连接的security-realm,通过add-user.sh命令,我们可以创建添加用户。

这里我们创建两个用户,第一个用户叫做admin,使用来进行domain管理的用户。

第二个用户叫做slave,这个用户用来slave连接到master。

还记得add-user.sh命令是怎么用的吗?下面是创建admin用户的输出:

./add-user.shEnter the details of the new user to add.
Realm (ManagementRealm) :
Username : admin
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.- The password should not be one of the following restricted values {root, admin, administrator}- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)- The password should be different from the username
Password : passw0rd!
Re-enter Password : passw0rd!
The username 'admin' is easy to guess
Are you sure you want to add user 'admin' yes/no? yes
About to add user 'admin' for realm 'ManagementRealm'
Is this correct yes/no? yes

如果是slave用户,则需要在下面的问题提示的时候,回答yes

Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes
To represent the user add the following to the server-identities definition <secret value="cGFzc3cwcmQh" />

有了slave用户,我们就可以使用这个用户来配置slave的ManagementRealm了:

<security-realms><security-realm name="ManagementRealm"><server-identities><secret value="cGFzc3cwcmQh" /><!-- This is required for SSL remoting --><ssl><keystore path="server.keystore" relative-to="jboss.domain.config.dir" keystore-password="jbossas" alias="jboss" key-password="jbossas"/></ssl></server-identities><authentication><properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/></authentication></security-realm>
</security-realms>

这样配置过后,slave和master就可以进行连接了。

创建应用程序

这里我引用的是官网的demo程序。实际上就是一个非常简单的web应用。代码地址 https://github.com/liweinan/cluster-demo/ 。

我们简单进行一下讲解,基本的代码逻辑就是在session中存放一个时间数据,然后尝试从不同的server中取出,看是否一致,如果一致的话说明cluster集群是有效的。

//设置session的值
session.setAttribute("current.time", new java.util.Date());
//获取session的值
session.getAttribute("current.time")

cluster中最重要的就是session共享,或者说session复制。我们可以简单的在web.xml中使用distributable标签即可。

<web-app><display-name>Archetype Created Web Application</display-name><distributable/>
</web-app>

这就是我们应用程序的全部了。

部署应用程序

这次我们从web console中进行应用程序的部署。

打开 http://10.211.55.7:9990 ,输入我们创建的admin用户名和密码,即可进入管理界面。

默认情况下,会创建3个服务,分别是server-one,server-two和server-three。

server-one,server-two是默认启动的,他们属于main-server-group。而server-three是不启动的,它属于other-server-group。

我们看下other-server-group的配置:

<server-group name="other-server-group" profile="full-ha"><jvm name="default"><heap size="64m" max-size="512m"/></jvm><socket-binding-group ref="full-ha-sockets"/></server-group>

other-server-group使用的profile是full-ha,看名字就知道整个profile是为高可用设计的。那么这个profile有什么特别之处呢?

<profile name="full-ha">
...
<subsystem xmlns="urn:jboss:domain:modcluster:5.0"><proxy name="default" advertise-socket="modcluster" listener="ajp"><dynamic-load-provider><load-metric type="cpu"/></dynamic-load-provider></proxy>
</subsystem><subsystem xmlns="urn:jboss:domain:infinispan:11.0">
...
</subsystem><subsystem xmlns="urn:jboss:domain:jgroups:8.0"><channels default="ee"><channel name="ee" stack="udp" cluster="ejb"/></channels><stacks><stack name="udp">...</stack><stack name="tcp">...</stack></stacks></subsystem>
...
</profile>

这个profile中和ha有关的就是infinispan,jgroup和modcluster。通过这些组件,wildfly就可以来进行cluster的组建。

因为server-three默认是停止状态的,我们需要在master和slave中分别启动他们。

在Manage Deployments页面,点击Add Content,然后选择我们之前的demo应用程序cluster-demo.war,上传即可。

好了,程序已经部署好了,我们可以分别访问:

http://10.211.55.7:8330/cluster-demo/ 和 http://10.211.55.2:8330/cluster-demo/ 来查看应用程序的页面。

现在为止,两个应用程序还是独立的,并没有组合成cluster,接下来我们将会进行cluster的配置。

还有一点要注意的是,我们需要将master和slave中的server-three修改成不同的名字,如果是相同的名字,那么我们在后面使用的mod_cluster将会报错,因为在同一个server group中不允许出现两个相同的名字。

<server name="server-three" group="other-server-group" auto-start="true"><socket-bindings port-offset="250"/>
</server><server name="server-three-slave" group="other-server-group" auto-start="true"><socket-bindings port-offset="250"/>
</server>

集群配置

软件部署好之后,我们需要在master机子上面使用mod_cluster + apache httpd 来启用集群功能。

首先安装httpd:

sudo yum install httpd

然后下载mod_cluster:

http://www.jboss.org/mod_cluster/downloads

将其解压缩到 /etc/httpd/modules ,然后修改 /etc/httpd/conf/httpd.conf

添加下面的modules:

LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

并且注释掉下面的modules:

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

因为proxy_balancer_module是和proxy_cluster_module相冲突的。

然后修改httpd监听 10.211.55.7:80。

最后还要在httpd.conf中配上mod_cluster-manager的监听端口:

<VirtualHost 10.211.55.7:10001><Directory />Order deny,allowDeny from allAllow from 10.211.55.</Directory># This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager<Location /mod_cluster-manager>SetHandler mod_cluster-managerOrder deny,allowDeny from allAllow from 10.211.55.</Location>KeepAliveTimeout 60MaxKeepAliveRequests 0ManagerBalancerName other-server-groupAdvertiseFrequency 5</VirtualHost>

我们可以使用service httpd start启动httpd服务即可。

我们可以通过访问 http://10.211.55.7/cluster-demo/ 来访问集群服务了。

注意,虽然是集群模式,但是我们所有的请求都要先到master机子上面做转发。

总结

wildfly内置了很多强大的组件支持,不愧为工业标准的典范。值的学习。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/wildfly-cluster-domain/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!


http://chatgpt.dhexx.cn/article/hcvSANQs.shtml

相关文章

WildFly配置数据库(mysql)

1.安装wildfly&#xff1a;地址&#xff1a;WildFly Downloads 这里我使用的是WildFly12 2.配置环境 我们可以通过两种方式实现配置&#xff1a; 2.1 我们通过xml方式配置&#xff1a; 第一步&#xff1a;创建目录 在项目文件\wildfly-12.0.0.Final\wildfly12.0.0.Final\mod…

fly.js使用

原文地址&#xff1a;http://www.voidcc.com/project/fly 项目信息 Fly.js 是一个基于 promise 的&#xff0c;轻量且强大的Javascript http 网络库 51 1,686 221 0 2018-09-06 开发语言: JavaScript 开源协议: MIT 项目代码: Github - fly 项目作者: wendux 作者主页: G…

Wildfly 10的安装、配置到部署

第一步&#xff1a;到官网下载Wildfly。 官方网站&#xff1a;http://www.wildfly.org/ 下载地址&#xff1a;http://wildfly.org/downloads/ 我这里下载的是10.1.0.Final这个版本&#xff0c;下载地址是&#xff1a;http://download.jboss.org/wildfly/10.1.0.Final/wildfly…

Wildfly配置Datasources

配置Datasources前&#xff0c;需要先配置对应的JDBC驱动&#xff0c;配置方法&#xff0c;可以参考&#xff1a; Wildfly配置mysql8.0的JDBC驱动 之后&#xff0c;配置对应的Datasources。配置方法有两种&#xff0c;一种是通过管理后台配置&#xff0c;一种是通过手工修改配…

wildfly 21的domain配置

文章目录 简介wildfly模式简介domain controller的配置Host controller的配置文件忽略域范围的资源Server groupsServers总结 简介 wildfly可以使用Standalone模式或者domain模式启动&#xff0c;standalone模式就很简单了&#xff0c;可以看做是一个单独的服务器。今天我们将…

JBoss的AS版本 Wildfly 介绍和使用

WildFly简介&#xff1a; wildFly是一款服务器&#xff0c;和tomcat一样&#xff0c;不过事jboss服务器的as版本罢了&#xff0c;相比于Jboss的EPA版本就比较繁重&#xff0c;所以有了这个Jboss服务器的轻便版本。至于什么时候独立出来的版本&#xff0c;之类的我就不给你扯淡…

FlyBird

游戏演示&#xff1a; 按键盘的上下键来控制小鸟上下移动&#xff0c;碰到管道会大量扣血&#xff0c;但是没有的时候会缓慢回血。 当生命值不是正数的时候&#xff0c;就结束游戏&#xff0c;按下空格可以重新开始。 我的代码如下 我的gitee地址&#xff1a;https://git…

使用wildfly部署项目

WildFly部署项目 一、下载 在浏览器地址栏输入https://www.wildfly.org/&#xff0c;打开WildFly官网,点击other versions选择版本&#xff0c;因为开发环境是jdk1.8&#xff0c;部署环境是Windows&#xff0c;所以这里我选择的是 “Java EE Full & Web Distribution”项…

wildfly安装及基本使用

一.wildfly在linux下的安装 1.下载地址 官网下载地址&#xff1a;https://www.wildfly.org/downloads/ 2.目录介绍 下载好后我们解压出来看一下目录结构&#xff1a; *appclient 里面是一些默认的配置、服务器日志配置等 *bin 里面就是一些可执行的脚本文件&#xff0c;有添…

什么是Wildfly?

WildFly 是一个 Java Enterprise Edition 全功能应用服务器&#xff0c;它提供了运行 Java Web 应用程序所需的所有功能。WildFly 由 Red Hat 设计和维护&#xff0c;正式名称为 JBoss AS。 总体而言&#xff0c;WildFly可以缩短开发时间&#xff0c;更有效地管理资源&#xff…

什么是wildfly

文章目录 什么是wildfly特点下载安装readme及启动命令启动操作总结一下具体步骤&#xff08;第一版&#xff09;1.配置环境变量(下载上面有)3、环境变量配好之后&#xff0c;需要为JBOSSt添加用户&#xff0c;调用dos窗口&#xff0c;输入命令2、启动Jboss&#xff0c;在dos窗口…

python3.6 安装MySQLdb

前言 最近做python的项目需要将json对象存储到数据库&#xff0c;在网上查了一下发现使用mysql数据库和MySQLdb模块是可以做到的。结果上网上查的时候发现&#xff0c;很多人说MySQLdb只能支持python2.4-2.7&#xff0c;不支持python3&#xff0c;但是我的其他部分基于python3…

[数据库] mysql

前言 各种知识多而且容易遗忘,还不容易复习。最好的方法当然是自己给自己提问,不断补缺查漏,缺什么补什么。本文将各类知识归类,并将全文知识点浓缩在自问自查中,并且都写好目录,自问自查时可以随时跳转过去,方便大家系统的学习复习知识。 水平有限,有错误敬请指正 食用方法 …

MySQL DataBase

文章目录 DBMSSQL备份数据库数据类型事务视图数据库设计三范式分组查询C# 连接 MySQL字符集存储引擎InnoDB行格式记录头信息 数据页结构B 树索引 DBMS DataBase Management System&#xff0c;数据库管理系统。常见的有 MySQL、Oracle、Microsoft SqlServer SQL Structured …

mysql数据库中求圆的面积_MYSQL数据库

数据库&#xff1a; 数据库就是存储数据的仓库 为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上&#xff0c;通过数据库的管理系统&#xff0c;可以有效的管理存储在数据库中的数据&#xff1b; mysql数据库的优点&#xff1a; 1.多语言的支持 2.可以…

【数据库MySQL】

数据库MySQL 数据库设计原则和数据库事务 数据库MySQL数据表的设计原则数据库对象编写建议关于库关于表、列关于索引sql编写 数据库事务存储引擎是否支持事务ACID特性事务的状态 显式事务与隐式事务显式事务隐式事务隐式提交数据的情况 事务隔离级别脏读不可重复性幻读 4种隔离…

Database:MySQL

学习笔记&#xff1a;MySQL Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology 前面的SQL代码为数据库通用语言&#xff0c;但是结果都是在MySQL环境下运行的结果…

数据库------MYSQL

目录 数据库 关系型数据库 非关系型数据库 MYSQL 登录 创建数据库 字符集 警告,错误,致命 查看数据库 选中数据库 删除库 数据类型 数值类型 字符串类型 日期类型 表的操作 选定数据库 创建表 多行输入 注释 单行注释: 多行注释 查看表结构 查看表 删除表…

Python之安装MySQLdb

Python连接mysql需要MySQLdb模块 一.环境 系统版本&#xff1a;windows10家庭版 Python版本&#xff1a; python3.7.1 IDE&#xff1a;sublime_text3 二.安装说明 如果是python 2.x版本的&#xff0c;在命令行输入执行&#xff1a;pip install MySQLdb即可安装成功如果是py…

DB SQL mysql

今天我们用10分钟&#xff0c;重点梳理一遍以下几方面&#xff1a; 数据库知识点汇总&#xff1b; 数据库事务特性和隔离级别&#xff1b; 详解关系型数据库、索引与锁机制&#xff1b; 数据库调优与最佳实践&#xff1b; 面试考察点及加分项。 知识点汇总 一、数据库的…