Я скомпилировал memcached-repcached с параметром --enable-replication и запустил его, как показано ниже:
на сервере 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 подключается только к экземпляру memcached на сервере 1, он не прослушивает порт 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
к 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)!
Порт репликации должен быть одинаковым на обеих машинах и должен быть доступен через интерфейсы друг друга. Обслуживающий порт настроен таким образом, чтобы он был одинаковым на обоих узлах, поскольку оба узла также подключаются к тем же портам, что и клиенты. Это имитирует настройку типа Master-Master-Replication в MySQL.
Извини, это моя ошибка. Должно быть 11216 (я перепутал с портом при тестировании с 2 экземплярами на сервере 1).
В своем блоге вы не указали TCP-порт для репликации (-ИКС). По умолчанию это 11212, а не 11211, поэтому вы не можете использовать telnet для 11211. Более того, у вас есть опечатка в IP-адресе в DAEMON_ARGS: 192.168.168.62 вместо 192.168.168.2.
Я проверил снова, и все еще получал ошибку «Соединение отклонено» при использовании telnet. Ниже приведены подробности:
Запустите memcached на 106:
# /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
Запустите memcached на 82:
# /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:
# 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)