Какую команду нужно выполнить, чтобы проверить, является ли сервер 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
echo "srvr" | nc localhost 2181 | grep "Mode"
root@zoo2:/apache-zookeeper-3.8.0-bin# echo "srvr" | nc localhost 2181 | grep "Mode" Mode: follower
с использованием
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
Если вы установите
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
с использованием
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-адреса.
см. Админсервер
с использованием
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 }