追蹤
NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落
關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 163898

    累積人氣

  • 99

    今日人氣

    0

    追蹤人氣

Memcached 集群session 管理,組態,與監控實務by Neil

 實 驗 開 始

先搞定 .178 , .179 兩台機器 先安裝完成 Memcached(magent 最後再說)

安裝程序兩台皆同,本人以 .179 為操作說明

yum -y install memcached    #本人使用remi repo  

編輯主要設定檔

vi /etc/sysconfig/memcached 

ORT="11211"        #memcahed 使用11211 port
USER="memcached"   #使用user
MAXCONN="1024"     #最大連線數
CACHESIZE="64"     #使用cache RAM 上限
OPTIONS=""

編輯調整ok後,重新啟動memcached(請於.178 機器執行一致部署動作)

/etc/init.d/memcached restart

chkconfig memcached on

#下圖中,我們可以看到 memcahed 確實 啟動 於 Port: 11211

接下來 遠端測試 telnet 到 .178 Port: 11211 查看一些資訊

 telnet 192.168.11.178 11211 

#可以參考一些數據: memcached 版本號及 get/set 或 miss (取得資訊數據參考) 


接下切換到.180 機器: 負責本Lab監控與Client 角色的

安裝PHP Memcache 擴展(使PHP可支援Memcached 存取)

 yum install php-pecl-memcache php-pear

tar zxvf memcache-3.0.8.tgz   #   

> cd memcache-3.0.8  #開始安裝php memcache 擴展

> phpize

> ./configure 

> make && make install 

echo "<?php phpinfo(); ?>" > /var/www/html/test.php 

開啟瀏覽器查看 http://localhost/test.php 是否支援memcache(ok即安裝完成)

或是使用指令介面
" php -i | grep memcache " 亦可查驗

 


測試Proxy(.180) 使用PHP遠端存取Cent178(.178)之Memcached 連線測試
 
vi /var/www/html/meki2.php #set 儲存資料,get 取出資料,以key/value方式儲存

<?php

$mem = new Memcache;
$mem->connect("192.168.11.178", 11211);
$mem->set('angel', 'angel is a pretty girl', 0, 60);
$val = $mem->get('angel');
echo $val;

?>



使用瀏覽器查看該頁面: 若連線OK則輸出字串值(表示PHP擴展存取memcached為有效)



接下來: 我們要在Proxy(.180)這台機器上安裝PHP Memcache tool 使用網頁監控少量

memcached 機器數

http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/  <--至官網

下載新版監控程式,為一隻PHP程式,將其設置 /var/www/html 底下

vi memcache.php  #本例編輯組態如下


define('ADMIN_USERNAME','neil');        // Admin Username: 登入頁面驗證帳號
define('ADMIN_PASSWORD','angel520');    // Admin Password: 登入頁面驗證密碼
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);

$MEMCACHE_SERVERS[] = '192.168.11.178:11211';  #設定監控主機IP與監控Port
$MEMCACHE_SERVERS[] = '192.168.11.179:11211'; 

編輯/儲存 ok 重新RESTART Web 生效設定,打開瀏覽器查看該頁面

http://localhost/memcache.php

下圖中.178 & .179 兩台機器被監視中(可切換進階檢視資訊)


  接下來,可以看出每台memcache 已使用% 與 hits(擊中率),與Misses(未擊率) 之間%觀察



補充說明: memcache.php 必須安裝以下套件,才可show 出圓餅圖統計分析

 yum -y install php-pear-Image-*


Then 我們現在要使用另一套知名流量監控軟體 Cacti 0.8.8a 整合

cacti-memcached template 模板 監控數台Memcached 狀況

本Lab 使用CactiEZ 0.7(IP:192.168.11.190) 相當上手安裝步驟直接切入Memcached監控

被監控主機需要啟用UDP: 161 Snmp 服務以利CactiEZ 監控蒐集主機資訊

> yum -y install net-snmp  


 vi /etc/snmp/snmpd.conf  #新增/修改以下配置 .178 & .179 請照以下配置

#       sec.name  source          community
com2sec notConfigUser  default       neil   #<=預設public 我習慣變更

view    systemview    included   .1.3.6.1.2.1.2  # 新增以下三行
view systemview included .1.3.6.1.2.1.2.2.1.10
view systemview included .1.3.6.1.2.1.2.2.1.16


重新啟動 snmpd 

service snmpd restart

chkconfig snmpd on

接者請在.178 與 .179 兩台memcached 主機上 安裝 python-memcached 套件

#template將使用

yum -y install python-memcached  #下圖中確認161 Port 正常運作.且軟件已安裝



Then 一切就緒後我們切換回 CactiEZ(.190)主機底下

cd /var/www/html/scripts

wget http://s31.dlnws.com/dealnews/developers/cacti-memcached-1.0.zip

unzip cacti-memcached-1.0

cd cacti-memcached  底下會有兩個重要檔案 

cacti_memcached_host_template.xml   memcached.py

mv memcached.py ../    #搬移該檔案到上層(scripts目錄下)

cacti_memcached_host_template.xml  #該檔案請使用web方式登入cacti 進行import



開始登入CactiEZ 0.7   #輸入正確帳密方可登入



點選 左側目錄Import/Export 底下"Import Templates" 進行手動樣板匯入

下面是匯入樣板成功之訊息


Then 現在我們在要Cacti裡新增監控Memcached主機(.179範例如下)到"Device新增"




使用snmp2 監控,UDP PING: SNMP Community : neil 本例剛修改過非預設public ->Create


如果ok可以在Create後看到以下訊息: UDP Ping Success


於 Associated Graph Templates 底下可以從下拉選單新增方才我們剛

 IMPORT TEMPLATES with Memcached



Cacti 監控樣板呈現: 以Node .178 為範例(session 數多,數據統計較明顯)

偵測 Memcached Byes Used,Mmecached Current connections ,

     Memcached Network Traffice




   偵測: Memcached Cache hits and Misses , Memcached ITEM Cached

         Memcached Request/sec


再點進去圖表內看看...



CactirEZ本身內建 Monitor模組: 支援節點Node 健康度檢查 

綠色: 健康 , 紅色: 斷線/走精 # 有裝喇叭他會發聲提醒你有主機失常



Then 開始佈署 Magent  於.179 .178 兩台Memcached 機器上做集群代理

註: 本Lab 後端臨時會多拉一台機器.180 當作 .178,. 179 兩台機器的Memcached備份伺服器

以.179 示範安裝為例

安裝Magent 前相依必要套件安裝(與Magent相關)

yum install libevent libevent-devel

mkdir -p /usr/local/magent  #複製暫存安裝資料夾

cd /usr/local/magent 

wget https://memagent.googlecode.com/files/magent-0.6.tar.gz #下載Magent安裝元件

tar zxvf magent-0.6.tar.gz  #解開後應有4個檔案

ketama.c ,ketma.h ,magent.c Makefile

執行
/sbin/ldconfig



接者執行 make  會出現以下錯誤

gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c
magent.c: In function ‘writev_list’:
magent.c:729: error: ‘SSIZE_MAX’ undeclared (first use in this function)
magent.c:729: error: (Each undeclared identifier is reported only once
magent.c:729: error: for each function it appears in.)
make: *** [magent.o] Error 1



vi Makefile             

參考下圖,將

LIBS = /usr/lib64/libevent.a /usr/lib64/libm.a

更改为:

LIBS = -lrt /usr/lib64/libevent.a /usr/lib64/libm.a 



vim ketama.h  #添加以下三行,改完成後,再重新Make

#ifndef SSIZE_MAX

#define SSIZE_MAX     32767

#endif 

編譯過程ok


當 make 完成ok會出現一隻"magent" 程式,我們將其copy 到 /usr/bin/magent


 cp agent /usr/bin/magent



習慣查一下操作方式: 

magent help


執行magent 代理(.179) 

magent -u root -n 10000 -l 192.168.11.179 -p 60000 -s 192.168.11.179:11211 -s

192.168.11.178:11211 -b
192.168.11.180:11211

解釋: 啟動"magent服務"在本地端(192.168.11.179的Port:60000上) 代理主要Memcached 服務

對象位於 192.168.11.179:11211 ,指定備份Memcached對象為:  
192.168.11.180:11211

#使Memcached 集群間支援HA高可用性與Session共享理想目標,下圖中:60000已啟動


執行magent 代理(.178)

magent -u root -n 10000 -l 192.168.11.178 -p 60000 -s 192.168.11.178:11211 -s

192.168.11.179:11211 -b 
192.168.11.180:11211

解釋: 啟動"magent服務"在本地端(192.168.11.178的Port:60000上) 代理主要Memcached 服務

對象位於 192.168.11.178:11211 ,指定備份Memcached對象為:  
192.168.11.180:11211

此組態配置目的可將雙方Memcached 設成HA 備援,且Session共享



Magent  機群 高可用性測試與Session共用測試

先測 session 共享: 使用.180 機器 telnet 到 遠程.178(magent) 配置key值並儲存

再轉換到.179 (magent) 底下捕捉這個鍵值資料是否同在


telnet 192.168.11.178 60000   #magent代理

參考下圖: 本人telnet 到.178 60000 Port 新增key/value值(名稱:neilok)長度12:

資料內容"neilneilok"當寫入OK時.我轉換到192.168.11.179 60000 底下查看

get  neilok  #稍早我們在.178 建立 
key/value值已一併同步寫入到我們指定

Memcache 機器上(session共用) 當然你也可檢查.180是否亦有共同一筆資料供存取



最後Memcached間高可用性測試

telnet 到 192.168.11.178 : 60000

新增一筆資料 key 名為: vertime  儲存後離開


接著關閉 192.168.11.178 的 Memcached 服務

>

Then 再次 
telnet 到 192.168.11.178 : 60000

get verytime   #查看這筆鍵值能否從其他備份伺服器正常撈取到


Bravo !!! 下圖中我們雖然關閉.178 Memcached 服務,但Magent代理可與其他

Memcached 協同服務以維持集群間Memcached正常運作,進而達到其高可用性效果

Lab 實作時參考資料:

http://zhumeng8337797.blog.163.com/blog/static/10076891420113431424757/

官方Magent 
文獻
 
相簿設定
標籤設定
相簿狀態