httpd逆世代+tomcat cluster+redisセッション保持
バージョンの説明:
httpバージョン:2.4.6
tomcatバージョン:7.0.69
dedisバージョン:3.2.3
OSバージョン:CentOS Linux release 7.3.1611
トポロジー:
tomcat-A/192.168.1.106
クライアント-->httpd逆エージェント--->redisセッション保持サーバ
192.168.1.101 tomcat-B/192.168.1.107 192.168.1.100
httpd逆エージェント:
httpサービスのインストール
httpdの逆エージェントの実装には、3つのmodulesのサポートが必要です.
proxy構成の編集
tomcatサーバ構成:
対応するパッケージのインストール
テストファイルの準備
Created on
tomcat-B:
cat /usr/share/tomcat/webapps/test/index.jsp
TomcatB
TomcatB.com
httpバージョン:2.4.6
tomcatバージョン:7.0.69
dedisバージョン:3.2.3
OSバージョン:CentOS Linux release 7.3.1611
トポロジー:
tomcat-A/192.168.1.106
クライアント-->httpd逆エージェント--->redisセッション保持サーバ
192.168.1.101 tomcat-B/192.168.1.107 192.168.1.100
httpd逆エージェント:
httpサービスのインストール
yum -y install httpd
httpdの逆エージェントの実装には、3つのmodulesのサポートが必要です.
mod_proxy.so
mod_proxy_http.so
mod_proxy_balancer.so
proxy構成の編集
cat /etc/httpd/conf.d/tomcat-proxy.conf
balancermember http://192.168.1.106:8080
balancermember http://192.168.1.107:8080
proxyset lbmethod=byrequests # , ,
servername lb.tomcat.com
proxyvia on
proxyrequests off
proxypreservehost on
require all granted
proxypass / balancer://tcsrvs/
proxypa***everse / balancer://tcsrvs/
require all granted
tomcatサーバ構成:
対応するパッケージのインストール
java-1.8.0-openjdk
tomcat
tomcat-lib
tomcat-admin-webapps
tomcat-webapps
tomcat-docs-webapp
テストファイルの準備
mkdir /usr/share/tomcat/webapps/test/
tomcat-A:
cat /usr/share/tomcat/webapps/test/index.jsp
TomcatA
TomcatA.com
Session IDCreated on
tomcat-B:
cat /usr/share/tomcat/webapps/test/index.jsp
TomcatB
TomcatB.com
Session ID
Created on
その後tomcatサービスを開始しますsystemctl start tomcat.service
ブラウザでテストhttp://192.168.1.101/test/
以上はhttpdスケジューリングバックエンドtomcatホストの要件を完了しただけです
クライアントがアクセスすると、会話情報の変更を望んでいません.考えてみてください.あなたは電子商取引サイトで注文しました.それからページスケジューラを更新して、あなたの要求を別の機械にスケジューリングしました.注文がなくなりました.どう思いますか.したがって,このような現象を回避するために,クッキー情報を設定することでセッションをバインドする.
httpサーバ構成:cat tomcat-proxy.conf
header add set-cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
# cookie
balancermember http://192.168.1.106:8080 route=tomcatA loadfactor=1
balancermember http://192.168.1.107:8080 route=tomcatB loadfactor=1
proxyset lbmethod=byrequests
proxyset stickysession=ROUTEID # cookie
#route tomcat jvmRoute
servername lb.tomcat.com
proxyvia on
proxyrequests off
proxypreservehost on
require all granted
proxypass / balancer://tcsrvs/
proxypa***everse / balancer://tcsrvs/
require all granted
tomcatホスト構成:vim server.xml
# tomcat ,jvmRoute
tomcatBホストでも同様の変更を行います
上記を完了するとクッキーベースのセッションスティッキーを実現でき、ブラウザでテストhttp://192.168.1.101/test/同じホストに移動するだけで、このホストの障害が発生すると別のホストにスケジュールされます.
上記のクッキーベースのセッションスティッキーには、クライアントがクッキーベースでバックエンドサーバAにアクセスし、Aホストが故障するとhttp dはBホストに再スケジュールされるが、Bには以前のセッション情報がないため、クライアントの閲覧記録、注文状況などの情報は消えてしまうという問題がある.
tomcatクラスタと個別のキャッシュサーバredisを使用して上記の問題を解決できます.tomcatクラスタはホストの単一の障害問題を解決し、tomcatホストではなくキャッシュサーバにセッション情報を個別に保存します.
ただしredisは、単一の問題を回避するためにも高可用性を行う必要があります.ここでは、セッションキャッシュ機能を実現できればいいです.高利用者だけが興味を持って自分で研究することができます
セッションサーバを構成するとクッキー情報を使わずにhttpd構成のクッキー構成を削除します vim tomcat-proxy.conf
header add set-cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
proxyset stickysession=ROUTEID
# ,
tomcatホスト構成クラスタ:cat server.xml
# Engine
以上の内容は多くて、直接コピーすることができて、いかなる修正をしなくて、2台のホストはすべて配置します
リファレンス接続http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
注意公式サイトのテンプレートの構成には2つのエラーがあります.
# /
そしてwebを変更します.xml cat web.cml
# tomcat
redisをインストールし、設定するyum -y install redis
vim /etc/redis.conf
bind 0.0.0.0
# , tcp6379
その後redisサービスを開始します
次にtomcatホストを構成し、そのうちの1台を例に、もう1台もこのように構成します.cat context.xml #
#192.168.1.100 redis
jarパッケージ、3つのjarパッケージを準備し、そのダウンロードアドレスは以下の通りです.
https://github.com/izerui/tomcat-redis-session-manager.git
3つのjarパッケージをtomcatのライブラリディレクトリ、すなわち/usr/share/tomcat/lib/に配置します.
tomcatサービスの再起動
ブラウザテストを開きますhttp://192.168.1.101/test/、セッションIDは変更されていませんが、スケジューリングされたバックエンドホストが変更されました.
まとめ:
redisはリスニングアドレスのみを変更すればよく、その他は構成を変更する必要はありません.
httpdは反世代の役割を果たすだけで、バックエンドホストのスケジューリングを構成することが重要です.
tomcatクラスタはserverを変更する必要があります.xmlとweb.xmlファイルは、redisキャッシュに合わせてcontextを構成する必要がある.xmlとjarパッケージの準備
の最後の部分
systemctl start tomcat.service
cat tomcat-proxy.conf
header add set-cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
# cookie
balancermember http://192.168.1.106:8080 route=tomcatA loadfactor=1
balancermember http://192.168.1.107:8080 route=tomcatB loadfactor=1
proxyset lbmethod=byrequests
proxyset stickysession=ROUTEID # cookie
#route tomcat jvmRoute
servername lb.tomcat.com
proxyvia on
proxyrequests off
proxypreservehost on
require all granted
proxypass / balancer://tcsrvs/
proxypa***everse / balancer://tcsrvs/
require all granted
vim server.xml
# tomcat ,jvmRoute
vim tomcat-proxy.conf
header add set-cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
proxyset stickysession=ROUTEID
# ,
cat server.xml
# Engine
# /
cat web.cml
# tomcat
yum -y install redis
vim /etc/redis.conf
bind 0.0.0.0
# , tcp6379
cat context.xml #
#192.168.1.100 redis