Как создать мультирегиональный кластер Kafka / Zookeeper, используя несколько кластеров Google Kubernetes Engine (GKE)? - PullRequest
2 голосов
/ 30 октября 2019

У меня 3 кластера GKE, расположенных в 3 разных регионах на Google Cloud Platform. Я хотел бы создать кластер Kafka, в котором есть один Zookeeper и один узел Kafka (брокер) в каждом регионе (каждый кластер GKE).

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

Я пытаюсь выполнить эту настройку, используя Helm Chart , предоставленную инкубатором.

Я пробовал эту настройку вручную 3Виртуальные машины GCP следуют этому руководству , и я смог сделать это без каких-либо проблем.

Однако настройка кластера Kafka в Kubernetes кажется сложной.

Как мы знаем, мынеобходимо предоставить IP-адреса всех серверов zookeeper в каждом файле конфигурации zookeeper, как показано ниже:

...
# list of servers
server.1=0.0.0.0:2888:3888
server.2=<Ip of second server>:2888:3888
server.3=<ip of third server>:2888:3888
...

Как я могу видеть на диаграмме Хелма config-script.yaml файл содержит скрипткоторый создает файл конфигурации Zookeeper для каждого развертывания.

Часть скрипта, на которой echos серверы zookeeper выглядит примерно так:

...
for (( i=1; i<=$ZK_REPLICAS; i++ ))
do
   echo "server.$i=$NAME-$((i-1)).$DOMAIN:$ZK_SERVER_PORT:$ZK_ELECTION_PORT" >> $ZK_CONFIG_FILE
done
...

На данный моментКонфигурация, которую создает эта диаграмма Хелма, имеет нижеуказанный сервер Zookeeper в конфигурации с одной репликой ( реплика здесь означает Kubernetes Pods replicas).

...
# "release-name" is the name of the Helm release
server.1=release-name-zookeeper-0.release-name-zookeeper-headless.default.svc.cluster.local:2888:3888
...

На данный момент, я не знаю и делаюНе знаете, что делать, чтобы все серверы Zookeeper были включены в файл конфигурации?

Как мне изменить скрипт?

1 Ответ

0 голосов
/ 05 ноября 2019

Я вижу, вы пытаетесь создать кластер из 3 узлов zookeeper поверх трех различных кластеров GKE.

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

Первое, что вам нужно сделать, - это создать сервис LoadBalancer для каждого экземпляра zookeeper. После создания LoadBalancers запишите назначенные им ip-адреса (помните, что по умолчанию эти ip-адреса эфемерны, поэтому вы, возможно, захотите позже поменять их на статические).

Следующее, что нужно сделать, - это создать частная зона DNS на GCP и создание записей A для каждой конечной точки zookeeper LoadBalancer, например:

release-name-zookeeper-1.zookeeper.internal.
release-name-zookeeper-2.zookeeper.internal.
release-name-zookeeper-3.zookeeper.internal.

, а в GCP это будет выглядеть так:

dns

После того, как это сделано, просто измените эту строку :

...
DOMAIN=`hostname -d'
...

на что-то вроде этого:

...
DOMAIN={{ .Values.domain }}
...

и запомнитеустановить переменную domain в файле Values на zookeeper.internal

, поэтому в конце она должна выглядеть следующим образом:

DOMAIN=zookeeper.internal

и сгенерировать следующую конфигурацию:

...
server.1=release-name-zookeeper-1.zookeeper.internal:2888:3888
server.2=release-name-zookeeper-2.zookeeper.internal:2888:3888
server.3=release-name-zookeeper-3.zookeeper.internal:2888:3888
...

Дайте мне знать, если это будет полезно

...