linux高級運維之memcache服務
阿新 • • 發佈:2018-06-18
manage 5.4 ORC cgi 計算機 images pro 順序 管理系 linux高級運維之memcache服務
案例1:構建memcached服務
案例2:LNMP+memcached
案例3:PHP的本地Session信息
案例4:PHP實現session共享
memcache簡介及理論基礎:
關系型數據庫:mysql mariadb RDBMS即關系數據庫管理系統(Relational Database Management System) NoSQL,泛指非關系型的數據庫 kv key=vaule數據庫 redis mongdb 傳統web架構的問題: 許多web應用都將數據保存到RDBMS中,應用從服務器中讀取數據並在瀏覽器中顯示 隨著數據量的增大,訪問的集中就會出現RDBMS負載加重,數據響應惡化,網站顯示延遲等重大影響 數據儲存位置對比 性能:CPU緩存>內存>磁盤>數據庫 價格:CPU緩存>內存>磁盤>數據庫 memcached是高性能的分布式緩存服務器 用來集中緩存數據庫查詢結果,減少數據庫訪問次數來提高動態web響應速度 官網:http://memcached.org/ 內存管理機制: 傳統的內存分配機制 使用完通過分配的內存後回收內存,這種方式容易產生內存碎片並降低操作系統對內存的管理效率 slab allocation機制 按照預先規定的大小,將分配的內存分割成特定長度的內存塊(chunk)再把尺寸相同的內存塊分成組(chunk集合)這些內存不會釋放,可以重復利用 memcached使用名為least recently used(LRU)機制來分配空間 刪除“最近最少使用”的記錄 當memcached的內存空間不足時,從最近未被使用的記錄中搜索,並將其空間分配給新的記錄 /usr/lib/systemd/system/ 這個是systemctl的配置(啟動腳本)文件的目錄。 這個目錄下有對應的服務才能啟動服務成功 systemctl start memcached 有這個能啟動 這個命令所有選項都是在這個目錄下的腳本文件所影響的,可以把nginx加入進來用這個啟,參考Apache模板。 ExecStart(函數連接)=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS /etc/sysconfig/memcached
構建memcached服務
安裝memcached軟件,並啟動服務 使用telnet測試memcached服務 對memcached進行增、刪、改、查等操作 yum -y install memcached memcached配置文件(查看即可,不需要修改) vim /usr/lib/systemd/system/memcached.service ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="" 啟動服務並查看網絡連接狀態驗證是否開啟成功 systemctl start memcached systemctl status memcached netstat -anptu | grep memcached 端口號11211 使用telnet訪問memcached服務器 yum -y install telnet telnet 192.168.4.5 11211 add name 0 180 10 //變量不存在則添加 set name 0 180 10 //添加或替換變量 replace name 0 180 10 //替換 get name //讀取變量 append name 0 180 10 //向變量中追加數據 delete name //刪除變量 stats //查看狀態 flush_all //清空所有 STAT get_hits 14 hits 擊中(成功)了14次 STAT get_misses 7 失敗 7次 提示:0表示不壓縮,180為數據緩存時間,10為需要存儲的數據字節數量。 緩存過期時間: 人搜索 緩存20個 數據庫 用戶傳視頻 (音樂) ————youku 人搜索 緩存20個 數據庫 1小時後 人搜索 緩存21個 數據庫
####################################################################
LNMP+memcached:
部署LNMP實現PHP動態網站架構 為PHP安裝memcache擴展 創建PHP頁面,並編寫PHP代碼,實現對memcached的數據操作 安裝源碼包的依賴包 yum -y install gcc openssl-devel pcre-devel zlib-devel 安裝完成nginx並啟服務 cd lnmp_soft/ cd nginx-1.12.2/ useradd -s /sbin/nolgin/ nginx ./configure --help ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-stream make && make install ln -s /usr/local/nginx/sbin/nginx /sbin/ nginx netstat -natulp |grep 80 修改配置文件實現動靜分離 location / { root html; index index.php index.html index.htm; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; } 安裝php php-mysql(調用mariadb數據庫的模塊) php-fpm php-pecl-memcache (調用memcache數據庫的模塊) cd php_scripts/ yum -y install php php-mysql yum -y install php-pecl-memcache yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm 安裝mariadb(客戶端) mariadb-server(服務端) mariadb-devel(依賴包) yum -y install mariadb mariadb-server mariadb-devel 安裝nosql數據庫 yum -y install memcached 啟服務和關防火墻 nginx mariadb php-fpm memcached 服務 nginx systemctl restart mariadb systemctl enable mariadb systemctl restart php-fpm systemctl enable php-fpm systemctl restart memcached.service systemctl enable memcached setenforce 0 firewall-cmd --set-default-zone=trusted 驗證: cp mem.php /usr/local/nginx/html curl 192.168.2.111/mem.php (結果為test)
####################################################
PHP的本地Session信息
部署Nginx為前臺調度服務器
調度算法設置為輪詢
後端為兩臺LNMP服務器
部署測試頁面,查看PHP本地的Session信息
會員卡ID001
人--------------------------------------》超市會員『登記信息』
001.txt信息
002.txt信息
002.txt信息
會員卡ID002
人--------------------------------------》超市會員『登記信息』
001.txt信息
002.txt信息
002.txt信息
會員卡ID003
人--------------------------------------》超市會員『登記信息』
001.txt信息
002.txt信息
002.txt信息
firefox----------------------->登陸Session信息
(cookie=001) 001.txt信息
002.txt信息
002.txt信息
ip_hash解決:
web1 id1.txt{信息}
user(IP) proxy(代理) web2 id2.txt{信息} 公共服務器
web3 id3.txt{信息}
cookie="Hm_lvt...sessionid=287679e630584099aa29780a0f7658bd%7CP%23375184726%40qq.com%7C%7C1%7C0%7C0%7C%7C0%7C0%7C0"
//瀏覽器中可以看到sessionid。
步驟:
部署後端LNMP服務器相關軟件(兩臺後端服務器操作相同)
//實現動靜分離即可 不必安裝memcached
啟動LNMP服務器相關的服務並關閉防火墻
部署前端Nginx調度服務器
安裝nginx軟件
修改Nginx配置文件實現調度
nginx -s reload
關閉SELinux、防火墻
curl http://192.168.4.5/index.html //測試
部署後端LNMP服務器測試頁面(兩臺後端服務器操作相同)
//可用修改index.php和home.php兩個文件的內容,添加頁面顏色屬性
以區別後端兩臺不同的服務器:<body bgcolor=blue>
cd lnmp_soft/php_scripts/
tar -xf php-memcached-demo.tar.gz
cd php-memcached-demo
cp -a * /usr/local/nginx/html/
修改默認首頁
location / {
root html;
index index.php index.html index.htm;
//這個是以順序來找的,第一個沒找到就找第二個。
}
firefox http://192.168.2.100 //填寫賬戶信息
//這步測試時只能訪問後端的web不能訪問代理
而且要清空流量器的緩存才能 在/var/lib/php/session/下記錄ID2 ID3等
ls /var/lib/php/session/ //查看服務器本地的Session信息
sess_ahilcq9bguot0vqsjtd84k7244 //註意這裏的ID是隨機的
瀏覽器訪問前端調度器測試(不同後端服務器Session不一致)
google-chrome http://192.168.4.5 //推薦用google
//填寫註冊信息後,刷新,還需要再次註冊,說明兩臺計算機使用的是本地Session
//第二臺主機並不知道你再第一臺主機已經登錄,第一臺主機的登錄信息也沒有傳遞給第二臺主機
//實際情況是:能進入登錄後跳轉界面,一刷新會由web1變到web2,且能看出用戶名不一樣!!!
Welcome : haha
Welcome : xixi
這裏的用戶名會變化 意味著你之前登陸的用戶名和帳號在另外一臺web服務器上不生效了。
PHP實現session共享(續上實驗)
Nginx服務器除了承擔調度器外,還需要擔任memcached數據庫的角色,並在兩臺後端LNMP服務器上實現PHP的session會話共享
在上實驗前端Nginx調度服務器上再搭建memcache服務器
安裝Memcached服務
啟動服務並查看網絡連接狀態驗證是否開啟成功
關閉SELinux、防火墻
在後端LNMP服務器上部署Session共享
yum -y install php-pecl-memcache
//因為後端兩臺web服務器(web1,web2)都需要連接memcached數據庫,所以兩臺主機都需要安裝PHP擴展模塊
vim /etc/php-fpm.d/www.conf //修改該配置文件的兩個參數
//文件的最後2行
修改前效果如下:
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
//原始文件,默認定義Sessoin會話信息本地計算機(默認在/var/lib/php/session)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改後效果如下:
php_value[session.save_handler] = memcache
#把php的值session對話信息交給誰處理 處理者(handler)是memcache
php_value[session.save_path] = "tcp://192.168.2.5:11211"
#傳輸對話信息的路徑是通過tcp協議傳給memcache服務器的11211這個端口
//定義Session信息存儲在公共的memcached服務器上,主機參數中為memcache(沒有d)
//通過path參數定義公共的memcached服務器在哪(服務器的IP和端口)
systemctl restart php-fpm
linux高級運維之memcache服務