- 浏览: 704232 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47744
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
1. 前言
做JavaEE企业级应用就离不开集群、分布式环境这些和运行时环境相关的相关配置。企业及应用很大程度上都是处理十分安全、可靠、完整的请求,能适应任何运行时环境异常情况下也能提供软件服务。如果把所有开发好的程序全部放在一个机器上,所有的请求全都访问这一台机器就可以的系统,自然没有那么多事情要考虑了。如果系统是时时刻刻有客户需要访问、需要为客户提供7*24的服务、并且用户访问量十分巨大的时候。恐怕一台再好的服务器也难免会力不从心。如果部署软件的服务器发生了地震、火灾、人为破坏等等事情,那么这个用户的损失量恐怕就难以估计了。所以像银行、医疗、电信、政府服务这种客户群十分巨大、访问十分频繁、而且在老百姓看来你得时时刻刻提供服务的软件系统来说,稳定性、安全性、实时性就提到了第一位。这个除了科学计算集群,科学计算的集群机器是需要每个机器都为某一种复杂的计算(比如多台机器共同破译敌方的密码),最后将这些机器计算的结果返回给使用者。所以来说一般企业级的软件都是分布式的、高可用的架构,而且一般提供服务的机器是多台机器,每台机器按照某种负载算法来分担大量用户的每个用户的请求。这样带来的一个结果就是:“用户再多我也不怕,无非就是加硬件机器呗,干活的人多了,分担到每个人的工作量就少了。”如果觉得分担的机器太多,并且做的系统访问量又不是很大,3~4台足够多了。好了~~~就像很多公司那样——裁员吧!!!托管维护一台Node服务器价格很高的!如果其中一个服务器挂了,没关系。你死了没关系,有别的员工呢!大家多分担一点本该属于你的工作量(对应着客户端的请求)就OK了。这就是负载均衡的基本意思。还有一点就是在企业级系统中,数据记录比什么都重要!某种行业,数据比软件值钱得多!!比如银行,咱们银行卡里面的数字不就是银行数据库那一条条的数据嘛。这个需求就要求银行的数据库记录一定要有多个拷贝。假如地震了,银行的其中一个数据库挂了。没关系,还有其他的和你一摸一样的兄弟顶着呢!(这使我想到了一部电影——美国的《月球》,利用一个真人的多个克隆人为一个公司服务了很多年,而克隆人自己之前被灌输了工作25年就能回地球和家人团聚的意识,一个克隆人死后,另一个克隆人被唤醒,继续重复……)。咱们这里先只讨论MySql的主从备份策略,回头再单独讨论Mysql的自动切换和Oracle的RAC配置。
这里主要总结了:
1):apache http server+负载均衡配置
2):负载均衡+JBoss节点配置
3):Mysql数据主从备份
2. 运行时环境
硬件:
2台电脑:在应用服务器方面,一台是既当主分发和Node1,另一台就是一个纯粹的Node2。在数据库方面,一台是主数据库master、另一台是从数据库slave。
网络:能让2台机器互相ping的通。
软件:
操作系统:Windows(回头在linux在配置一次,配置相似)
Node的应用服务器:jboss-5.1.0.GA
Http请求服务:apache http server 2.2.17
负载均衡模块:mod_jk-1.2.31-httpd-2.2.3.so
数据库:Mysql Server 5.1.46
整体的框架流程图如下: 1):所有的用户HTTP请求都发送到apache server; 2):apache server通过加载的mod_jk模块的配置属性会负责将请求分发到不同的JBoss服务节点 3):Jboss节点就可以负责业务处理了 4):需要数据库的需求会请求主Mysql 5):Mysql自己可以通过自己的机制,向自己的从数据库同步数据,保证master和slave记录一致。 其实数据库这里还可以继续优化,通过Mysql代理Proxy实现数据库的读写分离,读记录直接从从数据库读取,写数据直接面向的是主数据库进行。这样主数据库只负责所有的记录更改、而从数据库只负责所有的查询操作,分担了不少主数据库的负担。但是这个不在我们这次的讨论范围。 另外要说的就是这里使用的负载均衡是借助了apache的一个模块来实现的。 1. 配置 1):安装apache http server:这个在windows上应该没什么问题,主要就是修改端口,将默认的端口80修改为8011,通过修改${apache_HOME}/conf/httpd.conf文件进行修改。以后在linux下安装配置apache server的时候再做总结。 2):安装mod_jk模块:从apache网站下载mod_jk-1.2.31-httpd-2.2.3.so文件(在Tomcat页面去下载),之后将它拷贝到${apache_HOME}/modules/下面,注意版本一定不要有任何差异。mod_jk和对应的apache版本要求比较严格,稍微不慎,集成就会出错。修改${apache_HOME}/conf/httpd.conf文件,让apache加载mod_jk模块 加入如下配置
第一行代表加载模块,第二行代表有关mod_jk模块的相关配置文件在哪里,这个文件一会儿咱们会讨论,第三行是日志的格式,第四行是指定mod_jk模块相关的日志文件位置,第五行是日志的级别,debug输出的日志比较多。第六行代表所有对于/*的请求,mod_jk都会将这个请求分发到负载均衡器模块去处理、转发。 我们来看workers.properties配置
这里需要说明的就是这个文件中很多的名称要对应上,worker.list=loadbalancer,mystatus和worker.loadbalancer.type中的loadbalancer以及worker.mystatus.type要对应上。worker.node1.type代表和第一个node节点的通讯协议是ajp13协议。worker.node1.host=192.168.1.100代表着第一个node节点的ip地址。worker.node1.lbfactor代表负载均衡分发到此node1节点的权重大小,越大,发的请求越多。worker.loadbalancer.balance_workers=node1,node2表示负载均衡上有2个node,名字一个是node1,另一个node2.这个名字首先和本文件的worker.nodeX要一致,第二就是和JBoss配置文件(稍后会提到)中的配置名一致。worker.loadbalancer.sticky_session=1代表HttpSession会共享。这个需求在本次配置中暂时没成功,先留一个问题,之后再讨论、总结。 到此算是apache配置完了负载均衡模块。 3):配置JBoss服务节点:我们采用JBoss的all目录为我们工作。JBoss配置相对简单,修改${JBOSS_HOME}\server\all\deploy\jbossweb.sar\server.xml文件。
主要是修改了http的端口18181,将它的address换成了0.0.0.0,否则以ip+端口访问这个node是不起作用的。紧接着就是修改AJP/1.3协议相关的信息了,这个就是由apache负载均衡分发到这个node节点的桥梁。这个AJP/1.3协议的端口要和mod_jk中的配置一致。Ip也替换成可以让别的机器访问的方式。之后就是给这个Node加一个名称标识,在Engine标签加入jvmRoute="node1",用于node的标识。这个名称一定要和mod_jk中的配置的节点名称一致。另一个JBoss节点的配置类似,不再赘述。 另一台Node的配置和此Node的配置唯一一个不同的就是
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node2">
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JkWorkersFile conf/workers.properties
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* loadbalancer
# Define list of workers that will be used
# for mapping requests
worker.list=loadbalancer,mystatus
#defaine a worker for apache
worker.node1.type=ajp13
worker.node1.host=192.168.1.100
worker.node1.port=8009
worker.node1.lbfactor=1
worker.node1.socket_timeout=30
worker.node1.socket_keepalive=1
worker.node2.type=ajp13
worker.node2.host=192.168.1.106
worker.node2.port=8009
worker.node2.lbfactor=1
worker.node2.socket_timeout=30000
worker.node2.socket_keepalive=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=1
worker.mystatus.type=status
<Server>
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Service name="jboss.web">
<!-- A HTTP/1.1 Connector on port 8080 -->
<Connector protocol="HTTP/1.1" port="18181" address="0.0.0.0"
connectionTimeout="20000" redirectPort="8443" />
<!-- Add this option to the connector to avoid problems with
.NET clients that don't implement HTTP/1.1 correctly
restrictedUserAgents="^.*MS Web Services Client Protocol 1.1.4322.*$"
-->
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3" port="8009" address="0.0.0.0"
redirectPort="8443" />
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">
<Realm className="org.jboss.web.tomcat.security.JBossWebRealm"
certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping"
allRolesMode="authOnly"
/>
<Host name="localhost">
<Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
transactionManagerObjectName="jboss:service=TransactionManager" />
</Host>
</Engine>
</Service>
</Server>
标示它是不同的node。这样就算其中一台服务器挂了,只要通过apache http访问过来的请求,都不会影响用户的使用,负载均衡会将请求分发到另一个node节点上,等这一台恢复了,2台在一起分担工作。
4):配置Mysql数据库的主从实例:
其实网上有很多文章特别介绍如何配置主从备份,在这里也是将别人的经验分享出来。
首先停下主Mysql的服务,在${mysql} /下面增加一个配置文件起名字叫做my-master-slave.ini,内容和基本的配置差不多,主要是加上了一下这几行
server-id = 1 #主机标示,整数 log_bin = c:/mysql-bin.log #确保此文件可写 read-only =0 #主机,读写都可以 binlog-do-db =test #需要备份数据,多个写多行 binlog-ignore-db=mysql #不需要备份的数据库,多个写多行
上面配置中的注释已经比较明确了,就不解释了。主要就是那个server-id,在整个局域网中的数据库不要重复,否则主从备份会不正常。
在从数据库的mysql配置文件配置如下
server-id = 2 log_bin = c:/mysql-bin.log master-host =192.168.1. 100 master-user =liuyan master-pass =111111 master-port =3306 master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒) replicate-do-db =test #只复制某个库 replicate-ignore-db=mysql #不复制某个库
不过要保证从数据库也要有test这个数据库哦,而且表结构、编码格式都要和主库丝毫不差,几乎在同步之前要做主库的镜像,恢复到从库。
先启动主库。在主库的mysql控制台输入如下命令
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘liuyan’@’192.168.1.106’ IDENTIFIED BY ‘111111’; |
让另一台机器106能够有权限访问主mysql服务。之后在开启从数据库。之后往主数据库插入一条记录试试,应该在从数据库也能看到刚插入的数据了。
总结
这几个配置是做集群、分布式最简单的配置了。还有很多的不足。总结不足有以下几点,以后再看相关资料改进吧!
1):负载均衡权重是在配置文件中写死的。不能根据实际的运行时机器的环境来决定负载均衡的策略,显得比较死板。
2):虽然在apache中配置了session共享,但是实际上session并没有在node上进行共享传递。如果一台机器挂了,那么这台机器的客户session也就消失了,容错性比较差。
3):apache http server和它的mod_jk模块是所有请求的总调度师,如果运行apache的机器歇菜了,那怎么办?
4):Mysql数据库的master负担了所有的请求,从服务器只是从它上面不停地同步本地的数据,这样对master机器要求太大了。如何使用有效地mysql-Proxy进行读写分离,让从mysql负担select的请求、主服务只负责数据的写入。
5):这里是有一个mysql-master,如果这个主数据库挂了怎么办?是否采用从数据暂时冒充一下主数据库,等主数据库恢复好后再切换成以前的主数据库,或者可以采用多个master策略?
6):这里使用的Mysql数据库,其他数据库——Oracle、MSSQL是否也有自己的数据库集群方案,如果每个数据库的集群方案都有各自的一套东西,那现在有没有开源的东西将这些差异性进行屏蔽或者统一呢?这样对于软件实施人员的要求就降低了很多。
7):这是一个单数据库的应用,如果在集群环境下一个系统需要不同类型的数据库一起为它服务,如何实现分布式环境下的异构数据源集成和数据备份?
发表评论
-
Java分布式应用学习笔记09JMX-MBean的介绍(JMX的一点点补充)
2011-10-09 09:01 74961. MBean介绍 从上一篇B ... -
Java分布式应用学习笔记08JMX规范与常用的监控场景
2011-09-13 09:17 91921. JMX规范 JMX是“Java管理扩展的”的缩写,它 ... -
Java分布式应用学习笔记07线程池应用(又名:线程池与大排档)
2011-09-07 09:00 72241. 线程池是啥子 一说到池子,大家都会想到数据库连接池那 ... -
Java分布式应用学习笔记06浅谈并发加锁机制分析
2011-08-19 16:12 80931. 前言 之前总结的多线程的调度、并发调度、线程加锁安全 ... -
Java分布式应用学习笔记05多线程下的并发同步器----后篇
2011-08-11 09:07 70275. CountDownLatch 很多资料上都说Coun ... -
Java分布式应用学习笔记05多线程下的并发同步器----前篇
2011-08-11 09:02 93901. 前言 JDK提供的并发包,除了上一篇提到的用于集合外 ... -
Java分布式应用学习笔记04JDK的并发包的集合总结---后篇
2011-08-02 17:21 4501唉~这一大篇blog又是只能显示部分,部分内容被截断了。。。。 ... -
Java分布式应用学习笔记04JDK的并发包的集合总结---前篇
2011-08-02 17:17 54091. 前言 平时咱们使用的HashMap、ArrayLis ... -
Java分布式应用学习笔记03JVM对多线程的资源同步和交互机制
2011-07-28 10:55 66561. 前言 既然是分布式 ... -
Java分布式应用学习笔记02再谈JVM---续
2011-07-25 09:22 3825唉~~因为blog总显示不全只能分为2个了,排版也不是很好,凑 ... -
Java分布式应用学习笔记02再谈JVM
2011-07-25 09:10 58781. 前言-为何要再谈JVM 很多人认为,分布式Java应 ... -
Java分布式应用学习笔记01分布式Java应用和SOA
2011-07-22 13:52 42591. 前言 当我们所做的 ... -
使用Memcached做分布式系统的Session存储
2011-07-01 10:12 85241. 前言 Memcache除了可以做Hibernate的 ... -
用xmemcache作为JPA(Hibernate实现)二级缓存
2011-06-30 09:44 60881. 持久层的缓存 Hibern ... -
Apache_proxy负载均衡和Session复制
2011-04-06 09:26 10888今天上网查了查资料,之前使用apache的jk模块做负载均衡。 ... -
Java基于线程的分布式(转自cjnetwork)
2011-03-22 17:50 1734java基于线程的分布式 ... -
JBoss集群配置的Session复制
2011-03-21 09:19 59881. 前言 接着上一篇总结文章提出的问题,这次通 ... -
在default目录下快速配置JBoss集群(Web方面) 转载
2011-03-06 10:24 2250说起JBoss集群好像很高深的样子,其实一点也不恐怖,建立一个 ...
相关推荐
### JBoss负载均衡与MySQL主从备份 在现代IT架构中,为了提高系统的稳定性和响应速度,企业常常采用负载均衡技术和数据库的主从备份方案。本文将深入探讨JBoss应用服务器如何实现负载均衡以及MySQL数据库如何配置...
### Apache与Jboss负载均衡教程知识点详解 #### JBoss负载均衡概述 - **主题与目标**:本教程旨在深入探讨JBoss负载均衡的核心概念、配置方法及其与Apache的集成技术。主要内容涵盖JBoss的基本介绍、配置技巧、...
负载均衡是将进入系统的请求均匀地分配到集群中的各个节点,以避免某些节点过载而其他节点空闲的情况。JBOSS支持多种负载均衡策略,如轮询、最少连接、IP哈希等。负载均衡器可以根据这些策略动态调整流量分布,确保...
### JBOSS负载均衡配置详解 #### 一、概述 负载均衡是提高系统可用性和扩展性的关键手段之一,尤其在企业级应用环境中更是不可或缺。本文将详细介绍如何在JBOSS服务器上实现负载均衡配置,包括所需的文件、具体的...
在Apache与JBoss的集成中,Apache通过其模块mod_jk来实现负载均衡。mod_jk模块充当了Apache与JBoss之间的桥梁,负责将HTTP请求转发到JBoss应用服务器集群中的一个实例上。 #### 域名转发 域名转发是指将一个域名...
JBoss 负载均衡是企业级应用服务器JBoss(现称WildFly)在处理高并发请求时,为提升系统性能和可用性所采用的一种重要技术。通过负载均衡,可以将大量的网络请求分发到多个服务器上,避免单一服务器过载,确保服务的...
JBoss 4.2.3GA 集群配置与Apache负载均衡详解 在IT行业中,高可用性和负载均衡是企业级应用的关键要素。JBoss 4.2.3GA是一个流行的Java应用服务器,通过配置集群可以提高服务的稳定性和性能。而Apache作为Web服务器...
根据描述,JBoss集群与Apache负载均衡器配置完成后,JBoss服务器之间可以实现应用程序的热备份,同时也可以通过负载均衡来分散用户请求,避免单点故障,提高整个系统的稳定性和可用性。值得注意的是,尽管JBoss可以...
其步骤与Jboss类似,包括修改`server.xml`配置文件,配置集群节点和session复制。 综上所述,通过httpd的负载均衡,Jboss的集群部署,以及ActiveMQ的消息中间件,可以在Linux环境中构建一个高可用、高性能的应用...
文档是介绍基于apache和modjk在jboss下实现负载均衡。
5. **配置Apache mod_jk**:配置mod_jk,包括定义worker(代表JBoss节点)、设置负载均衡策略以及配置Apache的虚拟主机来指向这些worker。 6. **配置JBoss节点**:每个JBoss节点需要配置mod_jk连接器,以便与Apache...
在Linux环境中,Apache服务器可以作为负载均衡器,与JBoss应用服务器集群配合,实现高可用性和性能优化。本文将详细讲解如何在Linux下配置Apache负载均衡以及JBoss集群。 首先,我们来安装和配置JDK,这是运行JBoss...
它由一个全局唯一的负载均衡器和多个JBOSS服务器实例(集群节点)组成。负载均衡器接收所有用户请求并分发到各个节点,当检测到某个节点故障时,会自动将请求重定向至其他正常运行的节点,以实现服务的连续性。 2. ...
完成以上配置后,重启Apache和JBoss服务,负载均衡与集群配置即告完成。文档中由于OCR扫描技术原因导致的错误或漏识别不会影响基本的安装与配置流程,但在实际操作时应保持对每个步骤的细心和准确,以确保系统的正确...
在本文中,我们将深入探讨如何使用JBOSS服务器与EJB3.0相结合,并结合MySQL数据库进行企业级应用开发。JBOSS是一个流行的开源Java应用服务器,它支持EJB(Enterprise JavaBeans)3.0规范,这是一个用于构建企业级...
本文主要介绍如何配置JBoss应用服务器与MySQL数据库的连接,涉及的主要知识点包括: 1. **JDBC驱动**:为了使JBoss能够连接到MySQL,需要MySQL的JDBC驱动程序,这里是`mysql-connector-java-5.0.8-bin.jar`。这个...
在负载均衡方面,文章首先介绍了 JBOSS 官方文档中推荐使用 Apache Httpd 作为负载均衡服务器,但是作者由于个人喜好 Nginx,所以选择使用 Nginx 1.2.1 + JBOSS AS 7 实现负载均衡。 在 Session 处理方面,文章介绍...
在IT领域,特别是针对企业级应用服务器的管理与配置,JBoss作为一个广泛使用的Java应用服务器,其节点配置与端口管理是系统管理员和技术人员需要掌握的关键技能之一。本文将深入探讨如何在配置多个JBoss节点时修改...
**一、客户机与负载均衡的连接** 1.1 客户机IP配置:客户机的IP地址需要设置为192.168.9.168,以确保能够正确连接到负载均衡器。负载均衡器有两个IP地址,分别为192.168.9.240:20000(业务IP)和10.10.10.245:20000...
Linux下apache负载均衡及JBoss集群详细文档