nginx+tomcatはクラスタ負荷バランスを設定します.
4176 ワード
考え方:
nginxをインストールして80ポートを傍受します.すなわちドメインが指すポートは、nginxの負荷によって複数のサーバーに均衡しています.例えば、2つのtomcatです.
負荷バランスによる均衡呼び出しを実現すると、tomcatのsessionは共有できなくなり、複数台のサービス間のジャンプはまだsessionオンラインで実現できます.
window環境を例にとって、1.nginxインストール配置はダウンロードします.http://nginx.org/en/download.html nginxプロファイルのインストール
ダウンロード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共有を増加します.
アクセス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
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