热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jbossas7.1.0.CR1b域集群和会话复制环境部署

前言:我想向您展示如何在域模式下设置JBossAS7并启用群集,以便我们可以在节点之间获得HA(高可用性)和会话复制我们需要准备两个主机(或虚拟主机)来进行实验。我们将使用以下两个
前言:

我想向您展示如何在域模式下设置JBoss AS7并启用群集,以便我们可以在节点之间获得HA(高可用性)和会话复制
我们需要准备两个主机(或虚拟主机)来进行实验。我们将使用以下两个主机:

在它们上安装centos6.5(另外的linux版本也可以使用,但我将在本文中使用centos6.5)
确保主机位于同一本地网络中
确保它们可以通过不同的TCP / UDP端口相互访问(最好在实验期间关闭防火墙并禁用SELinux,否则会导致网络问题)。
主节点和从节点都将运行AS7,master将作为域控制器运行,slave将在master的域管理下运行。
master
IP:192.168.98.129
domain controller
mod_cluster+httpd

slave
IP:192.168.98.128
技术分享图片

目的:
1.将一个演示项目部署到域中,并验证项目是否由域控制器部署到主服务器和从服务器。因此,我们可以确认域管理为我们提供了单点管理单个域中多个主机的部署
2.我们将访问群集URL并验证httpd是否已将请求分发给as7主机之一。这有助于我们确认群集正常运行。
3.我们将尝试向集群发出请求,如果请求被转发到master as7,我们就会在master上终止as7进程。之后,我们将继续请求群集,我们应该看到请求已转发到slave,但会话尚未丢失。我们的目标是验证HA是否正常运行并且会话被复制。
整个拓扑图:

技术分享图片

好了,前面这些是我们要准备的环境和要达成的目的,现在我们将一步一步的搭建起这个环境
首先我们应该从网站下载AS7:

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

我下载的版本是7.1.0.CR1b,请不要使用此版本之前的版本,否则在群集模式下运行时您将遇到此错误:

https://issues.jboss.org/browse/AS7-2738

下载完成后

jboss-as-7.1.0.CR1b.tar.gz

然后我将包解压缩到master并运行:

tar -zxvf jboss-as-7.1.0.CR1b.tar.gz
cd jboss-as-7.1.0.CR1b/bin
./domain.sh

如果一切正常,我们应该看到AS7在域模式下成功启动:

jboss-as-7.1.0.CR1b/bin$ ./domain.sh

JBoss Bootstrap Environment

JBOSS_HOME: /Users/weli/Downloads/jboss-as-7.1.0.CR1b

JAVA: /Library/Java/Home/bin/java

JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

=========================================================================
...

[Server:server-two] 16:59:55,870 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 2499ms - Started 148 of 214 services (64 services are passive or on-demand)

现在退出as7,让我们在slave主机上重复相同的步骤。最后我们在主服务器和从服务器上运行AS7,然后我们可以进入下一步。

域配置:

master:

进入到AS7目录

vi domain/configuration/host.xml
此文件中接口的默认设置如下:


    
        
    
    
       
    

我们需要将地址更改为管理接口,以便slave可以连接到master。公共接口允许应用程序通过非本地HTTP访问,而不安全的接口允许远程RMI访问。我的主人的IP地址是192.168.98.129,所以我将配置更改为:


    
        
    
    
       
        
    
           
    
 
从节点Slave:

现在我们将在slave上设置接口。首先,我们需要从slave中删除domain.xml,因为slave不会充当域控制器并且在master的管理下。我只是重命名domain.xml,因此它不会被as7处理:

mv domain/configuration/domain.xml domain/configuration/domain.xml.move

然后让我们编辑host.xml。与master上的步骤类似,首先打开host.xml:

vi domain/configuration/host.xml

我们将在slave上使用的配置有点不同,因为我们需要让slave as7连接到master as7。首先,我们需要设置主机名。我们从以下位置更改name属性:

改变成

然后我们需要修改域控制器部分,以便slave as7可以连接到master的管理端口:



   

最后,我们还需要配置interfaces部分并将管理端口公开到公共地址:



    
        
    
    
       
    
    ~~       
           
    ~~

如果现在在主服务器和从服务器上都启动as7,您将看到无法启动从服务器as7,并显示以下错误:

[Host Controller] 20:31:24,575 ERROR [org.jboss.remoting.remote] (Remoting "endpoint" read-1) JBREM000200: Remote connection failed: javax.security.sasl.SaslException: Authentication failed: all available authentication mechanisms failed
[Host Controller] 20:31:24,579 WARN [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010900: Could not connect to remote domain controller 10.211.55.7:9999
[Host Controller] 20:31:24,582 ERROR [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010901: Could not connect to master. Aborting. Error was: java.lang.IllegalStateException: JBAS010942: Unable to connect due to authentication failure.

因为我们没有在主设备和从设备之间正确设置认证。现在让我们继续吧:

主节点master:

在bin目录中有一个名为add-user.sh的脚本,我们将使用它将新用户添加到用于域管理身份验证的属性文件中:

./add-user.sh

Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : admin
Password : 123123
Re-enter Password : 123123
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
Added user ‘admin‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/standalone/configuration/mgmt-users.properties‘
Added user ‘admin‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/domain/configuration/mgmt-users.properties‘

如上所示,我们创建了一个名为“admin”的用户,其密码为“123123”。然后我们添加另一个名为‘slave‘的用户:

./add-user.sh

Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : slave
Password : 123123
Re-enter Password : 123123
About to add user ‘slave‘ for realm ‘ManagementRealm‘
Is this correct yes/no? yes
Added user ‘slave‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/standalone/configuration/mgmt-users.properties‘
Added user ‘slave‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/domain/configuration/mgmt-users.properties‘

从节点Slave

在slave中,我们需要配置host.xml进行身份验证。我们应该更改security-realms部分如下:


   
       
           
       
       
           
       
   

我们已将服务器标识添加到security-realm中,当slave尝试连接到master时,它用于主机身份验证。因为slave的主机名设置为‘slave‘,所以我们应该在master上使用‘slave‘用户的密码。在secret value属性中,我们有‘MTIzMTIz =‘,它是‘123123‘的base64代码。您可以使用base64计算器生成此值,例如http://www.webutils.pl/index.php?idx=base64中的计算器 。
然后在域控制器部分我们还需要添加security-realm属性:



   
试运行

现在一切都设置为两个主机在域模式下运行。让我们通过在两台主机上运行domain.sh来启动它们。如果一切顺利,我们应该在登录master中看到以下内容:

[Host Controller] 21:30:52,042 INFO [org.jboss.as.domain] (management-handler-threads - 1) JBAS010918: Registered remote slave host slave

部署测试war

测试包我已经打好存放在百度云盘中,也可以自行打包,需要的给我留言即可。

git clone git://github.com/liweinan/cluster-demo.git

mvn package

它将生成cluster-demo.war。然后我们需要将战争部署到域中。首先,我们应该访问master上的http管理控制台(因为master充当域控制器):

http://192.168.98.129:9990

它会弹出一个窗口,提示您输入帐户名和密码; 我们可以使用我们刚刚添加的“管理员”帐户。登录后,我们将看到“服务器实例”窗口。默认情况下,列出了三个服务器,它们是:

服务器一
服务器三
服务器二
我们可以看到server-one和server-two处于运行状态,它们属于main-server-group; server-three处于空闲状态,属于other-server-group。

所有这些服务器和服务器组都在master as7上的domain.xml中设置。我们需要更改的是domain.xml中的“other-server-group”:
我们只需要点击选择server-three,再点击右下角的start就可以启动这个服务器

技术分享图片

从服务器节点也是一样需要启动server-three
技术分享图片

然后开始部署war包,点击界面左下角的部署项目栏:
技术分享图片

请注意我们有两个主机参与此服务器组,因此项目现在应该同时部署在主服务器和从服务器中 - 这就是域管理的强大功能。

现在让我们通过尝试从主服务器和从服务器访问集群演示来验证这一点。他们现在都应该工作:
丛节点:
技术分享图片

主节点:
技术分享图片

现在我们已完成项目部署并查看域控制器的用法,然后我们将继续使用这两个主机来建立集群

为什么端口号是8330而不是8080?请检查master和slave上host.xml中的设置:


    
    

端口偏移量设置为250,因此8080 + 250 = 8330

现在我们退出master和slave上的as7进程。我们在host.xml配置上还有一些工作要做。打开master的host.xml,并对服务器部分进行以下修改:


    
    

修改为


    
    

我们已将auto-start设置为true,因此我们不需要在每次重启时都在管理控制台中启用它。现在打开slave的host.xml,并修改server-three部分:



    
    

除了将auto-start设置为true之外,我们还将‘server-three‘重命名为‘server-three-slave‘。我们需要这样做,因为mod_cluster将无法在单个服务器组中注册具有相同名称的主机。这会导致名称冲突。

完成上述配置后,让我们重新启动两个as7主机并继续进行群集配置。
集群配置:
们将在master上使用mod_cluster + apache httpd作为我们的集群控制器。因为AS7已配置为支持mod_cluster开箱即用,所以这是最简单的方法。
首先,我们需要确保安装了httpd:

yum install httpd -y

然后我们需要从其网站下载更新版本的mod_cluster:

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

我下载的版本是(这里要注意自己的系统是64位还是32位):
我这里的系统版本是x64位所以下载这个

http://downloads.jboss.org/mod_cluster/1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x64-so.tar.gz

x86

http://downloads.jboss.org/mod_cluster/1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x86-so.tar.gz

然后我们将其提取到:

/etc/httpd/modules 目录中

然后我们编辑httpd.conf:

注释以下三行

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so

新增以下四行

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

然后我们在httpd.conf的底部进行必要的配置:

# This Listen port is for the mod_cluster-manager, where you can see the status of mod_cluster.
# Port 10001 is not a reserved port, so this prevents problems with SELinux.
Listen 192.168.98.129:10001
# This directive only applies to Red Hat Enterprise Linux. It prevents the temmporary
# files from being written to /etc/httpd/logs/ which is not an appropriate location.
MemManagerFile /var/cache/httpd



  
    Order deny,allow
    Deny from all
    Allow from 192.168.98.
  

  # This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
  
   SetHandler mod_cluster-manager
   Order deny,allow
   Deny from all
   Allow from 192.168.98.
  

  KeepAliveTimeout 60
  MaxKeepAliveRequests 0

  ManagerBalancerName other-server-group
  AdvertiseFrequency 5

有关mod_cluster配置的更多详细信息,请参阅此文档:

http://docs.jboss.org/mod_cluster/1.1.0/html/Quick_Start_Guide.html

测试:

service httpd start

访问集群

http://10.211.55.7/cluster-demo/put.jsp

技术分享图片

我们应该看到请求从as7日志分发到其中一个主机(主机或从机).

[Server:server-three-slave] 09:42:43,454 INFO [stdout] (http-192.168.98.128-192.168.98.128-8330-3) Putting date now
现在我使用管理界面断开master as7。在上角选择“运行时”和服务器“主”。

选择“server-three”并按下停止按钮,活动图标应该更改。

使用系统命令杀死服务器会导致Host-Controller立即重启实例!

然后等待几秒钟并访问集群:

http://192.168.98.129/cluster-demo/get.jsp

技术分享图片

[Server:server-three-slave] 09:43:14,692 INFO [stdout] (http-192.168.98.128-192.168.98.128-8330-6) Getting date now

从get.jsp我们应该看到,我们得到的时间与‘put.jsp‘相同。因此,事实证明会话已正确复制到slave。

到此整个jboss域集群和回话复制环境搭建完成,感谢大家浏览。有问题请指正,谢谢!

jboss-as-7.1.0.CR1b域集群和会话复制环境部署


推荐阅读
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有