使用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:

 # 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 

我正在改变1121711217 ,这应该马上开始工作。 我想你已经开始使用默认设置,看看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)