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”