функции zookeeper и описание узла

распределенный

1. Обзор зоопарка, предыстория и роль

зоопарк производит фон:

После преобразования проекта из монолитного в распределенный возникнут проблемы совместной работы между несколькими узлами. Такие как:

  1. Кто и какой узел выполняет ежедневные запланированные задачи?
  2. Обнаружение службы во время вызовов RPC?
  3. Как гарантировать идемпотентность одновременных запросов
  4. ....

Эти проблемы можно обобщить как проблемы координации нескольких узлов.Это очень ненадежно и нежелательно с точки зрения производительности, если узлы сами координируют свои действия. Координация должна осуществляться отдельной службой, которая должна быть надежной и производительной.

Резюме зоозащитника:

ZooKeeper — это служба координации распределенных приложений. Он предоставляет набор простых API-интерфейсов, на основе которых распределенные приложения могут использовать для синхронизации такую ​​информацию, как состояние узла, конфигурация и регистрация службы. Он написан на языке JAVA и поддерживает клиентов на языках JAVA и C.图片

узел узла

Базовая единица данных в zookeeper называется узлом, и узел может содержать дочерние узлы, которые в конечном итоге отображаются на уровне дерева. Каждый узел имеет уникальный путь пути. Клиент загружает данные узла на основе PATH, и zookeeper уведомит клиента, отслеживая путь в режиме реального времени после его получения.

图片

Во-вторых, развертывание и общая конфигурация

Zookeeper разработан на основе JAVA и может работать до тех пор, пока после загрузки имеется соответствующая среда JVM. Его номер порта по умолчанию — 2181, чтобы убедиться, что он не конфликтует перед запуском.

Примечания к выпуску:

3.5.5, выпущенный 20 мая 2019 г., является первым стабильным выпуском ветки 3.5. Этот выпуск считается преемником стабильной ветки 3.4 и готов к работе. Основанный на версии 3.4, он содержит следующие новые функции.

  • динамическая реконфигурация
  • местное собрание
  • Новый тип узла: контейнер, TTL
  • Поддержка SSL для атомарного широковещательного протокола
  • Возможность удаления наблюдателей
  • многопоточный обработчик фиксации
  • Обновление до Netty 4.1
  • Сборка Maven

Также обратите внимание: рекомендуемая минимальная версия JDK – 1.8. В документации указано:

  • apache-zookeeper-xxx-tar.gz представляет исходный код
  • рабочая версия apache-zookeeper-xxx-bin.tar.gz

ссылка для скачивания:zookeeper.apache.org/releases.contracts…Конкретный процесс развертывания:

#下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5.5-bin.tar.gz
#解压
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz
#拷贝默认配置
cd  {zookeeper_home}/conf 
cp zoo_sample.cfg zoo.cfg
#启动
 {zookeeper_home}/bin/zkServer.sh

Общее описание конфигурационного файла:

# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1

Команда клиента:

Список основных командclose закрыть текущую сессиюconnect host:port Повторно подключитесь к указанному сервису Zookeeper.create [-s] [-e] [-c] [-t ttl] path [data] [acl]создать узелdelete [-v version] pathУдалить узел (дочерние узлы не могут существовать)deleteall pathУдалить путь и все дочерние узлыsetquota -n|-b val pathустановить квоту узла -n количество дочерних узлов -b количество байтовlistquota pathПросмотр квоты узлаdelquota [-n|-b] pathудалить квоту узлаget [-s] [-w] pathПросмотр данных узла -s содержит статус узла -w добавить прослушиватель getAcl [-s] путьls [-s] [-w] [-R] pathСписок дочерних узлов -s статус -R рекурсивно просмотреть все дочерние узлы -w добавить прослушивательprintwatches on|offПечатать ли события прослушиванияquit Выйти из клиентаhistory Посмотреть историю выполненияredo cmdnoПовторите выполнение команды, номер команды в истории определяет путь удаления часов [-c|-d|-a] [-l]удалить указанный слушательset [-s] [-v version] path dataНастройкиsetAcl [-s] [-v version] [-R] path aclУстановить разрешения ACL для узловstat [-w] pathПосмотреть статус узла -w добавить слушателяsync pathУзел принудительной синхронизации

Добавляйте, удаляйте, изменяйте и проверяйте данные узла

# 列出子节点 
ls /
#创建节点
create /luban "luban is good man"
# 查看节点
get /luban
# 创建子节点 
create /luban/sex "man"
# 删除节点
delete /luban/sex
# 删除所有节点 包括子节点
deleteall /luban
[zk: 127.0.0.1:2181(CONNECTED) 20] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, tmp0000000095, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 21] create /xiaoqiang "xiaoqiang is a good man"
Created /xiaoqiang
[zk: 127.0.0.1:2181(CONNECTED) 22] get /xiaoqiang
xiaoqiang is a good man
[zk: 127.0.0.1:2181(CONNECTED) 23] create /xiaoqiang/age 17
Created /xiaoqiang/age
[zk: 127.0.0.1:2181(CONNECTED) 24] delete /xiaoqiang/age
[zk: 127.0.0.1:2181(CONNECTED) 25] deleteall /xiaoqiang

3. Введение в узлы Zookeeper

Узлы в zookeeper называются znodes.Структура хранения аналогична файловой системе и хранится в древовидной структуре. Разница в том, что znode не имеет понятия о каталогах и не может выполнять такие команды, как cd. Структура znode содержит следующее:

  • path: уникальный путь
  • childNode: дочерний узел
  • stat: атрибут статуса
  • type: тип узла

Тип узла

Типы
описывать
PERSISTENT
постоянный узел
PERSISTENT_SEQUENTIAL
Узел постоянного серийного номера
EPHEMERAL
Временный узел (не может иметь дочерних узлов)
EPHEMERAL_SEQUENTIAL
Временный порядковый узел (не может иметь дочерних узлов)

  1. PERSISTENT (постоянный узел)

Постоянно сохраняемые узлы также создаются по умолчанию.

#默认创建的就是持久节点
create /test

  1. PERSISTENT_SEQUENTIAL (узел постоянного порядкового номера)

Zookeeper добавит порядковый номер в качестве суффикса к пути при его создании. Он очень подходит для таких сценариев, как распределенные блокировки и распределенные выборы. Просто добавьте параметр -s при его создании.

#创建序号节点
create -s /test
#返回创建的实际路径
Created /test0000000001
create -s /test
#返回创建的实际路径2
Created /test0000000002

  1. EPHEMERAL (эфемерный узел)

Эфемерные узлы автоматически удаляются при отключении сеанса клиента. Он подходит для таких сценариев, как контроль пульса и обнаружение служб. Добавьте параметр -e при его создании.

#创建临时节点, 断开会话 在连接将会自动删除
create -e /temp

  1. EPHEMERAL_SEQUENTIAL (узел временного порядкового номера)

Аналогично постоянным узлам последовательности, за исключением того, что EPHEMERAL_SEQUENTIAL является временным и будет удален после отключения сеанса. Добавляйте -e -s при создании

create -e -s /temp/seq

Свойства узла

# 查看节点属性
stat /luban

Его свойства описаны в следующей таблице:

#创建节点的事物ID
cZxid = 0x385
#创建时间
ctime = Tue Sep 24 17:26:28 CST 2019
#修改节点的事物ID
mZxid = 0x385
#最后修改时间
mtime = Tue Sep 24 17:26:28 CST 2019
# 子节点变更的事物ID
pZxid = 0x385
#这表示对此znode的子节点进行的更改次数(不包括子节点)
cversion = 0
# 数据版本,变更次数
dataVersion = 0
#权限版本,变更次数
aclVersion = 0
#临时节点所属会话ID
ephemeralOwner = 0x0
#数据长度
dataLength = 17
#子节点数(不包括子子节点)
numChildren = 0

Мониторинг узла:

Клиенты могут добавить параметр -w, чтобы отслеживать изменения узлов и подузлов в режиме реального времени и получать уведомления в режиме реального времени. Это очень удобно для обеспечения целостности данных в распределенных ситуациях. Он используется следующим образом:

настройки разрешений acl

Полное название ACL — Список контроля доступа (Access Control List), который используется для управления правами доступа к ресурсам. ZooKeeper использует ACL для управления доступом к своим узлам. Контроль разрешений осуществляется на основе схемы:id:разрешение. Схема представляет режим авторизации, соответствующее значение режима идентификатора, а разрешение представляет собой определенные биты разрешения на добавление, удаление и изменение.

схема: модель аутентификации

строить планы
описывать
world
Открытый режим, мир означает, что весь мир доступен (это настройка по умолчанию)
ip
IP-режим, ограничение IP-адреса клиента, чтобы предотвратить вопросы
auth
Режим аутентификации по паролю пользователя, который можно предотвратить только в том случае, если в сеанс добавлена ​​аутентификация.
digest
Подобно авторизации, разница в том, что аутентификация использует пароли в виде открытого текста, а дайджест использует зашифрованные пароли sha-1+base64. Дайджест более распространен в практическом использовании.

бит разрешения

биты разрешения
разрешение
описывать
c
CREATE
Может создавать дочерние узлы
d
DELETE
Дочерние узлы могут быть удалены (только узлы следующего уровня)
r
READ
Может читать данные узлов и отображать список дочерних узлов.
w
WRITE
Данные узла могут быть установлены
a
ADMIN
Можно установить разрешения списка управления доступом к узлу

связанные с acl команды:

Заказ
Как пользоваться
описывать
getAcl
getAcl
Чтение разрешения ACL
setAcl
setAcl
Установить разрешения ACL
addauth
addauth
Добавить аутентифицированного пользователя

мировое разрешениеПримерСинтаксис: setAcl world:anyone: Примечание.

  1. Просмотр разрешений узла по умолчанию:
#创建一个节点
create -e /testAcl
#查看节点权限
getAcl /testAcl
#返回的默认权限表示 ,所有人拥有所有权限。
'world,'anyone: cdrwa

  1. Изменить разрешение по умолчанию на чтение и запись
#设置为rw权限 
setAcl /testAcl world:anyone:rw
# 可以正常读
get /testAcl
# 无法正常创建子节点
create -e /testAcl/t "hi"
# 返回没有权限的异常
Authentication is not valid : /testAcl/t

Пример IP-разрешений:Синтаксис: setAclip::

Пример режима авторизации:грамматика:

  1. setAcl auth:::
  2. addauth дайджест :

Пример разрешения на дайджест:грамматика:

  1. setAcl дайджест :::
  2. addauth дайджест :

Примечание 1. Ключ генерируется с помощью SHA1 и base64 в сочетании с Base64 и может быть сгенерирован с помощью следующей команды.

echo -n <用户名>:<密码> | openssl dgst -binary -sha1 | openssl base64

Примечание 2. После того, как для узла установлено разрешение дайджеста, перед доступом необходимо выполнить addauth, и текущий сеанс можно предотвратить.

  1. Установить разрешения на дайджест
#先 sha1 加密,然后base64加密
echo -n luban:123456 | openssl dgst -binary -sha1 | openssl base64
#返回密钥
2Rz3ZtRZEs5RILjmwuXW/wT13Tk=
#设置digest权限
setAcl /luban digest:luban:2Rz3ZtRZEs5RILjmwuXW/wT13Tk=:cdrw

  1. Просмотр узла не покажет никаких разрешений
#查看节点
get /luban
#显示没有权限访问
org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /luban

  1. Посмотреть в следующий раз после добавления аутентификации в текущий сеанс
#给当前会话添加权限帐户
addauth digest luban:123456
#在次查看
get /luban
#获得返回结果
luban is good man

Специальные инструкции для ACL: Разрешения действительны только для текущего узла и не будут наследоваться дочерними узлами. Например, IP-узел анти-опроса A ограничен, но это не препятствует дочернему узлу /A/B IP-анти-опроса A.

Еще не подписались на мой официальный аккаунт?

  • Отсканируйте QR-код в конце статьи и перейдите в официальный аккаунт [Xiaoqiang's Advanced Road], чтобы получить следующее:
  • Учебные материалы: видеоуроки 1T: обучающие видеоролики по интерфейсу и серверной части Javaweb, обучающие видеоролики по машинному обучению/искусственному интеллекту, обучающие видеоролики по системе Linux, видеоуроки по IELTS;
  • Более 100 книг: классические обязательные к просмотру книги, включая сборник решений по C/C++, Java, Python и LeetCode;
  • Программные инструменты: почти все программное обеспечение, которое вы можете использовать в процессе программирования;
  • Исходный код проекта: 20 исходный код проекта JavaWeb.
    小强的进阶之路二维码