Изменение лидерства кластера зоопарка, когда лидер умирает

Далеко внизу вы можете найти файлы docker-compose.yml.

Предпосылки:

Я запускаю 3 сервера zookeeper как кластер, используя docker-compose (docker-compose.yml, 3 zookeepers), затем добавляю 4. один (еще один docker-compose.yml, 1 zookeeper) в кластер. Лидером является один из первых трех зоопарков, как и ожидалось, четвертый.

Проблема:

Когда я останавливаю первых трех зоопарков (с помощью docker-compose down), Я "теряю" лидера и ожидаю, что 4. зоопарк возьмет лидерство.

Единственное, что происходит, это то, что zookeeper показывает ошибки, например:

WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888
java.net.ConnectException: Connection refused

дела echo stat | nc localhost 52181 | grep Mode ранее вернул режим follower за этот последний зоопарк и сейчас ничего не возвращает.

Все еще работающий сервер zookeeper только говорит, например:

INFO Closed socket connection for client /127.0.0.1:43548 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn)

Решение 1:

  • Увеличение сроков не помогло, тот же результат:

    ZOOKEEPER_TICK_TIME: 4000

    ZOOKEEPER_INIT_LIMIT: 30

    ZOOKEEPER_SYNC_LIMIT: 15

Решение 2:

  • Другой способ Aorund:

Когда я сначала запускаю один сервер zookeeper (без других запущенных), он просто возвращает сообщения об ошибках (см. Ошибки выше) и, очевидно, работает неправильно echo stat | nc localhost 52181 | grep Mode опять ничего не возвращает.

Когда я затем добавляю остальные 3 зоопарка в кластер, все работает хорошо, и первый сервер зоопарка является leader,

Убийство первого зоопарка оставляет 3 бега, и один из них - новый leader,

Вопрос:

  • Я ожидаю, что если оставить в кластере одного зоопарка, он станет "лидером".
  • Он работает "наоборот", как описано в решении 2 (но тогда не один, а три зоопарка оставлены работающими, только один убит).
  • Почему он не работает так, как описано в проблеме, оставляя одного zookeeper в качестве лидера или одного рабочего сервера zookeeper, соответственно?

Файлы docker-compose.yml:

Я запускаю 3 сервера zookeeper с помощью docker-compose и следующего docker-compose.yml:

---
version: '2'
services:
  zookeeper_1:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 22181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
  zookeeper_2:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 2
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
  zookeeper_3:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 3
      ZOOKEEPER_CLIENT_PORT: 42181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888

Я начинаю 4. таким же образом:

---
version: '2'
services:
  zookeeper_4:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 4
      ZOOKEEPER_CLIENT_PORT: 52181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888

1 ответ

Решение

Имейте в виду одну вещь: zookeeper будет работать только в том случае, если работает большинство серверов. так что если у вас есть 4 сервера и вы отключите 3 из них, zookeeper будет работать только при запуске еще двух серверов.

какую версию zookeeper вы используете? если это до 3.5 или (вы используете 3.5 и не используете команды переконфигурирования), вам нужно будет перезапустить серверы, когда вы измените конфигурации.

Другие вопросы по тегам