Какую команду нужно выполнить, чтобы проверить, является ли сервер ZooKeeper лидером или последователем?

Был создан Кворум ZooKeeper, состоящий из трех серверов ZooKeeper.

zoo.cfg Расположенный на всех трех серверах ZooKeeper выглядит следующим образом:

maxClientCnxns=50
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/var/lib/zookeeper
# the port at which the clients will connect
clientPort=2181

server.1=<ip-address-1>:2888:3888
server.2=<ip-address-2>:2888:3888
server.3=<ip-address-3>:2888:3888

Анализ

Понятно, что один из трех серверов ZooKeeper станет Leader и др Followers, Если Leader Сервер ZooKeeper был выключен Leader выборы начнутся снова. Цель состоит в том, чтобы проверить, станет ли другой сервер ZooKeeper Leader если Leader сервер был выключен


Вопрос

Какую команду нужно выполнить, чтобы проверить, является ли сервер ZooKeeper лидером или последователем?

3 ответа

Решение

Можно проверить, является ли сервер ZooKeeper лидером или последователем, используя nc Команда, которая включена в netcat пакет:

echo stat | nc localhost 2181 | grep Mode
echo srvr | nc localhost 2181 | grep Mode #(From 3.3.0 onwards)

Если сервер ZooKeeper является лидером, команда вернет: Mode: leader и в противном случае: Mode: follower

В качестве альтернативы можно использовать следующее:

bin/zkServer.sh status

Он выведет режим на выходе:

ZooKeeper JMX enabled by default
Using config: /home/kafka/zookeeper/bin/../conf/zoo.cfg
Mode: follower
  1. echo "srvr" | nc localhost 2181 | grep "Mode"

            root@zoo2:/apache-zookeeper-3.8.0-bin# echo "srvr" | nc localhost 2181 | grep "Mode"
    Mode: follower
    
  2. с использованиемbin/zkServer.sh status:

            root@zoo2:/apache-zookeeper-3.8.0-bin# bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
  3. Если вы установитеZOO_4LW_COMMANDS_WHITELIST: "*", вы можете использоватьecho "stat" | nc localhost 2181

            root@zoo2:/apache-zookeeper-3.8.0-bin# echo "stat" | nc localhost 2181
    Zookeeper version: 3.8.0-5a02a05eddb59aee6ac762f7ea82e92a68eb9c0f, built on 2022-02-25 08:49 UTC
    Clients:
     /127.0.0.1:47200[0](queued=0,recved=1,sent=0)
    
    Latency min/avg/max: 0/0.0/0
    Received: 5
    Sent: 4
    Connections: 1
    Outstanding: 0
    Zxid: 0x0
    Mode: follower
    Node count: 5
    

    см. «Слова из четырех букв»

  4. с использованиемhttp://localhost:8080/commands/srvr

            root@zoo2:/apache-zookeeper-3.8.0-bin# wget --quiet --output-document=/dev/stdout http://localhost:8080/commands/srvr | grep "server_state"
        "server_state" : "follower",
    

    или

            root@zoo2:/apache-zookeeper-3.8.0-bin# curl --silent http://localhost:8080/commands/stat | grep "server_state"
    

    Новое в версии 3.5.0 : AdminServer — это встроенный сервер Jetty, который обеспечивает HTTP-интерфейс для команд из четырех букв. По умолчанию сервер запускается на порту 8080, а команды передаются по URL-адресу «/commands/[имя команды]», например http://localhost:8080/commands/stat. Ответ команды возвращается в формате JSON. В отличие от исходного протокола, команды не ограничены четырехбуквенными именами и могут иметь несколько имен; например, «stmk» также может называться «set_trace_mask». Чтобы просмотреть список всех доступных команд, укажите в браузере URL-адрес /commands (например, http://localhost:8080/commands). См. параметры конфигурации AdminServer, чтобы узнать, как изменить порт и URL-адреса.

    см. Админсервер

  5. с использованиемhttp://localhost:8080/commands/leader

            root@zoo2:/apache-zookeeper-3.8.0-bin# curl --silent http://localhost:8080/commands/leader
    {
      "is_leader" : false,
      "leader_id" : 3,
      "leader_ip" : "zoo3",
      "command" : "leader",
      "error" : null
    }
    
Другие вопросы по тегам