JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

时间:2022-10-05 00:25:14
JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

JBoss提供了二种运行模式:standalone(独立运行模式)、domain(域模式),日常开发中,使用standalone模式足已; 但生产部署时,一个app,往往是部署在JBoss集群环境中的,如果所有JBoss server均采用standalone模式,会给运维带来极大的工作量,需要每台JBoss server上逐一部署/更新,显然不适合。

domain模式正是为了解决这一问题,该模式下,所有JBoss server可以划分成不同的group(注:这里的JBoss server并不一定要对应某台物理机或虚拟机,一个os上,可以同时run多个JBoss server实例,所以本文中的JBoss server均指某个运行中的JBoss server instance),每个group中可以包含多个JBoss server,所有这些JBoss server中,可以指定一台做为域控制器(domain controller),俗称master server,其它JBoss server均为Home Controller(俗称slave server)。

master上可以控制所有JBoss server,并监控其运行情况,部署应用时,一个war包,只需要部署到group上,该group中的所有JBoss server即会同步自动部署。

1、 下载并配置JDK1.8

1.1  下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件;

由于我的Linux是64位的,因此我下载jdk-8u101-linux-x64.tar.gz文件。

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

如下图所示:

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

1.2  新建/usr/java文件夹,将jdk-8u101-linux-x64.tar.gz放到该文件夹中,并将工作目录切换到/usr/java目录下。如下图所示:

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

解压JDK1.8

tar -zxvf jdk-8u101-linux-x64.tar.gz

1.3  配置环境变量:①、使用vim /etc/profile编辑profile文件,如下1图所示:②、在/etc/profile底部加入如下内容,保存退出JAVA_HOME=/usr/java/jdk1.8.0_101

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

如下2图所示:

图1:

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

图2:

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

最后使用source /etc/profile让profile文件立即生效

[root@lerry java]# source /etc/profile

1.4  验证jdk是否安装成功

[root@lerry java]# java -version

[root@lerry java]# echo $JAVA_HOME

当看到如下图时说明你的java环境已经配置OK

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

2、 下载并安装JBoss EAP 6.4

2.1   下载JBoss EAP 6.4

下载地址: https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=appplatform&version=6.4

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

2.2   新建/home/Downloads文件夹,将jboss-eap-6.4.0-installer.jar放到该文件夹中,并将工作目录切换到/home/Downloads目录下。如下图所示:

[root@lerry ~]# cd /home/

[root@lerry home]# mkdir Downloads

[root@lerry home]# cd Downloads/

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

2.3   安装JBoss EAP

运行安装命令:[root@lerry Downloads]# java -jar jboss-eap-6.4.0-installer.jar

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

安装过程中设置暗转路径等等其他参数,其中包括jboss的管理员的用户名和密码,用以登录jboss管理界面使用

2.4   创建jboss link

在/root/下创建link,以方便快速进入到jboss路径。

使用命令:ln -s /opt/EAP-6.4.0 /root/jboss

3、 部署Jboss eap Domain Server

修改配置

使用命令进入host.xml配置文件

vim domain/configuration/host.xml将所有127.0.0.1的地址,换成真实IP,在命令模式下输入下面命令,替换ip

:%s/127.0.0.1/192.168.1.81/g  

保存退出

修改cluster连接密码

vim domain/configuration/domain.xml

将${jboss.messaging.cluster.password:CHANGE ME!!}

修改为:${jboss.messaging.cluster.password:redhat!@#123}

 

3.1   修改/etc/profile文件,配置环境变量

vim etc/profile

增加:

     EAP_HOME=/opt/EAP-6.4.0

     export EAP_HOME

配置生效:source etc/profile

验证:echo $EAP_HOME

 

3.2   以domain模式启动Domain server

[root@lerry bin]# ./domain.sh

3.3   进入master jboss 控制台,创建group、server

http://192.168.1.81:9990/console/

进入控制台后,可以看到jboss已经默认创建了一些group及server,先把他们全干掉吧(通常,我们会创建自己的group/server)

参考下面这个界面,创建二个组 test-group-1,test-group-2

创建group时,profile建议选择full-ha (以后做jboss集群配置,负载均衡、智能容错时,需要使用full-ha profile)

重要提示:同一个局域网里如果有多个master,如果这些master上的group名称有重复,则只有第一master能启动成功后,后面的master启动时会报错,建议每个master上的group命名时,加上master的IP,比如group+IP地址,这样肯定不会重复!  

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

参考下面的图,在master server上创建4个server

注意:如果一个server已经处于started状态,是无法remove的,可以先到下面的界面,把该server stop掉,就可以Remove

Stop server

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

创建server

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

创建server时,有一个Port Offset选项,默认情况下server的端口是8080,Port Offset指端口偏移量,如果按下图配置,Port Offset指定为1,则表示该server创建后,对应的端口为8080+1,即8081端口 (可以用http://192.168.1.81:8081/ 来访问)

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

4、      部署Jboss eap Slaver

4.1   两台slave java环境安装,和jboss环境安装和master一样,参照上边的安装

4.2   在Slaver Server上配置jboss参数

复制备份domain文件夹:cp -rf domain domain-bak

4.3   修改domain/configuration/host-slave.xml

[root@lerry domain]# vim configuration/host-slave.xml

a)

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

这里的9999端口,改成其它不使用的端口(比如:9099),否则slave server上的9999端口,与master server上的管理端口冲突,最后启动时,会报错

b)

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

指定master server的IP(本例为192.168.1.81),这样slave在启动时,才知道去连哪一台master,如下图:

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

c)

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

原来的127.0.0.1,改成slave server的真实IP或0.0.0.0,否则slave上的应用,只能在slave本机访问

d)

手动在slave上创建二个server,并加入到test-group-1 和test-group-2中(注:group的值,必须是在master server上创建过的,否则启动时,slave上的server无法正常加入到master相关的group中)

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

e)

最开头的host节点上,加一个name="xxx"的属性(本文中为slave82),这个name值最终会显示在master server的jboss 控制台中,建议起一个容易识别的名称

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

4.4   修改/etc/profile文件,配置环境变量

vim etc/profile

增加:

     EAP_HOME=/opt/EAP-6.4.0

     export EAP_HOME

配置生效:source etc/profile

验证:echo $EAP_HOME

 

4.5   按照以上步骤在部署一台Slaver Server

5、 安全认证配置

5.1   回到master server上,添加一个名为slave82的管理员帐号,并记住最后生成的<secret value="xxxx" />的字符串(xxx为密码经过base64处理后的内容)

注意:realm选项时直接回车,否则会导致最后认证失败

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

5.2   回到slave82这台server中,再次编辑host-slave.xml,将<secret value="xxxx" />的内容替换

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

解释:slave启动时,需要连接注册到master的jboss中,连接过程需要安全认证,这里的secret相当于认证的钥匙,而认证的用户名即为: 正在连接的slave机器上jboss中host-slave.xml中<host name='xxx'>这个节点中的name值,所以需要在master中创建一个名为“slave82”的管理员

6、 mod_cluster-1.2.6 负载均衡器配置

mod_cluster是jboss的一个开源集群模块(基于apache 2.2.x),官网地址为http://mod-cluster.jboss.org/

6.1   下载 mod_cluster-1.2.6

下载地址:http://downloads.jboss.org/mod_cluster//1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-linux2-x64.tar.gz

6.2   安装并配置mod_cluster-1.2.6

[root@lerry Downloads]# tar -zxf mod_cluster-1.2.6.Final-linux2-x64.tar.gz

[root@lerry Downloads]# cp -rp opt/jboss/ /opt/

[root@lerry Downloads]# cd /opt/jboss/httpd/httpd/conf/

[root@lerry conf]# vim httpd.conf

将ServerName修改为本机真实IP

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

最后的mod_cluster部分,参考下面修改

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

主要是把127.0.0.1,改成master server对应的真实IP,另外把Deny from all注释掉,把紧贴着的一行改成Allow from all,去掉这些访问上的限制。AdvertiseGroup和AdvertiseBindAddress的配置尤为重要,这里是我们的组播地址默认224.0.1.105:23364.需要改一下,如果我们一个内网环境,多个jboss集群,就会发送冲突,模块能扫描到其他项目的节点这里至关重要

修改完成后保存退出。在启动apache

[root@lerry conf]# cd /opt/jboss/httpd/sbin/

[root@lerry sbin]# ./httpd

顺利的话,浏览http://192.168.1.81:6666/mod_cluster_manager应该能看到类似以下界面

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

这是很关键的一个界面,用来管理/监控所有节点,如果没成功,请仔细检查前面的步骤是否有误。

6.3  修改master和slave的广播地址

我们配置master和slave选择的是full-ha-sockets模式,我们需要修改这个段落,广播地址有两个,我们都改成不同的网段,231.7.7.7 改为231.7.7.8,224.0.1.105,改为224.0.1.108,端口改成23333默认值23364 我们必须得更改这个,不然影响其他集群

vim /root/jboss/domain/configuration/domain.xml

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

注意:同一集群环境中的所有节点均需要修改

我们的模块由此配置,不会影响到内网其他集群,如果不这样配置,mod_cluster 默认广播到任何节点,只要安装有jboss 他都会扫描到,多集群部署就会给我们带来困扰

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

比如这样的报错,就是其他集群尝试连接这个模块,认证失败导致的报错

6.4  domain模式启动所有jboss master/slave server

启动jboss master server / slave server,完成后,刷新 http://192.168.1.81:6666/mod_cluster_manager,会看到多出了好多节点

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

如果没有新的节点显示在该界面,检查jboss master server中创建的group,对应的profile是否为full-ha或ha点击相关的链接,还能看到更详细的信息

注意:mod_cluster貌似最多只能支持6个node的负载均衡,mod_cluster还有其它一些限制,详情可参考http://docs.jboss.org/mod_cluster/1.2.0/html_single/#d0e85

7、  负载均衡、容错验证

在test-group-1和test-group-2中部署了一个名为Test的应用做验证。

现在可以直接用http://192.168.1.81/Test/来访问了,apache会智能转发到JBoss节点中的某一个,如果访问正常,说明负载均衡已经生效。继续把其它server停掉几台,再继续访问http://192.168.1.81/Test/,如果仍然正常,说明某几个node损坏,并不影响正常使用,即容错成功。所有server全shutdown后,http://192.168.1.81/Test/ 将无法访问。

最后的架构如下:

JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

8、  JBoss EAP 6.3集群-Session 复制(Replication)

java web application中,难免会用到session,集群环境中apache会将http请求智能转发到其中某台jboss server。假设有二个jboss server:Server A,Server B,Session值在Server A上。用户在访问某一个依赖session的页面时,如果第一次访问到Server A,能正常取到Session值,刷新一下,如果这时转发到Server B,Session值取不到,问题就来了。

解决的办法简单到让人不敢相信,在app的web.xml中加一行 <distributable/> 即可(前提:jboss cluster是使用mod_cluster实现的),有了这个节点后,向某台server写入session时,session会自动复制到其它server node。 

9、  将JBoss EAP 和mod_cluster 注册服务设置开机自启

创建jboss用户

[root@lerry etc]# useradd jboss

9.1   在master server的/root/bin目录下创建start-master-server.sh

vim /root/bin/start-master-server.sh

内容:

rm -rf /root/jboss-nohup.sh

nohup $EAP_HOME/bin/domain.sh >/root/jboss-nohup.out 2>&1 &

保存后,为该文件设置运行权限

chmod a+x /root/bin/start-master-server.sh

9.2   在slave server的/root/bin目录下创建start-host-server.sh

rm -rf /root/jboss-nohup.sh

nohup $EAP_HOME/bin/domain.sh --host-config=host-slave.xml >/root/jboss-nohup.out 2>&1 &

保存后,为该文件设置运行权限

chmod a+x /root/bin/start-host-server.sh

9.3   设置开机自启

连接jboss-as- domain.sh到/etc/init.d中

ln -s -T /root/jboss/bin/init.d/jboss-as-domain.sh /etc/init.d/jboss-as

创建在/etc/目录下创建一个jboss-as目录

[root@lerry etc]# mkdir jboss-as

给jboss-as文件夹赋宿主和宿组

[root@lerry etc]# chown jboss:jboss jboss-as/

连接jboss-as.conf到/etc/jboss-as 里

ln -s -T /root/jboss/bin/init.d/jboss-as.conf /etc/jboss-as/jboss-as.conf

修改jboss-as.conf

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置

激活服务,设置自启动

[root@lerry jboss-as]# chkconfig --add jboss-as

[root@lerry jboss-as]# chkconfig jboss-as

修改jboss-as-domain.sh里面的路径, 使他们指向安装的目录

 JBoss-EAP-6.4.0 域(Domain)模式+mod_cluster-1.2.6 集群环境配置