Тестовый запуск кластера ZooKeeper (2 узла)#

Тестовый запуск кластера ZooKeeper из двух узлов производится на двух удаленных серверах:

Server-1: `<host1-ip-address>`
Server-2: `<host2-ip-address>`

Дополнительная информация:

  • имя пользователя: mon99usr;

  • $KAFKA_HOME: /home/mon99usr/kafka_<версия Scala>-<версия Kafka>, где $KAFKA_HOME — корневая директория дистрибутива Corax.

Для тестового запуска кластера ZooKeeper выполните следующие действия:

  1. На каждом из серверов создайте директорию, где будут храниться данные ZooKeeper:

    mkdir --p /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/
    
  2. На каждом из серверов создайте файл myid в директории /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/, созданной на предыдущем шаге (1). Запишите в файл соответствующий уникальный идентификатор узла ZooKeeper:

    • на сервере Server-1 в файл myid запишите 1:

      echo 1 > /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/myid
      cat /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/myid
      1
      
    • на сервере Server-2 в файл myid запишите 2:

      echo 2 > /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/myid
      cat /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/myid
      2
      
  3. Внесите следующие настройки в файл конфигурации KAFKA_DIR/config/zookeeper.properties для обоих серверов:

    server.1=<host1-ip-address>:<port 1>:<port 2>
    server.2=<host2-ip-address>:<port 1>:<port 2>
    clientPort=2181
    dataDir=/var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/
    maxClientCnxns=60
    tickTime=2000
    initLimit=10
    syncLimit=5
    

    Где:

    • dataDir — директория для хранения данных ZooKeeper, которая была создана на шаге (1).

    • server.1 — адрес Server-1; число 1 в server.1 — это myid сервера Server-1;

    • server.2 — адрес Server-2; число 2 в server.2 — это myid сервера Server-2.

  4. Запустите кластер ZooKeeper из двух узлов:

    • Выполните запуск узла ZooKeeper на Server-1:

      bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
      && tail --f logs/zookeeper.out
      
      bin/zookeeper-server-start.sh config/zookeeper.properties
      
      [2016-03-22 15:25:19,172] INFO Reading configuration from: config/zookeeper.properties
      
      [2016-03-22 15:25:19,174] WARN No server failure will be tolerated. You need at least 3 servers
      
      [2016-03-22 15:25:19,174] INFO Defaulting to majority quorums
      
      [2016-03-22 15:25:19,179] INFO autopurge.snapRetainCount set to 3
      
      [2016-03-22 15:25:19,179] INFO autopurge.purgeInterval set to 0
      
      [2016-03-22 15:25:19,179] INFO Purge task is not scheduled.
      
      [2016-03-22 15:25:19,198] INFO Starting quorum peer
      
      [2016-03-22 15:25:19,210] INFO binding to port 0.0.0.0/0.0.0.0:2181
      
      [2016-03-22 15:25:19,234] INFO tickTime set to 2000
      
      [2016-03-22 15:25:19,234] INFO minSessionTimeout set to -1
      
      [2016-03-22 15:25:19,234] INFO maxSessionTimeout set to -1
      
      [2016-03-22 15:25:19,234] INFO initLimit set to 10
      
      [2016-03-22 15:25:19,247] INFO Reading snapshot /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2/snapshot.700000001
      
      [2016-03-22 15:25:19,260] INFO My election bind port: <host1-ip-address>:3888
      
      [2016-03-22 15:25:19,270] INFO New election. My id = 1, proposed zxid=0x700000001
      
      [2016-03-22 15:25:19,272] INFO Notification: 1 (message format version), 1 (n.leader), 0x700000001 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x8 (n.peerEpoch) LOOKING (my state) (org.apache.zookeeper.server.quorum.FastLeaderElection)
      
      [2016-03-22 15:25:19,284] WARN Cannot open channel to 2 at election address /<host2-ip-address>:3888
      
      java.net.ConnectException: Connection refused
      
      at java.net.PlainSocketImpl.socketConnect(Native Method)
      
      ...
      
      [2016-03-22 15:25:19,892] INFO Notification time out: 800 (org.apache.zookeeper.server.quorum.FastLeaderElection)
      
      [2016-03-22 15:25:20,172] INFO Received connection request /<host2-ip-address>:45491 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
      
      [2016-03-22 15:25:20,379] INFO FOLLOWING
      
      [2016-03-22 15:25:20,384] INFO TCP NoDelay set to: true
      
      [2016-03-22 15:25:20,390] INFO Server environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
      
      [2016-03-22 15:25:20,390] INFO Server environment:host.name=SBT-IPO-203.youre.adress.ru
      
      [2016-03-22 15:25:20,390] INFO Server environment:java.version=1.8.0_60
      
      [2016-03-22 15:25:20,390] INFO Server environment:java.home=/usr/java/jre1.8.0_60
      
      [2016-03-22 15:25:20,390] INFO Server environment:java.class.path=:/home/mon99usr/kafka_2.13-3.9.1/bin/..
      
      [2016-03-22 15:25:20,391] INFO Server environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
      
      [2016-03-22 15:25:20,391] INFO Server environment:java.io.tmpdir=/tmp
      
      [2016-03-22 15:25:20,391] INFO Server environment:java.compiler=\<NA\>
      
      [2016-03-22 15:25:20,391] INFO Server environment:os.name=Linux
      
      [2016-03-22 15:25:20,391] INFO Server environment:os.arch=amd64
      
      [2016-03-22 15:25:20,391] INFO Server environment:os.version=3.10.0-123.9.3.el7.x86_64
      
      [2016-03-22 15:25:20,391] INFO Server environment:user.name=mon99usr
      
      [2016-03-22 15:25:20,391] INFO Server environment:user.home=/home/mon99usr
      
      [2016-03-22 15:25:20,391] INFO Server environment:user.dir=/home/mon99usr/kafka_2.13-3.9.1
      
      [2016-03-22 15:25:20,393] INFO Created server with tickTime 2000 minSessionTimeout 4000 maxSessionTimeout 40000 datadir /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2 snapdir /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2
      
      [2016-03-22 15:25:20,394] INFO FOLLOWING - LEADER ELECTION TOOK - 1124 (org.apache.zookeeper.server.quorum.Learner)
      
      [2016-03-22 15:25:20,421] INFO Getting a diff from the leader 0x700000001 (org.apache.zookeeper.server.quorum.Learner)
      
      [2016-03-22 15:25:20,425] INFO Snapshotting: 0x700000001 to /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2/snapshot.700000001
      

      Запуск выполнен успешно.

    • Выполните запуск узла ZooKeeper на Server-2:

      bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
      && tail --f logs/zookeeper.out
      
      [mon99usr\@SBT-IPO-204 kafka_2.13-3.9.1]\$
      bin/zookeeper-server-start.sh config/zookeeper.properties
      
      [2016-03-22 15:25:19,874] INFO Reading configuration from:
      config/zookeeper.properties
      
      [2016-03-22 15:25:19,878] WARN No server failure will be tolerated. You need at least 3 servers.
      
      [2016-03-22 15:25:19,878] INFO Defaulting to majority quorums
      
      [2016-03-22 15:25:19,889] INFO autopurge.snapRetainCount set to 3
      
      [2016-03-22 15:25:19,889] INFO autopurge.purgeInterval set to 0
      
      [2016-03-22 15:25:19,889] INFO Purge task is not scheduled.
      
      [2016-03-22 15:25:19,941] INFO Starting quorum peer
      
      [2016-03-22 15:25:19,971] INFO binding to port 0.0.0.0/0.0.0.0:2181
      
      [2016-03-22 15:25:20,037] INFO tickTime set to 2000
      
      [2016-03-22 15:25:20,037] INFO minSessionTimeout set to -1
      
      [2016-03-22 15:25:20,037] INFO maxSessionTimeout set to -1
      
      [2016-03-22 15:25:20,038] INFO initLimit set to 10
      
      [2016-03-22 15:25:20,128] INFO My election bind port: /<host2-ip-address>:3888
      
      [2016-03-22 15:25:20,152] INFO LOOKING
      
      [2016-03-22 15:25:20,155] INFO New election. My id = 2, proposed zxid=0x700000001
      
      [2016-03-22 15:25:20,176] INFO Notification: 1 (message format version), 2 (n.leader), 0x700000001 (n.zxid), 0x1 (n.round), LOOKING (n.state), 2 (n.sid), 0x8 (n.peerEpoch) LOOKING (my state) (org.apache.zookeeper.server.quorum.FastLeaderElection)
      
      ...
      
      [2016-03-22 15:25:20,381] INFO LEADING
      
      [2016-03-22 15:25:20,386] INFO TCP NoDelay set to: true
      
      [2016-03-22 15:25:20,395] INFO Server environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
      
      [2016-03-22 15:25:20,395] INFO Server environment:host.name=SBT-IPO-204.youre.adress.ru
      
      [2016-03-22 15:25:20,395] INFO Server environment:java.version=1.8.0_66
      
      [2016-03-22 15:25:20,395] INFO Server environment:java.home=/usr/java/jre1.8.0_66
      
      [2016-03-22 15:25:20,395] INFO Server environment:java.class.path=:/home/mon99usr/kafka_2.13-3.9.1/bin/../libs/scala- (org.apache.zookeeper.server.ZooKeeperServer)
      
      [2016-03-22 15:25:20,396] INFO Server environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
      
      [2016-03-22 15:25:20,396] INFO Server environment:java.io.tmpdir=/tmp
      
      [2016-03-22 15:25:20,396] INFO Server environment:java.compiler=\<NA\>
      
      [2016-03-22 15:25:20,396] INFO Server environment:os.name=Linux
      
      [2016-03-22 15:25:20,396] INFO Server environment:os.arch=amd64
      
      [2016-03-22 15:25:20,396] INFO Server environment:os.version=3.10.0-123.9.3.el7.x86_64
      
      [2016-03-22 15:25:20,396] INFO Server environment:user.name=mon99usr
      
      [2016-03-22 15:25:20,396] INFO Server environment:user.home=/home/mon99usr
      
      [2016-03-22 15:25:20,396] INFO Server environment:user.dir=/home/mon99usr/kafka_2.13-3.9.1
      
      [2016-03-22 15:25:20,397] INFO Created server with tickTime 2000 minSessionTimeout 4000 maxSessionTimeout 40000 datadir /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2 snapdir /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2 (org.apache.zookeeper.server.ZooKeeperServer)
      
      [2016-03-22 15:25:20,398] INFO LEADING - LEADER ELECTION TOOK - 243 (org.apache.zookeeper.server.quorum.Leader)
      
      [2016-03-22 15:25:20,410] INFO Follower sid: 1 : info : org.apache.zookeeper.server.quorum.QuorumPeer\$QuorumServer\@64c4b35a
      
      [2016-03-22 15:25:20,419] INFO Synchronizing with Follower sid: 1 maxCommittedLog=0x700000001 minCommittedLog=0x300000001 peerLastZxid=0x700000001
      
      [2016-03-22 15:25:20,419] INFO Sending DIFF
      
      [2016-03-22 15:25:20,431] INFO Received NEWLEADER-ACK message from 1
      
      [2016-03-22 15:25:20,433] INFO Have quorum of supporters, sids: [ 1,2 ]; starting up and setting last processed zxid: 0x900000000 (org.apache.zookeeper.server.quorum.Leader)
      

      Запуск выполнен успешно.

Пояснения к логам ZooKeeper на сервере Server-1:

  • WARN No server failure will be tolerated. You need at least 3 servers

    В случае отказа одного из серверов ZooKeeper сервис ZooKeeper не сможет продолжить свою работу, так как нарушено правило кворума о строгом большинстве доступных узлов. То есть число работоспособных узлов в ZooKeeper-кластере всегда должно быть больше числа неработоспособных узлов. В данном случае узла два и отказ одного из узлов приведет к неработоспособности сервиса.

  • WARN Cannot open channel to 2 at election address /<host2-ip-address>:3888 java.net.ConnectException: Connection refused

    Отказ при попытке соединения с Server-2, так как Server-2 в данный момент еще не был запущен.

  • INFO Notification time out: 800 (org.apache.zookeeper.server.quorum.FastLeaderElection)

    Тайм-аут при попытке выбрать лидера.

  • INFO Received connection request /<host2-ip-address>:45491

    Получен ответ на запрос о соединении с сервером Server-2.

  • INFO Created server with tickTime 2000 minSessionTimeout 4000 maxSessionTimeout 40000 datadir /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2 snapdir /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2

    Описание конфигурации созданного сервера.

  • INFO Snapshotting: 0x700000001 to /var/tmp/kafka_2.13-3.9.1/zookeeper-data/version-2/snapshot.700000001

    Сохранение образа текущего состояния ZooKeeper.

  • INFO FOLLOWING

    После успешного соединения Server-1 с Server-2:

    • Server-1 становится сервером-последователем;

    • Server-2 становится сервером-лидером.

  • FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) kafka.common.InconsistentBrokerIdException: Configured brokerId 2 doesn\'t match stored brokerId 1 in meta.properties

    Данная ошибка запуска ZooKeeper на сервере Server-2 происходит по причине конфликта в служебный файл ZooKeeper meta.properties записался неверный идентификатор брокера broker.id=1, в то время как идентификатор myid сервера Server-2 указан, как равный двум. Решением проблемы будет удаление файла meta.properties, тогда при новом запуске ZooKeeper этот файл будет сгенерирован автоматически и с корректными настройками.

Пояснения к логам ZooKeeper на сервере Server-2:

  • INFO LOOKING

    INFO New election. My id = 2, proposed zxid=0x700000001...

    INFO LEADING -- LEADING ELECTION TOOK -- 250

    Поиск сервера-лидера (так как сервер-лидер еще не выбран), голосование на выбор сервера-лидера (каждый из серверов предлагает себя), сервером-лидером выбран Server-2, а Server-1 автоматически становится сервером-последователем.

  • WARN Cannot open channel to 2 at election address /<host2-ip-address>:3888

    (org.apache.zookeeper.server.quorum.QuorumCnxManager)

    java.net.ConnectException: Connection refused

    Попытка подключиться к отключенному серверу для выбора лидера. Сообщение возникает, если отключить Server-1 или Server-2 во время работы обоих серверов.