логотип PurpleSchool
логотип PurpleSchool

Zookeeper в Docker как развернуть и настроить кластер

Автор

Олег Марков

Введение

Apache Zookeeper — это мощный инструмент для координации распределенных систем. Он часто используется для управления конфигурацией, согласованного управления состоянием и повышения доступности сервисов. В сочетании с Docker, который является удобным и популярным способом развертывания приложений в изолированных контейнерах, Zookeeper может стать крайне привлекательным решением для многих разработчиков и инженеров. В этой статье мы поговорим о том, как развернуть Zookeeper в Docker, настроить его и управлять кластерами.

Что такое Zookeeper?

Zookeeper играет роль распределенного координатора. В большинстве распределенных систем необходимо отслеживать состояние или конфигурацию системы, и Zookeeper хорошо подходит для этой задачи. Он облегчает управление различными сервисами, предоставляя централизованный репозиторий с возможностью надежного хранения конфигурационных данных и данных приложения, что в итоге упрощает эффективацию и восстановление после сбоев.

Как Docker помогает запускать Zookeeper

Docker позволяет нам создавать контейнеры — легковесные изолированные окружения, в которых может быть запущено приложение с его всеми зависимостями. Это удобно по многим причинам: контейнеры легко создаются и удаляются, они изолированы друг от друга, минимизируя риски конфликтов между разными приложениями или их версиями. С помощью Docker можно легко и быстро развернуть сервер Zookeeper как на вашем локальном компьютере, так и в облачной среде.

Установка и настройка Zookeeper в Docker

Давайте посмотрим, как установить и настроить Zookeeper в контейнере Docker. Мы рассмотрим процесс создания как одиночного сервера, так и кластера из нескольких узлов.

Запуск Zookeeper в одном контейнере

Для начала развернем Zookeeper в одном контейнере. Убедитесь, что у вас установлен Docker. Если нет, вы можете установить его, следуя официальной документации от Docker.

Один из самых простых способов запустить Zookeeper — использовать подготовленный Docker-образ. Ниже приведен пример, как это сделать:

docker pull zookeeper:3.7.0

Эта команда загружает Docker-образ для Zookeeper версии 3.7.0. Теперь давайте запустим контейнер:

docker run --name my-zookeeper -p 2181:2181 zookeeper:3.7.0

Что здесь происходит:

  • --name my-zookeeper определяет имя для контейнера.
  • -p 2181:2181 сопоставляет порт 2181 на вашей машине с портом 2181 в контейнере, который используется для общения с Zookeeper.

Настройка многосерверного кластера

Для надежности и масштабируемости часто полезно развернуть Zookeeper в виде кластера. Мы можем сделать это, запустив несколько контейнеров и связав их друг с другом.

Давайте создадим docker-compose.yml файл, чтобы описать, как наш кластер будет развернут:

version: '3'
services:
  zoo1:
    image: zookeeper:3.7.0
    restart: always
    ports:
      - "2181:2181"
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper:3.7.0
    restart: always
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper:3.7.0
    restart: always
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

В этом файле:

  • Создаются три сервиса zoo1, zoo2 и zoo3, каждый представляет собой ноду нашего кластера.
  • Каждый сервис имеет уникальный идентификатор ZOO_MY_ID.
  • Все три сервиса подключены через переменную ZOO_SERVERS, которая помогает нодам находить друг друга.

Теперь запустите кластер:

docker-compose up

Это запустит все три ноды в виде отдельных контейнеров и создаст полностью функциональный кластер Zookeeper.

Управление Zookeeper в контейнерах

После запуска кластера вы можете управлять Zookeeper через командную строку. Например, войдите в один из контейнеров, чтобы использовать cli-утилиту Zookeeper:

docker exec -it my-zookeeper /bin/bash

После входа используйте zkCli.sh, чтобы начать взаимодействие:

bin/zkCli.sh -server localhost:2181

Эта команда подключает вас к Zookeeper через клиентскую утилиту.

Заключение

Развертывание Zookeeper в Docker — отличный способ обеспечить координацию в вашей распределенной системе. Используя Docker, вы сможете легко управлять как одиночными серверами, так и кластерами Zookeeper, что значительно упростит процесс развертывания и обслуживания. Мы рассмотрели как запустить одиночный сервер Zookeeper, так и настроить кластер из нескольких узлов с помощью Docker и docker-compose. Эти подходы являются основой для более сложных конфигураций, которые вы сможете создавать в будущем, основываясь на ваших текущих и будущих нуждах.

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile