Назад | Перейти на главную страницу

repcached не работал при репликации с 2 серверов?

Я скомпилировал 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)