nginx+tomcat+memcached集羣部署

1.windows環境下 下載nginx,tomcat7  安裝 

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


2.修改nginx,tomcat7配置

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 &quot;%r&quot; %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包,具體以下:

無論你選擇哪一種序列化策略,你都須要 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

效果圖以下

相關文章
相關標籤/搜索