mysql 主从复制 读写分离 MHA

mysql 的主从复制和读写分离:

读写分离和MHA高可用的前提 主从复制

主从复制的模式:

1.mysql的默认模式

异步模式:主库在更新完事务之后会立即把结果返回给从服务器,不关心从库是否接收到,是否处理成功

网络问题可能没有同步,或者是其他因素的影响导致同步失败。

快, 效率高

2.全同步模式:

主库在更新完事务之后,立即把结果返回到从库,所有的从库执行完之后才能继续下一个同步。安全,但性能低

3.半同步复制模式

介于异步和全同步之间,主库更新完事务,也是同步到从库,同步完之后有一个等待时间

等待时间是一个tcp/ip的往返时间 5ms左右

既一定程度上保证效率,又在一定程度上保证了数据的完整性

主从复制:主可以复制给从,从不能到主 也不能从到从

主从复制的延迟怎么解决:

1.网络问题:网线 路由器 防火墙的原因

2.硬件设备问题:cpu 内存 磁盘 出问题

3.配置文件 写错

配置文件中进行设置来提高数据的安全性。

前提 数据的存储引擎是innodb cat /etc/my.cnf 才行

双一设置:

innodb_flush_log_at_trx_commit=1

每次提交都会刷新事务日志,确保事务的持久性。但会影响性能

sync_binlog=1

每次提交事务,将二进制日志的内容保存到磁盘,确保日志的持久性。提高安全性

性能化设置:

sync_binlog=5 或10 0 极端情况 不建议

最多提交几条事务会进行磁盘刷新 日志内容保存到磁盘

innodb_flush_log_at_trx_commit=2

每次更新都保存在内存中,不进行刷新。

innodb_buffer_pool_size=60M

控制innodb缓冲池的大小,增大可以提高数据库的性能,但占用的是系统内存,配置时要注意合理化时间。

主从复制如何实现

主服务器记录数据变更到binlog,从服务器请求并复制这些变更到中继日志,然后执行以同步数据。异步过程,提升性能与可靠性

基于mysql的二进制日志,根据主库的二进制文件的标志位,实现主从同步。

主从服务器之间,服务器的时间要同步

架构:一主两从 三台服务器

192.168.233.21 mysql8.0主

192.168.233.22 mysql8.0从

192.168.233.23 mysql8.0从

log- slave-updates=true

允许 从服务器 从主库复制数据时,可以写入 从库 自己的二进制日志中

relay-log=relay-log-bin

从服务器上获取二进制日志的开头,开启从库的二进制日志

relay-log-index=slave-relay-bin.index

二进制日志的索引文件的名称

relay_log_recovery=1

配置从服务器 在启动使是否执行二进制日志的回复操作(和主库同步),1表示开启

Slave_IO_Running

从库和主机的读写通信是否正常

Slave_SQL_Running

slave mysql进程状态是否正常

读写分离:

前提是主从复制

在主从架构中,主库只负责写(数据写在主库,主从复制到从),从库只负责读

读写分离的方式:

1.代码 开发人员 使用代码完成,涉及到数据库的二次开发。性能好,不需要额外硬件设备

2.中间层代理 代理服务器。在客户端和主从架构之间有一个代理服务器。代理服务器收到客户端的请求之后,通过客户端的sql语句来进行判断,读转到从,写转到主

amoeba:读写分离最常用客户端代理软件。java代码开发的

192.168.233.21 mysql8.0主

192.168.233.22 mysql8.0从

192.168.233.23 mysql8.0从

192.168.233.10 jdk1.6和amoeba

192.168.233.20 maridb

MHA高可用

高可用模式下的故障切换,基于主从复制。

单点故障和主从复制不能切换的问题。

至少需要三台

故障切换过程 0-30秒

vip地址,根据vip地址所在的主机,确定主备

主和备不是优先确定的,主从复制的时候就确定了主,备是在MHA的过程中确定。

MHA的组件:

MHA NODE数据节点,每台mysql和管理服务器都要安装 监控服务器状态以及收集数据

MHA的manager管理节点

管理mysql的高可用集群

可以单独部署在一台独立的服务器,也可以部署多个

实现主备之间切换。主发生故障。切换到备。

MHA特点:

1.manager来实现主备切换

2.数据同步还是依靠二进制日志,最大程度保证数据不丢失

3.半同步方式,实现数据的完整性

一主多从的架构,最少三台

架构:

4台

master 192.168.235.21 mysql 8.0 node组件

slave1 192.168.235.22 mysql 8.0 node组件

slave2 192.168.235.23 mysql 8.0 node组件

管理节点 192.168.23.10 node组件 manager组件

masterha_check_ssh

所有的数据库节点和管理节点通过ssh来进行互相通信,检查集群的ssh配置

masterha_check_repl

检查mysql的复制情况 数据同步

masterha_manager

manager启动脚本

masterha_check_status

检查MHA集群状态的文件

masterha_master_switch

控制故障转移

masterha_stop

关闭manager服务

master_ip_failover自动故障切换时, vip的管理脚本

master_ip_online_change 在线切换时vip的管理脚本

power_manager故障发生后,关闭主机的脚本

send_report 故障切换之后,发送报警的脚本

在 manager 节点上测试 ssh 无密码认证

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

在 manager 节点上测试 mysql 主从连接情况

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

在 manager 节点上启动 MHA

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null >

/var/log/masterha/app1/manager.log 2>&1 &

查看 MHA 状态,可以看到当前的 master 是 master 节点。

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

查看 MHA 日志,也以看到当前的 master 是 192.168.233.21,如下所示。

cat /var/log/masterha/app1/manager.log | grep "current master"

相关推荐
z1234567898611 分钟前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD13 分钟前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
TlSfoward1 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记1 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发2 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB2 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
Database_Cool_2 小时前
AI Agent 长期记忆怎么存?阿里云 PolarDB-X 对接 Mem0 记忆框架实践
数据库·阿里云
会编程的土豆3 小时前
数据库范式
数据库·oracle
L1624763 小时前
MySQL 全环境生产快速安装 + 完整配置手册(整合国产银河麒麟适配 + 主从补充版)
数据库·mysql
yio_yin3 小时前
Spring事务管理(数据一致性)
数据库·sql·spring