k8s实践之mysql集群搭建(十五)

news2024/11/16 17:32:32

先下载 k8s实践之mysql集群搭建资料

主从模式简介:

当master主服务器上的数据发生改变时,则将其改变写入二进制(binlog)事件日志文件中;

slave从服务器会在一定时间间隔内对master主服务器上的二进制日志进行探测,探测其是否发生过改变(通过二进制文件的大小是否不同来进行判断,日志文件改变了的大小也可以叫作偏移),如果探测到master主服务器的二进制事件日志发生了改变,则开始一个I/O Thread请求master二进制事件日志;

同时master主服务器为每个I/O Thread启动一个dump thread,用于向其发送二进制事件日志;

slave从服务器将接收到的二进制事件日志写到自己本地的(relay日志)中继日志文件中;

slave从服务器将启动SQL Thread从中继日志中读取二进制日志,在本地重放,使得其数据和主服务器保持一致;

最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次唤醒;

主从复制的过程会有很小的延迟,基本没有影响。

1.local pv的搭建

假设我们的k8s集群有hostnamenode-1node-2node-3的三台主机。首先,在宿主机上创建一个挂载点,比如/mnt/disks,然后用 RAM Disk 来模拟本地磁盘,在node-1上执行:

$ mkdir /mnt/disks

$ mkdir /mnt/disks/vol1

$ mount -t tmpfs vol1 /mnt/disks/vol1

在其余两台主机执行时,将路径替换为vol2vol3以作区分。

然后为这些本地磁盘定义对应的 PVpv-1.yamlpv-2.yamlpv-3.yaml,注释的地方为需要替换的地方

2.mysql配置文件ConfigMap

Master 节点和 Slave 节点需要有不同的配置文件:我们只需要给主从节点分别准备两份不同的 MySQL 配置文件,然后根据 Pod 的序号(Index)挂载进去即可。这样的配置文件信息,应该保存在 ConfigMap 里供 Pod 使用。

3.Service的定义

这两个 Service 都代理了所有携带 app=mysql 标签的 Pod,也就是所有的 MySQL Pod。端口映射都是用 Service 3306 端口对应 Pod 3306 端口。

所有用户的读请求,都必须访问第二个 Service 被自动分配的 DNS 记录,即mysql-read。这样,读请求就可以被转发到任意一个 MySQL 的主节点或者从节点上。而所有用户的写请求,则必须直接以 DNS 记录的方式访问到 MySQL 的主节点,即mysql-0.mysql这条 DNS 记录。

4.StatefulSet的定义

init-mysql ConfigMap 中,获取 MySQL Pod 对应的配置文件,根据节点的角色是 Master 还是 Slave 节点,为 Pod 分配对应的配置文件。此外,MySQL 还要求集群里的每个节点都有一个唯一的 ID 文件,名叫 server-id.cnf

clone-mysql Slave Pod 启动前,从 Master 或者其他 Slave Pod 里拷贝数据库数据到自己的目录下。

xtrabackup Slave 节点的 MySQL 容器第一次启动之前,执行初始化 SQL

mysql是集群里Mysql容器的定义。

5.集群操作

查看集群状态:

kubectl get pod -l app=mysql

向这个 MySQL 集群发起写请求:

$ kubectl run mysql-client --image=mysql:5.7 -i --rm --restart=Never --\
  mysql -h mysql-0.mysql <<EOF
CREATE DATABASE test;
CREATE TABLE test.messages (message VARCHAR(250));
INSERT INTO test.messages VALUES ('hello');
EOF

向这个 MySQL 集群发起读请求:

$ kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=Never --\
 mysql -h mysql-read -e "SELECT * FROM test.messages"
Waiting for pod default/mysql-client to be running, status is Pending, pod ready: false
+---------+
| message |
+---------+
| hello   |
+---------+
pod "mysql-client" deleted

集群的伸缩:

$ kubectl scale statefulset mysql  --replicas=2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握Vue生命周期,让你的前端开发效率翻倍!

1 Vue实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue实例</title><script src../vue.js></script> </head> <body><div id"root"><!-- v…

位图以及布隆过滤器

本文主要讲解哈希思想的实际应用&#xff0c;位图和布隆过滤器。 位图 讲解位图之前我们先来解答这样一道腾讯的面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。【腾讯】 很多人立马就想到了用…

Seata TCC 模式理论学习、生产级使用示例搭建及注意事项 | Spring Cloud55

一、前言 通过以下系列章节&#xff1a; docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…

STL——set容器、map容器

初识STL **set容器/multiset容器****set容器——构造和赋值****set容器——大小和交换****set容器——插入和删除****set容器的查找和统计****set和multiset的区别****set的相关操作源码&#xff1a;****multiset的相关操作源码** **pair使用——pair队组的创建****set容器——…

FreeRTOS-定时器详解

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转FreeRTOS &#x1f4ac;保持…

2023全国计算机二级考试时间(全年各阶段考试时间安排)

2023全国计算机二级考试时间(全年各阶段考试时间安排) 2023年全国计算机二级考试时间分别为&#xff1a;3月25日至27日(上半年3月)、9月23日至25日(下半年9月)。 其中3月和9月开考全部级别全部科目&#xff0c;5月和12月考试开考一、二级全部科目&#xff0c;各省级承办机构可根…

RabbitMQ集群部署之镜像模式

RabbitMQ集群的普通模式中&#xff0c;一旦创建队列的主机宕机&#xff0c;队列就会不可用。不具备高可用能力。如果要解决这个问题&#xff0c;必须使用官方提供的镜像集群方案。 官方文档地址&#xff1a;https://www.rabbitmq.com/ha.html 1.镜像模式的特征 默认情况下&a…

离心式冷水机组

离心式冷水机组是利用电作为动力源&#xff0c;氟利昂制冷剂在蒸发器内蒸发吸收载冷剂水的热量进行制冷&#xff0c;蒸发吸热后的氟利昂湿蒸汽被压缩机压缩成高温高压气体&#xff0c;经水冷冷凝器冷凝后变成液体&#xff0c;经膨胀阀节流进入蒸发器再循环。从而制取7℃-12℃冷…

解决jvm内存溢出的方法

上一篇问题讲了怎么实现jvm内存溢出,现在已经实现了,那怎么去解决它呢. java.lang.OutOfMemoryError: GC overhead limit exceeded 简单来说&#xff0c;java.lang.OutOfMemoryError: GC overhead limit exceeded发生的原因是&#xff0c;当前已经没有可用内存&#xff0c;经…

【IMX6ULL驱动开发学习】06.APP与驱动程序传输数据_自动创建设备节点(hello驱动)

一、APP与驱动之间传输数据 /*驱动从APP获取数据*/ unsigned long copy_from_user(void *to, const void *from, unsigned long n)/*驱动传输数据到APP*/ unsigned long copy_to_user(void *to, const void *from, unsigned long n)二、使用copy_to_user、copy_from_user在AP…

如何把视频声音转成文字?分享三个实用的方法!

在日常学习中&#xff0c;有些小伙伴可能想将视频课程中老师的讲解内容整理出来&#xff0c;但是逐字逐句地打字既低效又耗时。那么&#xff0c;如何将视频声音快速转换为文字呢&#xff1f;答案是使用记灵在线工具&#xff01;下面我将分享几种使用记灵在线工具快速将视频声音…

Raft is not great?

Raft相比于paxos不好的地方有下面这些地方 1.Term raft的逻辑时钟是通过term&#xff0c;和votefor来确定的&#xff0c;同时&#xff0c;raft的votefor只能是None < 有&#xff0c;有的话&#xff0c;就不可比&#xff0c;也就是一个偏序关系。这个不可比的特性会增加选举…

Javaweb学习路线(2)——Maven

一、概念 Maven 是 apache 旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 二、作用 依赖管理&#xff1a; 动态管理jar包&#xff0c;避免版本冲突。统一项目结构&#xff1a; 提供标准、统一的项目结构。项目构建&#xff1a; 标准跨平台的自动化项目…

深入探讨软件测试的质量度量指标

本文的目的是介绍项目中使用到主要质量指标&#xff0c;这些质量指标可以分为以下三类&#xff1a; 质量保证过程指标生产事故管理指标度量质量文化指标 质量保证过程指标 质量保证指标可以通过测试覆盖率来度量功能和非功能测试的覆盖率&#xff0c;同时也可以根据测试发现…

shell学习记录(函数)

Shell 函数 linux shell 可以用户定义函数&#xff0c;然后在shell脚本中可以随便调用。 shell中函数的定义格式如下&#xff1a; [ function ] funname [()] { action; [return int;] } 说明&#xff1a; 1、可以带function fun() 定义&#xff0c;也可以直接fun()…

对“java子类不能继承父类构造方法“的理解

目录 子类构造函数&#xff0c;什么时候需要写&#xff0c;什么时候可以不写&#xff1f;为什么要这么设计&#xff1f;子类已经继承父类&#xff0c;为什么就不能继承父类的构造器了&#xff1f;子类直接用父类的构造器不就行了&#xff1f; 子类构造函数&#xff0c;什么时候…

今年适合进入软件测试行业吗?

对于“自己适不适合转行做软件测试&#xff1f;”一直都是测试行业里的热门话题。随着近几 年IT互联网行业的快速发展&#xff0c;软件测试岗位也受到越来越多人的关注&#xff0c;因此有很多人都想要从事这一行业&#xff0c;这里主要分为两类人&#xff0c;一种是刚毕业的应届…

【Deno】极简入门

极简系列 极简入门 简介 Deno是一个 JavaScript/TypeScript 的运行时&#xff0c;默认使用安全环境执行代码&#xff0c;有着卓越的开发体验。 Deno建立在 V8、Rust 和 Tokio 的基础上。 优势 适合不喜欢复杂配置开箱即用的人群&#xff08;如本人小溪&#xff09; 安全性…

《微服务实战》 第三十一章 ShardingSphere - ShardingSphere-JDBC

前言 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在构建异构数据库上层的…

Spring-Bean基础

文章目录 什么是 BeanDefinition如何获取BeanDefinition如何将BeanDefinition注册到容器中Bean的初始化操作Bean的销毁操作 什么是 BeanDefinition BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口&#xff0c;包含如下信息&#xff1a; 如何获取BeanDefin…