您当前的位置: 首页 >  sql

庄小焱

暂无认证

  • 5浏览

    0关注

    805博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Kubernetes——KubeSphere构建mysql集群

庄小焱 发布时间:2022-10-15 16:54:00 ,浏览量:5

摘要

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

一、配置Secret资源 1.1 配置mysql master slave的Secret资源
```yaml
kind: Secret
apiVersion: v1
metadata:
  name: mysql-cluster-secret
  namespace: athena-mall
  annotations:
    kubesphere.io/alias-name: 数据库集群秘钥
    kubesphere.io/creator: project-regular
data:
  MYSQL_ROOT_PASSWORD: cm9vdA==
type: Opaque
```

二、配置ConfigMap资源

2.1 配置mysql-master的集群Configmap资源
kind: ConfigMap
apiVersion: v1
metadata:
  name: mysql-master
  namespace: athena-mall
  annotations:
    kubesphere.io/alias-name: 主数据库配置
    kubesphere.io/creator: project-regular
data:
  my.cnf: |-
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    secure_file_priv=/var/lib/mysql
     
    server_id=1
    log-bin=mysql-bin
    read-only=0
    binlog-do-db=gulimall_ums      # 填写你需要同步的数据库
     
    replicate-ignore-db=mysql      # 不需要同步的数据库
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema

2.2 配置mysql-slave的集群Configmap资源
kind: ConfigMap
apiVersion: v1
metadata:
  name: mysql-slave
  namespace: athena-mall
  annotations:
    kubesphere.io/alias-name: 从数据库配置
    kubesphere.io/creator: project-regular
data:
  my.cnf: |-
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    secure_file_priv=/var/lib/mysql
     
    server_id=2
    log-bin=mysql-bin
    read-only=1
    binlog-do-db=gulimall_ums  # 需要同步的数据库
     
    replicate-ignore-db=mysql  # 不需要同步的数据库
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
三、配置mysql-pvc资源 3.1 配置mysql master slave的mysql-pvc资源

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-master-pvc
  namespace: athena-mall
  annotations:
    kubesphere.io/alias-name: 主数据库pvc
    kubesphere.io/creator: project-regular
    kubesphere.io/description: 主数据库pvc
    pv.kubernetes.io/bind-completed: 'yes'
    pv.kubernetes.io/bound-by-controller: 'yes'
    volume.beta.kubernetes.io/storage-provisioner: openebs.io/local
    volume.kubernetes.io/selected-node: k8s-master
  finalizers:
    - kubernetes.io/pvc-protection
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  volumeName: pvc-5bcb27d7-f06e-4dc5-8325-73878be6fedc
  storageClassName: local
  volumeMode: Filesystem
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-slave-pvc
  namespace: athena-mall
  annotations:
    kubesphere.io/alias-name: 从数据库pvc
    kubesphere.io/creator: project-regular
    kubesphere.io/description: 从数据库pvc
    pv.kubernetes.io/bind-completed: 'yes'
    pv.kubernetes.io/bound-by-controller: 'yes'
    volume.beta.kubernetes.io/storage-provisioner: openebs.io/local
    volume.kubernetes.io/selected-node: k8s-master
  finalizers:
    - kubernetes.io/pvc-protection
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  volumeName: pvc-1bfd6216-62dd-46f5-97bb-334c57948c31
  storageClassName: local
  volumeMode: Filesystem
四、配置mysql-cluster-application

4.1 部署mysql有状态(master)

kind: Service
apiVersion: v1
metadata:
  name: mysql-master
  namespace: athena-mall
  labels:
    app: mysql-master
    version: v1
  annotations:
    kubesphere.io/creator: project-regular
    kubesphere.io/serviceType: statefulservice
spec:
  ports:
    - name: tcp-3306
      protocol: TCP
      port: 3306
      targetPort: 3306
    - name: tcp-33060
      protocol: TCP
      port: 33060
      targetPort: 33060
  selector:
    app: mysql-master
  clusterIP: None
  clusterIPs:
    - None
  type: ClusterIP
  sessionAffinity: None
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
4.2 部署mysql有状态(slave)

kind: Service
apiVersion: v1
metadata:
  name: mysql-slave
  namespace: athena-mall
  labels:
    app: mysql-slave
    version: v1
  annotations:
    kubesphere.io/creator: project-regular
    kubesphere.io/serviceType: statefulservice
spec:
  ports:
    - name: tcp-3306
      protocol: TCP
      port: 3306
      targetPort: 3306
    - name: tcp-33060
      protocol: TCP
      port: 33060
      targetPort: 33060
  selector:
    app: mysql-slave
  clusterIP: None
  clusterIPs:
    - None
  type: ClusterIP
  sessionAffinity: None
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
4.3 slave 同步master的设置 4.3.1 Master的设置
进入master 容器
kubectl exec -it mysql-master /bin/bash

进入mysql 内部(mysql –uroot -proot)

授权root 可以远程访问( 主从无关,为了方便我们远程连接mysql):

grant all privileges on . to 'root'@'%' identified by 'root' with grant option;
flush privileges;
添加用来同步的用户

GRANT REPLICATION SLAVE ON . to 'backup'@'%' identified by 'mysql的密码';
查看master 状态

show master status\G;

4.3.2 slave的设置
进入slaver 容器
kubectl exec -it mysql-slaver /bin/bash

进入mysql 内部(mysql –uroot -p)

授权root 可以远程访问( 主从无关,为了方便我们远程连接mysql)

grant all privileges on . to 'root'@'%' identified by 'root' with grant option;
flush privileges;
设置主库连接

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;

启动从库同步
start slave;

查看从库状态
show slave status\G;

五、外网暴露测试 5.1 部署的NodePort无状态服务
kind: Service
apiVersion: v1
metadata:
  name: master-ip
  namespace: athena-mall
  labels:
    app: master-ip
  annotations:
    kubesphere.io/creator: project-regular
spec:
  ports:
    - name: http-mysql1
      protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 30212
    - name: http-mysql2
      protocol: TCP
      port: 33060
      targetPort: 33060
      nodePort: 30443
  selector:
    app: mysql-master
    version: v1
  clusterIP: 10.233.31.134
  clusterIPs:
    - 10.233.31.134
  type: NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
kind: Service
apiVersion: v1
metadata:
  name: slave-ip
  namespace: athena-mall
  labels:
    app: slave-ip
  annotations:
    kubesphere.io/creator: project-regular
spec:
  ports:
    - name: http-mysql
      protocol: TCP
      port: 3306
      targetPort: 3306
      nodePort: 32597
  selector:
    app: mysql-slave
    version: v1
  clusterIP: 10.233.1.47
  clusterIPs:
    - 10.233.1.47
  type: NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
5.2 测试主从集群是否可用

博文参考

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

关注
打赏
1657692713
查看更多评论
立即登录/注册

微信扫码登录

0.0384s