Apache +Jetty的负载均衡与集群配置(上)

释放双眼,带上耳机,听听看~!

 

**                                            Apache +Jetty的负载均衡与集群配置**

Apache +Jetty的负载均衡与集群配置(上)

**                                       一.搭配环境**

(一).jetty的安装和配置

Jetty_a: 192.168.55.229

Jetty_b: 192.168.55.231

(1)安装jdk

下载将jdk加压后放到/usr/local目录下:

[root@master ~]#chmod 755 jdk-6u5-linux-x64.bin

[root@master ~]# ./jdk-6u5-linux-x64.bin

[root@master ~]#mv jdk1.6.0_05  /usr/local

建立/usr/local/下的jdk软链接方便以后版本升级 :

 [root@master ~]# ln -s /usr/local/jdk1.6.0_05/ /usr/local/jdk

(2)安装apache-maven,并设置环境变量

[root@master zy]# tar -zxvf apache-maven-2.2.1-bin.tar.gz

[root@master zy]# mv apache-maven-2.2.1  /usr/local/maven

[root@master zy]#vim /etc/profile

添加以下内容:

JAVA_HOME=/usr/local/jdk1.6.0_05

JAVA_BIN=/usr/local/jdk1.6.0_05/bin

PATH=$PATH:$JAVA_BIN**:/usr/local/maven/bin**

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

JETTY_HOME=/usr/local/jetty

export JAVA_HOME JAVA_BIN PATH CLASSPATH JETTY_HOME

[root@master zy]# source /etc/profile

[root@master zy]# mvn –version

Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800)

Java version: 1.6.0_05

Java home: /usr/local/jdk1.6.0_05/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "linux" version: "2.6.18-238.el5" arch: "amd64" Family: "unix"

(3)安装启动jetty

[root@master zy]# unzip jetty-6.1.14-fgw-aps.zip

[root@master zy]# mv jetty-6.1.14-fgw-aps /usr/local/jetty

[root@master jetty]# java -jar start.jar**【或者进去到bin目录,然后执行./jetty.sh start 】**

[root@master bin]# ./jetty.sh  start

Starting Jetty: STARTED Jetty Mon Jul 11 11:54:03 CST 2011

[root@master bin]# 2011-07-11 11:54:04.014:INFO::Redirecting stderr/stdout to /usr/local/jetty/logs/2011_07_11.stderrout.log

 

在浏览器中输入 http://192.168.55.229:8080/remote.html(这里加上remote.html的原因是避免和tomcat冲突,实际上http://192.168.55.229:8080也能够访问到,但是前提是必须把tomcat给禁掉。或者在**jetty.xml**中将端口改成
9009,此时我们就可以直接访问http://192.168.55.229:
9009)

(4)简单部署一个应用

[root@master jetty]# cd webapps/

[root@master webapps]# ls

Fgw

[root@node2 webapps]# cd fgw/

[root@master fgw]# vim index.jsp

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster Test</title></head>

<body>

<%

**  //HttpSession session = request.getSession(true);**

**  System.out.println(session.getCreationTime());**

**  out.println("<br> SESSION ID:" + session.getId()+"<br>");**

**  out.println("Session serviced by
jetty_a"+"<br>");**

**  out.println("Session created time is :"+session.getCreationTime()+"<br>");**

%>

</body>

</html>

测试:http://192.168.55.229:9009/fgw/

Apache +Jetty的负载均衡与集群配置(上)

同样方法的配置jetty_b,测试结果为:

Apache +Jetty的负载均衡与集群配置(上)

(二)Apache的安装和配置(采用源码编译安装的方式)

Apache的地址为:192.168.50.50

#tar xzvf httpd-2.2.17.tar.gz

            #cd  httpd-2.2.17

            # ./configure –with-ldap –enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache
"【此选项为编译所有的模块】

1.  测试

/usr/local/apache2/conf/httpd.conf 中 设置 ServerName  localhost

#cd  /usr/local/apache2/bin

#./apachectl  start

将出现类似httpd (pid 17040) already running的输出

访问地址:http://192.168.50.50

It works!hehe…

说明已经成功~(≧▽≦)/~啦啦啦,(~ o ~)~zZ

                               二.(1)mod_proxy负载均衡配置

1.加载proxy模块

所有需要加载的代理模块为mod_proxy.so,mod_proxy.ajp.so,mod_proxy.http.so,mod_proxy.ftp.so,mod_proxy.connect.so,mod_proxy.balancer.so

由于已经将所有模块加载,所以不用在配置中做修改,即为/usr/local/apache2/conf/httpd.conf文件中的如下指令:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

2.配置虚拟主机proxyblancer

在/usr/local/apache2/conf/httpd.conf尾部添加Include conf/app1.conf

         ** 在conf/app1.conf 中添加以下内容:**

Listen 8051
<VirtualHost *:8051>

ServerAdmin angel.zhu@99bill.com**# 指定服务器管理员的E-MAIL地址,服务器自动将错误报告给该地址**

ServerName  localhost # web客户端搜索的主机名

ErrorLog    "/opt/apache_log/app1_error.log"

CustomLog   "/opt/apache_log/app1_access.log" common

ProxyPass /   balancer://cluster/  stickysession=JESSIONID|jessionid nofailover=On lbmethod=byrequests timeout=5 maxattempts=3

#balancer: 复制会话的方式,包括JSESSIONIDPHPSESSIONID nofailover:on 表示会话在worker出错或停掉是句会中断,当后端服务器不支持会话复制时设为on ; lbmethod:选择负载的调度算法,默认byrequests表示轮询调度(就是1:1),bytraffic表示加权重的调度,需加loadfactor****指定权重值。

 ProxyPassReverse / balancer://cluster/ #此指令使Apache调整HTTP重定向应答中Location, Content-Location, URI头里的URL。这样可以避免在Apache作为反向代理使用时,后端服务器的HTTP重定向造成的绕过反向代理的问题。

#The ProxyRequests directive should usually be set off when using ProxyPass.

ProxyRequests Off**# 不允许作为正向代理**

ProxyPreserveHost On**# 当启用时,此选项将把传入请求的"Host:"行传递给被代理的主机,而不是传递在ProxyPass中指定的主机名。**

<proxy balancer://cluster>

BalancerMember ajp://192.168.55.229:8009 route=jetty_a

BalancerMember ajp://192.168.55.231:8009 route=jetty_b

# rout 值附加在session ID 后面

</proxy>

 </VirtualHost>

3.修改jetty.xml中的配置文件

 

    <!– =========================================================== –>

    <!– Set up global session ID manager                            –>

    <!– =========================================================== –>

    <Set name="sessionIdManager">

      <New class="org.mortbay.jetty.servlet.HashSessionIdManager">

        <Set name="workerName">jetty_a</Set>

      </New>

    </Set>

使得workername和apache中的route值一致:分别将其值改成jetty_a和jetty_b即可。

4.开启jetty的AJP端口

可以查看/usr/local/jetty/etc中的
****文件jetty-ajp.xml
【注意:要和上面apache中提到的AJP端口一致】

Apache +Jetty的负载均衡与集群配置(上)

 

我们可以在/usr/local/jetty目录中编写个脚本:

vim startjetty.sh

Apache +Jetty的负载均衡与集群配置(上)

注意:

堆(Heap)和
非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是
运行时数据区域,所有
类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说
堆就是Java代码可及的内存,
是留给开发人员使用的;
非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JVM初始分配的内存由
-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由
-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次
GC 后调整堆的大小。
非堆内存分配
JVM使用
-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由
XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

-D<name>=<vale> 设置Java系统所有权
(eg:-Dfgw.sourceId=FGW001)

-Dfgw fgw是webapp中的应用包名称,便于查找

-XX:-HeapDumpOnOutOfMemoryError  当首次遭遇OOM时导出此时堆中相关信息

 

 

然后执行sh startjetty.sh

[root@master jetty]# sh startjetty.sh

SelectChannelConnector@0.0.0.0:9009

2011-07-12 14:22:47.134::INFO:  Started Ajp13SocketConnector@0.0.0.0:8009

2011-07-12 14:22:47.134::INFO:  AJP13 is not a secure protocol. Please protect port 8009
**
**

(5)分别测试jetty

在/usr/local/jetty/webapps/fgw中编辑index.jsp

内容分别如下:

 

Apache +Jetty的负载均衡与集群配置(上)

 

Apache +Jetty的负载均衡与集群配置(上)

未完待续!!【由于图片无法上传,只能接着另写了,~~~~(>_<)~~~~ 】

给TA打赏
共{{data.count}}人
人已打赏
安全经验

Google AdSense 全面解析(申请+操作+作弊+忠告)

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索