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 get 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 get 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,每個POD都有自己的PVC並綁定到不同的Volume。 MySQL資料需要儲存在一個磁碟區中。所有 POD 是否應該共用一個 PVC?

答案1

有3個mysql POD,每個POD都有自己的PVC並綁定到不同的Volume。 MySQL資料需要儲存在一個磁碟區中。所有 POD 是否應該共用一個 PVC?

MySQL(和其他 SQL 資料庫)並不是為使用共用儲存而建構的。如果您需要多個實例,則每個實例都需要自己的專用儲存。在叢集配置中,每個實例都使用某種形式的複製來保持其本機副本與叢集中的其他成員保持同步。

這通常是您想要的—即使您可以使用單一共享 PV,丟失 PV 將意味著您將丟失所有資料。透過使用複製,叢集中的另一個實例可以接管主要角色(或者如果您有多個讀取/寫入副本,則可以繼續提供存取權限)。

可以使用單一卷,然後為每個實例使用單獨的目錄,但如前所述,這會使您的儲存空間成為單點故障(也是單點 I/O 爭用)。

刪除pod時本機儲存會被刪除嗎?

如果您使用資料庫的臨時存儲,那麼可以。如果你把資料庫儲存在 (-共享)PV,然後沒有。使用 PV 進行儲存通常是最好的計劃;在 Pod 重新啟動時(例如昇級版本時),可以最大程度地減少重新同步副本所需傳輸的資料量。

相關內容