キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis

Aは、はじめにのRedis

Redisのキーと値のストレージシステムです。そしてmemcachedのように、それは文字列(文字列)、リスト(一覧)、セット(コレクション)、ZSET(ソートセット---順序付きコレクション)とハッシュ(ハッシュタイプ)を含め、比較的保存された値の型をサポートしています。memcachedのと同じように、効率性を確保するために、データはメモリにキャッシュされています。Redisの差は、定期的にこれに基づいて同期したデータディスクに書き込まれるか、追加のログファイルを書き込む動作を変更するために、および実装のマスタースレーブ(マスター・スレーブ)が更新されます。

Redisのは、キーと値の高性能データベースです。大きくするように見えるが、memcacehdなキー/値ストアの不足を補うためのRedis、それはいくつかの状況では、リレーショナル・データベースへの非常に良い補完を再生することができます。これは、Javaを提供し、C / C ++、Cの #、PHPやJavaScript、Perlの、オブジェクト-C、のpython、ルビーや他のクライアント、非常に使いやすいです。
シンプルでmemcachedのRedisの間の違いは以下の3点基本的に存在している場合:
。1は、また、ストレージ・リスト、セット、ZSET、ハッシュおよび他のデータ構造を提供しながら、唯一、簡単なキー/値のデータ型をサポートするのRedis。
図2は、Redisのバックアップデータ、すなわち、データのバックアップマスタ・スレーブモードをサポートします。
あなたが再び使用されるロードすることができたときに3は、サポートデータの永続性をRedisの、メモリ内のデータがディスク上に保存することができ、再起動してください。

レイズではなく、全てのデータがメモリに格納されています。これはmemcacehdとの最大の違いと比較されます。
基づいてRedisのは、すべてのキー情報をキャッシュするレイズの検索メモリ使用量が一定の閾値を超えた場合、それがスワップ操作をトリガする、Redisの“swappability = age*log(size_in_memory)”それらのキーに対応する値を算出したスワップディスクする必要があります。その後、値に対応するキーは、ディスクに永続化し、メモリ内にクリアします。この機能は、データがRedisのマシン自体のそのメモリサイズを超えて記憶することができる可能にします。もちろん、マシン自体のメモリは、これらのデータは、スワップ操作を行わないので、ekyのすべてを保つことができなければなりません。
Redisのからデータを読み出すとき読み出しメモリ値に対応するキーは何も、その後のRedisはスワップファイルから対応するデータをロードする必要がある場合は、その後、要求者に返されません。

memcachedのとRedisの比較
1は、ネットワークIOモデル
memcacehdは、非ブロッキングネットワークモデルIOはメインスレッドとワーカーモニター子スレッド、モニターネットワークリスナスレッド接続に多重マルチスレッド化され、要求を受信した後、デリバリパイプ接続記述子ワーカースレッドに、IO、ネットワークレイヤパッケージlibeventのイベントリポジトリの読み取り、書き込み、マルチスレッド、マルチコアモデルは、役割を果たすことができます。
RedisのIO彼はシンプルなAeEventイベント処理フレームワーク、ファイルディスクリプタの主な成果、kqueueのをカプセル化し、選択していること、シングルスレッドモデルを使用して多重化し、単純なIO操作のために、シングルスレッド化速度の利点を最大限に遊ぶことができますが、Redisのまた、これらの操作のためなど、重合、並べ替えなど、いくつかの簡単な計算機能を提供し、実際のシングルスレッドモデルは真剣に全体のスループット、CPU演算処理、ライブブロックされている全体のIOスケジューリングに影響します。

図2に示すように、メモリ管理
、メモリ管理のための異なるサイズのスラブとチャンクを使用して事前に割り当てられたメモリ・プール方式を使用してmemcacehd、値がストレージに応じて適切なチャンクサイズを選択します。
Redisのアプリケーションのメモリ使用ストアデータへのオンサイトの方法。

3、ストレージ、および他の側面
、実質的にmemcachedのは、単純なキーと値のストアをサポートし、持続的複製および他の機能をサポートしていない、Redisのキー/値のほかに、リスト、セット、にSortedSet、ハッシュおよび他のデータ構造をサポートしています。

第二に、どのようにセッションのセッションを維持します

現在、大規模なWebアクセスに適応することができるようにするために、必要性は、クラスタ化展開のアプリケーションを実現しています。最も効果的な解決策は、私たちが最初に関わらず、ユーザの要求のは、どのサーバに転送されることを保証するために、統一されたセッションを解決しなければならないので、固定されていない各ユーザーの要求はおそらくサーバーに割り当てるされ、クラスタの負荷分散と負荷分散にあります私たちは、セッションを共有するためのメカニズムを実装する必要があるユーザーの通常の使用を確保することができます。

セッションに一様なクラスターシステムを達成するために、以下のいくつかのオプションがあります:
1、精密な測位要求(sessionsticky)
例えばIPハッシュベースのアクセスポリシーを、すなわち、現在のユーザ要求定義がサーバに集中して、サーバは、単一のように格納しますユーザーのログインセッションのダウンタイムは、展開の単一のポイントと等しい場合は、セッションがコピーされていない、失われます。(未使用)
:2は、セッションレプリケーションのシェア(sessionreplication)は、
Tomcatはセッション共有が来るよう、主に、複数のアプリケーションサーバ間の同期セッション、セッションを保ち、外国透明クラスタ環境を指します。一方のサーバーに障害が発生した場合、負荷分散の原則に応じて、スケジューラは、セッションが同期されているので、それは、ユーザのセッション情報が失われないことを、セッションレプリケーションを確保することができ、利用可能なノード、配信要求を見つけるために横断します。
このプログラムの欠点は:
ミドルウェアの同じ種類の間で完了する必要があります(例:Tomcatの-Tomcatの間の)
セッションレプリケーションのパフォーマンスの低下が急速に増加し、特に大規模なオブジェクトのセッションとオブジェクトを保存しますパフォーマンスの低下の急激な変化がより重要であるとき、システムのパフォーマンスを消費します。この機能は、Webアプリケーションの水平展開が制限されることができます。
メンバーへのブロードキャスト同期セッションによって内容が、でもネットワークのボトルネックの中に、ネットワーク・トラフィックのボトルネックが発生します。大規模な同時パフォーマンスでは良くありません。
キャッシュDBキャッシュを共有セッションに基づく3、
すなわちアプリケーションサーバに障害が発生した場合、セッション情報はスケジューラ反復は、キャッシュDBに格納されている新たな要求を受け入れるようにcacheDBストアセッション情報、アプリケーションサーバを使用してメモリキャッシュ/ Redisのキャッシュベースの共有セッション、見つかった後、そのセッションの共有と高可用性を実現するために、マシンにコピーした場合、アプリケーション・サーバー・セッションがマシンのメモリに見つからない利用可能なノード、配信要求、探して、キャッシュDBは、検索します。(推奨)

三、nginxの+ Tomcatの+ Redisの+ MySQLのリアライズのセッション共有、ロード・バランシング

1、プロジェクト環境

ホストコンピューター オペレーティングシステム IPアドレス
nginxの CentOSの7.3 172.16.1.100
Tomcatの-1 CentOSの7.3 172.16.1.110
Tomcatの-2 CentOSの7.3 172.16.1.120
mysqlの CentOSの7.3 172.16.1.130
Redisの CentOSの7.3 172.16.1.30

2、プロジェクトのトポロジ

キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
この図では、リバースプロキシnginxのは、静的および動的ランダム重量に応じてTOMCAT 2つに割り当てられたサーバへ動的クライアント要求の分離を達成するために行わ共有セッション・データ・サーバのTomcat Redisの2つの2つのバックエンドデータベースのMySQLのTomcatなど。

3、プロジェクトの実施

1、nginxのインストール設定
ロードバランサTomcatなどのnginxを使用して、セッションデータのRedisに格納されているTomcatのセッション、24時間365日の効果は、ゼロダウンタイムを達成することができます。セッションはRedisの中に格納されているため、設定nginxのに必要はありませんので、負荷分散のTomcatより多くの背景を実現するように、スティックは、Tomcatの道を貼り付けました。

1)安装依赖工具包:
[root@nginx ~]#  yum -y install gcc* pcre-devel openssl-devel zlib-devel make vim 
2)创建nginx程序用户组和用户:
[root@nginx ~]# groupadd -r nginx && useradd -r -g nginx -s /bin/false -M nginx
3)编译安装nginx:
[root@nginx ~]# tar zxf nginx-1.8.0.tar.gz 
[root@nginx ~]# cd nginx-1.8.0
[root@nginx nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
>  --with-http_stub_status_module --with-http_ssl_module  --with-http_dav_module  --with-http_flv_module \
>  --with-http_mp4_module --with-http_gzip_static_module --with-http_gzip_static_module \
> --with-http_addition_module --with-http_sub_module  --with-pcre  --with-http_realip_module 
[root@nginx nginx-1.8.0]# make && make install
4)优化路径并检查:
[root@nginx nginx-1.8.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx nginx-1.8.0]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
5)编写nginx服务脚本:
[root@nginx nginx-1.8.0]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
echo "Nginx service already running."
else
$PROG -t &> /dev/null
if [ $? -eq 0 ] ; then
$PROG
echo "Nginx service start success."
else
$PROG -t
fi
fi
;;
stop)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
kill -s QUIT $(cat $PIDF)
echo "Nginx service stop success."
else
echo "Nginx service already stop"
fi
;;
restart)
$0 stop
$0 start
;;
status)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
echo "Nginx service is running."
else
echo "Nginx is stop."
fi
;;
reload)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
$PROG -t &> /dev/null
if [ $? -eq 0 ] ; then
kill -s HUP $(cat $PIDF)
echo "reload Nginx config success."
else
$PROG -t
fi
else
echo "Nginx service is not run."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
#并加入开机自启:
[root@nginx ~]# chkconfig --add nginx
[root@nginx ~]# chkconfig nginx on
#启动nginx:
[root@nginx ~]# systemctl daemon-reload
[root@nginx ~]# systemctl start nginx
[root@nginx ~]# netstat -anput | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      21812/nginx: master 

6)nginxのリバースプロキシ(リバースプロキシロードバランサ+ +健康検出)配置
注:ウェブの上流側と負荷分散のための結合後端プロキシ・モジュールと
結合nginxのモジュールは、デフォルトではヘルスチェックのためngx_http_proxy_module ngx_http_upstream_moduleバックエンドサーバーモジュールを付属;

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
次の設定項目のhttp {}フィールドを追加します。

#load balance Settings:
        upstream  backend_tomcat {   
                server 172.16.1.110:8080 weight=1 max_fails=2 fail_timeout=10s;
                server 172.16.1.120:8080 weight=1 max_fails=2 fail_timeout=10s;
}
# http_proxy Settings:
        proxy_connect_timeout 75;   #nginx 跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout 75;   #定义后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,nginx将断开这个连接。
        proxy_read_timeout 75;  #定义从后端服务器读取响应的超时
        proxy_buffer_size 4k;  #设置缓冲区的大小(该缓冲区大小默认等于 proxy_buffers 指令设置的一块缓冲区的大小,但它也可以被设置得更小)
        proxy_buffers 4 32k;    #为每个连接设置缓冲区的数量和每块缓冲区的大小
        proxy_busy_buffers_size 64k;  #高负荷下缓冲大小(默认大小是 proxy_buffers 指令设置单块缓冲大小的 2 倍)
        proxy_temp_file_write_size 64k;  #当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小
参数解释:
weight:轮询权值,也是可以用在ip_hash的,默认值为1
max_fails:运行请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误。
fail_timeout:有两层含义,以时在10s时间内最多容许2次失败;二是在经历了2次失败以后,10s时间内不分配请求到这台服务器。

サーバーモジュールで追加します。

#proxy_pass Settings:
        location ~* \.(jsp|do)$ {   #匹配到的动态请求将进行转发
        proxy_pass http://backend_tomcat;  #请求转向 backend 定义的服务器列表,即反向代理,对应 upstream 负载均衡器。
        proxy_redirect off;  #是否定义重定向规则
        proxy_set_header Host $host;  #允许重新定义或者添加发往后端服务器的请求头
        proxy_set_header X-Real-IP $remote_addr;   #web服务器端获得用户的真实ip, 也可以通过下面的X-Forward-For获取
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;    #后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#增加故障转移,如果后端的服务器返回502、 504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
}

7)再起動nginxのサービスとセットファイアウォールルール:

[root@nginx ~]# systemctl restart nginx
[root@nginx ~]# firewall-cmd --add-port=80/tcp --permanent
success
[root@nginx ~]# firewall-cmd --reload
success

インストールと展開Tomcatサーバーが2は、
JDK Tomcatのインストール前にインストールする必要があり、JDKはJava仮想マシン(JVM)を含んで無料のSun Java言語ソフトウェア開発キットを、提供され、書き込み良いのJavaのソースコードは、フォームのJavaにコンパイルすることができますバイトコードは、限りJDKのインストールとして、あなたは、このようにするJavaのプラットフォームを確保し、JVMバイトコードファイルを解釈し使用することができます。

1)インストールJDK、配置されたJava環境(tomcat1サーバのインストールとTOMCAT2)

[root@tomcat-1 ~]# tar zxf jdk-8u211-linux-x64.tar.gz
[root@tomcat-1 ~]# mv jdk1.8.0_211/ /usr/local/java
[root@tomcat-1 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
[root@tomcat-1 ~]# source /etc/profile
[root@tomcat-1 ~]# java -version  #确保java版本与当前版本一致
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

2)インストールのtomcat(tomcat1 TOMCAT2サーバーと同じ操作)
をダウンロードするバージョンを利用できるTomcatの公式サイトが必要:https://tomcat.apache.org

[root@tomcat-1 ~]# tar zxf apache-tomcat-8.5.35.tar.gz 
[root@tomcat-1 ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat8
[root@tomcat-1 ~]# vim /etc/profile
export CATALINA_HOME=/usr/local/tomcat8
export PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
[root@tomcat-1 ~]# source /etc/profile
#启动tomcat:
[root@tomcat-1 ~]# /usr/local/tomcat8/bin/startup.sh   
#这里只是展示启动脚本的路径,因为上边设置了环境变量,可直接执行startup.sh脚本
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat-1 ~]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      15408/java
#防火墙规则配置:
[root@tomcat-1 ~]# firewall-cmd --add-port=8080/tcp --permanent
success
[root@tomcat-1 ~]# firewall-cmd --reload
success

サーバーブラウザ#Tomcatの2回のテストアクセス
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis

3)修正プロファイルのTomcat(tomcat1とTOMCAT2操作)

[root@tomcat-1 ~]# vim /usr/local/tomcat8/conf/server.xml
#设置默认虚拟主机,并增加jvmRoute
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-1">
#修改默认虚拟主机,并将网站文件路径指向/web/webapp1,在host段增加context段
 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
                <Context docBase="/web/webapp1" path="" reloadable="true"/>   #添加该行内容

#Tomcatの-2サーバーの設定ファイル:

#两台配置只是jvmRoute不同,其他配置保持一致:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-2">
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
                  <Context docBase="/web/webapp1" path="" reloadable="true"/> 

説明:のjvmRouteは、JVMのロゴである、ページが実際の運用環境では、ロゴtomcatのすべての背景が同じになるように、タブのほとんどのトップで、ここでは説明の実験のために、私は2つのTomcatのロゴの変更は同じではありません持っています。良い時間を確認すると、私たちは確認しますために。

(Tomcatの-1と同じ操作のTomcat-2):4)ウェブディレクトリとテストファイルを作成し

[root@tomcat-1 ~]# mkdir -p /web/webapp1
[root@tomcat-1 ~]# vim /web/webapp1/index.jsp  #编写动态网页文件
#内容如下:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>tomcat-1</title>   
</head>
<body>
<h1><font color="red">Session serviced by tomcat</font></h1>
<table aligh="center" border="1">
<tr>
<td>Session ID</td>
<td><%=session.getId() %></td>
<% session.setAttribute("abc","abc");%>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
<html>

#注:「Tomcatの-2」に変更し、テストのロードバランシングには、Tomcatの-2ノードindex.jspファイルのタイトル(サーバーのTomcatのWebコンテンツ制作環境の2つが同じで提供)、その他の構成と同じ。

5)再起動tomctサービス、およびロードバランシングを確認

#tomcat-1和tomcat-2都需要重启
[root@tomcat-1 ~]# shutdown.sh 
[root@tomcat-1 ~]# startup.sh   
[root@tomcat-1 ~]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      15551/java  

:#ユーザーは、ロードバランシングを確認し、nginxのWebサービスにアクセスすることで、ブラウザを使用して
結果の最初の訪問:
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
第二の訪問の結果:
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
上記の結果から、2回の訪問で見ることができるが、アクセス要求にnginxのは、後端部に配布されていますTomcatの-1とTomcat-2、負荷分散を達成するために、クライアントのアクセス要求ではなく、同じセッションID(つまり:セッションが残って実装されていない)ので、バックエンドサーバーは、多くの圧力の原因となります。

6)ヘルスチェックを確認してください

#可以关掉一台tomcat主机,模拟宕机,用客户端浏览器测试访问
[root@tomcat-1 ~]# shutdown.sh   
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar

キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
ページを更新する方法に関係なく、検証が成功すると、ヘルスチェックの説明が役割を果たし、サービスを提供TOMCAT2てきました。

図3に示すように、コンフィギュレーションのTomcatセッション残っはRedisのことによって達成されます

#フロント準備作業は、次のプロジェクトの焦点であると言うことができます。
1)Redisのマウント
:公式サイトのダウンロードhttp://download.redis.io/releases/
タール-4.0.14.tar.gz Redisのzxf [ルート@ Redisの〜]#
[ルートのRedis〜@]のRedis-CDに#4.0。 14 /
[RedisのRedisの@ルート-4.0.14]#は&& make installを作り
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
数字によって、我々は簡単に見ることができる、Redisのは、インストールは/ usr / localは/ usr /ローカル/ビンには、/ usr / local /シェア次には、/ usr / local /含まれ、は/ usr / local / libには/ usr / local / share /男性ディレクトリ。

#次に、以下のように、Redisの初期化スクリプトinstall_server.shを実行し、次のutilsのディレクトリに切り替えます。

[root@redis redis-4.0.14]# cd utils/
[root@redis utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config: 
Port           : 6379  
Config file    : /etc/redis/6379.conf  
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server  
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
#上面全部默认回车就好

上記の実装工程を経て、我々は/etc/redis/6379.confの初期のRedis Redisのプロファイルの後に、ログファイルが/var/log/redis_6379.log、データファイルdump.rdbの/ var / libに/に格納されていることがわかります/ 6379ディレクトリのRedisの下、/etc/init.d/redis_6379の起動スクリプト。
#あなたがsystemdに使用する必要がある場合、あなたは、/ etc / systemdに/システム内のファイルの名前redis_6379.serviceユニットを作成することができます。

[root@redis utils]# vim /etc/systemd/system/redis_6379.service
#内容如下:
[Unit]
Description=Redis on port 6379
[Service]
Type=forking
ExecStart=/etc/init.d/redis_6379 start
ExecStop=/etc/init.d/redis_6379 stop
[Install]
WantedBy=multi-user.target
#注:这里Type=forking是后台运行的形式

#スタートRedisの
[Redisのutilsパッケージ@ルート]#systemctlデーモンリロード
[Redisのutilsパッケージ@ルート]#はredis_6379.serviceを有効systemctl
systemctlスタートredis_6379.service番号の[Redisのutilsの@ルート]
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
グラフから#私たちは、サービスのステータスがあることがわかります死の状態では、ソリューションは、以下のように、サービスを再起動することです。
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis

#防火墙规则设置:
[root@redis utils]# firewall-cmd --add-port=6379/tcp --permanent
success
[root@redis utils]# firewall-cmd --reload
success

2)構成のRedis

[root@redis ~]# vim /etc/redis/6379.conf 
#修改内容如下(去掉注释并修改):
bind 172.16.1.30   #将redis的监听地址修改为redis主机的ip
requirepass pwd@123   #考虑到安全性,需要启动redis的密码验证功能requirepass参数。
#重新启动redis服务:
[root@redis ~]# systemctl restart redis_6379.service
[root@redis ~]# netstat -anput | grep redis
tcp        0      0 172.16.1.30:6379        0.0.0.0:*               LISTEN      12261/redis-server 

構成後#redisプロファイルは、操作が簡単であり、次のようにRedisのは、(テスト)を開始します。

[root@redis ~]# redis-cli -h 172.16.1.30 -p 6379 -a pwd@123
Warning: Using a password with '-a' option on the command line interface may not be safe.
172.16.1.30:6379> keys *
(empty list or set)
172.16.1.30:6379> set name lisi
OK
172.16.1.30:6379> get name
"lisi"
172.16.1.30:6379> quit   

上記のパラメータが説明されます:

首先我们利用redis的命令行工具redis-cli,连接redis服务器,ip是172.16.1.30(这里就以本机进行测试),端口是6379,密码是pwd@123
keys *:是查看redis所有的键值对
set nam lisi:添加一个key(name)-value(lisi)
get name:查看name这个键值的内容
quit:退出连接
#redis的其他操作命令,会在后面讲解到

これは、すべてのRedisの展開は、設定の同期Tomcatの次のセッションを終了しました。

3)セッションRedisの同期Tomcatの設定(同じ動作及びTOMCAT2)tomcat1
#ダウンロードのTomcat-Redisのセッションマネージャ対応するJARパッケージ、主に3つがあります。

tomcat85-session-redis-1.0.jar
jedis-2.9.0.jar
commons-pool2-2.4.2.jar
① 下载完成后分别拷贝到$TOMCAT_HOME/lib目录中:
[root@tomcat-1 ~]# cp tomcat85-session-redis-1.0.jar jedis-2.9.0.jar commons-pool2-2.4.2.jar  /usr/local/tomcat8/lib/
② 修改tomcat的context.xml文件:
[root@tomcat-1 ~]# vim /usr/local/tomcat8/conf/context.xml 
添加以下内容:

キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
図は次のとおりです。

        <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
        host="172.16.1.30"   #redis主机地址
        password="pwd@123"   #redis登录密码
        port="6379"        #监听端口
        database="0"   
        maxInactiveInterval="60" />    #session的失效时间(单位s)
③ 修改完,重启tomcat:
[root@tomcat-1 ~]# shutdown.sh 
[root@tomcat-1 ~]# startup.sh 
[root@tomcat-1 ~]# netstat -anput | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      16931/java  

ホスト上のtomcat-2を繰り返します。

④セッションセッション全会一致で確認し
、ブラウザテストページを介して#http://172.16.1.100/index.jspシミュレートのユーザーアクセス
の最初の訪問を:
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis

(ページを更新するために)第二の訪問:
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
としては、異なるTomcatを訪問し、それぞれ、見ることができますが、セッションを取得するには、セッションセッションは、クラスタの目的を達成するために、ペースを維持することを示し、同じです。
注:セッションの永続性tomcat6最初はデフォルトの設定で有効になってからは、あなたがTomcatのconfディレクトリにcontext.xmlファイルで、実際には、非常に簡単なテストをローカルセッションの持続性を閉じることができ、コメントを解除し、次のセクションに構成されました:

#修改前:
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
#修改后:
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <Manager pathname="" />
⑤ 查看redis:
[root@redis ~]# redis-cli -h 172.16.1.30 -p 6379 -a pwd@123
Warning: Using a password with '-a' option on the command line interface may not be safe.
172.16.1.30:6379> keys *
1) "3585F7426EBBC83802C0407575FEAC72tMLrlI.tomcat-2"
2) "name"
172.16.1.30:6379> quit

図から分かるように、それが確立し維持TOMCAT2ペアに開催されたセッションにセッションをRedisの。

図4に示すように、コンフィギュレーションデータベースTomcatに接続されています

セッション遺跡のRedisによるTomcatのセッションは現在、データベースへの接続Tomcatの問題を解決するため、この問題を解決しました。(MySQLのDBサーバとしてホスト172.16.1.130)
1)インストールMySQLのサービス(バイナリ)

[root@mysql ~]# vim mysql5.7.sh
#!/bin/bash
rpm -qa | grep mariadb  &> /dev/null
if [ $? -eq 0 ]
then
    rpm -e mariadb-libs --nodeps
fi
tar zxf  mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql
ln -s /usr/local/mysql/bin/* /usr/local/bin
groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql
mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql
cat > /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/data/mysqld.pid
log-error=/usr/local/mysql/data/mysql.err
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
EOF
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql
cd /usr/local/mysql/
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
mypwd=`grep password /usr/local/mysql/data/mysql.err | awk -F'root@localhost: ' '{print $2}'`
mysql -uroot -p${mypwd} -e 'alter user root@localhost identified by"123.com"' --connect-expired-password
[root@mysql ~]# sh mysql5.7.sh 
Starting MySQL. SUCCESS! 
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@mysql ~]# ss -anput | grep 3306
tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=16753,fd=12))
#防火墙规则设置:
[root@mysql ~]# firewall-cmd --add-port=3306/tcp --permanent
success
[root@mysql ~]# firewall-cmd --reload
success

2)データベース内のデータを作成します

[root@mysql ~]# mysql -uroot -p123.com
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all on *.* to javauser@'172.16.1.%' identified by 'pwd@123';   //授权一个用户
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;   
Query OK, 0 rows affected (0.00 sec)

mysql> create database javadb;   //创建库
Query OK, 1 row affected (0.00 sec)

mysql> use javadb
Database changed
mysql> create table testtb(id int primary key auto_increment,
    -> name varchar(25),
    -> age int(3));   //创建表
Query OK, 0 rows affected (0.00 sec)

mysql> insert into testtb(name,age) values('zhangsan','20'),('lisi','21'),('sunqian','22');   //插入数据
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from testtb;  #查看一下
+----+----------+------+
| id | name     | age  |
+----+----------+------+
|  1 | zhangsan |   20 |
|  2 | lisi     |   21 |
|  3 | sunqian  |   22 |
+----+----------+------+
3 rows in set (0.00 sec)

3)設定のTomcatのMySQLデータベースサーバ接続(同じ操作2つのTomcat)

(1)下载mysql-connector-java-5.1.22-bin.jar并复制到$CATALINA_HOME/lib目录下:
[root@tomcat-1 ~]# cp mysql-connector-java-5.1.22.jar  /usr/local/tomcat8/lib/
(2)Context文件设置:
[root@tomcat-1 ~]# vim /usr/local/tomcat8/conf/context.xml

キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis

#上图在<Context>中添加的内容如下:
        <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="javauser" password="pwd@123" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://172.16.1.130:3306/javadb"/>

TomcatのMySQLデータベース接続用のストレージサイトのXML設定ファイル用に新しいディレクトリの/ウェブ/のwebapp1 /ルートディレクトリに(3)

[root@tomcat-1 ~]# mkdir /web/webapp1/WEB-INF
[root@tomcat-1 ~]# vim /web/webapp1/WEB-INF/web.xml
添加内容如下:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
#保存修改并退出,重启tomcat服务:
[root@tomcat-1 ~]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
[root@tomcat-1 ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.

同じ操作のためのTomcat-2とTomcat-1。
(4)テストコード
#は今、テストTomcatとMySQLを簡単なテスト接続が.jspページを作成します

[root@tomcat-1 ~]# vim /web/webapp1/test.jsp
#内容如下:(根据自己的环境,修改相对应的参数)
<%@ page language="java" import="java.sql.*" pageEncoding="GB2312"%>
<html>
<head>
<title>MySQL</title>
</head>
<body>
connect MySQL<br>
<%
String driverClass="com.mysql.jdbc.Driver";
String url="jdbc:mysql://172.16.1.130:3306/javadb";
String username = "javauser";
String password = "pwd@123";
Class.forName(driverClass);
Connection conn=DriverManager.getConnection(url, username, password);
Statement stmt=conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from testtb");
while(rs.next()){
out.println("<br>name:"+rs.getString(2)+"age:"+rs.getString(3));
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

注: Tomcatの-2のノードで同じテストコードを作成し、より良い「MySQLの-2」に変更し、タイトルを検証するためにします。

(5)は、ブラウザのテストページのURLを介してアクセス:http://172.16.1.100/test.jsp、またはnginxのプロキシによってバックエンドTomcatサーバを逆。
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
キャッシュサーバは(nginxの+ Tomcatの+ Redisの+ MySQLのセッションセッション共有を実現)のRedis
現在のTomcat-1のTomcat-2、図から見て、データベースに接続する準備ができていることができます。
設定このプロジェクトが完成します。

インストールパッケージとjarパッケージには、ネットワークディスクにアップロードされました:リンク:https://pan.baidu.com/s/133H7oEbBWiBvaNWUoFgH3Q
抽出コード:2fj1

おすすめ

転載: blog.51cto.com/13972012/2477858