在kubernetes/docker swarm中部署mariadb galera集群

在kubernetes/docker swarm中部署mariadb galera集群,kubernetes,mariadb,galera,Kubernetes,Mariadb,Galera,我试图在kubernetes或docker swarm中部署可伸缩的mariadb galera集群。由于每个吊舱或容器都需要自己的galera配置,我应该如何创建部署,以便能够在无需任何手动操作的情况下扩展它?我认为我们不能使用ConfigMap,因为10节点集群必须有10个configmaps 节点的配置示例: wsrep_cluster_address="gcomm://ip_1,ip_2,ip_3" wsrep_node_address="ip_1" wsrep_node

我试图在kubernetes或docker swarm中部署可伸缩的mariadb galera集群。由于每个吊舱或容器都需要自己的galera配置,我应该如何创建部署,以便能够在无需任何手动操作的情况下扩展它?我认为我们不能使用ConfigMap,因为10节点集群必须有10个configmaps

节点的配置示例:

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"
对于每个节点都有不同配置的应用程序,最好的部署方式是什么


注意:我可以创建pod/containers并配置我的自连接新节点到集群,但我认为这不是正确的方法,我需要它具有自动可伸缩性。

您几乎肯定希望使用一个在Kubernetes中部署它。除此之外,它还具有这样一个属性:每个Pod将获得自己的PersistentVolumeClaim存储,并且各个Pod的名称是可预测的和连续的。您应该这样做,然后每个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,指示它默认为主机名。在Kubernetes中,主机名默认为pod名称,pod名称是由StatefulSet管理的pod的顺序galera-n之一,因此无需手动设置

wsrep_节点_地址更复杂。这里指出,有一些启发式方法可以猜测它,但有一个特定的警告,即它对于容器可能不可靠。在创建单个pod之前,您无法知道其IP地址。原则上,您可以使用将pod的IP地址注入到环境变量中。首先,我希望启发式算法能够猜出pod IP地址,这足够好——这就是无头服务最终要解决的问题


这样,您就可以在ConfigMap中看到上面的块,并且它在所有副本中都是全局的。其他每个Galera节点的剩余值应该是可以自动猜测的。

您几乎肯定要使用一个来在Kubernetes中部署它。除此之外,它还具有这样一个属性:每个Pod将获得自己的PersistentVolumeClaim存储,并且各个Pod的名称是可预测的和连续的。您应该这样做,然后每个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,指示它默认为主机名。在Kubernetes中,主机名默认为pod名称,pod名称是由StatefulSet管理的pod的顺序galera-n之一,因此无需手动设置

wsrep_节点_地址更复杂。这里指出,有一些启发式方法可以猜测它,但有一个特定的警告,即它对于容器可能不可靠。在创建单个pod之前,您无法知道其IP地址。原则上,您可以使用将pod的IP地址注入到环境变量中。首先,我希望启发式算法能够猜出pod IP地址,这足够好——这就是无头服务最终要解决的问题


这样,您就可以在ConfigMap中看到上面的块,并且它在所有副本中都是全局的。其他每个Galera节点的剩余值应该可以自动猜测。

Ok,虽然我有点担心wsrep_node_地址的自动猜测不可靠,但我认为这会起作用,所以我将尝试此方法并让您知道结果。我无法部署群集,但第二个节点没有加入群集,但我正在尝试,我认为这是唯一的方法。@hamedb71有什么消息吗?@ZedTuX我可以使用David部署群集方法,但不是在企业级,因为我手工做一些事情,我想成为自动的。我不知道,也许我的实现不正确,或者还不可能@hamedb71在此期间,您是否成功地建立了集群?我正试图使用bitnami的掌舵图来做同样的事情,但遇到了一些问题,这里描述的生命未得到确认的问题:。我很想了解您是如何自动化集群设置的,尤其是您正在使用的版本。我希望有一些最新的东西,比如mariadb 10.5.9或至少mariadb 10.5.8,因此我认为bitnami是一个很好的版本,但我无法运行它。好的,虽然我有点担心wsrep_node_地址的自动猜测不可靠,但我认为这会起作用,所以我将尝试此方法并让您知道结果。我无法部署群集,但第二个节点没有加入群集,但我正在尝试,我认为这是唯一的方法。@hamedb71有什么消息吗?@ZedTuX我可以使用David部署群集方法,但不是在企业级,因为我手工做一些事情,我想成为自动的。我不知道,也许我的实现不正确,或者还不可能@hamedb71在此期间,您是否成功地建立了集群?我正试图用比特纳米的掌舵图做同样的事情,但我遇到了一些问题 假设此处描述的寿命未确认问题:。我很想了解您是如何自动化集群设置的,尤其是您正在使用的版本。我希望有一些最新的东西,比如mariadb 10.5.9或至少mariadb 10.5.8,因此我认为bitnami是一个好的版本,但我无法运行它。