一.环境准备. 系统: centos 6.5_x64 jboss-node1.example.com: 192.168.0.140 (master) jboss-node2.example.com: 192.168.0.141 (slave) jboss-node3.example.com: 192.168.0.142 (slave) 注意:三台机器iptables 关闭selinux 关闭 所有软件包存放位置: /usr/local/src/ 软件下载地址: 1. jboss-eap jboss-eap-6.3.0.zip #下载地址 http://www.jboss.org/downloads/ #需要输入redhat账户密码,没有的话可以注册个 2.jdk: jdk-6u45-linux-x64.bin 我这里用的比较老,java环境,各位可以到官网下载rpm包安装即可 #下载地址 www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 3.mod-cluster mod_cluster-1.2.6.Final-linux2-x64-ssl.tar.gz #这个主要做负载均衡器只部署在master上 #下载地址 http://mod-cluster.jboss.org/
本次试验,软件包下载地址 链接:http://pan.baidu.com/s/1gd8b0l1 密码:7enz 安装前导读: 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即会同步自动部署。 二.环境配置 (master) 节点配置 1. jboss-node1.example.com: 192.168.0.140 (master) 节点配置 [root@jboss-node1 src]# cd /usr/local/src/ [root@jboss-node1 src]# ./jdk-6u45-linux-x64.bin [root@jboss-node1 src]# cp -rp jdk1.6.0_45/ /usr/ 2.配置java 环境变量: [root@jboss-node1 src]# vi /etc/profile export JAVA_HOME=/usr/jdk1.6.0_45 export PATH=$PATHJAVA_HOME/bin export CLASSPATH=.JAVA_HOME/jre/libJAVA_HOME/libJAVA_HOME/lib/tools.jar [root@jboss-node1 src]# source /etc/profile 3.安装配置jboss(master)
[root@jboss-node1 src]# yum install unzip -y [root@jboss-node1 src]# unzip jboss-eap-6.3.0.zip [root@jboss-node1 src]# cp -rp jboss-eap-6.3 /usr/local/ [root@jboss-node1 src]# vi /usr/local/jboss-eap-6.3/domain/configuration/host.xml 将所有127.0.0.1的地址,换成master server对应的真实IP(否则,无法从远程通过浏览器,访问jboss 管理控制台) 在命令模式下输入下面命令,替换ip :%s/127.0.0.1/192.168.0.140/g 保存退出 添加管理员账户 [root@jboss-node1 src]# cd /usr/local/jboss-eap-6.3/bin [root@jboss-node1 bin]# ./add-user.sh #添加管理员账户,否则我们无法登陆控制台 admin redhat!@#123
修改cluster连接密码,这个密码跟我们后面添加的slave server用户密码必须一致,否则 会报错 [root@jboss-node1 ~]# vi /usr/local/jboss-eap-6.3/domain/configuration/domain.xml
<cluster-password>${jboss.messaging.cluster.password:CHANGE ME!!}</cluster-password> 修改为: <cluster-password>${jboss.messaging.cluster.password:redhat!@#123}</cluster-password> 启动master ./domain.sh [root@jboss-node1 src]# vi /root/start_master.sh 启动脚本: #!/bin/bash nohup /usr/local/jboss-eap-6.3/bin/domain.sh >/root/jboss.log 2>&1 & [root@jboss-node1 src]# chmod +x /root/start_master.sh [root@jboss-node1 src]# /root/start_master.sh 4.web 控制台访问地址 http://192.168.0.140:9990/console/ #输入添加的管理员账户秘密登陆即可
5.创建group、server 进入控制台后,可以看到jboss已经默认创建了一些group及server,我们需要创建自己的,这些都可以删掉
创建group时,profile建议选择full-ha (以后会讲如何做jboss集群配置,负载均衡、智能容错时,需要使用full-ha profile) 创建server时,有一个Port Offset选项
解释一下,默认情况下server的端口是8080,Port Offset指端口偏移量,如果按上图配置,Port Offset指定为5,则表示该server创建后,对应的端口为8080+5,即8085端口 (可以用http://192.168.0.140:8085/ 来访问)
默认有几个分组,我们可以在这里把分组停掉,然后在Server Configurations 里面删除即可 Slave 节点配置 1.两台slave java环境安装,和jboss环境安装和master一样,参照上边的安装 2.配置 jboss slave server 注意:将原来的host.xml改名备份,然后再将host-slave.xml复制一份,并改名为host.xml [root@jboss-node2 configuration]# cd /usr/local/jboss-eap-6.3/domain/configuration/ [root@jboss-node2 configuration]# cp host.xml host.xml.bak [root@jboss-node2 configuration]# cp host-slave.xml host.xml 修改 host.xml 修改1处 <management-interfaces> <native-interface security-realm="ManagementRealm"> <socket interface="management" port="${jboss.management.native.port:9999}"/> #port端口改为9099 </native-interface> </management-interfaces> 这里的9999端口,改成其它不使用的端口(比如:9099),否则slave server上的9999端口,与master server上的管理端口冲突,最后启动时,会报错 修改2处 <domain-controller> <remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/> 改为 <domain-controller> <remote host="${jboss.domain.master.address:192.168.0.140}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/> </domain-controller> 指定master server的IP(本文中为192.168.0.140),这样slave在启动时,才知道去连哪一台master 修改3处 <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:192.168.0.141}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:192.168.0.141}"/> </interface> <interface name="unsecure"> <!-- Used for IIOP sockets in the standard configuration. To secure JacORB you need to setup SSL --> <inet-address value="${jboss.bind.address.unsecure:192.168.0.141}"/> </interface> </interfaces> 原来的127.0.0.1,改成slave server的真实IP或0.0.0.0,否则slave上的应用,只能在slave本机访问 修改4处 <servers> <server name="slave-server-8084" group="my-group-1"> <socket-bindings port-offset="4"/> </servers> 手动在slave上创建一个server,并加入到my-group-1(注:group的值,必须是在master server上创建过的,否则启动时,slave上的server无法正常加入到master相关的group中) 修改 5 处 <host name="slave57" xmlns="urn:jboss:domain:1.6"> 最开头的host节点上,加一个name="xxx"的属性(本文中为slave57),这个name值最终会显示在master server的jboss 控制台中,建议起一个容易识别的名称 修改 6处 安全认证 4.1 回到master server上,添加一个名为slave57的管理员帐号,并记住最后生成的<secret value="xxxx" />的字符串(xxx为密码经过base64处理后的内容)账户名 slave1 密码 redhat!@#123 还是用之前master的 添加用户的脚本,切记,必须得在master上添加这个用户,slave连接到master全凭借这个用户认证连接 添加到 slave host.xml 文件 <security-realm name="ManagementRealm"> <server-identities> <!-- Replace this with either a base64 password of your own, or use a vault with a vault expression --> <secret value="cmVkaGF0IUAjMTIz" /> #生成的密码字符串替换这个即可 </server-identities> 解释:slave启动时,需要连接注册到master的jboss中,连接过程需要安全认证,这里的secret相当于认证的钥匙,而认证的用户名即为:正在连接的slave机器上jboss中host.xml中<host name='xxx'>这个节点中的name值,所以 需要在master中创建一个名为“slave57”的管管理账户 启动slave [root@jboss-node2 bin]# vi /root/start_node2.sh 启动脚本: #!/bin/bash nohup /usr/local/jboss-eap-6.3/bin/domain.sh >/root/jboss.log 2>&1 & [root@jboss-node2 bin]# chmod +x /root/start_node2.sh [root@jboss-node2 bin]# /root/start_node2.sh
依次添加,其他节点
两个节点已经全部添加
mod_cluster-1.2.6 负载均衡器配置 1.解压出软件 [root@jboss-node1 src]# tar -zxvf mod_cluster-1.2.6.Final-linux2-x64-ssl.tar.gz [root@jboss-node1 src]# cp -rp opt/jboss/ /opt/ #配置文件默认写的就是/opt [root@jboss-node1 src]# cd /opt/jboss/httpd/httpd/ conf [root@jboss-node1 ~]# vi /opt/jboss/httpd/httpd/conf/httpd.conf
点击(此处)折叠或打开
- # MOD_CLUSTER_ADDS
- # Adjust to you hostname and subnet.
- <IfModule manager_module>
- Listen 192.168.0.140:6666
- ManagerBalancerName mycluster
- <VirtualHost 192.168.0.140:6666>
- <Location />
- Order deny,allow
- #Deny from all
- Allow from all
- </Location>
- KeepAliveTimeout 300
- MaxKeepAliveRequests 0
- #ServerAdvertise on http://127.0.0.1:6666
- AdvertiseFrequency 5
- #AdvertiseSecurityKey secret
- AdvertiseGroup 224.0.1.108:23333
- AdvertiseBindAddress 224.0.1.108:23333
- #AdvertiseGroup 和 AdvertiseBindAddress的配置尤为重要 #这里是我们的组播地址默认224.0.1.105:23364.需要改一下,如果我们一个内网环境,多个jboss集群,就会发送冲突,模块能扫描到其他项目的节点这里至关重要
- EnableMCPMReceive
- <Location /mod_cluster_manager>
- SetHandler mod_cluster-manager
- Order deny,allow
- #Deny from all
- Allow from all
- </Location>
- </VirtualHost>
- <IfModule manager_module>
这时候启动Apache 会有个报错
我们需要写一个hosts 解析
[root@jboss-node1 ~]# vi /etc/hosts #添加本的解析
192.168.0.140 Jboss-node1.example.com
[root@jboss-node1 ~]# vi /opt/jboss/httpd/httpd/conf/httpd.conf
#ServerName 改成这样启动就不会报错了
ServerName Jboss-node1.example.com:80 2.修改jboss 配置让他连接我们的6666端口,由我们的模块代理这几台机器 3.master 修改连接并设置session黏贴 我们的session可以共享,这是集群工作的必须 vi /usr/local/jboss-eap-6.3/domain/configuration/domain.xml #修改前建议备份
<mod-cluster-config advertise-socket="modcluster" connector="ajp">
改为: <mod-cluster-config advertise-socket="modcluster" proxy-list="127.0.0.1:6666" balancer="kylinBalancer" sticky-session="true" advertise-security-key="123456789" connector="ajp"> 4.修改master 的广播地址 我们配置master选择的是full-ha-sockets模式,我们需要修改这个段落,广播地址有两个,我们都改成不同的网段,231.7.7.7 改为231.7.7.8,224.0.1.105,改为224.0.1.108,端口改成23333默认值23364 我们必须得更改这个,不然影响其他集群
5.selave 修改连接,并设置session黏贴 vi /usr/local/jboss-eap-6.3/domain/configuration/domain.xml #修改前建议备份 <mod-cluster-config advertise-socket="modcluster" connector="ajp">
改为: <mod-cluster-config advertise-socket="modcluster" proxy-list="192.168.0.140:6666" balancer="kylinBalancer" advertise-security-key="123456789" instance-id="${jboss.node.name}" sticky-session="true" connector="ajp">
6.修该slave 的广播地址 我们配置master选择的是full-ha-sockets模式,我们需要修改这个段落,,广播地址有两个,我们都改成不同的网段,231.7.7.7 改为231.7.7.8,224.0.1.105,改为224.0.1.108,端口改成23333默认值23364 我们必须得更改这个,不然影响其他集群
注意:修改之后,master 和,其他节点,都要重新启动 启动 mod_cluster 代理 [root@jboss-node1 ~]# /opt/jboss/httpd/sbin/httpd
访问web界面 http://192.168.0.140:6666/mod_cluster_manager
我们的模块由此配置,不会影响到内网其他集群,如果不这样配置,mod_cluster 默认广播到任何节点,只要安装有jboss 他都会扫描到,多集群部署就会给我们带来困扰
比如这样的报错,就是其他集群尝试连接这个模块,认证失败导致的报错 三.部署软件包测试集群。 在 jboss 控制台,点击 “Manage Deployments” 添加软件包
点击 “Assign” 分发到组里面所有机器
如果包没问题,日志会提示,包已部署
|