Memcache 集群方案

2021-08-22 11:27:03 字數 3890 閱讀 5784

一、偽集群方案

最常見的做法:memcache安裝後,在一台機器或多台機器上啟動多個例項,客戶端配置memcache節點的ip,port即可。

由客戶端實現分布式快取效果,其實是偽集群。

memcache節點之間不通訊,無資料備份,負載均衡由客戶端實現,存在單點故障。

客戶端可設定故障恢復和故障轉移機制。

二、簡單集群方案

使用magent**元件搭建集群服務。

集群特性:

1)memcache節點宕機後,客戶端能自動重連。

2)有資料備份,比如部署了memcache節點1、節點2和備份節點,當節點1宕機,set操作到節點1的時候,會失敗(不會自動跳到另乙個節點當中去),但備份memcache節點是會保留所有key,所有運用get命令還是能夠得到正常結果的。

2)編譯安裝

1.tar -xzvf magent-0.5.tar.gz

2./sbin/ldconfig

3.sed -i 「s#libs = -levent#libs = -levent -lm#g」 makefile

4.make

5.cp magent /usr/bin/magent

6.magent

執行第三步時,要注意最後的輸出檔案為makefile。

執行第四步時,一般會遇到如下錯誤:

錯誤一:

問題原因:缺少ssize_max字義

解決方法:

修改ketama.h檔案,在檔案起始行加下以下**:

#ifndef ssize_max

#define ssize_max 32767

#endif

儲存檔案,重新執行make命令即可

這個錯誤是magent-0.6.tar.gz才有,0.5版本的沒有。

問題原因:檔案存放路徑的問題

libm.a 預設在/usr/lib/x86…/lib64下

libevent.a 預設在/usr/lib/下

本人演示用的linux作業系統是centos-6.5,其他作業系統可能不同,請注意區分。

解決辦法:

可用find命令查詢,再將這兩個檔案拷貝到/usr/lib64目錄下

若libm.a提示找不到,則需要重新安裝glibc-static元件:yum install glibc-static。

錯誤三:

安裝過程中出現:/usr/lib64/libevent.a(event 0) : in function 『gettime』錯誤字樣

解決辦法:

1、先備份makefile檔案:cp makefile makefile.bak

2、修改makefile檔案,找到cflags = -wall -g -o2 -i/usr/local/include $(m64),改為cflags = -lrt -g -o2 -i/usr/local/include $(m64)即可。

make命令成功後,會在當前目錄下產生magent檔案,將該資料夾移到/usr/bin/目錄下即可。

資料夾移到新的位置後,可以直接使用magent命令,如下圖所示,表示安裝成功:

2、magent啟動命令常用引數

-u:啟動使用者名稱

-n:連線數,預設為4096

-l:magent監聽的ip位址

-p(小寫):magent監聽的埠號

-s:註冊的memcache節點資訊,格式為ip:port

-b:用於備份的memcache節點資訊,格式為ip:port

示例命令 magent -u root -n 2048 -l 192.168.0.103 -p 12001 -s 192.168.0.103:11211 -s 192.168.0.103:11212 -b 192.168.0.103:11213

3、使用示例

1)先啟動memcache節點

/usr/local/bin/memcached -d -m 128 -u root -l 192.168.0.103 -p 11211 -p /tmp/memcached11211.pid

/usr/local/bin/memcached -d -m 128 -u root -l 192.168.0.103 -p 11212 -p /tmp/memcached11212.pid

/usr/local/bin/memcached -d -m 128 -u root -l 192.168.0.103 -p 11213 -p /tmp/memcached11213.pid

共啟動3個memcache節點,埠分別為11211,11212,11213

2)啟動magent,**memcache節點

magent -u root -n 2048 -l 192.168.0.103 -p 12001 -s 192.168.0.103:11211 -s 192.168.0.103:11212 -b 192.168.0.103:11213

如命令所示:

memcache 11211和11212兩個節點為工作節點,11213節點將作為備份節點;

magent監聽的埠為12001,ip為192.168.0.103。

注:為了演示方便,都在一台機器上啟動例項,若實際需要為多台機器,將ip和埠更換即可。

4、基本使用方法

1)telnet作為客戶端,連線magent

還記得前一遍講解的telnet操作嗎?magent的操作也一樣適用。

演示的ip和port可以參照上面的演示示例。

telnet 192.168.0.103 12001

stats命令檢視狀態,如下圖所示:

可以看到magent版本號,連線的memcache工作節點列表,用matrix1、matrix2表示。

2)get,set,version等命令跟memcache的操作是一致的

set操作時,按雜湊演算法寫入兩個工作節點(簡單對映雜湊演算法),備份節點不受此雜湊演算法影響,所有的快取物件都會到備份節點中儲存。

get操作時,先按雜湊演算法查詢,查詢不到就到備份節點裡查詢,因為set時所有的快取物件都會儲存到備份節點上。

當某一memcache工作節點宕機時,set還是按原有的雜湊演算法做set操作,宕機的節點上無資料,但備份節點上有,get操作還是不受影響的(所以說備份節點很重要,一定要設定)。

當宕機的節點重新啟動時,該節點已無資料。magent做get操作時,儘管備份節點上還有資料,但還是會返回空值。(這是乙個很大的問題!)

code.google官方最新發布的版本為magent-0.6.tar.gz,也一樣沒有修復這個問題。

magent-0.6:

修正版(修正安裝過程中出現ssize_max無法找到的問題)

magent-0.5:

magent-0.6:

memcache集群使用原則

1 集群節點的儲存方式 1 乙個環狀的概念,將集群節點雜湊到環上 2 權重的影響,影響集群節點在患上的雜湊 2 集群節點擴充和減少 會導致資料遷移 3 乙個專案的客戶端訪問多個memcache集群 需要針對每個集群進行區分 cms後台有這個需求 4 開發注意事項 1 key是string 2 物件必...

memcache集群服務 memagent配置使用

安裝magent到 usr local 下 cd usr local mkdir magent cd magent wget tar zxvf magent 0.5.tar.gz sbin ldconfig sed i s libs levent libs levent lm g makefile ...

memcache集群服務 memagent配置使用

magent是一款開源的memcached 伺服器軟體 cd usr local mkdir magent cd magent wget tar zxvf magent 0.5.tar.gz sbin ldconfig sed i s libs levent libs levent lm g mak...