访问具有两个独立实例的MySQL存储

问题描述 投票:0回答:1

我尝试使用 Kubernetes 部署 MySQL,拥有三个访问同一存储(PVC)的副本。这是配置

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteMany
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  type: NodePort
  ports:
  - protocol: TCP
    port: 3307
    targetPort: 3306
    nodePort: 30091
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:latest
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: pwd
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-storage
        persistentVolumeClaim:
          claimName: mysql-pvc

当您应用此配置文件 kubectl apply -f file_name.yaml 时,您可以创建三个 pod,它们访问数据库的相同存储。当您检查 pod 的状态 kubectl get pods 时,您可以看到只有一个 pod 开始运行,其他 pod 处于 CrashLoop 状态。发生的情况是,当创建多个实例使用公共存储时,只有一个实例可以获得 ibdata1 文件的锁。这就是为什么只有一个 pod 变得健康,而其他 pod 则处于 CrashLoop 状态。(您可以使用 kubectl 日志 pod-name 来查看这一点)。 我也尝试过对 mongoDB 进行此操作。遇到了与要求锁定 mongo.in 文件失败相同的问题。

我需要知道的是,

我可以释放 ibdata 文件的锁并使用所有 Pod 的存储吗?(这通常不能,因为一致性问题)如果不能,我如何创建提议的想法?(使用多个存储/卷访问单个存储/卷) Pod 实例)?您是否会提出其他想法来实现使用多个 Pod 实例访问单个存储?欢迎您的回答和帮助。

mysql mongodb kubernetes
1个回答
0
投票

您可以,但完全不应该释放锁,因为这会牺牲一致性,并且很可能导致数据库损坏(至少在某些时候)。

要实现这样的功能,您需要一个具有某种类型的重复数据删除功能的存储后端,它会发现所有三个副本的数据库文件相似,并会自动对它们进行重复数据删除。 ZFS 也许能够做到这一点,将来您可能想看看 simpleblock(免责声明 simpleblock 员工),因为我们也在研究此功能。

ZFS 可能是您目前最好的选择,但要小心,ZFS 会影响速度/延迟。虽然它是地球上最可靠的文件系统,但它并不是为最高吞吐量或最低延迟而设计的,而是为最高可靠性而设计的。

© www.soinside.com 2019 - 2024. All rights reserved.