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
效果圖以下