lnmp架構的擴展應用 - memcache 和 tomcat

實驗環境;
server2:172.25.254.2 有完整的lnmp架構
server1:172.25.254.1
真機: 用來測試訪問

memcached

memcached 是一個免費開源,高性能,分佈式內存對象緩存系統,:

它的作用是加速我們的訪問,因爲我們如果每個人都訪問數據庫的話,數據庫的壓力是很大的,而數據庫在企業中的地位是最高的,所以我們用memcahe應用做緩存來減輕數據庫的負載壓力。

去官網下載:http://memcached.org/downloads
我們先安裝php的擴展支持memcache 在配置 memcached 服務器,注意memcache 是 php的擴展支持,memcached纔是主程序。

配置擴展

我們先配置memcache:
在這裏插入圖片描述
首先看到它的目錄爲這些,裏面沒有configure文件,我們需要用 phpize 進行生成configure文件:

ln -s /usr/local/lnmp/php/bin/* /usr/local/bin/          軟連接方便使用
source /etc/profile       								讓環境變量生效。
yum install autoconf -y									依賴性
phpize 													進入到memcache目錄中執行

在這裏插入圖片描述
已經生成了configure文件 ,這裏應該注意不是所有的壓縮包都可以用phpize進行編譯,是因爲,我們這裏進行操作的memcache 是php的一個插件,所以可以。

編譯:

./configure --with-php-config=/usr/local/lnmp/php/bin/php-config
make && make install

在這裏插入圖片描述
已經放到了php的擴展插件目錄中。
同樣的在php的安裝包目錄中也有很多的自帶的插件:
在這裏插入圖片描述

它在 ext/ 目錄下,我們可以用同樣的方式進行插件的編譯安裝,例如我們安裝一個openssl 插件,支持https。
在這裏插入圖片描述

./configure --with-openssl --with-php-config=/usr/local/lnmp/php/bin/php-config
make && make install

現在我們就安裝了兩個模塊了,我們現在去配置它:

vim /usr/local/lnmp/php/etc/php.ini

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

/etc/init.d/php-fpm reload
 php -m | grep openssl
 php -m | grep memcache

在這裏插入圖片描述

配置主程序

可以直接用yum下載:

yum install -y memcached.x86_64

配置文件

 vim /etc/sysconfig/memcached 

在這裏插入圖片描述
ions 可以選擇監聽的端口的位置, 加上 -l 127.0.0.1 就是隻監聽本機的11211端口。
在這裏插入圖片描述
去掉後:開啓i所有接口的11211
在這裏插入圖片描述
測試memcache:
在這裏插入圖片描述

telnet是用來測試端口的命令,沒有的話可以yum安裝。

stats查看狀態:
在這裏插入圖片描述
看到的是一些狀態信息。

保存數值:
在這裏插入圖片描述
set 用來設置值 ,get用來獲取值,第一個0代表第一個值,第二個0 代表不限制保存時間,6代表6個字符。
在這裏插入圖片描述
delete 刪除 name ,這次只設置5秒保存時間,一過我們就get不到了

測試能否緩存加速

複製安裝包下的測試發佈頁到nginx的html目錄下:

 cp memcache.php example.php /usr/local/lnmp/nginx/html/

更改 memcache.php 的內容:
在這裏插入圖片描述
更改測試登陸的密碼和服務器ip。 example.php讀取的是11211端口,也就是memcache的信息。

查看 example 頁面的內容,發現它會使用 memcache :
在這裏插入圖片描述

訪問memcache.php:
在這裏插入圖片描述
要我們輸入剛纔的帳號和密碼。
在這裏插入圖片描述
登陸後是這個測試頁面,此時的緩存使用爲0。

剛纔的example.php 是使用memcache 的所以我們訪問example 頁面,多訪問幾次:
在這裏插入圖片描述
發現都是從緩存中讀取,我們可以看見命中緩存的佔比很高。

然後我們用壓力測試工具測試到底有沒有提升我們的訪問速度:

ab -c 10 -n 5000 http://172.25.254.2/index.php        index.php沒有在緩存中 10併發訪問5000次

在這裏插入圖片描述
可見用時17s而且有失敗的請求。

ab -c 10 -n 5000 http://172.25.254.2/example.php      example.php在我們的緩存中

在這裏插入圖片描述
用時2秒且全部命中,這就是memcache的作用,極大的提升了服務器的性能。

tomcat 訪問jsp頁面

tomcat和java的安裝

Tomcat 服務器是一個開源的輕量級Web應用服務器,在中小型系統和併發量小的場合下被普遍使用,是開發和調試Servlet、JSP 程序的首選。

運行tomcat 我們需要準備的基本環境是 jdk

 tar zxf apache-tomcat-7.0.99.tar.gz -C /usr/local/
 tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
 ln -s apache-tomcat-7.0.99/ tomcat
 ln -s jdk1.7.0_79 java
	做個軟連接方便目錄的使用

把jdk和tomcat解壓到/usr/local/ 目錄下。

當前我們沒有java的,我們需要配置環境變量。

vim /etc/profile
source /etc/profile

在這裏插入圖片描述
在這裏插入圖片描述
就可以看到我們的java的信息,就說明我們的jdk配置的是正常的。
現在我們來測試一下java
在這裏插入圖片描述
在這裏插入圖片描述
正常使用。

測試 tomcat
進入到安裝目錄下的bin目錄執行:
./startup.sh 打開tomcat
在這裏插入圖片描述
在這裏插入圖片描述
8080和8009 端口打開,
在這裏插入圖片描述訪問可以看到默認發佈頁。

但用戶不會去訪問8080端口,所以我們需要配置nginx。
在這裏插入圖片描述
訪問.jsp結尾時轉交給8080端口。
在這裏插入圖片描述

動態頁面測試

寫幾個測試動態頁面:

在這裏插入圖片描述
在這裏插入圖片描述
刷新一次時間就會變一次。

  1. 一個簡易的用戶登陸信息,會被記錄下來
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

訪問:
在這裏插入圖片描述
可以看到輸入的登陸信息會保存到session list中.

我們開啓另一臺一臺同樣配置((tomcat 和 jdk , 環境變量)的虛擬機,進行負載均衡的測試。ip 爲 172.25.254.1

配置本機的nginx,定義一個上游服務:

在這裏插入圖片描述
定義接收請求的服務器組。
在這裏插入圖片描述
並更改前面設置的反向代理的地址,需要與上面的組相同。

重新加載nginx。打開新開虛擬機的tomcat。

這樣我們每次訪問的時候就會接替的訪問1和2 兩臺服務器。但是這樣不會保存用戶訪問的數據。

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

爲了讓用戶的每次訪問不會來回跳,我們可以做 用sticky參數做會話保持(粘滯) 。

sticky粘滯

會話保持:sticky參數。我們需要下載一個nginx-goodies/nginx-sticky-module-ng 模塊,然後重新編譯進nginx中即可生效。
在這裏插入圖片描述

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make && make install

在這裏插入圖片描述
添加sticky模塊進去。
重新加載 nginx,訪問:
在這裏插入圖片描述
當前是 254.2 主機,輸入,三次後:
在這裏插入圖片描述
還會在2主機上,這就是sticky模塊的功能。

session共享

如果我們這兩臺服務器中有一臺關閉了的話,會話就會又被重置。用戶的信息又丟失了。
我們關閉server2 的tomcat;
在這裏插入圖片描述
在這裏插入圖片描述
這時輸入usr4,時就會i把我們的請求轉接到了server1上,先前保存的內容又丟失了。

這時我們需要作一個session共享(可以從github獲取jar資源)。兩臺主機都做,讓掛的那一臺服務其把用戶的信息同步給另外一臺服務器,這樣客戶就不會被重置會話了。我們需要下載一些jar包之後就會提供共享功能了,將這些包放到 **tomcat 的 lib ** 目錄下,然後配置tomcat的配置文件即可。

下載前:
在這裏插入圖片描述
下載後:
在這裏插入圖片描述

更改配置文件:/usr/local/tomcat/conf/content.xml

server2上:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

server1上:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.154.2:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

可以看到裏面的memcached-session-manager,但是數據的共享是從memcache中獲取的,所以兩臺服務器都下載memcached。

yum install memcached -y
systemctl start memcached.service        啓動
重啓tomcat

這裏要注意tomcat和session的版本需要匹配。
再次測試發現掛掉一臺服務器也不會丟失之前的內容。

這樣就避免了但典故張。它的內容時交叉存儲的,即server1的內容會存到server2上。只有當server2服務器掛掉時纔會存到本機。

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