天天看點

Memcached 高可用方案 Repcached

Repcached說明    Repcached是一個單master單 slave的方案,但它的 master/slave都是可讀寫的,而且可以互相同步。如果 master down掉, slave偵測到連接配接斷了,它會自動 listen而成為 master;而如果 slave壞掉, master也會偵測到連接配接斷,它就會重新 listen等待新的 slave加入。 

Repcached 安裝:1:安裝條件(root使用者執行)

apt-get install libevent-dev      
wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz      

2:解壓&進入目錄編譯

root@m2:~/nosql# tar zxvf memcached-1.2.8-repcached-2.2.tar.gz

cd memcached-1.2.8-repcached-2.2/

./configure --enable-replication --program-transform-name=s/memcached/repcached/

make&&make install      

注意:make的時候報錯

memcached.c: 在函數‘add_iov’中:
memcached.c:696:30: 錯誤: ‘IOV_MAX’未聲明(在此函數内第一次使用)
memcached.c:696:30: 附注: 每個未聲明的辨別符在其出現的函數内隻報告一次
make[2]: *** [memcached-memcached.o] 錯誤 1      

需要修改 memcached.c 檔案:

/* FreeBSD 4.x doesn't have IOV_MAX exposed. */
#ifndef IOV_MAX
#if defined(__FreeBSD__) || defined(__APPLE__)
# define IOV_MAX 1024
#endif
#endif

改成:

/* FreeBSD 4.x doesn't have IOV_MAX exposed. */
#ifndef IOV_MAX
# define IOV_MAX 1024
#endif      

再make&&make install,編譯之後退出root使用者。

開啟repcached:

啟動master:[必須是11211端口]

1:
zhoujy@m2:~$ repcached -d -m 64 -p 11211 -u nobody -l 127.0.0.1 -v
zhoujy@m2:~$ replication: listen
或則:
2:
zhoujy@m2:~$ repcached -d -m 64 -p 11211 -u nobody -l 127.0.0.1 -x 127.0.0.1 -X 11111 -v    #(11211:master端口;11111:同步端口)
zhoujy@m2:~$ replication: connect (peer=127.0.0.1:11111)
replication: marugoto copying
replication: close
replication: listen      

啟動slave: -x:同行memcached的位址。

1:
zhoujy@m2:~$ repcached -d -m 64 -p 11212 -u nobody -l 127.0.0.1 -x 127.0.0.1  -v
zhoujy@m2:~$ replication: connect (peer=127.0.0.1:11212)
replication: marugoto copying
或則:
2:
zhoujy@m2:~$ repcached -d -m 64 -p 11212 -u nobody -l 127.0.0.1 -x 127.0.0.1 -X 11111 -v   #(11212:slave端口;11111:同步端口)
zhoujy@m2:~$ replication: connect (peer=127.0.0.1:11111)
replication: marugoto copying
replication: accept
replication: start      

複制:11211的資料複制到11212中

zhoujy@m2:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set a 0 0 3
abc
STORED
set aa 0 0 5
abcde
STORED
quit
Connection closed by foreign host.

zhoujy@m2:~$ telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get a
VALUE a 0 3
abc
END
get aa
VALUE aa 0 5
abcde
END      

反複制:11212 同步到了11211

set b 0 0 3
ABC
STORED
set bb 0 0 5
ABCDE
STORED

quit
Connection closed by foreign host.
zhoujy@m2:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get b
VALUE b 0 3
ABC
END
get bb
VALUE bb 0 5
ABCDE
END      

主從互相删除等操作都互相影響:

zhoujy@m2:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
delete aa
DELETED
delete bb
DELETED
quit
Connection closed by foreign host.
zhoujy@m2:~$ telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get aa
END
get bb
END
delete a
DELETED
get a
END
quit
Connection closed by foreign host.
zhoujy@m2:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get a
END
get b
VALUE b 0 3
ABC
END      

至此,上面的同步已經完成。

優點:
資料備援
兩台memcached都可以進行讀寫操作

缺點:
隻支援單對單
隻支援memcached 1.2.x版本      

擴充: