【云原生】Mysql 集群技术

PS:MySQL的源码编译进行实验环境操作

1、MySQL安装及初始化

(1)生成启动脚本

(2) 修改环境变量

(3)生成配置文件

(4)数据库初始化建立mysql基本数据

(5)数据库安全初始化

(5)测试

2、组从复制

以下是配置mastesr(作者在 mysql-node1 上)

(1)编辑配置文件并重启数据库

(2)进入数据库配置用户权限

注意:做完这些配置不能将数据库退出,否则master的状态会变化。

以下是配置slave(作者在 mysql-node2 上)

(1)编辑配置文件并重启数据库

(2)进入数据库配置用户权限

(3)查看从服务是否配置成功

在主从服务器上的配置已经配置好了,现在进行测试:

(1)在 mysql-node1 上建立库表并添加数据

(2)在 mysql-node2 上进行查看数据是否能查看到

3、当有数据时添加slave2

注意:此时我们需要配置第二台 slave,第二台主机的环境要进行编译与初始化。(环境进行源码编译和此文第一个实验即可

主机名 IP地址
mysql-node3 172.25.254.30

(1)修改 mysql-node3 的配置文件并重启

(2)从 master 节点备份数据

(3)复制给 slave2

(4)利用 master 节点中备份出来的 moon.sql 在 slave2 中拉平数据

(5)配置 slave2 的 slave 功能

在 mysql-node1 上查看 master 状态:

进行 mysql-node3 的配置:

(6)测试

先在 mysql-node1 上写入:

再在是mysql-node3 上查看:

小知识点:

  • 写入大于读取 => 主多从少
  • 读取大于写入 => 主少从多

4、延迟复制

注意:此实验只用到 mysql-node1 和 mysql-node3

(1)查看 slave 状态

在这个命令下我们可以发现延迟效果参数为0:

(2)配置延迟效果

找到延迟效果参数,发现参数已经变化:

(3)测试

在 mysql-node1 上删除 user1 这条数据:

1分钟之内在 mysql-node3 上查看,此时发现 user1 这条数据还在:

一分钟之后在 mysql-node3 上查看,此时发现 user1 这条数据已经没有了:

5、慢查询日志

  • 慢查询,顾名思义,执行很慢的查询;
  • 当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个SQL语句就是需要优化的;
  • 慢查询被记录在慢查询日志里;
  • 慢查询日志默认是不开启的;
  • 如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。

注意:此实验在 matser 上进行,这样我们的 slave 上也会拥有

(1)查看慢查询状态

(2)开启慢查询日志

(3)测试

6、并行复制

注意:在 mysql-node2 上做此实验,因为我们刚刚在 mysql-node3 上做了延迟复制,所以在 mysql-node3 上做此实验无意义。

查看slave中的线程信息:

默认情况下slave中使用的是sql单线程回放,在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重。

开启MySQL的多线程回放可以解决上述问题

(1)修改配置文件并重启

(2)查看slave中的线程信息

7、gtid日志模式

(1)设置 gtid 并重启

在 mysql-node1 上:

在 mysql-node2 上:

在 mysql-node3 上:

(2)停止 slave 端

在 mysql-node2 和 mysql-node3 上:

(3)开启 slave 端的 gtid

(4)查看 mster 状态

发现 master 和 slave 的gtid是一致的!

8、半同步模式

在 master 端上(mysql-node1):

(1)配置启用半同步模式

(2)安装同步插件

(3)查看插件情况

(4)打开半同步功能

(5)查看半同步功能状态

在 slave 端上(mysql-node2 和 mysql-node3):

注意:mysql-node2 和 mysql-node3 在 mysql 上的步骤相同,配置文件有所不同点,作者将其在以下内容中标明解释。

(1)修改配置文件

  • 注释只读模块后要重启
  • 添加半同步模块不能重启,会报错

(2)进入 mysql 配置

(3)测试

在 master 端写入数据:

模拟故障:

停止从服务器上的复制 I/O 线程(mysql-node2 和 mysql-node3)

在master端插入数据

9、实现mysql组复制

注意:在做这个实验前一定要记得给三台主机(mysql-node1、mysql-node2和mysql-node1)做本地解析。

在 mysql-node1 上:

(1)关闭MySQL

(2)删除原先数据库数据

'

(3)修改配置文件

(4)初始化数据库'

(5)配置sql

(6)复制给 mysql-node2 和 mysql-node3

在 mysql-node2 和 mysql-node3 上:(操作相同,除了配置文件有两个地方需要改,作者已在图中注明,以 mysql-node2 为演示)

(1)停止数据库并删除数据

(2)修改配置文件

(3)初始化数据库

(4)配置sql

测试:

在 mysql-node1 中:

在 mysql-node2 中:

在 mysql-node3 中:

10、路由

注意:实验开始前请将作者放在文章顶部的资源包拖入 mysql-node1 上

(1)安装 mysql-router

(2)配置 mysql-router

编辑配置文件并开启路由服务:

vim /etc/mysqlrouter/mysqlrouter.conf

停止数据库:

(3)测试

查看调度效果:

11、mysql高可用集群MHA

注意:实验开始前请将作者放在文章顶部的资源包拖入 MHA 上

11.1 搭建一主两从架构

(1)修改配置文件并停止服务:

(2)数据库初始化

PS:mysql-node1、mysql-node2 和 mysql-node3配置都相同

(3)配置gtid 日志模式和半同步模式

在 master 端上(mysql-node1)

在 slave 端上(mysql-node2 和 mysql-node3配置都相同)

11.2 安装MHA所需要的软件

(1)解压 MHA 压缩包

(2)安装 MHA 包

(3)免密登录

mysql-node1:

mysql-node2:

mysql-node3:

免密文件复制给一主两从:

(4)复制给一主两从

(5)在一主两从中安装

三台都需要安装,这里以 mysql-node1 为演示:

11.3 配置 MHA 的管理环境

(1)配置本地解析

(2)生成配置文件

(3)编辑配置文件

11.4 检测配置

(1)检测网络及ssh免密

masterha_check_ssh --conf=/etc/masterha/app1.cnf

(2)检测数据主从复制情况

在数据节点 master 端允许 root 远程登陆:

执行检测:

masterha_check_repl --conf=/etc/masterha/app1.cnf

12 MHA的故障切换

MHA的故障切换过程:

  • 配置文件检查阶段,这个阶段会检查整个集群配置文件配置
  • 宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作
  • 复制dead master和最新slave相差的relay log,并保存到MHA Manger具体的目录下
  • 识别含有最新更新的slave
  • 应用从master保存的二进制日志事件(binlog events)
  • 提升一个slave为新的master进行复制 7.使其他的slave连接新的master进行复制

12.1 master 未出现故障手动切换

配置前查看 slave 状态,此时 master 在mysql-node1 上:

在master数据节点还在正常工作情况下

这里指定新的 master 节点不能为 mysql-node3,因为我们之前在配置文件中设定了 mysql-node3 不能为 master。

查看 slave 状态,此时 master 在mysql-node2 上

12.2 master故障手动切换

(1)模拟master故障

(2)在MHA-master中做故障切换

--ignore_last_failover => 表示忽略在/etc/masterha/目录中在切换过程中生成的锁文件

(3)查看 slave 状态

发现此时 mster 为 mysql-node1,切换成功

(4)恢复故障mysql节点

在 mysql-node2 上:

12.3 自动切换

(1)查看 slave 状态,此时 master 在 mysql-node1上

(2)删除防火墙策略与添加环回

当有防火墙策略时,自动切换实验会失败,mysql-node1、mysql-node2、mysql-node3 和 MHA四台主机上都需删除:

因为我们在之前的配置文件的 冗余检测上写入了 172.25.254.11 这个IP,我们要将它写入 mysql-node2 这个备用 master 上,否则日志报错显示为在一直进行网络检测,找不到 172.25.254.11 这个IP。

查看环回是否添加成功:

(3)删掉切换锁文件

(4)监控程序通过指定配置文件监控master状态,当 master 出问题后自动切换并退出避免重复做故障切换

此时会生成一个健康状态检测的文件,打开另一个 MHA 主机会话进行查看:

(5)打开实时监控日志

(6)停止 master

此时发现监控日志下进行三遍 mysql-node1 为 master 的检测,当依旧检测不到 mysql-node1 后,开始自动切换 master 为 mysql-node2:

监控master状态切换故障节点后自动退出:

(7)恢复故障节点

开启 mysql :

配置现 master 的 slave 策略:

13、为MHA添加VIP功能

注意:两个资源包在文章顶部

(1)复制

(2)修改脚本在脚本中只需要修改下vip即可

(3)删除锁文件和日志

(4)开启脚本调用

(5)查看主从状态,发现现在 mysql-node2 为主

(6)在 master 上添加 vip

(7)启动监控程序

(8)模拟故障自动切换模式,自动切换后查看vip变化

关闭 master 节点服务:

此时 master 变为 mysql-node1 :

查看 vip 是否存在于 mysql-node1 上:

(9)恢复故障主机

(10)模拟故障手动切换模式,手动切换后查看vip变化

查看 vip 是否存在于 mysql-node2 上:

总结:当 VIP 开启后,无论手动或是自动,VIP都会跟随 master 的迁移而迁移!

相关推荐
荒Huang21 分钟前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
海阔天空_201331 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
桥田智能33 分钟前
气爪在自动化装配线中是如何应用的?
运维·自动化
MonkeyKing_sunyuhua36 分钟前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
天郁青36 分钟前
数据库交互的本地项目:后台管理系统
数据库·交互
马剑威(威哥爱编程)41 分钟前
MongoDB面试专题33道解析
数据库·mongodb·面试
小光学长1 小时前
基于vue框架的的流浪宠物救助系统25128(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库·vue.js·宠物
掘金-我是哪吒1 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
零炻大礼包2 小时前
【SQL server】数据库远程连接配置
数据库
zmgst2 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql