Тщательно узнать серию статей ETCD (B): различные установочные позиции ETCD

задняя часть Архитектура

0 Обзор альбома

etcd является важным базовым компонентом облачной архитектуры, которая инкубируется и размещается CNCF. etcd можно использовать не только для регистрации и обнаружения сервисов в микросервисах и кластерах Kubernetes, но и как промежуточное ПО для хранения ключей и значений.

"Понимание статей серии etcd" познакомит с etcd с точки зрения базовой функциональной практики etcd, интерфейса API, принципа реализации, анализа исходного кода и опыта преодоления ям в реализации. Ожидается, что статей будет около 20, автор будет обновлять каждую неделю, прошу обратить внимание.

1 etcd установка и использование

В предыдущей статье я в основном представил связанные концепции и сценарии использования etcd, а в этой статье в основном представлены различные методы установки и использования etcd.

1.1 Глоссарий концепций etcd

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

  • Raft: Алгоритм, используемый etcd для обеспечения строгой согласованности в распределенных системах.
  • Узел: экземпляр конечного автомата Raft.
  • Участник: Экземпляр etcd. Он управляет узлом и может обслуживать запросы клиентов.
  • Кластер: несколько участников образуют кластер etcd, который может работать вместе.
  • Peer: Имя другого члена в том же кластере etcd.
  • Клиент: клиент, который отправляет HTTP-запросы в кластер etcd.
  • WAL: журнал упреждающей записи, формат журнала, используемый etcd для постоянного хранения.
  • Снимок: Снимок, установленный etcd для предотвращения слишком большого количества файлов WAL и сохранения состояния данных etcd.
  • Прокси: Режим etcd, который предоставляет услуги обратного прокси для кластеров etcd.
  • Лидер: Узел, который обрабатывает все отправленные данные, сгенерированные выбором в алгоритме Raft.
  • Подчиненный: узлы, не прошедшие выборы, служат подчиненными узлами в Raft, обеспечивая надежные гарантии согласованности для алгоритма.
  • Кандидат: когда последователь не получает сердцебиение лидера в течение определенного периода времени, он превращается в кандидата и начинает кампанию.
  • Срок: узел становится лидером до следующего времени выборов, которое называется сроком.
  • Индекс: номер элемента данных. В Raft Term и Index используются для поиска данных.

2 etcd автономная установка и развертывание

Есть много способов установить etcd, в качестве примеров автор берет Centos 7 и MacOS 10.15.yum install etcdиbrew install etcdустановить.

Однако версия etcd, установленная через системные инструменты, отстает.Если вам нужно установить последнюю версию etcd, мы можем установить ее через бинарные пакеты, компиляцию исходного кода и контейнеры docker.

2.1 Бинарная установка

Последняя версия etcd на данный момент 3.4.4. В macOS выполните следующий скрипт:

ETCD_VER=v3.4.4
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}

rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64

/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version

Можно вывести следующие результаты:

etcd Version: 3.4.4
Git SHA: c65a9e2dd
Go Version: go1.12.12
Go OS/Arch: darwin/amd64

Как видите, мы успешно упаковали etcd 3.4.4, и эта версия основана на версии Go.1.12.12.

Точно так же мы используем следующий скрипт для установки на Centos 7:

ETCD_VER=v3.4.4

GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version

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

etcd Version: 3.4.4
Git SHA: e784ba73c
Go Version: go1.12.12
Go OS/Arch: linux/amd64

Таким образом, мы успешно установили как на macOS, так и на Linux.Установка в системе Windows относительно проста.После загрузки установочного пакета запустите его напрямую. Где etcd.exe — сервер, etcdctl.exe — клиент.

2.2 Установка источника

Чтобы установить из исходного кода, вам сначала нужно обеспечить локальную языковую среду Go. Если не установлено, см.golang.org/doc/install…

Для тех, кто хочет попробовать последнюю версию, etcd можно собрать из ветки master. Go версии 1.13+ требуется для сборки последней версии etcd. Локальная версия Go:

$ go version
$ go version go1.13.6 linux/amd64

Собираем etcd на основе ветки master, скрипт такой:

git clone https://github.com/etcd-io/etcd.git
cd etcd
./build

Выполните тестовую команду, чтобы убедиться, что etcd успешно скомпилирован и установлен:

$ ./etcdctl version

etcdctl version: 3.4.4
API version: 3.4

После вышеуказанных шагов etcd был успешно установлен путем компиляции исходного кода.

2.3 установка докер-контейнера

использование etcdgcr.io/etcd-development/etcdв качестве источника репозитория контейнеров, аquay.io/coreos/etcdВ качестве вторичного реестра контейнеров.

REGISTRY=quay.io/coreos/etcd
# available from v3.2.5
REGISTRY=gcr.io/etcd-development/etcd
rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
  docker rmi gcr.io/etcd-development/etcd:v3.4.7 || true && \
  docker run \
  -p 2379:2379 \
  -p 2380:2380 \
  --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
  --name etcd-gcr-v3.4.7 \
  gcr.io/etcd-development/etcd:v3.4.7 \
  /usr/local/bin/etcd \
  --name s1 \
  --data-dir /etcd-data \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://0.0.0.0:2380 \
  --initial-cluster s1=http://0.0.0.0:2380 \
  --initial-cluster-token tkn \
  --initial-cluster-state new \
  --log-level info \
  --logger zap \
  --log-outputs stderr

docker exec etcd-gcr-v3.4.7 /bin/sh -c "/usr/local/bin/etcd --version"
docker exec etcd-gcr-v3.4.7 /bin/sh -c "/usr/local/bin/etcdctl version"
docker exec etcd-gcr-v3.4.7 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
docker exec etcd-gcr-v3.4.7 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
docker exec etcd-gcr-v3.4.7 /bin/sh -c "/usr/local/bin/etcdctl get foo"

Выполните следующую команду, чтобы подтвердить статус etcd, установленного в контейнере:

$ etcdctl --endpoints=http://localhost:2379 version

etcdctl version: 3.4.4
API version: 3.4

3. развертывание кластера etcd

В производственной среде для обеспечения высокой доступности всего кластера etcd обычно развертывается в кластере, чтобы избежать единой точки отказа. В этом разделе рассказывается, как развернуть кластер etcd.

3.1 Локальный запуск кластера etcd

Если вы хотите попрактиковаться в построении кластера etcd на одной машине, вы можете использовать инструмент goreman.

goreman — инструмент управления несколькими процессами, написанный на языке Go, который представляет собой переписанный под Ruby широко используемый foreman (первоначальный автор foreman также реализовал Go-версию: forego, но он не так прост в использовании, как goreman).

Мы уже подтвердили среду установки Go и выполняем ее напрямую:

go get github.com/mattn/goreman

Скомпилированный файл помещается в$GOPATH/binсередина,$GOPATH/binКаталог добавлен в систему$PATH, поэтому мы можем легко выполнить командуgoremanЗаказ. Далее следует написать скрипт Procfile, запускаем три etcd, конкретное соответствие следующее:

HostName ip Порт взаимодействия с клиентом одноранговый коммуникационный порт
infra1 127.0.0.1 12379 12380
infra2 127.0.0.1 22379 22380
infra3 127.0.0.1 32379 32380

Сценарий Procfile выглядит следующим образом:

etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
etcd2: etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr
etcd3: etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr

Описание элемента конфигурации:

  • --name: Имя узла в кластере etcd, которое может быть произвольным, различимым и не повторяющимся.
  • --listen-peer-urls: отслеживаемые URL-адреса для связи между узлами, которые можно отслеживать для нескольких, и кластер будет использовать эти URL-адреса для взаимодействия с данными (например, выборы, синхронизация данных и т. д.)
  • --initial-advertise-peer-urls: предлагаемые URL-адреса для связи между узлами, которые будут использоваться для связи между узлами.
  • --listen-client-urls: отслеживаемые URL-адреса для связи с клиентом, а также могут отслеживать несколько.
  • --advertise-client-urls: рекомендуемые URL-адреса для связи с клиентом. Это значение используется агентами etcd или членами etcd для связи с узлами etcd.
  • --initial-cluster-token: etcd-cluster-1, значение токена узла. После установки этого значения кластер будет генерировать уникальный идентификатор, а также уникальный идентификатор будет генерироваться для каждого узла. При использовании одного и того же файл конфигурации, чтобы снова запустить кластер. Пока значения токенов разные, кластеры etcd не будут влиять друг на друга.
  • --initial-cluster: коллекция всех начальных-рекламных-равных-адресов в кластере.
  • --initial-cluster-state: new, флаг нового кластера

Обратите внимание на приведенный выше сценарий, команду etcd необходимо настроить в соответствии с фактическим локальным адресом установки при выполнении команды etcd. Далее мы запускаем кластер etcd.

goreman -f /opt/procfile start

Используйте приведенную выше команду, чтобы запустить кластер etcd и просмотреть элементы в кластере после завершения запуска.

$ etcdctl --endpoints=http://localhost:22379  member list

8211f1d0f64f3269, started, infra1, http://127.0.0.1:12380, http://127.0.0.1:12379, false
91bc3c398fb3c146, started, infra2, http://127.0.0.1:22380, http://127.0.0.1:22379, false
fd422379fda50e48, started, infra3, http://127.0.0.1:32380, http://127.0.0.1:32379, false

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

4. Резюме

Эта глава относительно проста и носит практический характер, и читатели лучше всего смогут попрактиковаться в ней самостоятельно. В этой статье в основном представлены различные методы установки etcd: автономный и кластерный etcd. Установка кластера etcd также должна взаимодействовать с динамическим механизмом обнаружения служб, который будет объяснен в следующей статье Добро пожаловать, обратите внимание и лайкните.

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

Рекомендуемое чтение

  1. Сравнение etcd с другими компонентами k-v, такими как Zookeeper и Consul
  2. Тщательно изучите серию статей etcd (1): первое знакомство с etcd

Ссылаться на

etcd docs