nginx+tomcatはクラスタ負荷バランスを設定します.

4176 ワード

考え方:
nginxをインストールして80ポートを傍受します.すなわちドメインが指すポートは、nginxの負荷によって複数のサーバーに均衡しています.例えば、2つのtomcatです.
負荷バランスによる均衡呼び出しを実現すると、tomcatのsessionは共有できなくなり、複数台のサービス間のジャンプはまだsessionオンラインで実現できます.
window環境を例にとって、1.nginxインストール配置はダウンロードします.http://nginx.org/en/download.html nginxプロファイルのインストール
	#              
	upstream myapp{   
		#weigth      ,               
		#max_fails   #max_fails     ,            ,   1,     0        
		#fail_timeout     #fail_timeout   nginx                        
		#          ,ip:  ,80            
		#       tomcat
		server 127.0.0.1:8080 weight=5;	
		server 127.0.0.1:9080 weight=5; 
	}
	
	        
    server {
		#  IP  
        listen       80;
		#   
        server_name  localhost;#  
		#         myapp 
		
		location ~* \.(gif|jpg|jpeg|png|css|ico|html)$ {
    		#root /usr/local/project/html;
			#root d:/appbase/project/html;
			proxy_pass http://myapp;#             
			expires 1h;
            access_log off;
		}
		
		location /myproject{
		#location ~ \.jsp$ {
			ssi  on;
			proxy_pass http://myapp;
			client_max_body_size 3m;
			client_body_buffer_size 128k; 
			#include /opt/apps/nginx/conf/proxy.conf;
		}		
		#... 
		}
2.
ダウンロードhttp://tomcat.apache.org/を押してtomcatを二つ減圧します.
設定tomcatクラスタをインストールして、例えば自機に2つのtomcatがある場合、ポートの衝突を避けるためにポートを変更する必要があります.
そのうちの一台は標準設定を使用して、修正しないで、もう一台はポートを修正します.
<Server port=「8005」shutdown=「SHUTDOWN」に変更しました.
<Server port=「8006」shutdown=「SHUTDOWN」>

<Connector port=「8080」protocol=「HTTP/1.1」 
               connection Timeout=「20000」 
               redirectPort=「8443」/>
  に変更する
<Connector port=「9080」protocol=「HTTP/1.1」 
               connection Timeout=「20000」 
               redirectPort=「8443」/>
  
  
これで2つのtomcatからなるクラスタができます.
 
そしてアプリケーションを追加して、2つのtomcatの\conf\Catalina\local hostディレクトリの下で、自分のアプリケーション構成を追加します.例えば、私はmyproject-1.0.warのアプリケーションを持っています.D:\appBase\project\myproject-1.0.warに置いています.
ディレクトリの下にmyproject.xmlのプロファイルを新規作成します.
<Contect docBase=「D:\appBase\project\myproject-1.0.war」path=「myproject」reloadable=「true」
このように起動すると、warを減圧してwebappsディレクトリに包んでしまいます.
このようにnginx+tomcatのクラスタは構築されましたが、sessionの共有がまだ不足していて、2台のtomcatのジャンプがsessionを共有することができます.
3.
memcachedを使ってsessionを共有します.まずmemcachedサーバーが必要です.私も同じマシンでサーバーをします.memcachedをダウンロードしてインストールします.インターネットからwindows版の住所を見つけます.http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
tomcatクライアントでは、依存パケットをダウンロードしてtomcatのlibディレクトリに置く必要があります.
 http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar
 http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar
 http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar
 http://spymemcached.googlecode.com/files/memcached-2.4.2.jar
 http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar
 
 それからあなたの応用配置ファイルでmyproject.xmlは自分の応用のためにsession共有を増加します.
 
<Context docBase="D:\appBase\project\myproject-1.0.war" path="myproject" reloadable="true">
	<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    memcachedNodes="n1:localhost:11211"  
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"  
    sessionBackupAsync="false"  
    sessionBackupTimeout="20"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"  
    copyCollectionsForSerialization="false"  
    />
</Context>
これが成功したとしても、memcached、tomcat 2台とinxを起動します.
アクセスhttp://localhost/myproject 実際のブラウザは、デフォルトは要求された80ポートを通じています.
したがって、nginxは80ポートを傍受した後、負荷均衡サーバリストにおけるサービスの重みに応じて、アプリケーションサービス上の8080または9080ポートに配信され、
一つの要求を受けたら、sessionidをmemcachedサーバに同期し、結果を返します.もう一つのアプリケーションサーバに配布を要請した場合、memcachedで同期sessionデータを取得し、セッションの共有を実現します.
参考:
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html
http://www.blogjava.net/libin2722/articles/352841.html
http://www.iteye.com/topic/676347