1、 1 / 16Linux JBoss EAP集群搭建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
2、可以划分成不同的 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上可以控制所有 JBos
3、s server,并监控其运行情况,部署应用时,一个war包,只需要部署到 group上,该 group中的所有 JBoss server即会同步自动部署。1、 下载并配置 JDK1.81.1 下载 Linux环境下的 jdk1.8,请去(官网)中下载 jdk的安装文件;由于我的 Linux是 64位的,因此我下载 jdk-8u101-linux-x64.tar.gz文件。下载地址:http:/ / 161.2 新建/usr/java 文件夹,将 jdk-8u101-linux-x64.tar.gz放到该文件夹中,并将工作目录切换到/usr/java目录下。如下图所示:解压 JDK1.8tar
4、 -zxvf jdk-8u101-linux-x64.tar.gz 1.3 配置环境变量:、使用 vim /etc/profile编辑 profile文件,如下 1图所示:、在/etc/profile底部加入如下内容,保存退出 JAVA_HOME=/usr/java/jdk1.8.0_101PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOMEexport PATHexport CLASSPATH如下 2图所示:图 1:图 2:3 / 16最后使用 s
5、ource /etc/profile让 profile文件立即生效rootlerry java# source /etc/profile1.4 验证 jdk是否安装成功rootlerry java# java -versionrootlerry java# echo $JAVA_HOME当看到如下图时说明你的 java环境已经配置 OK2、 下载并安装 JBoss EAP 6.42.1 下载 JBoss EAP 6.4下载地址: https:/ / 162.2 新建/home/Downloads 文件夹,将 jboss-eap-6.4.0-installer.jar放到该文件夹中,并将工作目录
6、切换到/home/Downloads 目录下。如下图所示:rootlerry # cd /home/rootlerry home# mkdir Downloadsrootlerry home# cd Downloads/2.3 安装 JBoss EAP运行安装命令:rootlerry Downloads# java -jar jboss-eap-6.4.0-installer.jar安装过程中设置暗转路径等等其他参数,其中包括 jboss的管理员的用户名和密码,用以登录jboss管理界面使用2.4 创建 jboss link在/root/下创建 link,以方便快速进入到 jboss路径。使用
7、命令:ln -s /opt/EAP-6.4.0 /root/jboss3、 部署 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.xml5 / 16将$jboss.messaging.cluster.password:CHANGE ME! 修改
8、为:$jboss.messaging.cluster.password:redhat!#123这个密码是 cluster和 domain通信的密码,修改为后面安全认证时添加的密码一致,否则启动报错。3.1 修改/etc/profile 文件,配置环境变量vim etc/profile增加:EAP_HOME=/opt/EAP-6.4.0export EAP_HOME配置生效:source etc/profile验证:echo $EAP_HOME3.2 以 domain模式启动 Domain serverrootlerry bin# ./domain.sh3.3 进入 master jboss 控
9、制台,创建 group、serverhttp:/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名称有重复,则只有第一 m
10、aster能启动成功后,后面的 master启动时会报错,建议每个 master上的 group命名时,加上 master的 IP,比如 group+IP地址,这样肯定不会重复!6 / 16参考下面的图,在 master server上创建 4个 server注意:如果一个 server已经处于 started状态,是无法 remove的,可以先到下面的界面,把该7 / 16server stop掉,就可以 RemoveStop server创建 server创建 server时,有一个 Port Offset选项,默认情况下 server的端口是 8080,Port Offset 指端口偏移
11、量,如果按下图配置,Port Offset 指定为 1,则表示该 server创建后,对应的端口为8080+1,即 8081端口 (可以用 http:/192.168.1.81:8081/ 来访问)8 / 164、 部署 Jboss eap Slaver4.1 两台 slave java环境安装,和 jboss环境安装和 master一样,参照上边的安装4.2 在 Slaver Server上配置 jboss参数复制备份 domain文件夹:cp -rf domain domain-bak4.3 修改 domain/configuration/host-slave.xmlrootlerry d
12、omain# vim configuration/host-slave.xmla)这里的 9999端口,改成其它不使用的端口(比如:9099) ,否则 slave server上的 9999端口,与 master server上的管理端口冲突,最后启动时,会报错b)指定 master server的 IP(本例为 192.168.1.81) ,这样 slave在启动时,才知道去连哪一台 master,如下图: 9 / 16c) 原来的 127.0.0.1,改成 slave server的真实 IP或 0.0.0.0,否则 slave上的应用,只能在 slave本机访问d)手动在 slave上创
13、建二个 server,并加入到 test-group-1 和 test-group-2中(注:group的值,必须是在 master server上创建过的,否则启动时,slave 上的 server无法正常加入到 master相关的 group中)e) 最开头的 host节点上,加一个 name=“xxx“的属性(本文中为 slave82),这个 name值最终会显示在 master server的 jboss 控制台中,建议起一个容易识别的名称4.4 修改/etc/profile 文件,配置环境变量vim etc/profile增加:EAP_HOME=/opt/EAP-6.4.0expor
14、t EAP_HOME配置生效:source etc/profile验证:echo $EAP_HOME4.5 按照以上步骤在部署一台 Slaver Server5、 安全认证配置5.1 回到 master server上,添加一个名为 slave82的管理员帐号,并记住最后生成的的字符串(xxx 为密码经过 base64处理后的内容)10 / 16注意:realm 选项时直接回车,否则会导致最后认证失败,密码和 Domain中配置的一致5.2 回到 slave82这台 server中,再次编辑 host-slave.xml,将的内容替换解释:slave 启动时,需要连接注册到 master的 j
15、boss中,连接过程需要安全认证,这里的 secret相当于认证的钥匙,而认证的用户名即为: 正在连接的 slave机器上 jboss中host-slave.xml中这个节点中的 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_clust
16、er/1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-linux2-x64.tar.gz6.2 安装并配置 mod_cluster-1.2.6rootlerry Downloads# tar -zxf mod_cluster-1.2.6.Final-linux2-x64.tar.gzrootlerry Downloads# cp -rp opt/jboss/ /opt/rootlerry Downloads# cd /opt/jboss/httpd/httpd/conf/11 / 16rootlerry conf# vim httpd.conf
17、将 ServerName修改为本机真实 IP 最后的 mod_cluster部分,参考下面修改主要是把 127.0.0.1,改成 master server对应的真实 IP,另外把 Deny from all注释掉,把紧贴着的一行改成 Allow from all,去掉这些访问上的限制。AdvertiseGroup 和AdvertiseBindAddress的配置尤为重要,这里是我们的组播地址默认 224.0.1.105:23364.需要改一下,如果我们一个内网环境,多个 jboss集群,就会发送冲突,模块能扫描到其他项目的节点这里至关重要修改完成后保存退出。在启动 apache12 / 16
18、rootlerry conf# cd /opt/jboss/httpd/sbin/rootlerry sbin# ./httpd顺利的话,浏览 http:/192.168.1.81:6666/mod_cluster_manager应该能看到类似以下界面这是很关键的一个界面,用来管理/监控所有节点,如果没成功,请仔细检查前面的步骤是否有误。6.3 修改 master 和 slave 的广播地址我们配置 master和 slave选择的是 full-ha-sockets模式,我们需要修改这个段落,广播地址有两个,我们都改成不同的网段,231.7.7.7 改为 231.7.7.8,224.0.1.1
19、05,改为224.0.1.108,端口改成 23333默认值 23364 我们必须得更改这个,不然影响其他集群vim /root/jboss/domain/configuration/domain.xml注意:同一集群环境中的所有节点均需要修改我们的模块由此配置,不会影响到内网其他集群,如果不这样配置,mod_cluster 默认广播到任何节点,只要安装有 jboss 他都会扫描到,多集群部署就会给我们带来困扰比如这样的报错,就是其他集群尝试连接这个模块,认证失败导致的报错6.4 以 domain模式启动所有 jboss master/slave server启动 jboss master s
20、erver / slave server,完成后,刷新 http:/192.168.1.81:6666/mod_cluster_manager,会看到多出了好多节点13 / 16如果没有新的节点显示在该界面,检查 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/#d0e8
21、57、 负载均衡、容错验证在 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/ 将无法访问。14 / 16最后的架构如下:8、 JBoss
22、 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中加
23、一行 即可(前提:jboss cluster是使用 mod_cluster实现的),有了这个节点后,向某台 server写入 session时,session会自动复制到其它 server node。 9、 将 JBoss EAP 和 mod_cluster 注册服务设置开机自启创建 jboss用户rootlerry etc# useradd jboss9.1 在 master server的/root/bin 目录下创建 start-master-server.shvim /root/bin/start-master-server.sh内容:15 / 16rm -rf /root/jboss
24、-nohup.shnohup $EAP_HOME/bin/domain.sh /root/jboss-nohup.out 2&1 &保存后,为该文件设置运行权限chmod a+x /root/bin/start-master-server.sh9.2 在 slave server的/root/bin 目录下创建 start-host-server.shrm -rf /root/jboss-nohup.shnohup $EAP_HOME/bin/domain.sh -host-config=host-slave.xml /root/jboss-nohup.out 2&1 &保存后,为该文件设置运
25、行权限chmod a+x /root/bin/start-host-server.sh9.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目录rootlerry etc# mkdir jboss-as给 jboss-as文件夹赋宿主和宿组rootlerry 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.conf16 / 16激活服务,设置自启动rootlerry jboss-as# chkconfig -add jboss-asrootlerry jboss-as# chkconfig jboss-as修改 jboss-as-domain.sh里面的路径, 使他们指向安装的目录