Memcached-Repcached小小探測html
忘記在什麼地方,看到一個memcache的文檔,當時看到在啓動memcached服務的時候,有兩個參數-x與-X,當時很奇怪,之前也作過memcached方面的實驗,但也沒有見過這兩個參數,因而拉出來之前的實驗環境,查看help,也沒有此參數,便心想,本身對memcached也只是有一個初步的瞭解,多是遺漏了什麼內容,因而在網上搜了搜,總算搞清楚了是什麼回事。linux
-x與-X參數並不是來自於原生的memcached參數,它是由一個Memcached的變種產品repcached因此提供,repcached由日本人開發,能夠說是Memcached的一個patch,爲了實現Memcached的複製功能,能夠支持多個Memcached之間相互複製,解決了Memcached的容災問題。shell
Repcached是一個單master單slave的方案,它的master/slave都是可讀寫的,並且能夠同步,若是master掛掉,slave偵測到鏈接斷了,就會自動listen而成爲master,若是slave掛掉,master也會偵測到鏈接已經斷開,而且從新偵聽,等待slave加入。vim
知道了緣由,固然要動手操做一下,找了兩臺實驗機,作一個主備。服務器
Repcached有兩種安裝形式,一種是以Memcached的補丁形式,只有Repcached補丁,在爲本身的Memcached打補丁的時候,要選對應的Repcached補丁,別一種是集成的形式,包中直接集成Memcached與Repcached,本次主要之後者實驗。app
實驗環境:master: red hat5.4 IP :192.168.2.13異步
Slave: red hat 5.4 IP:192.168.2.14tcp
軟件包:libevent-2.0.21-stable.tar.gzide
memcached-1.2.8-repcached-2.2.1.tar.gzmemcached
注:master與slave服務器的配置均相同,再也不重複貼出
1.Libevent安裝
Memcached是基於libevent的事件處理機制,Libevent是由C開發的程序庫,它把BSD系統的kqueue與linux的epoll等事件處理功能封閉成一個接口。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上進行數據同步,也就是Master的IP
-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