nginx 全部版本:http://nginx.org/en/download.htmlcss
windows版本html
http://nginx.org/download/nginx-1.8.0.zip
java
tomcat7 全部版本:http://tomcat.apache.org/download-70.cginginx
windows64版本:
git
http://mirrors.cnnic.cn/apache/tomcat/tomcat-7/v7.0.63/bin/apache-tomcat-7.0.63-windows-x64.zip
web
nginx-1.2.9\conf nginx.confapache
修改为json
#设定负载均衡的服务器列表,能够设置多个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
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 最后一台看成灾备。
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下安装)
须要有个能登陆测试的项目
http://git.oschina.net/nhniu/sbweb
效果图以下