Memcached
使用 2 台伺服器複製時,repcached 不起作用?
我已經用 –enable-replication 選項編譯了 memcached-repcached,並像下面這樣啟動它:
在伺服器 1 上:
# /usr/local/memcached/bin/memcached -v -d -u memcached -l 192.168.7.106 -p 11216 -c 2048 -m 512 -P /usr/local/memcached/var/run/test.pid -x 192.168.3.82 -X 11216 # replication: connect (peer=192.168.3.82:11216) replication: marugoto copying replication: close replication: failed to initialize replication server socket
在伺服器 2 上:
# /usr/local/memcached/bin/memcached -v -d -u memcached -l 192.168.3.82 -p 11216 -c 2048 -m 512 -P /usr/local/memcached/var/run/test.pid -x 192.168.7.106 -X 11216 replication: connect (peer=192.168.7.106:11216) replication: marugoto copying
但似乎伺服器 2 只連接到伺服器 1 上的 memcached 實例,它沒有偵聽埠 11216:
# lsof -i :11216 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME memcached 12786 memcached 6u IPv4 55213579 TCP 192.168.3.82:56176->192.168.7.106:11216 (ESTABLISHED)
因此我無法在伺服器 2 上遠端登錄:
# telnet 192.168.3.82 11216 Trying 192.168.3.82... telnet: connect to address 192.168.3.82: Connection refused telnet: Unable to connect to remote host: Connection refused
但是,如果我嘗試僅在一台具有不同埠的伺服器上複製 2 個 memcached 實例,它就可以正常工作:
$ telnet 192.168.7.106 11216 Trying 192.168.7.106... Connected to 192.168.7.106. Escape character is '^]'. set foo 0 0 3 bar STORED $ telnet 192.168.7.106 11217 Trying 192.168.7.106... Connected to 192.168.7.106. Escape character is '^]'. marugoto_end rep foo 0 0 3 1 bar get foo VALUE foo 0 3 bar END
我錯過了什麼?
看起來你的埠設置不匹配:
-x 192.168.3.82 -X 11216
和
-x 192.168.7.106 -X 11216
使用相同的埠進行複制(可以,因為您使用不同的機器)
但是,你為什麼用其他埠啟動這些守護程序:
-l 192.168.7.106 -p 11217
和
-l 192.168.3.82 -p 11216
我建議更改
11217
為11216
,並且應該立即開始工作。我猜你已經開始使用預設設置來查看 repcached 基本工作,對吧?我的預設設置執行良好,例如: http: //marcusspiegel.de/2010/05/02/howto-install-memcached-with-repcached-build-in-server-side-replication-on-debian-lenny工作範例的輸出:
看看我是如何啟動 memcached(從 pstree 截斷的):
|-memcached,2915 -m 64 -p 11211 -u root -P /var/run/memcachedrep.pid -d -x 192.168.18.11
在另一個節點上:
|-memcached,2965 -m 64 -p 11211 -u root -P /var/run/memcachedrep.pid -d -x 192.168.18.10
使用的埠:
tcp 0 0 192.168.18.11:54122 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.11:54133 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.11:54130 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.11:54125 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.11:52466 192.168.18.10:11211 TIME_WAIT - tcp6 0 0 192.168.18.11:11212 192.168.18.10:37881 VERBUNDEN 2965/memcached
和另一個節點
tcp 0 0 192.168.18.10:57768 192.168.18.10:11211 TIME_WAIT - tcp 0 0 192.168.18.10:45406 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.10:45412 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.10:56134 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.10:40624 192.168.18.10:11211 TIME_WAIT - tcp 0 0 192.168.18.10:37881 192.168.18.11:11212 VERBUNDEN 2915/memcached tcp 0 0 192.168.18.10:57750 192.168.18.10:11211 TIME_WAIT - tcp 0 0 192.168.18.10:45428 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.10:45419 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.10:45410 192.168.18.11:11211 TIME_WAIT - tcp 0 0 192.168.18.10:57766 192.168.18.10:11211 TIME_WAIT -
請記住 ,用於複製的埠 (11212) 與用於服務記憶體的埠 (11211) 不同!
兩台機器上的複制埠必須相同,並且必須可以從彼此的介面訪問。兩個節點上的服務埠設置為相同,因為兩個節點也連接到與客戶端相同的埠。這模仿了 MySQL 中的 Master-Master-Replication 之類的設置。