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"

相关推荐
小菜yh6 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
Microsoft Word26 分钟前
数据库系统原理(第一章 数据库概述)
数据库·oracle
华为云开源36 分钟前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源
kejijianwen4 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
高兴就好(石7 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆7 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0667 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下8 小时前
Redis的配置与优化
数据库·redis·缓存
MuseLss9 小时前
Mycat搭建分库分表
数据库·mycat