1. 程式人生 > >Nginx反向代理Tomcat實現現負載均衡(高可用)以及利用redis+Session同步會話共享配置詳解

Nginx反向代理Tomcat實現現負載均衡(高可用)以及利用redis+Session同步會話共享配置詳解

簡介:

一、Redis介紹

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sortedset --有序集合)和hash(雜湊型別)。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現master-slave(主從)同步。

Redis是一個高效能的key-value資料庫。redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客戶端,使用很方便。

如果簡單地比較Redis與Memcached的區別,基本上有以下3點:

1、Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。
2、Redis支援資料的備份,即master-slave模式的資料備份。
3、Redis支援資料的持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用。

在Redis中,並不是所有的資料都一直儲存在記憶體中的。這是和Memcached相比一個最大的區別。Redis只會快取所有的key的資訊,如果Redis發現記憶體的使用量超過了某一個閥值,將觸發swap的操作,Redis根據“swappability =age*log(size_in_memory)”計算出哪些key對應的value需要swap到磁碟。然後再將這些key對應的value持久化到磁碟中,同時在記憶體中清除。這種特性使得Redis可以保持超過其機器本身記憶體大小的資料。當然,機器本身的記憶體必須要能夠保持所有的key,因為這些資料是不會進行swap操作的。

當從Redis中讀取資料的時候,如果讀取的key對應的value不在記憶體中,那麼Redis就需要從swap檔案中載入相應資料,然後再返回給請求方。

memcached和redis的比較

1、網路IO模型


Memcached是多執行緒,非阻塞IO複用的網路模型,分為監聽主執行緒和worker子執行緒,監聽執行緒監聽網路連線,接受請求後,將連線描述字pipe 傳遞給worker執行緒,進行讀寫IO, 網路層使用libevent封裝的事件庫,多執行緒模型可以發揮多核作用。

Redis使用單執行緒的IO複用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現了epoll、kqueue和select,對於單純只有IO操作來說,單執行緒可以將速度優勢發揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對於這些操作,單執行緒模型實際會嚴重影響整體吞吐量,

CPU計算過程中,整個IO排程都是被阻塞住的。

2、記憶體管理方面

Memcached使用預分配的記憶體池的方式,使用slab和大小不同的chunk來管理記憶體,value根據大小選擇合適的chunk儲存。Redis使用現場申請記憶體的方式來儲存資料。

3、儲存方式及其它方面

Memcached基本只支援簡單的key-value儲存,不支援持久化和複製等功能,Redis除key/value之外,還支援list,set,sortedset,hash等眾多資料結構

二、如何保持session會話

簡介:

目前,為了使web能適應大規模的訪問,需要實現應用的叢集部署。叢集最有效的方案就是負載均衡,而實現負載均衡使用者每一個請求都有可能被分配到不固定的伺服器上,這樣我們首先要解決session的統一來保證無論使用者的請求被轉發到哪個伺服器上都能保證使用者的正常使用,即需要實現session的共享機制。

在集群系統下實現session統一的有如下幾種方案:

1、請求精確定位:sessionsticky,例如基於訪問ip的hash策略,即當前使用者的請求都集中定位到一臺伺服器中,這樣單臺伺服器儲存了使用者的session登入資訊,如果宕機,則等同於單點部署,會丟失,會話不復制。

2、session複製共享:sessionreplication,如tomcat自帶session共享,主要是指叢集環境下,多臺應用伺服器之間同步session,使session保持一致,對外透明。 如果其中一臺伺服器發生故障,根據負載均衡的原理,排程器會遍歷尋找可用節點,分發請求,由於session已同步,故能保證使用者的session資訊不會丟失,會話複製,。

此方案的不足之處:

必須在同一種中介軟體之間完成(如:tomcat-tomcat之間).

session複製帶來的效能損失會快速增加.特別是當session中儲存了較大的物件,而且物件變化較快時, 效能下降更加顯著,會消耗系統性能。這種特性使得web應用的水平擴充套件受到了限制。

Session內容通過廣播同步給成員,會造成網路流量瓶頸,即便是內網瓶頸。在大併發下表現並不好

3、基於cache DB快取的session共享,基於memcache/redis快取的 session 共享即使用cacheDB存取session資訊,應用伺服器接受新請求將session資訊儲存在cache DB中,當應用伺服器發生故障時,排程器會遍歷尋找可用節點,分發請求,當應用伺服器發現session不在本機記憶體時,則去cache DB中查詢,如果找到則複製到本機,這樣實現session共享和高可用。

三、nginx+tomcat+redis實現負載均衡、session共享

實驗環境:

主機

作業系統

IP地址

Nginx

Centos7.2

192.168.197.170

Tomcat-1

192.168.197.172

Tomcat-2

192.168.197.173

Mysql

192.168.197.175

Redis

192.168.197.174

實驗拓撲:


在這個圖中,nginx做為反向代理,實現靜動分離,將客戶動態請求根據權重隨機分配給兩臺tomcat伺服器,redis做為兩臺tomcat的共享session資料伺服器,mysql做為兩臺tomcat的後端資料庫。

本人宣告:由於Nginx服務在這之前講解過安裝,所以這裡不再一一配置,如果想看Nginx具體的安裝點選下面的連結即可:

使用Nginx作為Tomcat的負載平衡器,Tomcat的會話Session資料儲存在Redis,能夠實現零宕機的7x24效果。因為將會話儲存在Redis中,因此Nginx就不必配置成stick貼上某個Tomcat方式,這樣才能真正實現後臺多個Tomcat負載平衡。

1.配置nginx反向代理:反向代理+負載均衡+健康探測,nginx.conf檔案內容:

[[email protected] ~]# cat /usr/local/nginx1.10/conf/nginx.conf
user  wwwwww;
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
worker_rlimit_nofile 10240;
pid        logs/nginx.pid;
events {
useepoll;
worker_connections  4096;
}
http {
includemime.types;
default_type  application/octet-stream;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;
server_tokens off;
sendfile        on;
tcp_nopush     on;
    #keepalive_timeout  0;
keepalive_timeout  65;
    #Compression Settings
gzip on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 16 8k;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
    #end gzip
    # http_proxy Settings
client_max_body_size   10m;
client_body_buffer_size   128k;
proxy_connect_timeout   75;
proxy_send_timeout   75;
proxy_read_timeout   75;
proxy_buffer_size   4k;
proxy_buffers   4 32k;
proxy_busy_buffers_size   64k;
proxy_temp_file_write_size  64k;
    #load balance Settings
upstreambackend_tomcat {
server 192.168.197.172:8080 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.197.173:8080 weight=1 max_fails=2 fail_timeout=10s;
    }
    #virtual host Settings
server {
listen       80;
server_name  www.benet.com;
charset utf-8;
location / {
root html;
index  index.jsp index.html index.htm;
        }
location ~* \.(jsp|do)$ {
proxy_pass  http://backend_tomcat;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.31.0/24;
deny all;
        }
    }
}





(1.)重啟nginx服務,使修改生效

[[email protected] ~]# service nginx reload 
注意:關閉防火牆或放行80埠:
[[email protected] ~]# firewall-cmd --permanent --add-port=80/tcp
success
[[email protected] ~]# firewall-cmd --reload 
success
2.安裝部署配置tomcat應用程式伺服器

在tomcat-1和tomcat-2節點上安裝JDK

在安裝tomcat之前必須先安裝JDK,JDK的全稱是java  development kit,是sun公司免費提供的java語言的軟體開發工具包,其中包含java虛擬機器(JVM),編寫好的java源程式經過編譯可形成java位元組碼,只要安裝了JDK,就可以利用JVM解釋這些位元組碼檔案,從而保證了java的跨平臺性。

  安裝JDK,配置java環境:

(1.) 將jdk-7u65-linux-x64.gz解壓

[[email protected] ~]# tar zxf jdk-7u65-linux-x64.gz 
(2.)將解壓的jdk1.7.0_65目錄移致動到/usr/local/下並重命名為java
[[email protected] ~]# mv jdk1.7.0_65/ /usr/local/java
(3.)在/etc/profile檔案中新增內容如下:

export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH

(4.)通過source命令執行profile檔案,使其生效。

[[email protected] ~]# source /etc/profile

按照相同方法在tomcat-2也安裝JDK


(5.)分別在在tomcat-1和tomcat-2節點執行java  -version命令檢視java版本是否和之前安裝的一致。

[[email protected] ~]# java -version

至此java環境已經配置完成!!!

在tomcat-1和tomcat-2節點安裝配置tomcat

(1.)解壓apache-tomcat-7.0.54.tar.gz包

[[email protected] ~]# tar zxf apache-tomcat-7.0.54.tar.gz 
(2.)將解壓生成的資料夾移動到/usr/local/下,並改名為tomcat7
[[email protected] ~]# mv apache-tomcat-7.0.54 /usr/local/tomcat7
(3.)配置tomcat環境變數

/etc/profile檔案內容如下:

export JAVA_HOME=/usr/local/java
export CATALINA_HOME=/usr/local/tomcat7
export PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH

(4.)通過source命令執行profile檔案,使其生效。

(5.)檢視tomcat的版本資訊

[[email protected] ~]# catalina.sh version

(6.)啟動tomcat

[[email protected] ~]# /usr/local/tomcat7/bin/startup.sh 

(7.)Tomcat預設執行在8080埠,執行netstat命令檢視8080埠監聽的資訊

[[email protected] ~]# netstat -anpt | grep java

(8.)防火牆規則配置:

[[email protected] ~]# firewall-cmd  --permanent --add-port=8080/tcp
success
[[email protected] ~]# firewall-cmd --reload 
success
[[email protected] ~]# 

按照相同方法在tomcat-2也安裝配置

(9、)開啟瀏覽器分別對tomcat-1和tomcat-2訪問測試

如下圖所示即可安裝成功!!!


注意:訪問Tomcat時候,要加上埠訪問才行!!!

如果想關閉tomcat則執行/usr/local/tomcat7/bin/shutdown.sh命令

/usr/local/tomcat7/bin/shutdown.sh

(10、)好了,大家可以看到Tomcat訪問成功。說明我們的tomcat安裝完成,下面我們來修改配置檔案
[[email protected] ~]# vim /usr/local/tomcat7/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"/>

設定預設虛擬主機,並增加jvmRoute


修改預設虛擬主機,並將網站檔案路徑指向/web/webapp1,在host段增加context段


(11、)增加文件目錄與測試檔案

[[email protected] ~]# mkdir -p /web/webapp1
[[email protected] ~]# cd /web/webapp1/
[[email protected] webapp1]# vim index.jsp

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>

(12.)停止tomcat執行,檢查配置檔案。

[[email protected] ~]# shutdown.sh 
[[email protected] ~]# netstat -anpt | grep java
[[email protected] ~]#catalina.sh configtest

啟動Tomcat服務:


檢視Tomcat埠:


Tomcat-2節點與tomcat-1節點配置基本類似,只是jvmRoute不同,另外為了區分由哪個節點提供訪問,測試頁標題也不同(生產環境兩個tomcat伺服器提供的網頁內容是相同的)。其他的配置都相同。

設定預設虛擬主機,並增加jvmRoute


修改預設虛擬主機,並將網站檔案路徑指向/web/webapp1,在host段增加context段


(13、)用瀏覽器訪問nginx主機,驗證負載均衡

第一次訪問的結果:


第二次訪問的結果:


注意:驗證健康檢查(高可用)的方法可以關掉一臺tomcat主機,用客戶端瀏覽器測試訪問,即使關掉一臺還有另一臺提供服務。

通過上圖說明Nginx成功實現了反向代理以及Tomcat成功實現了負載均衡和高可用!!!

從上面的結果能看出兩次訪問,nginx把訪問請求分別分發給了後端的tomcat-1和tomcat-2,客戶端的訪問請求實現了負載均衡和健康檢查(高可用),但sessionid不一樣。

所以,到這裡我們準備工作就全部完成了,下面我們來配置tomcat通過redis實現會話保持。

3.安裝配置Redis

可以下載redis原始碼,並進行相關操作,如下:

(1.)解壓安裝redis
[[email protected] ~]# tar zxf redis-3.2.3.tar.gz 
[[email protected] ~]# cd redis-3.2.3/
[[email protected] redis-3.2.3]# make && make install 

通過上圖,我們可以很容易的看出,redis安到:

/usr/local,/usr/local/bin,/usr/local/share,/usr/local/include,/usr/local/lib,/usr/local/share/man目錄下。

(2.)然後再切換到utils目錄下,執行redis初始化指令碼install_server.sh,如下:
[[email protected] redis-3.2.3]# cd utils/
[[email protected] utils]# ./install_server.sh

通過上面的安裝過程,我們可以看出redis初始化後redis配置檔案為/etc/redis/6379.conf,日誌檔案為/var/log/redis_6379.log,資料檔案dump.rdb存放到/var/lib/redis/6379目錄下,啟動指令碼為/etc/init.d/redis_6379

(3.)現在我們要使用systemd,所以在 /etc/systems/system 下建立一個單位檔名字為 redis_6379.service。

[[email protected] 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是後臺執行的形式

如下圖所示:

(4.)啟動redis

[[email protected] utils]#  systemctl daemon-reload 
[[email protected] utils]# systemctl enable redis_6379.service
[[email protected] utils]# systemctl start redis_6379.service 
[[email protected] utils]# systemctl status redis_6379.service 

(5.)檢視監聽埠:


從顯示結果可以看到redis預設監聽的是127.0.0.1的6379埠

注意:關閉防火牆或者進行規則設定
[[email protected] utils]# firewall-cmd --permanent --add-port=6379/tcp
success
[[email protected] utils]# firewall-cmd --reload
success
[[email protected] utils]# 
(6.)現在來檢視redis版本使用redis-cli–version命令,如下

[[email protected] utils]# redis-cli --version
redis-cli 3.2.3
[[email protected] utils]# 

通過顯示結果,我們可以看到redis版本是3.2.3。

到此原始碼方式安裝redis就介紹完畢。!!!


redis安裝完畢之後,我們再來配置redis

(1.)設定redis監聽的地址,新增監聽redis主機的ip,考慮到安全性,我們需要啟用redis的密碼驗證功能requirepass引數

最終redis配置檔案如下:

[[email protected] ~]# grep -Ev '^#|^$' /etc/redis/6379.conf 
bind 127.0.0.1 192.168.31.106
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilenamedump.rdb
dir /var/lib/redis/6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass [email protected]
appendonly no
appendfilename "appendonly.aof"
appendfsynceverysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limitpubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync 

(2.)修改Redis主配置檔案:

設定redis監聽的地址,新增監聽redis主機的ip

考慮到安全性,我們需要啟用redis的密碼驗證功能requirepass引數


(3.)重新啟動redis服務


(4.)redis配置檔案配置完畢後,我們用redis進行簡單的操作。如下:

[[email protected] ~]#  redis-cli -h 192.168.197.174 -p 6379 -a [email protected]
192.168.197.174:6379> keys *
(empty list or set)
192.168.197.174:6379> set name lisi
OK
192.168.197.174:6379> get name
"lisi"
192.168.197.174:6379> 


說明:

關於redis-cli -h192.168.31.106 -p 6379 -a [email protected]的引數解釋

這條命令是說要連線redis伺服器,IP是192.168.31.106,埠是6379,密碼是[email protected]

keys *是檢視redis所有的鍵值對。

set namelisi新增一個鍵值name,內容為lisi。

get name檢視name這個鍵值的內容。

redis的命令使用暫時我們就介紹這麼多

4.配置tomcat、session 、redis同步

(1.)下載tomcat-redis-session-manager相應的jar包,主要有三個:

tomcat-redis-session-manage-tomcat7.jar
jedis-2.5.2.jar
commons-pool2-2.2.jar
(2.)下載完成後拷貝到$TOMCAT_HOME/lib中

[[email protected] ~]# cp tomcat-redis-session-manage-tomcat7.jar jedis-2.5.2.jar commons-pool2-2.2.jar /usr/local/tomcat7/lib/


修改tomcat的context.xml:

例如:

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at
      http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
    -->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.197.172"
password="[email protected]"
port="6379"
database="0"
maxInactiveInterval="60" />
</Context>
vim /usr/local/tomcat7/conf/context.xml 

說明:

maxInactiveInterval="60"session的失效時間

(3.)重啟tomcat服務

[[email protected] ~]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
[[email protected] ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Tomcat started.

tomcat-2執行和tomcat-1相同的操作


重新整理頁面:


可以看出,分別訪問了不同的tomcat,但是得到的session卻是相同的,說明達到了(Session同步會話共享)叢集的目的。

注意:從Tomcat6開始預設開啟了Session持久化設定,測試時可以關閉本地Session持久化,其實也很簡單,在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="" />

(5.)重啟tomcat服務

[[email protected] ~]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
[[email protected] ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Tomcat started.
(6.)檢視Redis服務
[[email protected] ~]# redis-cli -h 192.168.197.174 -p 6379 -a [email protected]

5.配置tomcat連線資料庫

192.168.197.175作為mysql資料庫伺服器


[[email protected] ~]# mysql -uroot -p
Enter password: 
(1.)授權Tomcat使用者連線mysql資料庫
mysql> grant all on *.* to [email protected]'192.168.31.%' identified by 'javapasswd';
Query OK, 0 rows affected, 1 warning (0.32 sec)

mysql> 
(2.)建立資料庫、建立表、插入一些資料

注意:關閉防火牆或者放行資料庫埠

[[email protected] ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[[email protected] ~]# firewall-cmd --reload 
success

配置tomcat伺服器連線mysql資料庫

(1.)下載mysql-connector-java-5.1.22-bin.jar並複製到$CATALINA_HOME/lib目錄下

[[email protected] ~]#  cp mysql-connector-java-5.1.22-bin.jar /usr/local/tomcat7/lib/

(2.)修改Tomcat的context.xml

[[email protected] ~]# vi /usr/local/tomcat7/conf/context.xml 

在<Context>中新增如下內容:

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javapass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.197.175:3306/javatest"/>

儲存修改並退出!!

(3.)web.xml configuration(配置)

[[email protected] ~]# mkdir /web/webapp1/WEB-INF 
[[email protected] ~]# 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>

(4.)儲存修改並退出,重啟tomcat服務

[[email protected] ~]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
[[email protected] ~]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat7
Using CATALINA_HOME:   /usr/local/tomcat7
Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Tomcat started.

tomcat-2進行和tomcat-1相同的操用

測試節點Nowcreate a simple test.jsp page,內容如下:

在Tomcat-2上建立一個test.jsp測試檔案,測試資料庫的連線!!!

[[email protected] ~]# vi /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://192.168.197.175:3306/javatest";
String username = "javauser"; 
String password = "javapasswd"; 
Class.forName(driverClass); 
Connection conn=DriverManager.getConnection(url, username, password); 
Statement stmt=conn.createStatement();
ResultSetrs = stmt.executeQuery("select * from testdata"); 
while(rs.next()){
out.println("<br>foo:"+rs.getString(2)+"bar:"+rs.getString(3));
}
rs.close();
stmt.close();
conn.close();
%>
</body></html>


通過上圖說明資料庫連線成功!!!

注意:

以上配置可以參考tomcat docs




到這裡有關Nginx反向代理Tomcat實現現負載均衡(高可用)以及利用redis+Session同步會話共享配置就演示完畢了!

@@!!!

希望對你有所幫助!!!!再見!!!再見再見再見




相關推薦

Nginx反向代理Tomcat實現負載均衡可用以及利用redis+Session同步會話共享配置

簡介: 一、Redis介紹 redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sortedset --有序集合)和hash(雜湊型別)。與m

Keepalived+Nginx實現前端負載均衡可用

keepalived+nginx實現前端負載均衡的高可用一、實驗前準備時間同步、關閉iptables+selinux、各主機能相互解析在192.168.0.101和192.168.0.102上安裝Keepalived和Nginx,通過Nginx負載均衡至192.168.0.103及192.168.0.104上

packmaker和haproxy實現負載均衡可用叢集

pacemaker實現高可用叢集: 兩個節點的部署完全相同 server3—–>節點1—->haproxy—->pacemaker/corosync(心跳) server4—–>節點2—->haproxy—->pacem

nginx反向代理tomacat+keepalived實現動靜分離、負載均衡可用

時間 超時 error css 權限命令 上傳 轉發 onf ioc 本文的動靜分離主要是通過nginx+tomcat來實現,其中nginx處理圖片、html、JS、CSS等靜態文件,tomcat處理jsp、servlet等動態請求 服務器名稱

2、Tomcat叢集,並用Nginx實現負載均衡win環境

1、Tomcat的配置 1、系統環境變數配置: 首先要實現Tomcat的叢集就得擁有多個tomcat,所以我在本地電腦下載了兩個Tomcat,我這裡使用的是Tomcat7,當然,配置與Tomcat的版本沒多大關係~ 下載之後我們先來配置好環境變數: 在我們的系統變數中增加上

nginx配置反向代理緩存、負載均衡

url 代理服務 內容 cookie out reverse 默認值 只需要 gin 一、nginx基本配置nginx開啟文件目錄瀏覽功能(web上顯示目錄) 1location / { 2 root /data/www/file

nginx 反向代理 tomcat (https、虛擬主機)

nginx背景: 有一個JSP開發的網站,需要放在tomcat裏面運行,考慮到tomcat處理http請求不是那麽強,計劃前端添加一個nginx作為反向代理,並且提供https服務,並且通過虛擬主機開代理到指定域名的服務。 我們的域名是www.wzlinux.com。1、首先是安裝nginx和to

nginx反向代理實現動靜分離

nginx反向代理實現動靜分離nginx反向代理,實現動靜分離nginx反向代理 反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的連接請求,然後將請求轉發給內部網絡上的服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現為一個

nginx反向代理tomcat

text vhost image index.jsp reverse level gte lamt 反代 回顧:tomcat配置和應用 server.xml, webapp的組織形式, 應用程序的部署,

解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡可用

解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用 IP 伺服器 服務 192.168.1.10 lb-node1 Nginx、kee

nginx反向代理tomcat一段時間後出現的ERR_CONTENT_LENGTH_MISMATCH異常

使用nginx代理tomcat上的web專案。專案上線了一段時候後,訪問專案出現了css檔案或js檔案的ERR_CONTENT_LENGTH_MISMATCH異常,而不能載入這些檔案。 查詢網上給出的解答,一般是說在nginx的proxy_temp下的快取檔案的所有者不是nginx啟動者而導

Nginx】使用nginx反向代理IIS實現80埠的解放

下載版本:   我使用了穩定版本。 下載完成之後進行目錄解壓,解壓之後大概就是這個樣子: 網上很多人寫這些了想了解概念的百度一下一搜一大把,所以就不嘮叨了。只是記錄一片windows中的使用,也是親身體驗,配置因為window可能有點坑所以記錄以便查閱很分享。 瞭解nginx的功能推薦:ht

使用nginx實現負載均衡Docker版本

現在服務都要處理高併發的問題,如果將服務部署在一臺伺服器上,當很多人同時訪問可能會使伺服器記憶體過高而導致系統崩潰,所以就需要使用負載均衡來減輕伺服器的負擔。通過修改nginx配置可以實現負載均衡。 nginx文件連結:http://www.nginx.cn/doc/ 舉個例子:

SaltStack自動部署nginx、apache、實現haproxy負載均衡叢集

一、Saltstack 自動化運維工具 什麼是saltstack • Saltstack是基於python開發的一套C/S架構配置管理工具 • 使用SSL證書籤方的方式進行認證管理 • 底層使用ZeroMQ訊息佇列pub/sub方式通訊 – 號稱世界上最快的訊息

2、Tomcat叢集實戰,並用Ngnix實現負載均衡win環境

1、Tomcat的配置 1、系統環境變數配置: 首先要實現Tomcat的叢集就得擁有多個tomcat,所以我在本地電腦下載了兩個Tomcat,我這裡使用的是Tomcat7,當然,配置與Tomcat的版本沒多大關係~ 下載之後我們先來配置好環境變數: 在我們

nginx反向代理實現位址列域名不變,session不失效

首先找到nginx.conf部分 server { listen 80; server_name www.taekwondo-china.com; location / { #所有以/開頭的地址,實際上就是

nginx反向代理tomcat nginx配置反向代理示例

代理服務可簡單的分為正向代理和反向代理: 1. 正向代理: 用於代理內部網路對 Internet 的連線請求(如 VPN/NAT),客戶端指定代理伺服器,並將本來要直接傳送給目標 Web 伺服器的 HTTP 請求先發送到代理伺服器上, 然後由代理服務器去訪問 Web 伺服器, 並將 Web 伺服器的 Res

淘淘商城29_nginx的使用02_反向代理負載均衡可用

一、Ip區分虛擬主機(可以用EditPlus這個編輯器) 具體看視訊:百度網盤 連結:https://pan.baidu.com/s/1Xv3nOLos9Qh7B9INLvl8Mw  提取碼:zjnt    1. 檢視內容 [[email

windows下配置nginx反向代理tomcat

Nginx下載官方地址:http://nginx.org/en/download.html 下載之後解壓後的目錄結構是這樣的 常用的命令: nginx -v 檢視nginx版本 start

saltstack部署實現nginx和apache的負載均衡可用批量實現

一 saltstack的介紹 SaltStack是一個伺服器基礎架構集中化管理平臺,具備配置管理、遠端執行、監控等功能,基於Python語言實現,結合輕量級訊息佇列(ZeroMQ)與Python第三方模組(Pyzmq、PyCrypto、Pyjinjia2、python-m