repcached實現memcached內存複製+keepalived主備模式

Repcached介紹

Repchched項目地址:http://repcached.sourceforge.net/

關於repcached

“repcached”是一個補丁集合,它添加數據複製功能到memcached 1.4.13但是網絡上流傳的大多是針對memcached1.2.8版本的repcached,本文將以memcached1.4.13最新版本爲例來講述repcached的兼容性內存複製功能。

主要目的
實現冗餘memcached系統
主要功能
多主複製,異步數據複製,支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。

Memcached 1.4.13的Repcached補丁(注意:memcached版本必須要和repcached對應的兼容memcached的版本一致,否則會出現各種不兼容bug錯誤)

地址:http://mdounin.ru/

最新補丁:http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz

工作原理

repcached實現了memcached複製的功能,它是一個單master單slave的方案,但master/slave都是可讀寫的,而且可以相互同步,如果master壞掉slave偵測到連接斷了,它會自動listen而成爲master,這時壞掉的master只能啓用爲slave,它們之間互換角色,才能保持複製功能,換句話說,master沒有搶佔功能;而如果slave壞掉,master也會偵測到連接斷,它就會重新listen等待新的slave加入。

應用場景

用memcached做session共享或其它服務時會存在memcached的單點故障,如果memcached宕機,那麼整個系統用戶無法登陸(session)。

基於這種情況,採用repcached做memcached的主從冗餘

警告:repcached內存複製插件版本一定要和memcached版本一致,否則會出現版本不兼容等各種錯誤!

主從機器上必須都安裝repcached插件

wget https://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
wget http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz
tar zxvf memcached-1.4.13.tar.gz
gzip -d repcached-2.3.1-1.4.13.patch.gz
cd memcached-1.4.13
patch -p1 -i ../repcached-2.3.1-1.4.13.patch 以下命令路徑要切換成自己的安裝目錄,還有
./configure –prefix=/usr/local/mecached –with-libevent=/usr/local/libevent –enable-replication
make && make install

出現的錯誤以及解決方法:

錯誤一:

在解壓repcached文件時出現如下錯誤

gzip:stdin:not in gzip format

tar:Child returned status 1

tar:由於前面的延遲的錯誤而退出
這是因爲文件的下載鏈接不是直接指向文件,而是先指向一個頁面,在這個頁面裏纔是真的下載鏈接,所以在前一個頁面上直接保存文件,實際上保存的是一個頁面。

解決辦法:

首先用 file 命令查看該文件的真實屬性,根據真實屬性選擇解壓命令即可解決,遇到這樣的錯誤提示記得查看該文件的真實屬性,我這裏file repcached-2.3.1-1.4.13.patch.gz得到的文件屬性居然是html文件類型的,好傢伙,難怪會提示不是gzip類型文件呢,原來是下載鏈接地址在wget 下下載的是html頁面跳轉地址,通過瀏覽器輸入(如下)下載地址回車就得到了原始真實repcached的gzip包文件

http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz

錯誤二:
關於下面谷歌memcached源碼包地址打不開的問題:

wget https://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

   去掉https模式改用http模式試試

wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz

   如果還無法打開源碼包,可能是谷歌被封了,或者地址遷移了,請從下面鏈接地址進行下載即可:

   csdn memcached-1.4.13下載地址:http://download.csdn.net/detail/liaowuxukong/4578543

安裝完畢了,下面我們來啓動主從memcached服務器,主機爲本地192.168.1.10 11211端口,從機爲192.168.1.11 服務器的11211端口
/usr/local/memcached/bin/memcached -d -m -p 11211 -u nobody -l 192.168.1.10 -x 192.168.1.11 -X 11212 -P /tmp/localhost_master.pid -vv
注意:在使用keepalived做主備自動切換時去掉-l參數,否則會導致keepalived 無法監聽綁定虛擬IP到主機上
/usr/local/memcached/bin/memcached -d -m -p 11211 -u nobody -l 192.168.1.11 -x 192.168.1.10 -X 11212 -P /tmp/localhost_slave.pid -vv

參數說明:
-x 設置從哪個IP上進行同步。
-X 指定數據同步的端口。
-d 選項是啓動一個守護進程,
-m 是分配給Memcache使用的內存數量,單位是MB,我這裏是8096MB,
-u 是運行Memcache的用戶,我這裏是root,
-l 是監聽的服務器IP地址,如果有多個地址的話,我這裏指定了服務器的IP地址192.168.77.105,
-p 是設置Memcache監聽的端口,我這裏設置了11211,最好是1024以上的端口,
-c 選項是最大運行的併發連接數,默認是1024,按照你服務器的負載量來設定,
-P 是設置保存Memcache的pid文件的位置

查看端口

netstat -tupln | grep memcached
tcp 0 0 192.168.1.10:11211 0.0.0.0:* LISTEN 12242/memcached
udp 0 0 192.168.1.10:11211 0.0.0.0:* 12242/memcached

驗證數據同步

在Master創建數據:
[root@test01 bin]# telnet 192.168.1.10 11211

Trying 192.168.1.10…
Connected to 192.168.1.10.
Escape character is ‘^]’.
get key1
END
set key1 0 0 2
aa
STORED
quit
Connection closed by foreign host.

在Slave獲取數據:
[root@test02 bin]# telnet 192.168.1.11 11211

Trying 192.168.1.11…
Connected to 192.168.1.11.
Escape character is ‘^]’.
get key1
VALUE key1 0 2
aa
END
quit
Connection closed by foreign host.

在Slave創建數據:
[root@test02 bin]# telnet 192.168.1.11 11211

Trying 192.168.1.11…
Connected to 192.168.1.11.
Escape character is ‘^]’.
get key2
END
set key2 0 0 3
bbb
STORED
get key2
VALUE key2 0 3
bbb
END
quit
Connection closed by foreign host.

在Master獲取數據:
[root@test01 bin]# telnet 192.168.1.10 11211

Trying 192.168.1.10…
Connected to 192.168.1.10.
Escape character is ‘^]’.
get key2
VALUE key2 0 3
bbb
END
quit
Connection closed by foreign host.

Memcached高可用

啓動Master和Slave時不要加-l參數指定監聽地址,否則keepalived無法監聽VIP的地址。
然後配置上keepalived就可以作爲高可用了。
以下是keppalived配置信息,在此就不多數了,相信大家都熟悉keepalived的作用了
MASTER 主機 配置信息
! Configuration File for keepalived

global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 101 主機 爲 101
advert_int 1
authentication {
auth_type PASS 驗證類型
auth_pass 1111 驗證密碼自己修改即可,記得主備機上的密碼要一致
}
virtual_ipaddress {
192.168.1.120 虛擬IP 地址
}
}

SLAVE 從機 配置信息
! Configuration File for keepalived

global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 100 從機 爲 100
advert_int 1
authentication {
auth_type PASS 驗證類型
auth_pass 1111 驗證密碼自己修改即可,記得主備機上的密碼要一致
}
virtual_ipaddress {
192.168.1.120 虛擬IP 地址
}
}

通過虛擬IP進行memcached 存取操作
[root@localhost happy]# telnet 192.168.1.120 11211
Trying 192.168.1.120…
Connected to 192.168.1.120.
Escape character is ‘^]’.
set key 0 0 6
123456
STORED
get key
VALUE key 0 6
123456
END
get key1
VALUE key1 0 2
aa
END
quit
Connection closed by foreign host.
OK keepalived + memcached主備模式到此設置完成了,下面我們來停止一臺機器上的keepalived模擬down機,然後再用虛擬IP 192.168.1.120鏈接memcached並對其進行讀寫,看下能否正常訪問到memcached數據就知道了主備模式是否健全了
[root@localhost happy]# telnet 192.168.1.120 11211
Trying 192.168.1.120…
Connected to 192.168.1.120.
Escape character is ‘^]’.
get key
VALUE key 0 6
123456
END
get key1
VALUE key1 0 2
aa
END
quit
Connection closed by foreign host.

OK MEMCACHED一切正常,不僅memcached實現了內存複製,而且keepalived運行也一切正常,至此一個完整可靠的memcached主備模式構建完成了。。。
關於Mecached和php memcached擴展安裝方法請參見 摘取天上星 的另外一篇博文:http://blog.csdn.net/zqtsx/article/details/26720849

本教程所使用軟件包下載地址

memcached1.4.13
http://download.csdn.net/detail/zqtsx/8910705
repcached-1.4.13
http://download.csdn.net/detail/zqtsx/8910709

發佈了166 篇原創文章 · 獲贊 208 · 訪問量 132萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章