Развертывание кластера mariadb galera в kubernetes / docker swarm - PullRequest
1 голос
/ 29 сентября 2019

Я пытаюсь развернуть масштабируемый кластер mariadb galera в Kubernetes или Docker Swarm. Поскольку каждый модуль или контейнеры нуждаются в собственной конфигурации galera, как мне создать свое развертывание, чтобы иметь возможность масштабировать его без какой-либо ручной работы? Я думаю, что мы не можем использовать ConfigMap, поскольку для кластера из 10 узлов должно быть 10 конфигураций!

Пример конфигурации mariadb galera узла:

wsrep_cluster_address="gcomm://ip_1,ip_2,ip_3"    
wsrep_node_address="ip_1"    
wsrep_node_name="node_1"
wsrep_cluster_name="mariadb-cluster"

Для таких приложений, которые имеютразличные конфигурации для каждого узла, каков наилучший способ развертывания?

Примечание: я могу создавать модули / контейнеры и выполнять настройку самостоятельно (присоединять новые узлы к кластеру), но я думаю, что это неправильнои мне нужно, чтобы он был автоматически масштабируемым.

1 Ответ

2 голосов
/ 29 сентября 2019

Вы почти наверняка хотите использовать StatefulSet для развертывания этого в Kubernetes. Среди прочего, у этого свойства есть то, что каждый Pod будет иметь свой собственный PersistentVolumeClaim для хранения, и что имена отдельных Pod являются предсказуемыми и последовательными. Вы должны создать соответствующую безголовую службу , и тогда у каждого модуля будет соответствующее DNS-имя.

Это решает пару частей загадки:

# You pick this
wsrep_cluster_name="mariadb-cluster"

# You know what all of these DNS names will be up front
wsrep_cluster_address="gcomm://galera-0.galera.default.svc.cluster.local,...,galera-9.galera.default.svc.cluster.local"

Дляwsrep_node_name, документация MariaDB указывает, что по умолчанию используется имя хоста. В Kubernetes именем хоста по умолчанию является имя модуля, а имя модуля является одним из последовательных galera-n для модулей, управляемых StatefulSet, поэтому вам не нужно устанавливать это вручную.

wsrep_node_address хитрее. Здесь документация указывает, что есть эвристика, чтобы угадать это (с определенным предупреждением, что это может быть ненадежно для контейнеров). Вы не можете знать IP-адрес отдельного модуля до его создания. В принципе, вы можете использовать нисходящий API для добавления IP-адреса модуля в переменную окружения. Я бы начал с надежды, что эвристики догадаются о IP-адресе модуля, и это работает достаточно хорошо (это то, к чему в конечном итоге решит безголовая служба).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...