一.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的應用
概念解釋:
- 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.爲“ .phpmemcexptime表示緩存失效時間,以秒記。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