kubernetes(k8s):使用statefulset部署mysql主从集群

官网地址文章目录1. statefullset部署mysql主从集群的原理(1)从以下的 YAML 配置文件创建 ConfigMap(2)从以下 YAML 配置文件创建服务(3)最后,从以下 YAML 配置文件创建 StatefulSet pod1. statefullset部署mysql主从集群的原理运行一个有状态的应用程序mysql-0是mastermysql-1和mysql-2是两个备份当mysql写的时候,找headless service中的mysql-0.mysql;当mysql读的
摘要由CSDN通过智能技术生成

官网地址

1. statefullset部署mysql主从集群的原理

运行一个有状态的应用程序
在这里插入图片描述mysql-0是master
mysql-1和mysql-2是两个备份
当mysql写的时候,找headless service中的mysql-0.mysql;当mysql读的时候,找clusterip service中的mysql读,实现读写分离。
statefulset维护三个副本,一个主两个从
因为主从的配置不同所以通过configmap来解决主从配置不同的问题

如何使用StatefulSet 控制器去运行一个有状态的应用程序。此例是一主多从的 MySQL 集群

部署 MySQL 示例,包含一个 ConfigMap,两个 Services,与一个 StatefulSet

(1)从以下的 YAML 配置文件创建 ConfigMap

configmap(作用配置文件和镜像解藕)

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

在这里插入图片描述在这里插入图片描述这个 ConfigMap 提供 my.cnf 覆盖,使您可以独立控制 MySQL 主服务器和从服务器的配置。 在这种情况下,您希望主服务器能够将复制日志提供给从服务器,并且希望从服务器拒绝任何不是通过复制进行的写操作。

ConfigMap 本身没有什么特别之处,它可以使不同部分应用于不同的 Pod。 每个 Pod 都会决定在初始化时要看基于 StatefulSet 控制器提供的信息。

(2)从以下 YAML 配置文件创建服务

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

在这里插入图片描述Headless Service 给 StatefulSet 控制器为集合中每个 Pod 创建的 DNS 条目提供了一个宿主。因为 Headless Service 名为 mysql,所以可以通过在同一 Kubernetes 集群和 namespace 中的任何其他 Pod 内解析 .mysql来访问 Pod。

客户端 Service 称为 mysql-read,是一种常规 Service,具有其自己的群集 IP,该群集 IP 在报告为就绪的所有MySQL Pod 中分配连接。可能端点的集合包括 MySQL 主节点和所有从节点。

请注意,只有读取查询才能使用负载平衡的客户端 Service。因为只有一个 MySQL 主服务器,所以客户端应直接连接到 MySQL 主服务器 Pod (通过其在 Headless Service 中的 DNS 条目)以执行写入操作。

(3)最后,从以下 YAML 配置文件创建 StatefulSet pod

[kubeadm@server1 mysql]$ cat statefulset.yaml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  replicas: 3
  template:
    metadata:
      labels:
        app: mysql
    spec:
      initContainers:             //pod初始化阶段,第一个初始化容器
      - name: init-mysql
        image: reg.westos.org/k8s/mysql:5.7
        command:
        - bash
        - <
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值