nginx之 nginx + tomcat + redis 負載均衡且session一致性

張衝andy發表於2017-06-18

說明: 
本文描述的是 nginx + tomcat + redis 實現應用負載均衡且滿足session一致性,從安裝到配置的全部過程,供大家學習!
nginx 代理伺服器ip: 10.219.24.26
tomcat_1 應用伺服器ip與埠: 10.219.24.21:8080 
tomcat_2 應用伺服器ip與埠: 10.219.24.21:8081
redis 快取伺服器ip: 10.219.24.23

一、 nginx-1.9.7 編譯安裝

下載地址: http://nginx.org/download/nginx-1.9.7.tar.gz

補充: 安裝 nginx之前,需要先安裝一些依賴包:gcc、pcre、zlib
a、nginx gzip模組需要zlib庫
b、nginx rewrite模組需要pcre庫
c、nginx ssl模組需要openssl庫

1、安裝必要依賴包
[root@mysql03 ~]# yum install -y pcre pcre-devel

centos 6.7 配置 yum 本地源 連結參考: http://blog.csdn.NET/zhang123456456/article/details/56690945 
2、 Nginx安裝
[root@mysql03 ~]# ll nginx-1.9.7.tar.gz 
-rw-r--r--. 1 root root 885562 Jun 14 21:46 nginx-1.9.7.tar.gz
[root@mysql03 ~]# tar zxvf nginx-1.9.7.tar.gz
[root@mysql03 ~]# cd nginx-1.9.7
-- 配置nginx安裝選項
[root@mysql03 nginx-1.9.7]# ./configure --prefix=/usr/local/nginx
說明: 配置完畢後可以看到一個配置概要,概要中的5項必須都有了相應的庫支援
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used 
##如果想要安裝openssl模組,安裝時需指定 ./configure --prefix=/usr/local/nginx --with-openssl=/root/openssl-1.0.2d ## 
+ md5: using system crypto library
+ sha1: using system crypto library
+ using system zlib library
-- 安裝nginx
[root@mysql03 nginx-1.9.7]# make && make install
3、 檢查安裝是否正常
[root@mysql03 nginx-1.9.7]# cd /usr/local/nginx
[root@mysql03 nginx]# ll
total 16
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 conf
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 html
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 logs
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 sbin
-- 啟動
[root@mysql03 nginx]# ./sbin/nginx #如果不能正常啟動,可能是埠占用 
[root@mysql03 nginx]# ps -ef|grep nginx
root 5212 1 0 22:17 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 5213 5212 0 22:17 ? 00:00:00 nginx: worker process
root 5228 2359 0 22:20 pts/0 00:00:00 grep nginx
-- 訪問
瀏覽器輸入: http://10.219.24.26/ #ip換成自己的ip 
看到以下頁面內容,一切正常。
Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

-- 關閉
[root@mysql03 nginx]# ./sbin/nginx -s stop
[root@mysql03 nginx]# ps -ef|grep nginx
root 5241 2359 0 22:25 pts/0 00:00:00 grep nginx

二、 單機多例項 tomcat 安裝

前言:
JDK(Java Development Kit)是Sun Microsystems針對Java開發員的產品。自從Java推出以來,JDK已經成為使用最廣泛的java SDK. JDK是整個Java的核心,包括了Java執行環境,Java工具和Java基礎的類庫。所以要想執行jsp的程式必須要有JDK的支援,理所當然安裝Tomcat的前提是安裝好JDK.

二、1       JDK安裝

1. 檢視os版本
[root@MySQL ~]# uname -a
Linux mysql 2.6.32-200.13.1.el5uek #1 SMP Wed Jul 27 21:02:33 EDT 2011 x86_64 x86_64 x86_64 GNU/linux
解釋:如果有x86_64就是64位的,沒有就是32位的。後面是x686或x86_64則核心是64位的,i686或i386則核心是32位的。
2. 下載安裝包
下載JDK,地址:http://www.Oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,
我下載【jdk-8u131-linux-x64.tar.gz】,如下圖所示:

3. 安裝Java JDK8.0
3.1、然後將下載了的JDK安裝包mv到local資料夾下
[root@mysql ~]# mv jdk-8u131-linux-x64.tar.gz /usr/local/
3.2、跳轉到local下面:
[root@mysql ~]# cd /usr/local/
[root@mysql local]# ll jdk-8u131-linux-x64.tar.gz 
-rw-r--r-- 1 root root 185540433 Jun 17 17:08 jdk-8u131-linux-x64.tar.gz
3.3、再將JDK解壓
[root@mysql local]# tar zxvf jdk-8u131-linux-x64.tar.gz

4. 配置環境變數
4.1、 在 /etc/profile 檔案中新增Java相關的環境變數,將下面的內容複製到底部:
JAVA_HOME=/usr/local/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH

注意:根據上面的配置資訊,我們既可以將環境變數的配置完成,需要注意的是,PATH在配置的時候,一定要把JAVA_HOME/bin放在最前面,不然使用java命令時,系統會找到以前的java,再不往下找了,這樣java這個可執行檔案執行的目錄其實不在$JAVA_HOME/bin下,而在其它目錄下,會造成很大的問題。

4.2、 立即生效 
[root@mysql local]# source /etc/profile

5. 驗證是否安裝成功
[root@mysql local]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)


二、2    安裝 apache-tomcat-7.0.78

前言:
Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應對HTML 頁面的訪問請求。實際上Tomcat 部分是Apache 伺服器的擴充套件,但它是獨立執行的,所以當你執行tomcat 時,它實際上作為一個與Apache 獨立的程式單獨執行的。

1、 安裝 apache-tomcat-7.0.78 版本的 jdk 版本要求
Tomcat 7.0 requires Java SE 6 or later. 
Read the RELEASE-NOTES and the RUNNING.txt file in the distribution for more details.
2、 os 檢視 JDK 版本
[root@mysql ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

3. 安裝 apache-tomcat-7.0.78
3.0、 apache-tomcat-7.0.78 的下載網址為:http://tomcat.apache.org/download-70.cgi ,截圖如下:

____________________________________

3.1、然後將下載了的 apache-tomcat-7.0.78.tar.gz 安裝包mv到 /usr/local/tomcat_1/ 資料夾下

[root@mysql ~]# mkdir /usr/local/tomcat_1/
[root@mysql ~]# cp apache-tomcat-7.0.78.tar.gz /usr/local/tomcat_1/
3.2、跳轉到local下面:
[root@mysql ~]# cd /usr/local/tomcat_1/
[root@mysql tomcat_1]# ll apache-tomcat-7.0.78.tar.gz
-rw-r--r-- 1 root root 8968516 Jun 18 09:43 apache-tomcat-7.0.78.tar.gz
3.3、再將 apache-tomcat-7.0.78.tar.gz 解壓
[root@mysql tomcat_1]# tar -zxvf apache-tomcat-7.0.78.tar.gz
3.4、 catalina.sh 放置在 /etc/init.d/ 下為 tomcat 啟動啟動做準備
[root@mysql tomcat_1]# cp -p /usr/local/tomcat_1/apache-tomcat-7.0.78/bin/catalina.sh /etc/init.d/tomcat_1
3.5 編輯 /etc/init.d/tomcat_1
vim /etc/init.d/tomcat_1
在第二行加入以下內容:
# chkconfig: 112 63 37
# description: tomcat server init script
# Source Function Library
. /etc/init.d/functions

JAVA_HOME=/usr/local/jdk1.8.0_131/
CATALINA_HOME=/usr/local/tomcat_1/apache-tomcat-7.0.78
4、 修改許可權及建立目錄
[root@mysql tomcat]# chmod 755 /etc/init.d/tomcat_1
[root@mysql tomcat]# chkconfig --add tomcat_1
[root@mysql tomcat]# chkconfig tomcat_1 on

同理配置 tomcat2 ,注意相應的地方要修改 如:/usr/local/tomcat_1/ 改為 /usr/local/tomcat_2/
__________________________________________________

5、 修改每個tomcat例項中server.xml中的埠

[root@mysql apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_2/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# cat conf/server.xml

<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
.....
<Connector port="8081" protocol="HTTP/1.1"
.....
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
.....
</Host>
</Engine>
</Service>
</Server>

說明:上面是裁剪過後的server.xml,分別修改以上三個埠(Server、HTTP、AJP),這裡我將tomcat_1埠號不變,
tomcat_2的埠都相應的+1 ,比如:Server 由 8005 + 1 =8006,注意 不要和其它例項的埠或系統已經佔用的埠發生衝突。

6、 啟動、關閉tomcat
-- 啟動
[root@mysql tomcat]# service tomcat_1 start
[root@mysql tomcat]# service tomcat_2 start

7、 登入驗證

    

 


三、 nginx-1.9.7 + apache-tomcat-7.0.78 反向代理+應用負載均衡 安裝配置

1、 tomcat_1 配置 webapps/ROOT/index.jsp 修改成如下所示
[root@MySQL apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_1/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# vi webapps/ROOT/index.jsp
[root@mysql apache-tomcat-7.0.78]# cat webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html lang="en">
SessionID:<%=session.getId()%>
</br>
SessionIP:<%=request.getServerName()%>
</br>
<h1>tomcat1</h1>
</html>

說明: 同理配置另外一臺 tomcat_2 伺服器

2、 配置完 tomcat 後,接下來,修改 nginx.conf 配置,如下
[root@mysql03 nginx]# pwd
/usr/local/nginx
[root@mysql03 nginx]# cat conf/nginx.conf
user root root;
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

upstream web_app {
server 10.219.24.21:8080 weight=1 max_fails=2 fail_timeout=30s; 
server 10.219.24.21:8081 weight=1 max_fails=2 fail_timeout=30s; 
}

server {
listen 80;
server_name aa.com;
charset utf8;
location / {
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://web_app; 
proxy_redirect default; 
}
}
}

說明: server段 proxy_pass定義的web_app需要跟upstream 裡面定義的web_app一致,否則server找不到均衡。

3、 啟動 tomcat 與 Nginx 
4、 測試
本機瀏覽器輸入:http://10.219.24.26/ 反覆點選重新整理 發現連結在 tomcat_1 與 tomcat_2 之間輪轉,達到負載均衡。

   

注意:此時 session 並不一致, sessionID每次輪轉都會改變。

四、 centos 6.7 下安裝 redis-3.2.5

前期準備:
1. 作業系統需要安裝 gcc 包 與 TCL 庫, 通過配置本地 yum 源 ,yum -y install gcc 、 yum -y install tcl安裝
2. 下載 redis 安裝包,上傳至 linux 下。 網址: http://download.redis.io/releases/
[root@mysql ~]# ll redis-3.2.5.tar.gz 
-rw-r--r--. 1 root root 1544040 Jun 1 22:57 redis-3.2.5.tar.gz
說明: centos 6 配置本地Yum源,請參考 http://blog.csdn.net/zhang123456456/article/details/56690945
正式安裝
3. 解壓
[root@mysql ~]# tar -xzvf redis-3.2.5.tar.gz
4. 編譯安裝
[root@mysql ~]# cd redis-3.2.5
[root@mysql redis-3.2.5]# make && make install
說明:逐次執行上述命令,這樣 Redis 會安裝在/usr/local/bin/路徑下。
5. 修改配置檔案
在 redis-3.2.5路徑下有一個 redis.conf 檔案,需要拷貝並建立到/etc 路徑下,命令如下
所示:
[root@mysql redis-3.2.5]# mkdir -p /etc/redis
[root@mysql redis-3.2.5]# mv redis.conf /etc/redis/
6. 修改配置檔案
[root@mysql redis-3.2.5]#vim /etc/redis/redis.conf
[root@mysql redis-3.2.5]# cat /etc/redis/redis.conf
daemonize yes 
pidfile /var/run/redis_6379.pid
port 6379
7. 執行/ 停止 Redis
-- 啟動
[root@mysql redis-3.2.5]# redis-server /etc/redis/redis.conf
[root@mysql redis-3.2.5]# ps -ef|grep redis
root 5845 1 0 23:29 ? 00:00:00 redis-server *:6379 
root 5854 2553 0 23:30 pts/1 00:00:00 grep redis
說明:第一條命令表示啟動 redisserver,第二條命令表示檢視 redis 服務是否啟動正常。
-- 關閉
[root@mysql redis-3.2.5]# redis-cli shutdown
[root@mysql redis-3.2.5]# ps -ef|grep redis
root 5861 2553 0 23:31 pts/1 00:00:00 grep redis

五、配置 nginx + tomcat + redis 的 session 一致性

1、修改 redis 配置檔案vi /etc/redis/redis.conf
將bind的127.0.0.1修改為本機地址,否則只能本機訪問了,如下:
[root@redis01 ~]# cat /etc/redis/redis.conf 
bind 10.219.24.23
daemonize yes 
pidfile /var/run/redis_6379.pid
port 6379

2、匯入redislib中三個jar包到 tomcat 的lib中

3、在 tomcat/conf/server.xml 的最下面的中增加 sessionCookieName 配置你想要的Redis中key的字首,如下所示:
[root@mysql apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_1/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# vi conf/server.xml      (在</Server>前新增如下配置,也就是倒數第二行處新增)

<Context docBase="/root/YOUR_WEB_APP" 
path="" 
reloadable="true" 
sessionCookieName="YOURJSessionID" />

4、 在 tomcat的conf目錄下,編輯context.xml , 在末尾</Context>前新增如下配置。如果你是用Redis單點,則可以仿照如下配置:
[root@mysql apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_1/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# vi conf/context.xml 
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="10.219.24.23"           #redis伺服器ip
port="6379" 
database="1" 
maxInactiveInterval="60" />

5、 啟動 nginx 、 tomcat 、redis 
6、 測試
在瀏覽器中輸入 : http://10.219.24.26/ 反覆點選重新整理 發現連結在 tomcat_1 與 tomcat_2 之間輪轉,
達到負載均衡並保持 session一致性,sessionID保持不變。

        >成功!

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2140919/,如需轉載,請註明出處,否則將追究法律責任。

相關文章