设为首页 收藏本站
查看: 615|回复: 0

[经验分享] apache负载均衡+tomcat集群+Memcached-session-manager共享session

[复制链接]

尚未签到

发表于 2017-1-10 07:39:56 | 显示全部楼层 |阅读模式
转载请注明出处:
http://luckymjl2.iteye.com/blog/1932060
1Linux64位系统下安装apache
安装apache需要先安装aprapr-util支持
1.1下载apache
地址:http://httpd.apache.org/download.cgi
版本:2.2.25
环境:Unix
 
1.2安装aprapr-util
安装apr
 
tar -xvfz httpd-2.2.25.tar.gz
# cd httpd-2.2.25
1.编译和安装 apr
cd srclib/apr
./configure  --libdir=/usr/lib64   --prefix=/usr/local/apr  
make
make install
 
安装apr-util
cd ../apr-util
./configure --libdir=/usr/lib64 --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  
make  (如果这一步报错,就先执行下面的再执行本步)
make install
# vi  Makefile

APRUTIL_LIBS = -lsqlite3 /usr/lib/libexpat.la /root/tar/httpd-2.2.25/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
改为
APRUTIL_LIBS = -lsqlite3 /usr/lib64/libexpat.la /root/tar/httpd-2.2.25/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
1.3安装apache2.2.25
./configure LDFLAGS="-L/usr/lib64 -L/lib64"--prefix=/usr/local/httpd-2.2.25 --enable-mods-shared=all --with-mpm=worker --enable-deflate --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-proxy-ajp --enable-proxy-balancer -enable-proxy-http --enable-rewrite --enable-charset-lite --disable-ipv6 -disable-dav -with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util
 
make
make install

2、安装Tomcat
21下载Tomcat
地址:http://tomcat.apache.org/download-70.cgi
版本:7.0.42
环境:Unix
 
22解压tomcat
tar -xvfz httpd-2.2.25.tar.gz
3、安装memcache
安装mencached之前需要先安装libevent支持
3、1下载libevent
官方:http://libevent.org/
地址:http://www.monkey.org/~provos/libevent-1.4.9-stable.tar.gz
版本:1.4.9
环境:Unix
3.1.1安装依赖包libevent
tar -xvzf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable
./configure -prefix=/usr
make & make install
 
 
32下载memcache
地址:http://code.google.com/p/memcached/downloads/list
版本:1.4.15
环境:Unix
3.2.1安装memcache
tar xvzf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure -with-libevent=/usr
make & make install
 
3.2.2启动memcache
/usr/local/bin/memcached -d -m 64 -u root
 
memcached命令参数
-p <num>      监听的TCP端口(默认: 11211)
-U <num>      监听的UDP端口(默认: 11211, 0表示不监听)
-s <file>     用于监听的UNIX套接字路径(禁用网络支持)
-a <mask>     UNIX套接字访问掩码,八进制数字(默认:0700
-l <ip_addr>  监听的IP地址。(默认:INADDR_ANY,所有地址)
-d            作为守护进程来运行。
-r            最大核心文件限制。
-u <username> 设定进程所属用户。(只有root用户可以使用这个参数)
-m <num>      单个数据项的最大可用内存,以MB为单位。(默认:64MB
-M            内存用光时报错。(不会删除数据)
-c <num>      最大并发连接数。(默认:1024
-k            锁定所有内存页。注意你可以锁定的内存上限。
              试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。
              (不是前面的 -u <username> 参数;在sh下,使用命令"ulimit -S -l NUM_KB"来设置。)
-v            提示信息(在事件循环中打印错误/警告信息。)
-vv           详细信息(还打印客户端命令/响应)
-vvv          超详细信息(还打印内部状态的变化)
-h            打印这个帮助信息并退出。
-i            打印memcachedlibevent的许可。
-P <file>     保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义。
-f <factor>   块大小增长因子。(默认:1.25
-n <bytes>    分配给key+value+flags的最小空间(默认:48
-L            尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB"丢失次数,提高运行效率。
              为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块。
-D <char>     使用 <char> 作为前缀和ID的分隔符。
              这个用于按前缀获得状态报告。默认是":"(冒号)。
              如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启。
-t <num>      使用的线程数(默认:4
-R            每个连接可处理的最大请求数。
-C            禁用CAS
-b            设置后台日志队列的长度(默认:1024
-B            绑定协议 - 可能值:ascii,binary,auto(默认)
-I            重写每个数据页尺寸。调整数据项最大尺寸。
 
 
==================漂亮的分隔线,到此程序安装完毕================
转载请注明出处:
 
http://luckymjl2.iteye.com/blog/1932060
4Tomcat集群部署
Tomcat集群采用session共享方式,将session写入memcached-session-manger统一管理。提高性能。
4.1 jar包下载
4.1.1 memcached-session-manager
memcached-session-manager-${version}.jar
地址:http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/1.6.5/
版本:1.6.5
4.1.2 tomcat7下支持包
memcached-session-manager-tc7-${version}.jar 
地址:http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/1.6.5/版本:1.6.5
4.1.3  spymemcached
spymemcached-${version}.jar
地址:http://code.google.com/p/spymemcached/downloads/list
版本:2.9.1
 
4.1.4 Couchbase-Java-Client客户端
 
地址:http://packages.couchbase.com/clients/java/1.1.9/Couchbase-Java-Client-1.1.9.zip
版本:1.1.9
说明:这个本来是Couchbase的客户端程序,我不知道为什么一定需要,但是报错提示就是缺少客户端jar包,放进去就好了。
 
以上jar包全部放入$CATALINA_HOME/lib/目录,也就是tomcatlib目录
4.2 tomcatsession写入memcache
vi /opt/tomcat-7.0.42-jvm1/conf/context.xml
在<Context></Context>中加入
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.10.110:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="none"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>
 
参数说明:
className (required)
类名:de.javakaffee.web.msm.MemcachedBackupSessionManager
 
memcachedNodes (required)
memcached节点:此属性应该包含所有运行的memcached节点或者membase bucketuri地址,每一个memcached节点的属性定义格式为<id>:<host>:<port>,多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只有单个的memcached节点,则<id>是可选项,只需配置<host>:<port>即可,形如:memcachedNodes="localhost:11211"
如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/poolsBucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。
 
failoverNodes (optional, must not be used for non-sticky sessions)
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。
 
username (since 1.6.0, optional)
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证。
 
password (since 1.6.0, optional)
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
 
memcachedProtocol (since 1.3, optional, default text)
定义memcached协议,默认使用text文本
 
sticky (since 1.4.0, optional, default true)
定义session方式为黏性或非黏性,默认为true
 
lockingMode (since 1.4.0, optional, for non-sticky sessions only, default none)
只有非黏性session才使用,默认值为none
none: 从不对session进行锁定
all: session将一直被锁定,知道请求结束
auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
uriPattern:<regexp>: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
 
requestUriIgnorePattern (optional)
 
sessionBackupAsync (optional, default true)
 
backupThreadCount (since 1.3, optional, default number-of-cpu-cores)
 
sessionBackupTimeout (optional, default 100)
 
operationTimeout (since 1.6.0, optional, default 1000)
 
sessionAttributeFilter (since 1.5.0, optional)
 
transcoderFactoryClass(since1.1,optional,
default de.javakaffee.web.msm.JavaSerializationTranscoderFactory)
序列化接口实现:
Java serialization: de.javakaffee.web.msm.JavaSerializationTranscoderFactory
Kryo based serialization: de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
Javolution based
 serialization: de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory
XStream based serialization: 
de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory
 
copyCollectionsForSerialization (since 1.1, optional, default false)
 
customConverter (since 1.2, optional)
 
enableStatistics (since 1.2, optional, default true)
 
enabled (since 1.4.0, optional, default true)
4.3 Tomcat集群配置
vi /opt/tomcat-7.0.42-jvm1/conf/service.xml
 
声明在集群中的名称jvmRoute
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat107-1">
 
非粘性session配置,该配置好处在于如果一台tomcat挂掉,集群中的别的节点可以接管该机器session
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

 

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

 

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

                               

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

 

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>

 

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>
 
 
复制一份tomcat到本地,改名tomcat-7.0.42-jvm2修改service.xml 以下信息
 
<Server port="8005" shutdown="SHUTDOWN">
改为:
<Server port="8006" shutdown="SHUTDOWN">
 
 
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               enableLookups="false"
               acceptCount="500" />
改为: 
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
enableLookups="false"
acceptCount="500" />
 
 
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
改为:
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
 
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat107-1">
改为:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat107-1">
 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改为:
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
4.3.1集群配置测试
Tomcatwebapp下创建test文件夹,文件夹下创建test.jspjsp中写入以下信息:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragrma","no-cache");
response.setDateHeader("Expires",0);
%>
<html>
<head><title></title></head>
<body>
<%
String s = session.getId();
%>
</br>
<%=s%>
</body>
</html>
 
打开浏览器输入:
http://192.168.10.107:8080/test/test.jsp
获得一个session格式为B7BDC67CA8EC738771BE20D162CCA9B8-n1.tomcat107-1
改变地址为http://192.168.10.107:8081/test/test.jsp
Session不变,当前两个tonmcat共享相同session,说明配置成功。
 
5apache负载均衡配置
vi /usr/local/apache2/conf/httpd.conf 
 
5.1. Apache在启动时自动加载代理(proxy)模块。 
去掉以下文本前的注释符(#)
LoadModule proxy_module modules/mod_proxy.so    
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so    
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so    
LoadModule proxy_connect_module modules/mod_proxy_connect.so    
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so    
LoadModule proxy_http_module modules/mod_proxy_http.so 
5.2 代理负载配置
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
 
ProxyRequests Off
#lbmethod=bytraffic(byrequests) stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3
ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3
ProxyPassReverse / balancer://cluster/ 
 
<proxy balancer://cluster>
 
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat107-1
 
BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomcat107-2
 
</proxy>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326207-1-1.html 上篇帖子: Apache虚拟主机的六种配置方法 下篇帖子: Java日志学习三:Apache Log4j源码浅析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表