K8S部署MySQL主从环境

这篇具有很好参考价值的文章主要介绍了K8S部署MySQL主从环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.创建mysql主从环境的命名空间

[root@k8s-master1 mysql]# kubectl create ns mysql
namespace/mysql created

2.创建master的pvc

[root@k8s-master1 mysql]# cat mysql-master-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: mysql
  annotations:
    volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
  resources:
    requests:
      storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
[root@k8s-master1 mysql]# kubectl apply -f mysql-master-pvc.yaml
persistentvolumeclaim/mysql-pvc created

3.创建mysql-master的headliness

[root@k8s-master1 mysql]# cat mysql-master-headliness.yaml
kind: Service
apiVersion: v1
metadata:
  name: mysql-master-hs
  namespace:  mysql
  labels:
    app: mysql-master-ss
spec:
  selector:
    app: mysql-master-ss
  clusterIP: None
  ports:
    - port: 3306
      targetPort: 3306
[root@k8s-master1 mysql]# kubectl apply -f mysql-master-headliness.yaml
service/mysql-master-hs created

4.创建mysql-master-service对外访问

[root@k8s-master1 mysql]# cat mysql-master-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-master-service
  namespace: mysql
spec:
  type: NodePort
  selector:
    app: mysql-master-ss
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 42222
[root@k8s-master1 mysql]# kubectl apply -f mysql-master-service.yaml
service/mysql-master-service created

5.创建mysql-master部署文件

[root@k8s-master1 mysql]# cat mysql-master-StatefulSet.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-master-ss
  namespace: mysql
  labels:
    app: mysql-master-ss
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-master-ss
  serviceName: mysql-master-hs
  template:
    metadata:
      labels:
        app: mysql-master-ss
    spec:
      containers:
      - name: mysql
        image: mysql:5.7.35
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql123"
        - name: MYSQL_REPLICATION_USER
          value: "repl"
        - name: MYSQL_REPLICATION_PASSWORD
          value: "repl123"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
        args:
          - --log-bin=mysql-bin
          - --binlog-ignore-db=mysql
          - --server-id=1001
          - --symbolic-links=0
          - --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  volumeClaimTemplates:
    - metadata:
        name: mysql-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: nfs-client
        resources:
          requests:
            storage: 5Gi
[root@k8s-master1 mysql]# kubectl apply -f mysql-master-StatefulSet.yaml
statefulset.apps/mysql-master-ss created

6.检查服务启动情况

[root@k8s-master1 mysql]# kubectl get all -n mysql
NAME                    READY   STATUS    RESTARTS   AGE
pod/mysql-master-ss-0   1/1     Running   0          48s

NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/mysql-master-hs        ClusterIP   None            <none>        3306/TCP         6m22s
service/mysql-master-service   NodePort    10.255.42.172   <none>        3306:42222/TCP   2m43s

NAME                               READY   AGE
statefulset.apps/mysql-master-ss   1/1     48s

7.创建mysql-slave的pvc

[root@k8s-master1 mysql]# cat mysql-slave-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-slave-pvc
  namespace: mysql
  annotations:
    volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
  resources:
    requests:
      storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
[root@k8s-master1 mysql]# kubectl apply -f mysql-slave-pvc.yaml
persistentvolumeclaim/mysql-slave-pvc created

8.建mysql-slave的headliness和service用来对外访问(slave节点可以不创建service)

[root@k8s-master1 mysql]# cat mysql-slave-headliness.yaml
kind: Service
apiVersion: v1
metadata:
  name: mysql-slave-headliness
  namespace:  mysql
  labels:
    app: mysql-slave-ss
spec:
  selector:
    app: mysql-slave-ss
  clusterIP: None
  ports:
    - port: 3306
      targetPort: 3306
[root@k8s-master1 mysql]# kubectl apply -f mysql-slave-headliness.yaml
service/mysql-slave-headliness created

[root@k8s-master1 mysql]# cat mysql-slave-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-slave-service
  namespace: mysql
spec:
  type: NodePort
  selector:
    app: mysql-slave-ss
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 42223
[root@k8s-master1 mysql]# kubectl apply -f mysql-slave-service.yaml
service/mysql-slave-service created

9.创建mysql-slave部署文件(mysql-serverid不能一样一定要区分开)

[root@k8s-master1 mysql]# cat mysql-slave-StatefulSet.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-slave-ss
  namespace: mysql
  labels:
    app: mysql-slave-ss
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-slave-ss
  serviceName: mysql-slave-headliness
  template:
    metadata:
      labels:
        app: mysql-slave-ss
    spec:
      containers:
      - name: mysql
        image: mysql:5.7.35
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql123"
        - name: MYSQL_REPLICATION_USER
          value: "repl"
        - name: MYSQL_REPLICATION_PASSWORD
          value: "repl123"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
        args:
          - --log-bin=mysql-bin
          - --binlog-ignore-db=mysql
          - --server-id=2002
          - --symbolic-links=0
          - --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  volumeClaimTemplates:
    - metadata:
        name: mysql-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: nfs-client
        resources:
          requests:
            storage: 5Gi

10.检查服务的启动情况

[root@k8s-master1 mysql]# kubectl get pods -n mysql -o wide
NAME                READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
mysql-master-ss-0   1/1     Running   0          7m40s   10.10.135.211   k8s-master3   <none>           <none>
mysql-slave-ss-0    1/1     Running   0          23s     10.10.135.208   k8s-master3   <none>           <none>

11.配置主从同步

[root@k8s-master1 mysql]# kubectl exec -it mysql-master-ss-0 -n mysql bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@mysql-master-ss-0:/#
root@mysql-master-ss-0:/# mysql -u root -pmysql123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35-log MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
创建slave库授权账号
mysql> GRANT REPLICATION SLAVE ON *.* to 'repl'@'%' IDENTIFIED  by 'repl123';
Query OK, 0 rows affected, 1 warning (0.01 sec)
 获取二进制日志
 mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      437 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

 进入slave库启动同步功能 
 mysql> change master to master_host='mysql-master-hs.mysql',master_user='repl',master_password='repl123',master_log_file='mysql-bin.000003',master_log_pos=437 ;
Query OK, 0 rows affected, 2 warnings (0.03 sec)
开启同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
检查同步状态
mysql> show slave status \G;

12。验证同步文章来源地址https://www.toymoban.com/news/detail-830639.html

到了这里,关于K8S部署MySQL主从环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes 是一个强大的容器编排平台,可以帮助我们管理和部署容器化应用。MySQL 是一个流行的关系型数据库,在生产环境中通常需要高可用性和数据持久性。 本文将介绍如何在 Kubernetes 中部署 MySQL 集群,以确保数据的高可用性和持久

    2024年04月17日
    浏览(49)
  • k8s内网环境部署web项目(tomcat+mysql)

    本篇k8s版本为1.18, 容器运行时为docker 注 : kubernetes从1.24版本开始, 移除了对docker的支持, 采用containerd作为容器运行时 准备包含web项目的tomcat压缩包,jdk压缩包 在上一步的目录下编写dockerfile文件 构建镜像 选项: -t 给镜像加一个Tag myweb 镜像名称 v1 镜像版本号 . 表示当前目录,即

    2024年02月12日
    浏览(36)
  • 云原生之深入解析MySQL在K8S环境中部署与监控

    MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 本文主要分析 mysql 如何部署在 k8s 上,

    2024年02月12日
    浏览(70)
  • k8s搭建mysql集群实现主从复制

    名称 版本 操作系统 IP 备注 K8S集群 1.20.15 Centos7.9 192.168.11.21 192.168.11.22 192.168.11.23 21为k8s-master 22为k8s-node01 23为k8s-node02 MySql 5.7 Centos7.9 一主两从 nfs服务器 Centos7.9 192.168.11.24 共享目录为/nfs 11.24: 11.21/22/23(所有K8S节点): 11.21: 创建rbac 创建sc 启动: 11.21: 此文件定义了两个

    2024年02月15日
    浏览(40)
  • Kubernetes(K8s)基本环境部署

    此处只做学习使用,配置单master环境。 1、ip+主机规划(准备五台新机)==修改各个节点的主机名 注意:关闭防火墙与selinux 节点 主机名 ip 身份 joshua1 kubernetes-master.openlab.cn 192.168.134.151 master joshua2 kubernetes-work1.openlab.cn 192.168.134.152 work1 joshua3 kubernetes-work2.openlab.cn 192.168.134.153

    2024年02月10日
    浏览(58)
  • 基于kubernetes部署MySQL主从环境

    部署方式 通过部署mysql主从容器,配置主从pod之间数据同步。 配置数据库访问的密码 先配置MySQL-Master服务 配置数据卷 通过ConfiigMap配置MySQL的配置文件my.cnf 配置Service服务 配置主节点pod启动的StatefulSet配置文件 检查服务的启动情况 配置mysql-salve 配置PVC 配置ConfigMap 配置Servi

    2024年01月21日
    浏览(42)
  • 【实战】使用Helm在K8S集群安装MySQL主从

    K8S对于云原生部署有着至关重要的作用,几乎所有的应用和中间件都可以部署在K8S,让其帮助我们进行管理。一般情况下我们推荐数据库不使用容器化部署,但是在某些场合为了方便管理也可以采用该种方式。今天我们就用在K8S集群部署MySQL,仅当作学习学习,在生产环境谨

    2024年02月22日
    浏览(54)
  • k8s mysql 主从复制(带密码) ubuntu arm内核

    安装NFS服务 安装Helm kubectl apply -f mysql.yaml 参考官方文档: https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/

    2024年02月07日
    浏览(41)
  • 基于k8s搭建mysql5.7主从集群实现读写分离

    一,准备工作 1,拥有一个运行中的k8s集群 2,拥有一个ceph分布式存储集群,此mysql集群基于ceph块存储,部署方案可参考我前面的rook部署ceph方案 二,集群搭建 1,创建存储类storageclass       将此 StorageClass 定义保存为 storageclass.yaml : 创建存储类   2,MySQL 部署包含一个 Con

    2024年02月08日
    浏览(42)
  • 用 Helm 在 k8s 上快速搭建 MySQL 主从集群 ,并提供对外访问

    核心一览 Helm 的使用 NFS 搭建 配置文件 一点心得 简单回忆下这个运行环境 👇(很烦,感觉给自己挖了个大坑🕳/(ㄒoㄒ)/~~) 宿主机 Traefik Minikube Ingress Service Pod helm 官网快速上手👉 helm.sh/zh/docs/int… 安装 下载地址 : github.com/helm/helm/r… 三大概念 Chart 代表着 Helm 包。 Repos

    2024年02月11日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包