由於 Memcached 自己沒有防止單點的措施,因為為了保障 Memcached 服務的高可用,我們需要藉助外部的工具來實現高可用的功能。本文引入 Repcached 這個工具,通過使用該工具我們可以完成 Memcached 服務的主從功能。
Repcached 它是由日本人開發的,用來實現 Memcached 複製功能的一個工具。它所構建的主從方案是一個單主單從的方案,不支援多主多從。但是,它的特點是,主從兩個節點可以互相讀寫,從而可以達到互相同步的效果。
假設主節點壞掉,從節點會很快偵測到連線斷開,然後它會自動切換到監聽狀態( listen)從而成為主節點,並且等待新的從節點加入。
假設原來掛掉的主節點恢復之後,我們只能人工手動以從節點的方式去啟動。原來的主節點並不能搶佔成為新的主節點,除非新的主節點掛掉。這也就意味著,基於 Repcached 實現的 Memcached 主從,針對主節點並不具備搶佔功能。
假設從節點壞掉,主節點也會很快偵測到連線斷開,然後它就會重新切換到監聽狀態(listen),並且等待新的從節點加入。
假設主從節點都掛掉,則資料就丟失了!因此,這是 Repcached 的一個短板,不過後期我們可以通過結合其它的工具來彌補這個缺點。
OK,簡單介紹到這裡。下面我們通過實驗來看,基於 Repcached 的 Memcached 主從架構是如何部署,以後如何測試和管理的。
上篇:Memcached實戰之單機部署----單例項/多例項 http://www.linuxidc.com/Linux/2014-08/106020.htm
環境:
- CentOS 6.5 x86_64位 採用最小化安裝,系統經過了基本優化
- selinux 為關閉狀態,iptables 為無限制模式
- 主機名:nolinux
- 原始碼包存放位置:/usr/local/src
- libevent版本:2.0.21
- memcached版本:1.4.20
Memcached 安裝及啟動指令碼 http://www.linuxidc.com/Linux/2013-07/87641.htm
PHP中使用Memcached的效能問題 http://www.linuxidc.com/Linux/2013-06/85883.htm
Ubuntu下安裝Memcached及命令解釋 http://www.linuxidc.com/Linux/2013-06/85832.htm
Memcached的安裝和應用 http://www.linuxidc.com/Linux/2013-08/89165.htm
使用Nginx+Memcached的小圖片儲存方案 http://www.linuxidc.com/Linux/2013-11/92390.htm
Memcached使用入門 http://www.linuxidc.com/Linux/2011-12/49516p2.htm
一、基礎環境準備
[root@master ~]# yum -y install gcc gcc-c++
二、Memcached安裝
1、安裝libevent
[root@master ~]#cd /usr/local/src
[root@master src]# wget http://code.taobao.org/p/nolinux/src/memcached/src/libevent-2.0.21-stable.tar.gz?orig
[root@master src]# tar zxvf libevent-2.0.21-stable.tar.gz
[root@master src]# cd libevent-2.0.21-stable
[root@master libevent-2.0.21-stable]# ./configure --prefix=/usr
[root@master libevent-2.0.21-stable]# make
[root@master libevent-2.0.21-stable]# make install
[root@master libevent-2.0.21-stable]# ll /usr/lib/libevent* # libevent安裝完後,會在/usr/lib目錄下出現如下內容
lrwxrwxrwx 1 root root 21 Aug 11 13:49 /usr/lib/libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
-rwxr-xr-x 1 root root 968690 Aug 11 13:49 /usr/lib/libevent-2.0.so.5.1.9
-rw-r--r-- 1 root root 1571802 Aug 11 13:49 /usr/lib/libevent.a
lrwxrwxrwx 1 root root 26 Aug 11 13:49 /usr/lib/libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
-rwxr-xr-x 1 root root 585225 Aug 11 13:49 /usr/lib/libevent_core-2.0.so.5.1.9
-rw-r--r-- 1 root root 978482 Aug 11 13:49 /usr/lib/libevent_core.a
-rwxr-xr-x 1 root root 970 Aug 11 13:49 /usr/lib/libevent_core.la
lrwxrwxrwx 1 root root 26 Aug 11 13:49 /usr/lib/libevent_core.so -> libevent_core-2.0.so.5.1.9
lrwxrwxrwx 1 root root 27 Aug 11 13:49 /usr/lib/libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x 1 root root 404852 Aug 11 13:49 /usr/lib/libevent_extra-2.0.so.5.1.9
-rw-r--r-- 1 root root 593392 Aug 11 13:49 /usr/lib/libevent_extra.a
-rwxr-xr-x 1 root root 977 Aug 11 13:49 /usr/lib/libevent_extra.la
lrwxrwxrwx 1 root root 27 Aug 11 13:49 /usr/lib/libevent_extra.so -> libevent_extra-2.0.so.5.1.9
-rwxr-xr-x 1 root root 935 Aug 11 13:49 /usr/lib/libevent.la
lrwxrwxrwx 1 root root 30 Aug 11 13:49 /usr/lib/libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
-rwxr-xr-x 1 root root 18430 Aug 11 13:49 /usr/lib/libevent_pthreads-2.0.so.5.1.9
-rw-r--r-- 1 root root 18670 Aug 11 13:49 /usr/lib/libevent_pthreads.a
-rwxr-xr-x 1 root root 998 Aug 11 13:49 /usr/lib/libevent_pthreads.la
lrwxrwxrwx 1 root root 30 Aug 11 13:49 /usr/lib/libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
lrwxrwxrwx 1 root root 21 Aug 11 13:49 /usr/lib/libevent.so -> libevent-2.0.so.5.1.9
[root@master libevent-2.0.21-stable]# cd ..
2、安裝memcached
[root@master src]# tar zxvf memcached-1.4.20.tar.gz
[root@master src]# cd memcached-1.4.20
[root@master memcached-1.4.20]# ./configure --with-libevent=/usr
[root@master memcached-1.4.20]# wget http://code.taobao.org/p/nolinux/src/memcached/src/memcached-1.4.20.tar.gz?orig
[root@master memcached-1.4.20]# make
[root@master memcached-1.4.20]# make install
[root@master memcached-1.4.20]# cd ..
[root@master src]# ll /usr/local/bin/memcached # 安裝完成後會把memcached 放到 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 341907 Aug 11 13:52 /usr/local/bin/memcached
注意:如果中間出現報錯,請仔細檢查錯誤資訊,按照錯誤資訊來配置或者增加相應的庫或者路徑
三、repcached安裝
方式一:使用repcached版本
[root@master src]# wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
[root@master src]# tar zxf memcached-1.2.8-repcached-2.2.tar.gz
[root@master src]# cd memcached-1.2.8-repcached-2.2
方式二:使用patch版本
[root@master memcached-1.2.8-repcached-2.2]# wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
[root@master memcached-1.2.8-repcached-2.2]# gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1
[root@master memcached-1.2.8-repcached-2.2]# ./configure --enable-replication
[root@master memcached-1.2.8-repcached-2.2]# make
[root@master memcached-1.2.8-repcached-2.2]# make install
[root@master memcached-1.2.8-repcached-2.2]# cd ..
以上操作,我們需要針對主節點和備節點都操作!這裡我僅僅以主節點的部署為例!切記!
四、啟動配置
1、啟動master
[root@master ~]# memcached -v -d -p 11211 -l 192.168.0.102 -u root -P /tmp/memcached1.pid
[root@master ~]# replication: listen
[root@master ~]# replication: accept
2、啟動salve
[root@slave src]# memcached -v -d -p 11211 -l 192.168.0.103 -u root -x 192.168.0.102 -P /tmp/memcached1.pid
[root@slave src]# replication: connect (peer=192.168.0.102:11212)
replication: marugoto copying
replication: start
[root@slave src]#
3、回到master節點
[root@master ~]# replication: accept # 啟動正常後,master 將 accept
五、測試
由於我們主節點和從節點的memcached服務都騎起來了,並且監聽也都正常,所以以下的測試操作全部放到master節點進行。
[root@master ~]# telnet 192.168.0.102 11211 # 連線到我們主節點,新增一個記錄
Trying 192.168.0.102...
Connected to 192.168.0.102.
Escape character is '^]'.
set key 0 0 6
sunsky
STORED
quit
Connection closed by foreign host.
[root@master ~]# telnet 192.168.0.103 11211 # 連線到我們的從節點,檢視主節點的記錄是否同步過來
Trying 192.168.0.103...
Connected to 192.168.0.103.
Escape character is '^]'.
get key
VALUE key 0 6
sunsky
END
quit
Connection closed by foreign host.
[root@master ~]# pkill memcached # 現在,殺掉我們主節點的memcached程式
replication: cleanup start
replication: close
replication: cleanup complete
[root@slave src]# replication: close # 備節點此時變為監聽狀態,即變成了主節點
replication: listen
[root@master ~]# telnet 192.168.0.103 11211 # 檢視從節點上面的資料是否還存在
Trying 192.168.0.103...
Connected to 192.168.0.103.
Escape character is '^]'.
get key
VALUE key 0 6
sunsky
END
quit
Connection closed by foreign host.
[root@master ~]# memcached -v -d -p 11211 -l 192.168.0.102 -u root -x 192.168.0.103 -P /tmp/memcached.pid # 由於memcached的主/從沒有搶佔功能,因此主恢復之後,只能作為現有主節點的從節點[root@master ~]# replication: connect (peer=192.168.0.103:11212)
replication: marugoto copying
replication: start
[root@slave src]# replication: accept # 在上面加入之後,下面之前的從節點就會蹦出如下輸入,表示開啟同步
replication: marugoto start
replication: marugoto 1
replication: marugoto owari
[root@master ~]# telnet 192.168.0.102 11211 # 我們連線到剛剛恢復的節點,可以看到資料又回來了
Trying 192.168.0.102...
Connected to 192.168.0.102.
Escape character is '^]'.
get key
VALUE key 0 6
sunsky
END
quit
Connection closed by foreign host.
以上就是我們做的關於memcached基於repcached的主從複製實驗了。通過實驗,我們可以看出,通過他我們實現了主從中任何一個當機,都不會影響另外一臺機器上的資料。
在文章最後,我們再來總結以下基於 Repcached 的 Memcached 主從的優缺點:
優點:
1、能夠實現 cache 的冗餘功能
2、主從之間可以互相讀寫
缺點:
1、儘可以一主一從,單對單
轉自
Memcached實戰之複製----基於repcached的主從_伺服器應用_Linux公社-Linux系統入口網站
https://www.linuxidc.com/Linux/2014-08/106021.htm