memcache緩存、session共享和會話保持

一.memcache的使用

1.mencache的簡介
memcache是一套分佈式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問數據庫的網站訪問速度提升效果十分顯著 。這是一套開放源代碼軟件,以BSD license授權發佈。

Memcache是一個高性能的分佈式的內存對象緩存系統,通過在內存裏維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度。

2.安裝軟件

因爲接下來要用到php命令,所以我們將命令加入到環境變量中
vim ~/.bash_profile				##修改環境變量文件
source ~/.bash_profile			##使修改生效

在這裏插入圖片描述

在這裏插入圖片描述
2.進入memcache-2.2.5目錄下,會發現沒有configuer文件,說明不具備編譯環境
創建一個預編譯環境並進行編譯彙編memcache源碼包

[root@server1 memcache-2.2.5]# phpize
[root@server1 memcache-2.2.5]# ls

在這裏插入圖片描述3.編譯、安裝
在這裏插入圖片描述
在這裏插入圖片描述
4.修改php配置文件,添加memcache模塊並重啓php服務

vim /usr/local/lnmp/php/etc/php.ini
/etc/init.d/php-ftm reload

在這裏插入圖片描述
在這裏插入圖片描述
5.查看php相關的mysql和memcache模塊有哪些
在這裏插入圖片描述6.安裝memcached並更改配置文件中的內容,使只可以讓本機訪問,然後重啓服務

[root@server1 ~]# yum install memcached -y
[root@server1 ~]# vim /etc/sysconfig/memcached 
[root@server1 ~]# /etc/init.d/memcached start
[root@server1 ~]# netstat -tnlp

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
7.再次更改memcached的配置文件中的內容,使所有主機都可以進行訪問
在這裏插入圖片描述在這裏插入圖片描述
8.安裝telnet
在這裏插入圖片描述
9.在telnet中輸入內容(簡單使用命令)

stats	#狀態爲0的表示沒有被用
set name 0 0 6	#設置name的編號爲0,沒有緩存時間,且最長最多6個字符
westos	#輸入westos
westosssss	#輸入westosssss
get name	#得到name
delete name	#刪除name	
get name	#得到name
quit	#退出

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
9.在telnet中再次輸入內容(測試其緩存時間是否有效)
在這裏插入圖片描述
10.拷貝測試頁,並修改配置文件

[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# ls
[root@server1 memcache-2.2.5]# cp example.php memcache.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# ls
[root@server1 html]# vim memcache.php 

在這裏插入圖片描述
在這裏插入圖片描述
測試:
在這裏插入圖片描述在這裏插入圖片描述

[root@server1 ~]# yum search httpd-tools
[root@server1 ~]# yum install httpd-tools.x86_64 -y

在這裏插入圖片描述
測試2.壓力測試:當訪問index.php頁面(不用緩存)5000次(10次併發,5000次請求)需要的時間以及別的參數
在這裏插入圖片描述在這裏插入圖片描述

測試3.壓力測試:當訪問example.php頁面(使用緩存)5000次(10次併發,5000次請求)需要的時間以及別的參數,會發現不僅速度提高了,且錯誤率也大大降低了
在這裏插入圖片描述
在這裏插入圖片描述

二.OpenResty的應用

概念解釋:

  1. OPenResty是一個基於Nginx與Lua的高性能Web平臺,用於方便的搭建能夠處理超高併發,擴展性極高的動態Web應用,Web服務和動態網關。通過匯聚各種設計精良的Nginx模塊,從而將Nginx有效的變成一個強大的通用Web應用平臺。這樣,Web開發人員和系統工程師可以使用Lua腳本語言調用Nginx支持的各種C以及Lua模塊,快速構造出足以勝任10k乃至1000k以上的單機併發連接的高性能Web應用系統
    2.其目標是讓Web服務直接跑在Nginx服務內部,充分利用Nginx的非阻塞I/O模型,不僅僅對HTTP客戶端請求,甚至於對遠程後端諸如MYSQL,PostgreSQL,Memcached以及Redis等都進行一致的高性能響應

1.關閉上個實驗的nginx

nginx -s stop

在這裏插入圖片描述
2.解壓openresty,編譯、安裝

[root@server1 ~]# cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ls
#默認裝在/usr/local下,不需要額外的參數
[root@server1 openresty-1.13.6.1]# ./configure 
#編譯的可能會比較慢,因爲有很多第三方模塊,編譯和安裝和之前的不一樣,可以在預編譯環境創建好之後根據內容查看
[root@server1 openresty-1.13.6.1]# gmake && gmake install	

在這裏插入圖片描述在這裏插入圖片描述
3.將之前的測試頁面以及監控頁面複製到openresty的指定目錄下
在這裏插入圖片描述
3.修改openresty的配置文件,並檢測配置文件是否有語法錯誤
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

分析:
1.upstream屬於handler,只是它不產生自己的內容,而是通過請求後端服務器得到的內容,所以才稱爲upstream(上游),請求並取得響應內容的整個過程已經被封裝到nginx內部,所以upstream模塊只需要開發若該回調函數,完成構造請求和解析響應等具體的工作,nginx將memcache緩存前移,客戶端請求到來,先查看nginx緩存
2.所有請求都通過請求這個location來操作 memcache,memc-nginx-module存取memcache是基於http method語義的,
3.使用http的GET方法表示get、PUT方法表示set、這裏我們將/memc設爲internal表示只接受內部訪問
4.不接收外部http請求,這是爲了安全考慮,當然如果需要通過http協議開放外部訪問,可以去掉internal然後使用deny和allow指令控制權限。比較重要的是memckey這個變量,它表示以什麼作爲key,這裏我們直接使用Nginx內置的query_string來作爲key,memcexptime表示緩存失效時間,以秒記。5.這裏統一設爲300(5分鐘),在實際應用中可以根據具體情況爲不同的內容設置不同的過期時間。6.爲“ .phpmemce​xptime表示緩存失效時間,以秒記。5.這裏統一設爲300(5分鐘),在實際應用中可以根據具體情況爲不同的內容設置不同的過期時間。6.爲“ .php”這個location配置了緩存,這表示所有以“.php”結尾的請求都會結果被緩存,當然這裏只是示例需要,實際中一般不會這麼配,而是爲特定需要緩存的location配置緩存。

4.查看是否開啓
在這裏插入圖片描述
在這裏插入圖片描述
測試1:瀏覽器訪問172.25.16.1
在這裏插入圖片描述
測試2:壓力測試。發現在使用operesty後訪問速度大大加快,而且錯誤未0.

ab -c 10 -n 5000 http://172.25.16.1/index.php

在這裏插入圖片描述
在這裏插入圖片描述

三.tomcat的安裝和使用

1.tomcat的介紹

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對於一個初學者來說,可以這樣認爲,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作爲一個與Apache 獨立的進程單獨運行的。

2.獲取tomcat,並安裝

軟件包的獲取可以在官網tomcat.apache.org上下載,需要注意的是他的運行需要安裝jdk,java的編譯環境,可以在rpms等官網上
下載,需要注意的是版本的對應,本機使用的版本爲jdk-7u79-linux-x64.tar.gz和apache-tomcat-7.0.37.tar.gz
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/		##-C解壓到指定目錄
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/		
cd /usr/local/							
ln -s apache-tomcat-7.0.37 tomcat						##爲了方便我們的操作我們給tomcat的解壓目錄建立一個軟鏈接

在這裏插入圖片描述
2.配置java的環境變量並使其生效

vim /etc/profile
source /etc/profile

在這裏插入圖片描述
在這裏插入圖片描述3.配置文件的修改

cd /usr/local/tomcat/webapps/ROOT			##webapps是默認發佈目錄,ROOT是本機的默認發佈目錄

vim /usr/local/lnmp/openresty/nginx/conf/nginx.conf			##修改openresty配置文件
/usr/local/lnmp/openresty/nginx/sbin/nginx -s reload		##重新加載服務

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
4.打開tomcat
在這裏插入圖片描述

5.編寫測試文件test.jsp
在這裏插入圖片描述
測試:
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

4.在tomcat中實現Session共享

1.再配置一臺虛擬機來交叉存儲,啓用server2

[root@server1 local]# scp -r ./apache-tomcat-7.0.37/ [email protected]:/usr/local/ ##把配置好的tomcat發給server2
[root@server1 local]# scp  -r jdk1.7.0_79/ [email protected]:/usr/local/		##把配置好的jdk環境發給server2

server2的配置:
vim /etc/profile			##跟server1一樣配置環境變量
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile			##使配置生效
java -version				##查看java版本
ln -s /usr/local/apache-tomcat-7.0.37 /usr/local/tomcat			##給tomcat目錄創建一個軟鏈接
/usr/local/tomcat/bin/startup.sh			##啓動服務,但是一般不會報錯
netstat -tnlp | grep java					##先查看端口是否被服務啓用
vim /usr/local/tomcat/logs/catalina.out		##服務還有問題就查看這個日誌,裏面有詳細的服務運行信息,所以一般要限制這個
										##日誌的大小,不然它會一隻佔用越來越大的空間,此處我們沒有那麼多操作所以不限制

在這裏插入圖片描述在這裏插入圖片描述

2.配置一個反向代理

獲取一個java寫的動態會話窗口test.jsp,
scp /usr/local/tomcat/webapps/ROOT/test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT/	##發給server2
/usr/local/tomcat/bin/shutdown.sh		##沒有重啓命令,只能先關閉再打開服務,兩邊都重啓
/usr/local/tomcat/bin/startup.sh

server1:  vim /usr/local/lnmp/openresty/nginx/conf/nginx.conf  	##做一個反向代理來切換會話窗口
/usr/local/lnmp/openresty/nginx/sbin/nginx -s reload			##重啓服務

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
測試:

訪問我們java編寫的動態窗口會話頁面
可以保存信息,但是再次填寫後ip輪詢,原來的信息消失

在這裏插入圖片描述
在這裏插入圖片描述

四、會話保持的實現(sticky)

因爲現在最新版只有付費的nginxplus裏面纔有這個組件,所以我們選取老版本的nginx來實現。
Sticky是nginx的一個模塊,它是基於cookie的一種nginx的負載均衡解決方案,通過分發和識別cookie,來使同一個客戶端的請求落在同一臺服務器上,默認標識名爲route
1.客戶端首次發起訪問請求,nginx接收後,發現請求頭沒有cookie,則以輪詢方式將請求分發給後端服務器。
2.後端服務器處理完請求,將響應數據返回給nginx。
3.此時nginx生成帶route的cookie,返回給客戶端。route的值與後端服務器對應,可能是明文,也可能是md5、sha1等Hash值
4.客戶端接收請求,並保存帶route的cookie。
5.當客戶端下一次發送請求時,會帶上route,nginx根據接收到的cookie中的route值,轉發給對應的後端服務器。

本機使用的是nginx-sticky-module-ng.tar.gz和nginx-1.10.1.tar.gz
tar zxf nginx-1.10.1.tar.gz				##解壓安裝包
tar zxf nginx-sticky-module-ng.tar.gz
/usr/local/lnmp/nginx/sbin/nginx -V		##查看原來安裝的nginx的安裝信息
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module /
--with-threads --with-file-aio --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng
##添加上sticky模塊,生成makefile
make && make install					##編譯和安裝

cd /usr/local/lnmp/nginx/				##進入安裝後的目錄
./sbin/nginx -V							##確認版本信息和添加模塊
cp /usr/local/lnmp/openresty/nginx/conf/nginx.conf ./conf/nginx.conf		##把寫好的配置文件複製過來
/usr/local/lnmp/openresty/nginx/sbin/nginx -s stop							##停止openresty

vim /usr/local/lnmp/nginx/conf/nginx.conf		##修改配置文件
/usr/local/lnmp/nginx/sbin/nginx				##啓動服務

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
測試:在這裏插入圖片描述

在這裏插入圖片描述

問題:若server1的tomcat出現問題,server2還是不能保存信息

解決方法:實現session共享存儲,讓server1出問題時,server2仍可以訪問到信息

在server2上安裝memcache
yum install memcached -y				##安裝軟件愛你

在server1和server2上的操作
獲取一個函數庫,其中的jar文件全部拷貝到/usr/local/tomcat/lib下,
rm -fr memcached-session-manager-tc6-1.6.3.jar			##刪除這個jar
##可以在網上找到

在這裏插入圖片描述

vim /usr/local/tomcat/conf/context.conf		##添加策略(server1和server都要添加)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.21.1:11211,n2:172.25.21.2:11211"
failoverNodes="n1" 
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

/etc/init.d/memcached start					##都啓動memcache緩存服務
/usr/local/tomcat/bin/shutdown.sh			##重啓tomcat
/usr/local/tomcat/bin/startup.sh

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章