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的地址。
復制:11211的數據復制到11212中
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版本