我用–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:
# 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到11217 ,这应该马上开始工作。 我想你已经开始使用默认设置,看看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)与用于提供caching的端口(11211)不同。
两台机器上的复制端口必须相同,并且必须可以从其他各个接口访问。 两个节点上的服务端口设置为相同,因为两个节点都连接到与客户端相同的端口。 这在MySQL中模仿了Master-Master-Replication之类的设置。
对不起,这是我的错误。 它应该是11216(在服务器1上使用2个实例进行testing时,我与端口混淆了)。
在您的博客上,您没有指定要复制的TCP端口( -X )。 默认情况下,它是11212,而不是11211,因此你不能telnet到11211.另外,你在DAEMON_ARGS中的IP地址是192.168.168.62,而不是192.168.168.2。
我再次testing,当telnet时仍然出现“Connection refused”错误。 以下是详细信息:
在106上启动memcached:
# /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: listen failed to listen replication: accept
在82:上启动memcached
# /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 replication: start
在106:
# lsof -i :11216 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME memcached 777 memcached 7u IPv4 10701963 TCP 192.168.7.106:11216->192.168.3.82:60861 (ESTABLISHED)
在82:
# lsof -i :11216 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME memcached 18305 memcached 6u IPv4 55702870 TCP 192.168.3.82:60861->192.168.7.106:11216 (ESTABLISHED) memcached 18305 memcached 9u IPv4 55702872 TCP 192.168.3.82:11216 (LISTEN)
用telnet进行testing:
# telnet 192.168.7.106 11216 Trying 192.168.7.106... telnet: connect to address 192.168.7.106: Connection refused telnet: Unable to connect to remote host: Connection refused
我也尝试将memcached绑定到任何接口(没有具体的-l当启动),但它仍然不听11216端口:
$ ps -ef | grep 11216 502 2305 1 0 10:37 ? 00:00:00 /usr/local/memcached/bin/memcached -v -d -u memcached -p 11216 -c 2048 -m 512 -P /usr/local/memcached/var/run/test.pid -x 192.168.3.82 -X 11216 # lsof -i :11216 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME memcached 2305 memcached 7u IPv6 10707474 TCP 192.168.7.106:11216->192.168.3.82:47534 (ESTABLISHED)