Kubernetes InnoDBCluster:所有 Pod 都应该共享一个 PersistentVolumeClaim?

Kubernetes InnoDBCluster:所有 Pod 都应该共享一个 PersistentVolumeClaim?

Kubernetes InnoDBCluster:所有 Pod 都应该共享一个 PersistentVolumeClaim?

下列的:https://dev.mysql.com/doc/mysql-operator/en/mysql-operator-innodbcluster-simple-kubectl.html

kubectl create namespace mysql-cluster-test
kubectl create secret generic mypwds \
  --from-literal=rootUser=root \
  --from-literal=rootHost=% \
  --from-literal=rootPassword=123456 -n mysql-cluster-test
kubectl apply -f mycluster.yaml -n mysql-cluster-test

Kubectl 获取 pods -n mysql-cluster-test

NAME                                READY   STATUS    RESTARTS   AGE
mycluster-0                         2/2     Running   0          12m
mycluster-1                         2/2     Running   0          12m
mycluster-2                         2/2     Running   0          12m
mycluster-router-5d87fbd754-zhsrh   1/1     Running   0          10m

kubectl 获取 pvc -n mysql-cluster-test

NAME                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
datadir-mycluster-0   Bound    pvc-b3bf5f24-99d0-4497-bd34-fd91eb4adc6c   2Gi        RWO            hostpath       8m9s
datadir-mycluster-1   Bound    pvc-1c042c50-bc3f-43f8-8e16-094042495e6d   2Gi        RWO            hostpath       8m9s
datadir-mycluster-2   Bound    pvc-85fbf9f9-d975-4899-a292-d247644cb2d2   2Gi        RWO            hostpath       8m9s

有3个mysql POD,每个都有自己的PVC,绑定不同的Volume,mysql数据需要存放在一个volume里,所有POD是否应该共用一个PVC?

答案1

有3个mysql POD,每个都有自己的PVC,绑定不同的Volume,mysql数据需要存放在一个volume里,所有POD是否应该共用一个PVC?

MySQL(和其他 SQL 数据库)并非为使用共享存储而构建的。如果您需要多个实例,则每个实例都需要自己的专用存储。在集群配置中,每个实例都使用某种形式的复制来使其本地副本与集群的其他成员保持同步。

这通常是你想要的——即使你可以使用单个共享 PV,丢失 PV 意味着您将丢失所有数据。通过使用复制,集群中的另一个实例可以接管主角色(或者,如果您有多个读/写副本,则可以继续提供访问)。

可以使用单个卷,然后为每个实例使用单独的目录,但如前所述,这会使您的存储成为单点故障(也是单点 i/o 争用)。

当 Pod 被删除时,本地存储也会被删除吗?

如果您使用临时存储作为数据库,那么可以。如果您将数据库存储在(-shared) PV,则不行。使用 PV 进行存储通常是最好的计划;如果 Pod 重新启动(例如升级版本时),则可以最大限度地减少重新同步副本所需传输的数据量。

相关内容