Memcached-Repcached小小探測

                          Memcached-Repcached小小探測

  忘記在什麼地方,看到一個memcache的文檔,當時看到在啓動memcached服務的時候,有兩個參數-x-X,當時很奇怪,以前也做過memcached方面的實驗,但也沒有見過這兩個參數,於是拉出來以前的實驗環境,查看help,也沒有此參數,便心想,自己對memcached也只是有一個初步的瞭解,可能是遺漏了什麼內容,於是在網上搜了搜,總算搞清楚了是什麼回事。

-x-X參數並非來自於原生的memcached參數,它是由一個Memcached的變種產品repcached所以提供,repcached由日本人開發,可以說是Memcached的一個patch,爲了實現Memcached的複製功能,可以支持多個Memcached之間相互複製,解決了Memcached的容災問題。

Repcached是一個單masterslave的方案,它的master/slave都是可讀寫的,而且可以同步,如果master掛掉,slave偵測到連接斷了,就會自動listen而成爲master,如果slave掛掉,master也會偵測到連接已經斷開,並且重新偵聽,等待slave加入。

知道了原因,當然要動手操作一下,找了兩臺實驗機,做一個主備。

Repcached有兩種安裝形式,一種是以Memcached的補丁形式,只有Repcached補丁,在爲自己的Memcached打補丁的時候,要選對應的Repcached補丁,別一種是集成的形式,包中直接集成MemcachedRepcached,本次主要以後者實驗。

實驗環境:master: red hat5.4   IP :192.168.2.13

         Slave: red hat 5.4     IP:192.168.2.14

軟件包:libevent-2.0.21-stable.tar.gz

                memcached-1.2.8-repcached-2.2.1.tar.gz

注:masterslave服務器的配置均相同,不再重複貼出

1.Libevent安裝

Memcached是基於libevent的事件處理機制,Libevent是由C開發的程序庫,它把BSD系統的kqueuelinuxepoll等事件處理功能封閉成一個接口。Memcached利用這個庫進行異步事件處理

# ./configure--prefix=/usr/local/libevent

# make && make install

安裝之後,將Libevent的庫文件添加到動態庫中

          # cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/libevent/lib              //此處爲要添加的libevent庫目錄

# ldconfig                        //重新加載動態lib

注:如果無此步驟,在啓動memcached時,會提示看不到libevent的庫文件。

2.Memcached-repcached安裝

## ./configure--prefix=/usr/local/memcachedrep --with-libevent=/usr/local/libevent--enable-replication --enable-64bit

# make && make install

如果在此處安裝時,出現錯誤代碼:

memcached.c: Infunction ‘add_iov’:

memcached.c:697:error: ‘IOV_MAX’ undeclared (first use in this function)

memcached.c:697:error: (Each undeclared identifier is reported only once

memcached.c:697:error: for each function it appears in.)

make[2]: ***[memcached-memcached.o] Error 1

make[2]: Leavingdirectory `/root/memcached/memcached-1.2.8-repcached-2.2.1'

make[1]: ***[all-recursive] Error 1

make[1]: Leavingdirectory `/root/memcached/memcached-1.2.8-repcached-2.2.1'

make: *** [all]Error 2

則需要手動修改源文件

# vim memcached.c

 55 /* FreeBSD 4.x doesn't have IOV_MAXexposed. */

 56 #ifndef IOV_MAX

 57 #if defined(__FreeBSD__) ||defined(__APPLE__)

 58 # define IOV_MAX 1024

 59 #endif

 60 #endif

修改爲:

 55 /* FreeBSD 4.x doesn't have IOV_MAXexposed. */

 56 #ifndef IOV_MAX

 57 /*#if defined(__FreeBSD__) ||defined(__APPLE__)*/

 58 # define IOV_MAX 1024

 59 #endif

 60 /*#endif*/

安裝過程比較簡單,主要是memcached  make時安裝出錯這兒會有點麻煩。

3.測試

首先啓動master/slave memcached.

啓動master memcached:

  #/usr/local/memcachedrep/bin/memcached -d -m 100 -l 192.168.2.13  -p 11211 -u root -c 1024 -X 11212 -P/tmp/memcached-rep.pid

查看memcached監聽端口:

    # netstat -tupln | grep memcached

tcp  0 0 0.0.0.0:11211   0.0.0.0:* LISTEN      12443/memcached    

tcp 0 0 :::11211             :::*  LISTEN      12443/memcached    

tcp 0 0 :::11212            :::*   LISTEN     12443/memcached    

udp 0 0 0.0.0.0:11211    0.0.0.0:*              12443/memcached    

udp 0 0 :::11211:::*                           12443/memcached  

啓動slave memcached

  #/usr/local/memcachedrep/bin/memcached -d -m 100 -l 192.168.2.14 -p 11211 -uroot -c 1024 -x 192.168.2.13 -X 11212 -P /tmp/memcached-rep.pid

查看memcached監聽端口:

       # netstat -tupln | grep memcached

tcp 0 0192.168.2.14:11211  0.0.0.0:*  LISTEN     22888/memcached    

udp 0 0 192.168.2.14:11211 0.0.0.0:*              22888/memcached  

參數:

    -x: 設置從哪個IP上進行數據同步,也就是MasterIP

    -X:設置數據同步的端口,默認爲11212,所以可以省略此參數,如果11212已經被另外的服務佔用的話,則必須使用此參數進行端口的指定。

其它的參數你可以直接使用:#/usr/local/memcachedrep/bin/memcached –h來獲取,當然獲取的也包括-x-X

鑑於本文主要是測試數據間的同步,所以只進行簡單的測試

1>連接到master服務器的11211端口,添加數據

Xshell:\>telnet 192.168.2.13 11211



Connectingto 192.168.2.13:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

set dd 00 3            //命令

ddd                  //命令

STORED

2>連接到slave服務器的11211端口進行取數據

Connectingto 192.168.2.13:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

get dd                   //命令

VALUE dd0 3

ddd

END

3>可以看到在slave服務器上也已經同步了數據。

4>我們也可以在slave服務器上寫數據,在master上讀數據

slave服務器上寫數據

Connectingto 192.168.2.14:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

get dd

VALUE dd0 3

ddd

END

set ee 00 3               //命令

eee                     //命令

STORED

master服務器上讀數據

Connectingto 192.168.2.13:11211...

Connectionestablished.

To escapeto local shell, press 'Ctrl+Alt+]'.

set dd 00 3

ddd

STORED

get ee

ERROR

get ee

VALUE ee0 3

eee

END

可以看到slave也可以寫數據,在master上可以讀數據,但是期間有一定的數據同步時間。就像上面第一次取數據時,並沒有取出,說明數據還沒有同步!

4.如果你願意的話,也可以將兩臺memcached服務器做成相互master/slave

參考鏈接:http://yjh625.blog.51cto.com/225746/1264696

         http://f.dataguru.cn/thread-179095-1-1.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章