K8s部署主从结构MySQL服务

news/2025/2/26 7:30:41

01 介绍

RC、Deployment、DaemonSet都是面向无状态的服务,它们所管理的Pod的IP、名字、启停顺序等都是随机分配的,而StatefulSet,管理所有有状态的服务。

StatefulSet为了解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称,一定的启停顺序,在StatefulSet中,Pod名字称为网络标识(hostname),还必须要用到共享存储。

在Deployment中,与之对应的服务是service,而在StatefulSet中与之对应的headless service。headless service,即无头服务,与service的区别就是它没有Cluster IP,解析它的名称时将返回该Headless Service对应的全部Pod的节点列表。

除此之外,StatefulSet在Headless Service的基础上又为StatefulSet控制的每个Pod副本创建了一个DNS域名,这个域名的格式为:

(podname).(headless server name).namespace.svc.cluster.local

mysql">02 部署mysql

MySQL 示例部署包含一个ConfigMap、两个存储挂载pv和pvc、两个 Service 与一个 StatefulSet。

创建一个ConfigMap

使用以下的 YAML 配置文件创建 ConfigMap :

#master--my.cnf
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-master-cnf
  namespace: bc-cnp
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
    server_id=1
    log-bin=mysql-bin
    read-only=0
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
kubectl apply -f mysql-master-cnf.yaml

这个 ConfigMap 提供 my.cnf 覆盖设置,可以独立控制 MySQL 主服务器配置。ConfigMap 本身没有什么特别之处,因而也不会出现不同部分应用于不同的 Pod 的情况。每个 Pod 都会在初始化时基于 StatefulSet 控制器提供的信息决定要查看的部分。slave从服务器配置和主服务器配置基本相同,需要修改metadata.name= mysql-slave-cnf,server_id=2,read-only=0。

获取mysql-master-0和mysql-slave-0的ConfigMap :

kubectl get cm -nbc-cnp

输出类似于:


http://www.niftyadmin.cn/n/5868305.html

相关文章

灵犀互娱游戏测试开发一面面经

阿里的子公司, 做的是游戏业务, 所以投递的时候把简历上加上了自己的游戏经历. 面试官大哥也围绕着游戏问了一些问题, 面试体验很好~~ 1. 介绍一下自己 (巴拉巴拉一顿说) 2. 看你的简历上有写关于用友的实习, 可以介绍一下那边的业务吗? 还有为什么那边用的c#来写自动化脚…

Hadoop 常用命令汇总

Hadoop 常用命令汇总 查看帮助信息查看指定目录文件列表上传文件下载文件移动文件/重命名拷贝文件查找文件查看内容其他命令 HDFS 文件操作命令风格有两种,两种命令效果一样 hadoop fs 开头 hdfs dfs 开头 查看帮助信息 hadoop fs -help [cmd] 查看指定目录文件列表…

深入探讨分布式事务解决方案:从二阶段提交到现代模式

在当今的软件开发领域,随着微服务架构和分布式系统的普及,如何保证跨多个服务或数据库的操作的一致性和可靠性成为了开发者面临的重要挑战之一。分布式事务的概念应运而生,旨在解决这些系统中数据一致性的问题。然而,实现分布式事…

使用Docker 部署 LNMP+Redis 环境

使用Docker 部署 LNMPRedis 环境 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互…

bug exposed beyond app through Intent.getData()

转载大神,用于自己学习 今天在做项目功能的时候遇到一个bug exposed beyond app through Intent.getData() 在项目中点击文件路径跳转过去,编译器报错android os FileUriExposedException 导致错误的原因是没有使用FileProvider 在应用间共享文件 对于面…

KafkaTool

Offset Explorer 第一次打开需要配置kafka相关配置连接 随便先启动一个Kafka(先启动zookeeper) 设置key value 记得刷新

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件,他可以很好的节省连接数据库的时间开销;本文基使用C实现了一个简单的数据库连接池,代码量只有400行只有,但是压力测试效果很好;欢迎收藏 关注,本人将会…

基于 Python 的天气数据分析与可视化

基于 Python 的天气数据分析与可视化 1. 项目背景 天气数据分析与可视化项目旨在通过爬取天气数据并进行分析,生成可视化图表,帮助用户了解天气变化趋势。通过该项目,学生可以掌握 Python 的数据爬取、数据分析和可视化技能。该项目适用于气…