《實戰LANMP負載均衡部署2-NGINX結合MEMCACHE提供SESSION會話保留》要點:
本文介紹了實戰LANMP負載均衡部署2-NGINX結合MEMCACHE提供SESSION會話保留,希望對您有用。如果有疑問,可以聯系我們。
相關主題:memcache擴展 / 鍵值KeyValue存儲數據庫
據上文各小伙伴的反響效果不錯,說明伙伴們對負載均衡這一塊的參考度及興趣度比好,所以本日作者補充一篇關于實戰負載均衡的文章給大家.
接上文,上文作者寫了實戰LANMP負載均衡部署1-實現NGINX反向APACHE服務器集群,居然NGINX反向給了APACHE服務器的集群之后,我們就要考慮SESSION丟失的問題了.
首先我們必要給210的NGINX服務器添加MEMCACHE服務,用于存儲緩存信息,
而220/230的服務器只必要添加PHP的MEMCACHE擴展,調用210服務器上的MEMCACHE
由于yum源要找過PHP5.3.3的memcache
所以作者編譯過環境為PHP7
可以參考
php7添加memcache擴展
在這要特別說下:
memcache是一個服務
memcached是PHP的擴展支持
pecl-memcache-php7 安裝在APACHE集群的220/230的服務器的PHP上
重啟HTTPD,打印phpinfo查看是否已經啟用了memcachee
然后切換會210的NGINX服務器
安裝memcached-1.4.25 (記得yum install -y libevent-devel)
安裝完成后啟用:
/usr/local/bin/memcached -d -m 256 -l 192.168.0.210 -p 7788 -u root
IP必需為內網IP 127.0.0.1的話就只允許本機了
修改220/230的php.ini
session.save_handler = memcache;
session.save_path = “tcp://192.168.0.210:7788”;
不外建議在執行的PHP上動態修改:
ini_set(‘session.save_handler’, ‘memcache’);
ini_set(‘session.save_path’, ‘ tcp://192.168.0.210:7788’);
先來做個測試,看看SESSION是否可以共享:
修改220/230服務器的index.php內容為:
<?php
header(“Content-Type: text/html; charset=UTF-8”);
echo “當前反向哀求的服務器IP為:”.$_SERVER[“SERVER_ADDR”].”<br>”;
ini_set(‘session.save_handler’, ‘memcache’); #修改SESSION的保留方式
ini_set(‘session.save_path’, ‘ tcp://192.168.0.210:7788’); #SESSION保留路徑
session_start();
#unset($_SESSION[‘time’]); die();
#如果設置錯誤先把數據刪除
$time=time(); #獲取當前時間
if(!isset($_SESSION[‘time’])){ #如果不存在SESSION的時間
$_SESSION[‘time’]=$time; #賦值
}
echo “共享的SESSION[‘time’]的值=”.$_SESSION[‘time’].”<br>”;
#輸出共享的SESSION[‘time’]
echo “現在的時間=”.time();
#輸出當前的時間
?>
可以看到結果:
到現在為止,負載均衡的SESSION共享就算完成了,當然也包含數據緩存共享;
為了您的服務器敏感信息不泄漏,建議MEMCACHE只開啟內網IP段
即/usr/local/bin/memcached -d -m 256 -l 192.168.0.210 -p 7788 -u root
如果是實際服務器,切記別使用:
/usr/local/bin/memcached -d -m 256 -l 外網IP -p 7788 -u root
因為緩存的數據很容易就被黑客抓取,所以如果不是使用服務器集群的話,建議別開啟MEMCACHE
作者在說說,MEMCACHE是如何減輕數據庫的瓶頸的,代碼就不寫了,思路寫了本身琢磨下就懂了:
對SQL的操作,莫過“增編削查”
首先,每次SELECT的時候,先判斷MEMCACHE里是否存在對應的KEY,存在提取值,這些值是怎么來的呢?
假設MEMCACHE內沒有所需的值
數據庫中提取,可以為數組也可以為字符串,然后Memcached::set(‘key’,’value’)寫入KEY名稱和對應的值,值可以為數組
那么下次再拜訪的時候,就先不直接讀取數據庫了
而是if(Memcached::get(‘key’,’value’))就可以判斷是否存在,存在直接return即可.
好比說有留言什么的,就進行更新,更新之后同樣更新下key的value即可.
不知大家看了之后有什么想法,也不妨和作者分享一下,如有什么地方需改進,還請小伙伴們不惜賜教!
維易PHP培訓學院每天發布《實戰LANMP負載均衡部署2-NGINX結合MEMCACHE提供SESSION會話保留》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。