• Kubernetes——KubeSphere构建mysql集群


    摘要

    利用kubeSphere构建mysql的主从集群,同时测试主从集群结构部署成功。

    一、配置Secret资源

    1.1 配置mysql master slave的Secret资源

    1. ```yaml
    2. kind: Secret
    3. apiVersion: v1
    4. metadata:
    5. name: mysql-cluster-secret
    6. namespace: athena-mall
    7. annotations:
    8. kubesphere.io/alias-name: 数据库集群秘钥
    9. kubesphere.io/creator: project-regular
    10. data:
    11. MYSQL_ROOT_PASSWORD: cm9vdA==
    12. type: Opaque
    13. ```

    二、配置ConfigMap资源

    2.1 配置mysql-master的集群Configmap资源

    1. kind: ConfigMap
    2. apiVersion: v1
    3. metadata:
    4. name: mysql-master
    5. namespace: athena-mall
    6. annotations:
    7. kubesphere.io/alias-name: 主数据库配置
    8. kubesphere.io/creator: project-regular
    9. data:
    10. my.cnf: |-
    11. [client]
    12. default-character-set=utf8
    13. [mysql]
    14. default-character-set=utf8
    15. [mysqld]
    16. init_connect='SET collation_connection = utf8_unicode_ci'
    17. init_connect='SET NAMES utf8'
    18. character-set-server=utf8
    19. collation-server=utf8_unicode_ci
    20. skip-character-set-client-handshake
    21. skip-name-resolve
    22. secure_file_priv=/var/lib/mysql
    23. server_id=1
    24. log-bin=mysql-bin
    25. read-only=0
    26. binlog-do-db=gulimall_ums # 填写你需要同步的数据库
    27. replicate-ignore-db=mysql # 不需要同步的数据库
    28. replicate-ignore-db=sys
    29. replicate-ignore-db=information_schema
    30. replicate-ignore-db=performance_schema

    2.2 配置mysql-slave的集群Configmap资源

    1. kind: ConfigMap
    2. apiVersion: v1
    3. metadata:
    4. name: mysql-slave
    5. namespace: athena-mall
    6. annotations:
    7. kubesphere.io/alias-name: 从数据库配置
    8. kubesphere.io/creator: project-regular
    9. data:
    10. my.cnf: |-
    11. [client]
    12. default-character-set=utf8
    13. [mysql]
    14. default-character-set=utf8
    15. [mysqld]
    16. init_connect='SET collation_connection = utf8_unicode_ci'
    17. init_connect='SET NAMES utf8'
    18. character-set-server=utf8
    19. collation-server=utf8_unicode_ci
    20. skip-character-set-client-handshake
    21. skip-name-resolve
    22. secure_file_priv=/var/lib/mysql
    23. server_id=2
    24. log-bin=mysql-bin
    25. read-only=1
    26. binlog-do-db=gulimall_ums # 需要同步的数据库
    27. replicate-ignore-db=mysql # 不需要同步的数据库
    28. replicate-ignore-db=sys
    29. replicate-ignore-db=information_schema
    30. replicate-ignore-db=performance_schema

    三、配置mysql-pvc资源

    3.1 配置mysql master slave的mysql-pvc资源

    1. kind: PersistentVolumeClaim
    2. apiVersion: v1
    3. metadata:
    4. name: mysql-master-pvc
    5. namespace: athena-mall
    6. annotations:
    7. kubesphere.io/alias-name: 主数据库pvc
    8. kubesphere.io/creator: project-regular
    9. kubesphere.io/description: 主数据库pvc
    10. pv.kubernetes.io/bind-completed: 'yes'
    11. pv.kubernetes.io/bound-by-controller: 'yes'
    12. volume.beta.kubernetes.io/storage-provisioner: openebs.io/local
    13. volume.kubernetes.io/selected-node: k8s-master
    14. finalizers:
    15. - kubernetes.io/pvc-protection
    16. spec:
    17. accessModes:
    18. - ReadWriteOnce
    19. resources:
    20. requests:
    21. storage: 10Gi
    22. volumeName: pvc-5bcb27d7-f06e-4dc5-8325-73878be6fedc
    23. storageClassName: local
    24. volumeMode: Filesystem
    1. kind: PersistentVolumeClaim
    2. apiVersion: v1
    3. metadata:
    4. name: mysql-slave-pvc
    5. namespace: athena-mall
    6. annotations:
    7. kubesphere.io/alias-name: 从数据库pvc
    8. kubesphere.io/creator: project-regular
    9. kubesphere.io/description: 从数据库pvc
    10. pv.kubernetes.io/bind-completed: 'yes'
    11. pv.kubernetes.io/bound-by-controller: 'yes'
    12. volume.beta.kubernetes.io/storage-provisioner: openebs.io/local
    13. volume.kubernetes.io/selected-node: k8s-master
    14. finalizers:
    15. - kubernetes.io/pvc-protection
    16. spec:
    17. accessModes:
    18. - ReadWriteOnce
    19. resources:
    20. requests:
    21. storage: 10Gi
    22. volumeName: pvc-1bfd6216-62dd-46f5-97bb-334c57948c31
    23. storageClassName: local
    24. volumeMode: Filesystem

    四、配置mysql-cluster-application

    4.1 部署mysql有状态(master)

    1. kind: Service
    2. apiVersion: v1
    3. metadata:
    4. name: mysql-master
    5. namespace: athena-mall
    6. labels:
    7. app: mysql-master
    8. version: v1
    9. annotations:
    10. kubesphere.io/creator: project-regular
    11. kubesphere.io/serviceType: statefulservice
    12. spec:
    13. ports:
    14. - name: tcp-3306
    15. protocol: TCP
    16. port: 3306
    17. targetPort: 3306
    18. - name: tcp-33060
    19. protocol: TCP
    20. port: 33060
    21. targetPort: 33060
    22. selector:
    23. app: mysql-master
    24. clusterIP: None
    25. clusterIPs:
    26. - None
    27. type: ClusterIP
    28. sessionAffinity: None
    29. ipFamilies:
    30. - IPv4
    31. ipFamilyPolicy: SingleStack

    4.2 部署mysql有状态(slave)

    1. kind: Service
    2. apiVersion: v1
    3. metadata:
    4. name: mysql-slave
    5. namespace: athena-mall
    6. labels:
    7. app: mysql-slave
    8. version: v1
    9. annotations:
    10. kubesphere.io/creator: project-regular
    11. kubesphere.io/serviceType: statefulservice
    12. spec:
    13. ports:
    14. - name: tcp-3306
    15. protocol: TCP
    16. port: 3306
    17. targetPort: 3306
    18. - name: tcp-33060
    19. protocol: TCP
    20. port: 33060
    21. targetPort: 33060
    22. selector:
    23. app: mysql-slave
    24. clusterIP: None
    25. clusterIPs:
    26. - None
    27. type: ClusterIP
    28. sessionAffinity: None
    29. ipFamilies:
    30. - IPv4
    31. ipFamilyPolicy: SingleStack

    4.3 slave 同步master的设置

    4.3.1 Master的设置

    1. 进入master 容器
    2. kubectl exec -it mysql-master /bin/bash
    3. 进入mysql 内部(mysql –uroot -proot)
    4. 授权root 可以远程访问( 主从无关,为了方便我们远程连接mysql):
    5. grant all privileges on . to 'root'@'%' identified by 'root' with grant option;
    6. flush privileges;
    7. 添加用来同步的用户
    8. GRANT REPLICATION SLAVE ON . to 'backup'@'%' identified by 'mysql的密码';
    9. 查看master 状态
    10. show master status\G;

    4.3.2 slave的设置

    1. 进入slaver 容器
    2. kubectl exec -it mysql-slaver /bin/bash
    3. 进入mysql 内部(mysql –uroot -p)
    4. 授权root 可以远程访问( 主从无关,为了方便我们远程连接mysql)
    5. grant all privileges on . to 'root'@'%' identified by 'root' with grant option;
    6. flush privileges;
    7. 设置主库连接
    8. change master to master_host='k8s中master的域名地址',master_user='backup',master_password='master的密码',master_log_file='mysql-bin.000003',master_log_pos=0,master_port=3306;
    9. 启动从库同步
    10. start slave;
    11. 查看从库状态
    12. show slave status\G;

    五、外网暴露测试

    5.1 部署的NodePort无状态服务

    1. kind: Service
    2. apiVersion: v1
    3. metadata:
    4. name: master-ip
    5. namespace: athena-mall
    6. labels:
    7. app: master-ip
    8. annotations:
    9. kubesphere.io/creator: project-regular
    10. spec:
    11. ports:
    12. - name: http-mysql1
    13. protocol: TCP
    14. port: 3306
    15. targetPort: 3306
    16. nodePort: 30212
    17. - name: http-mysql2
    18. protocol: TCP
    19. port: 33060
    20. targetPort: 33060
    21. nodePort: 30443
    22. selector:
    23. app: mysql-master
    24. version: v1
    25. clusterIP: 10.233.31.134
    26. clusterIPs:
    27. - 10.233.31.134
    28. type: NodePort
    29. sessionAffinity: None
    30. externalTrafficPolicy: Cluster
    31. ipFamilies:
    32. - IPv4
    33. ipFamilyPolicy: SingleStack
    1. kind: Service
    2. apiVersion: v1
    3. metadata:
    4. name: slave-ip
    5. namespace: athena-mall
    6. labels:
    7. app: slave-ip
    8. annotations:
    9. kubesphere.io/creator: project-regular
    10. spec:
    11. ports:
    12. - name: http-mysql
    13. protocol: TCP
    14. port: 3306
    15. targetPort: 3306
    16. nodePort: 32597
    17. selector:
    18. app: mysql-slave
    19. version: v1
    20. clusterIP: 10.233.1.47
    21. clusterIPs:
    22. - 10.233.1.47
    23. type: NodePort
    24. sessionAffinity: None
    25. externalTrafficPolicy: Cluster
    26. ipFamilies:
    27. - IPv4
    28. ipFamilyPolicy: SingleStack

    5.2 测试主从集群是否可用

    博文参考

    KubernetesProject/kubeSphere构建mysql集群/kubeSphere构建mysql集群.md · 庄小焱/DockerPrinciple - Gitee.com

  • 相关阅读:
    第二证券|券商12月金股出炉!多只地产股成热门,科创仍是中长期主线
    安泰电压放大器在低频探测天线技术研究中的应用
    老婆
    WEB 渗透之XXE&XML
    本周三商店更新:多款套装下线,四款升级武器带异色皮肤返厂
    代码冲突的产生以及解决方式
    leetcode贪心算法:Gas Station
    海外多家权威媒体热议波场TRON:为互联网去中心化奠定基础
    Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!
    1.30.Flink SQL案例将Kafka数据写入hive
  • 原文地址:https://blog.csdn.net/weixin_41605937/article/details/127337369