您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Memcache如何全面解析并實(shí)現(xiàn)zabbix監(jiān)控,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
Memcached是什么?
Memcached是一個分布式內(nèi)存緩存服務(wù)器,用于緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫的訪問次數(shù),提高動態(tài)web頁面的速度及擴(kuò)展性。
Memcached的特征
a.協(xié)議簡單,Memcached使用簡單的文本行協(xié)議
b.基于libevent的事件處理
c.內(nèi)置內(nèi)存存儲方式
d.每個Memcached服務(wù)器之間互不通信
e.Memcached使用key-value的方式進(jìn)行儲存
Libevent: Libevent 是一個用C語言編寫的、輕量級的開源高性能事件通知庫,主要有以下幾個亮點(diǎn):事件驅(qū)動( event-driven),高性能;輕量級,專注于網(wǎng)絡(luò),不如 ACE 那么臃腫龐大;源代碼相當(dāng)精煉、易讀;跨平臺,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多種 I/O 多路復(fù)用技術(shù), epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定時器和信號等事件;注冊事件優(yōu)先級。
Libevent 已經(jīng)被廣泛的應(yīng)用,作為底層的網(wǎng)絡(luò)庫;比如 memcached、 Vomit、 Nylon、 Netchat等等。
Memcached的內(nèi)存存儲
由于傳統(tǒng)的內(nèi)存分配使用malloc函數(shù)和free函數(shù)進(jìn)行內(nèi)存分配,導(dǎo)致內(nèi)存產(chǎn)生的大量的內(nèi)存碎片,無法被利用。
Memcached采用Slab Allocator實(shí)現(xiàn)內(nèi)存的分配。
Slab Allocator的原理:按照預(yù)先規(guī)定將內(nèi)存分配成大小特定且不等的內(nèi)存快(chunk),并把大小相等的內(nèi)存快組織成組(slab class)。
Memcached如何通過Slab Allocator實(shí)現(xiàn)數(shù)據(jù)的緩存?
當(dāng)一個數(shù)據(jù)到達(dá)Memcached時,Memcached根據(jù)數(shù)據(jù)的大小去選擇大小適宜的slab,在通過chunk的空閑列表,選中出chunk將數(shù)據(jù)緩存上去。
Memcached在分配內(nèi)存過程中怎么實(shí)現(xiàn)不等長的內(nèi)存劃分呢?
Memcached在啟動時會指定growth factor因子,來控制每個slab之間的差異,并不是隨意進(jìn)行劃分的。如:growth
factor因子為2,前一個slab class中的每個chunk的大小為2,則下一個slab
class中的每一個chunk的大小為4,就這樣一次類推。默認(rèn)Memcahed設(shè)置中g(shù)rowth factor的值為1.25
啟動時指定Memcached的growth factor因子 [root@COS_Clone1 ~]#memcached -f 2 -vv -f:指定growth factor因子-vv:查看過程12341234
Memcached的超時原理
Memcached怎么去監(jiān)控自己在內(nèi)存中緩存的資源是否過期,其采用Lazy
Expiration,Memcached不會自動的去監(jiān)控并檢測緩存在內(nèi)存中的內(nèi)容是否過期,當(dāng)一個請求到來時,Memcached才會去檢查請求資源的記錄時間戳,檢查記錄是否過期,如沒有過期再進(jìn)行返回。
Memcached的刪除的原理
Memcached在內(nèi)存中緩存數(shù)據(jù)時,首先選用已經(jīng)超時的空間來記錄本次要緩存的記錄,若內(nèi)存空間不足以緩存時,Memcached會使用LRU(最近最少未被使用算法)來將資源空間分配給新的記錄。
Memcached的分布式調(diào)度
假如web服務(wù)器要緩存一個數(shù)據(jù)庫到Memcached服務(wù)器,那么要緩存在那個上呢?
其實(shí)Memcached API提供了幾個調(diào)度算法
a.余數(shù)計(jì)算:
把將要緩存在Memcached上的記錄的key值進(jìn)行C32計(jì)算,再將計(jì)算結(jié)果與node數(shù)+1進(jìn)行取余,得到的結(jié)果就是此數(shù)據(jù)要緩存的Memcached服務(wù)器。
缺點(diǎn):
當(dāng)進(jìn)行增加或者移除節(jié)點(diǎn)時,緩存數(shù)據(jù)進(jìn)行重組,無法獲取與保存時相同的服務(wù)器,從而影響緩存的命中率。
b.Consistent hash:
將node節(jié)點(diǎn)的主機(jī)名進(jìn)行HASH計(jì)算,并配置在0~2^23的圓上,再將資源的key值進(jìn)行HASH計(jì)算,并映射在圓上,從映射位置順時針查找,找到的第一個服務(wù)器就將數(shù)據(jù)保存在此服務(wù)器上。
Memcached的安裝方式
下載方式: [root@COS_Clone1 ~]#wget http://memcached.org/files/memcached-1.4.36.tar.gz安裝: [root@COS_Clone1 ~]#tar -xzf memcached-1.4.36.tar.gz [root@COS_Clone1 ~]#mkdir /usr/local/memcached[root@COS_Clone1 ~]#yum install libeven-devel[root@COS_Clone1 ~]#cd memcached-1.4.36[root@COS_Clone1 memcached-1.4.36]# ./configure --prefix=/usr/local/memcached --bindir=/usr/local/bin --sbindir=/usr/local/sbin [root@COS_Clone1 memcached-1.4.36]#make && make install123456789123456789
Memcached的啟動
[root@COS_Clone1 ~]#memcached -p 20001 -m 64m -d11
Memcached狀態(tài)查詢
[root@COS_Clone1 bin]# memcached-tool 127.0.0.1:11211 stats#127.0.0.1:11211 Field Value accepting_conns 1 auth_cmds 0 auth_errors 0 bytes 0 bytes_read 7 讀了多少字節(jié) bytes_written 0 寫了多少字節(jié) cas_badval 0 cas_hits 0 cas_misses 0 cmd_flush 0 cmd_get 0 進(jìn)行了多少次獲取 cmd_set 0 進(jìn)行多少次插入 conn_yields 0 connection_structures 11 curr_connections 10 curr_items 0 decr_hits 0 decr_misses 0 delete_hits 0 delete_misses 0 evictions 0 get_hits 0 命中多少次 get_misses 0 incr_hits 0 incr_misses 0 limit_maxbytes 67108864 listen_disabled_num 0 pid 4465 pointer_size 64 rusage_system 0.035994 rusage_user 0.000999 threads 4 time 1495460002 total_connections 11 total_items 0 內(nèi)存中多少條記錄 uptime 35 version 1.4.41234567891011121314151617181920212223242526272829303132333435363738394012345678910111213141516171819202122232425262728293031323334353637383940
使用zabbix監(jiān)聽memcached
監(jiān)聽數(shù)據(jù):命中多少,總過多少資源,多少次獲取,多少次進(jìn)行添加,讀取字節(jié)書,寫入字節(jié)數(shù)
1.在Memached的主機(jī)上安裝zabbix
[root@COS_Clone1 ~]# yum install zabbix zabbix-agent[root@COS_Clone1 ~]#vim /etc/zabbix_agent.conf UserParameter=memcached.bytes_read[*],/usr/bin/memcached-tool $1:$2 stats | grep "bytes_read" | awk '{print $2}' UserParameter=memcached.bytes_written[*],/usr/bin/memcached-tool $1:$2 stats | grep "bytes_written" | awk '{print $2}' UserParameter=memcached.cmd_get[*],/usr/bin/memcached-tool $1:$2 stats | grep "cmd_get" | awk '{print $2}' UserParameter=memcached.cmd_set[*],/usr/bin/memcached-tool $1:$2 stats | grep "cmd_set" | awk '{print $2}' UserParameter=memcached.get_hits[*],/usr/bin/memcached-tool $1:$2 stats | grep "get_hits" | awk '{print $2}' UserParameter=memcached.total_items[*],/usr/bin/memcached-tool $1:$2 stats | grep "total_items" | awk '{print $2}'1234567812345678
2.在另一臺主機(jī)上安裝zabbix-server并啟動在web頁面進(jìn)行配置
configure->host->item(memcached host)
定義item:
定義Graphs
測試結(jié)果
關(guān)于Memcache如何全面解析并實(shí)現(xiàn)zabbix監(jiān)控就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。