1.windows环境下 下载nginx,tomcat7 安装
nginx 所有版本:http://nginx.org/en/download.html
windows版本
http://nginx.org/download/nginx-1.8.0.zip
tomcat7 所有版本:http://tomcat.apache.org/download-70.cgi
windows64版本:
http://mirrors.cnnic.cn/apache/tomcat/tomcat-7/v7.0.63/bin/apache-tomcat-7.0.63-windows-x64.zip
2.修改nginx,tomcat7配置
nginx-1.2.9\conf nginx.conf
修改成
#设定负载均衡的服务器列表,可以设置多个upstream,但mysvr名字要区分
upstream myClusterServer1 {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
#ip_hash;
server 127.0.0.1:8081 weight=5;
server 127.0.0.1:8082 weight=5;
server 127.0.0.1:8083 backup;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
#请求转向mysvr 定义的服务器列表
proxy_pass http://myClusterServer1;
proxy_redirect default;
#跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。
proxy_connect_timeout 5;
}
使用了 ip_hash 就会根据客户的ip分配服务器,会有黏性,也能解决session问题,这种方式就相当于F5。我这里是注释掉的,使用的是非黏性session。
windows和Linux下配置Nginx负载的写法一样,故不分开介绍.
Nginx负载均衡一些基础知识:
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
配置:
在http节点里添加:
#定义负载均衡设备的 Ip及设备状态
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}在需要使用负载的Server节点下添加
proxy_pass http://myServer;
upstream 每个设备的状态:
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
Nginx还支持多组的负载均衡,可以配置多个upstream 来服务于不同的Server.
在Windows版本中,将压缩包进行解压,执行命令:
start nginx 或者双击
这样就可以启动nginx服务了。而执行命令:
nginx -s stop
可以停止服务。 或者 tskill nginx
tomcat修改
tomcat8081\conf\server.xml 改成
<?xml version='1.0' encoding='utf-8'?>
<Server port="18101" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="18081"
URIEncoding="UTF-8" />
<Connector port="18001" protocol="AJP/1.3" redirectPort="18081" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatRoute1">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
修改五处的端口号
加入了 jvmRoute="tomcatRoute1" 。这个会在session生成时加入到后缀
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatRoute1">
tomcat8081\conf\context.xml
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.85.132:12000"
sticky="false"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
context标签里加入了
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.85.132:12000"
sticky="false"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
12000是memcached的端口
准备jar
将这些jar放到 tomcat8081\lib 下面 ,共8个
Tomcat6和Tomcat7使用不同msm支持包 ,tomcat6是-tc6
jar包的获取可以使用maven获取。
具体的maven依赖定义如下(任选一种就oK了):
kryo-serializer:
Xml代码
<dependency>
<groupId>de.javakaffee.msm</groupId>
<artifactId>msm-kryo-serializer</artifactId>
<version>1.8.3</version>
</dependency>
javolution:
Xml代码
<dependency>
<groupId>de.javakaffee.msm</groupId>
<artifactId>msm-javolution-serializer</artifactId>
<version>1.6.0</version>
<scope>runtime</scope>
</dependency>
xstream:
Xml代码
<dependency>
<groupId>de.javakaffee.msm</groupId>
<artifactId>msm-xstream-serializer</artifactId>
<version>1.6.0</version>
<scope>runtime</scope>
</dependency>
flexjson:
Xml代码
<dependency>
<groupId>de.javakaffee.msm</groupId>
<artifactId>msm-flexjson-serializer</artifactId>
<version>1.6.0</version>
<scope>runtime</scope>
</dependency>
我们就是用kryo-serializer ,其它几种我也没试。
如果我们不是使用maven仓库来对依赖进行管理的话 ,我们需要针对每种策略下载单独需要的jar包,具体如下:
kryo-serializer: msm-kryo-serializer, kryo-serializers, kryo, minlog, reflectasm, asm-3.2
javolution-serializer: msm-javolution-serializer, javolution-5.4.3.1
xstream-serializer: msm-xstream-serializer, xstream, xmlpull, xpp3_min
flexjson-serializer: msm-flexjson-serializer, flexjson
不管你选择哪种序列化策略,你都需要 memcached-session-manager-${version}.jar ,如果你使用的是tomcat6,则还需要下载 memcached-session-manager-tc6-${version}.jar ,如果使用的是tomcat7则下载 memcached-session-manager-tc7-${version}.jar 。同时还需要下载 spymemcached-2.7.3.jar.下载这完这些jar包后把jar包放到 $CATALINA_HOME/lib/目录。
tomcat8082\conf\Catalina\localhost 路径下添加 ROOT.xml
<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true" docBase="E:/work/test2/sbweb/target/sbweb" path="" reloadable="true">
</Context>
这段代码 可以将sbweb项目路径当作根目录。代替ROOT
按照这个步骤,配置三台tomcat ,端口8081 ,8082,8083 最后一台当作灾备。
3下载安装配置memcached
memcache下载 http://memcached.org/downloads
安装到centos 步骤:
官网也有教程,但是会缺少依赖
1.分别把memcached和libevent下载回来,放到 /tmp 目录下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz
2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install
启动Memcached服务:
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 0.0.0.0 -p 12000 -c 256 -P /tmp/memcached.pid -d
选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
2.如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`
测试Memcached:
[root@localhost /]# telnet 192.168.141.64 12000
Trying 192.168.141.64...
Connected to 192.168.141.64 (192.168.141.64).
Escape character is '^]'.
set key1 0 60 4
zhou
STORED
get key1
VALUE key1 0 4
zhou
END
退出控制台:quit
至此Memcached安装成功!
你可能没有telnet命令 ,需要安装telnet。
在线安装
可使用命令:
#yum install xinetd (注意在root下安装)
#yum install telnet (注意在root下安装)
4部署启动项目
需要有个能登录测试的项目
http://git.oschina.net/nhniu/sbweb
效果图如下