基于Kubernetes的框架和应用系列之四:在Kubernetes安装基于Ceph PVC的mysql galera集群

一、前言

mysql作为互联网LAMP技术栈中最老最坚固的基石之一,具有众多的集群解决方案,而galera是其中比较优秀的方案之一:

âmysql galeraâçå¾çæç´¢ç»æ

Galera的特点:

  • 多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的。
  • 同步复制:集群不同节点之间数据实时同步复制,在数据库挂掉之后,数据不会丢失。
  • 并发复制:支持并行复制数据,更好的性能

1620uploading.4e448015.gif转存失败重新上传取消

Galera缺点:

由于同一个事务需要在集群的多台机器上同时执行成功,这个事务才算成功,网络传输及并发执行会导致性能损失,节点中的最大的tps值取决于速度最慢的那个节点,所以各个节点的处理能力要尽量平衡。


目前基于Galera Cluster的实现方案有三种,较成熟、应用案例较多的是Percona XtraDB Cluster:

  • Galera Cluster for MySQL
  • Percona XtraDB Cluster
  • MariaDB Galera Cluster

本文介绍使用Kubernetes statefulset部署Galera集群并且使用基于Ceph的PVC来持久化mysql数据

转载自https://blog.csdn.net/cloudvtech

二、部署集群

2.1 准备工作

创建namespace

kubectl create ns galera

创建Ceph StorageClass的access key

kubectl -n ceph get secrets/pvc-ceph-client-key -o json | jq '.metadata.namespace = "galera"' | kubectl create -f -
kubectl get secrets -n galera
NAME                  TYPE                                  DATA      AGE
default-token-np974   kubernetes.io/service-account-token   3         18m
pvc-ceph-client-key   kubernetes.io/rbd   

2.2 部署文件

galera-service.yaml,提供集群的访问接口

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
  name: galera
  namespace: galera
  labels:
    app: mysql
spec:
  ports:
  - port: 3306
    name: mysql
  # *.galear.default.svc.cluster.local
  clusterIP: None
  selector:
    app: mysql

galera-statefulset.yaml,部署集群statfulset POD

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mysql
  namespace: galera
spec:
  serviceName: "galera"
  replicas: 5
  template:
    metadata:
      labels:
        app: mysql
    spec:
      initContainers:
      - name: install
        image: gcr.io/google_containers/galera-install:0.1
        imagePullPolicy: Always
        args:
        - "--work-dir=/work-dir"
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
        - name: config
          mountPath: "/etc/mysql"
      - name: bootstrap
        image: debian:jessie
        command:
        - "/work-dir/peer-finder"
        args:
        - -on-start="/work-dir/on-start.sh"
        - "-service=galera"
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"
        - name: config
          mountPath: "/etc/mysql"
      containers:
      - name: mysql
        image: gcr.io/google_containers/mysql-galera:e2e
        ports:
        - containerPort: 3306
          name: mysql
        - containerPort: 4444
          name: sst
        - containerPort: 4567
          name: replication
        - containerPort: 4568
          name: ist
        args:
        - --defaults-file=/etc/mysql/my-galera.cnf
        - --user=root
        readinessProbe:
          # TODO: If docker exec is buggy just use gcr.io/google_containers/mysql-healthz:1.0
          exec:
            command:
            - sh
            - -c
            - "mysql -u root -e 'show databases;'"
          initialDelaySeconds: 15
          timeoutSeconds: 5
          successThreshold: 2
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/
        - name: config
          mountPath: /etc/mysql
      volumes:
      - name: config
        emptyDir: {}
      - name: workdir
        emptyDir: {}
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
        volume.beta.kubernetes.io/storage-class: "ceph-rbd"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

2.3 查看部署状态

PODs

kubectl get pods  -n galera
NAME      READY     STATUS    RESTART
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值