Memcached實戰之複製----基於repcached的主從【轉】

weixin_33896726發表於2018-03-13

由於 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

相關文章