Kubernetes之搭建mysql主从复制

1.  准备工作

    1.  使用glusterfs作为数据存储

    2.  在gluster集群中创建指定卷

        gluster volume create k8s_mysql replica 2 node1:/gluster_data/k8s_mysql node2:/gluster_data/k8s_mysql  node3:/gluster_data/k8s_mysql node4:/gluster_data/k8s_mysql                

    3.  客户端挂载指定卷

        mount -t glusterfs node1:/k8s_mysql /data/k8s_mysql 

    4.  使用客户端创建多个文件夹

        cd /data/k8s_mysql/ ; mkdir mysql_pv{1..3}                

2.  部署过程

    1.  创建glusterFS端点定义,指定对应的gluster集群的IP地址   

apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-cluster
  namespace: default
subsets:
- addresses:
  - ip: 192.168.2.191
  - ip: 192.168.2.192
  - ip: 192.168.2.193
  - ip: 192.168.2.194
  ports:
  - port: 24007
    protocol: TCP

    2.  创建glusterfs的service

kind: Service
apiVersion: v1
metadata:
  name: glusterfs-cluster
spec:
  ports:
  - port: 24007

    3.  为每个mysql创建一个pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: mysql
  glusterfs:
    endpoints: "glusterfs-cluster"
    path: "/k8s_mysql/mysql_pv1"
    readOnly: false
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv02
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: mysql
  glusterfs:
    endpoints: "glusterfs-cluster"
    path: "/k8s_mysql/mysql_pv2"
    readOnly: false
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv03
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: mysql
  glusterfs:
    endpoints: "glusterfs-cluster"
    path: "/k8s_mysql/mysql_pv3"
    readOnly: false  

    4.  配置mysql-configmap.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql
  labels:
    app: mysql
data:
  master.cnf: |
    # Apply this config only on the master.
    [mysqld]
    log-bin=mysql-bin
    skip-name-resolve
  slave.cnf: |
    # Apply this config only on slaves.
    [mysqld]
    log-bin=mysql-bin
    skip-name-resolve
    super-read-only

    5.  创建mysql密码secret文件

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  labels:
    app: mysql
type: Opaque
stringData:
  username: root
  password: 123.com             

    6.  创建mysql-service.yaml,提供读写分离

# Headless service for stable DNS entries of StatefulSet members.
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  ports:
  - name: mysql
    port: 3306
  clusterIP: None
  selector:
    app: mysql
---
# Client service for connecting to any MySQL instance for reads.
# For writes, you must instead connect to the master: mysql-0.mysql.
apiVersion: v1
kind: Service
metadata:
  name: mysql-read
  labels:
    app: mysql
spec:
  ports:
  - name: mysql
    port: 3306
  selector:
    app: mysql

    7.  使用statefulset搭建mysql主从复制  

  

    4.    

3.  测试主从复制

posted @ 2022-08-01 13:38  奋斗史  阅读(265)  评论(0)    收藏  举报