Тестовый запуск кластера 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 выполните следующие действия:
На каждом из серверов создайте директорию, где будут храниться данные ZooKeeper:
mkdir --p /var/tmp/kafka_<версия Scala>-<версия Kafka>/zookeeper-data/На каждом из серверов создайте файл
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
Внесите следующие настройки в файл конфигурации
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.
Запустите кластер 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происходит по причине конфликта в служебный файл ZooKeepermeta.propertiesзаписался неверный идентификатор брокераbroker.id=1, в то время как идентификаторmyidсервераServer-2указан, как равный двум. Решением проблемы будет удаление файлаmeta.properties, тогда при новом запуске ZooKeeper этот файл будет сгенерирован автоматически и с корректными настройками.
Пояснения к логам ZooKeeper на сервере Server-2:
INFO LOOKINGINFO 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во время работы обоих серверов.