主从复制架构及实现
web服务器无法承载客户端的请求,可以
扩展方式
向上扩展:使用性能更好的主机 scale Up
向外扩展:scale Out 增加更多的主机,并基于负载均衡的方式承载更多的用户请求
MySQL扩展
复制:每个节点都有相同的数据集
结构——主从复制结构 M/S
复制可以实现MySQL向外扩展的解决方案:
从节点通过向主节点请求二进制日志中的事件于本地,并且执行replay完成的
复制——默认单向进行
复制功能:
数据分布:
数据可以复制多份,从而完成数据分布的目的
客户端的数据查询较多,数据更改较少——基于数据复制,比较理想
负载均衡读请求:读均衡(读操作)
写操作——不能负载均衡——任何一个节点所执行的写操作,都是完整的写操作;
主节点接收所有的写操作,并且把所有写操作又同步给从节点一份,从节点必须完成同样多的写操作
数据备份(冗余功能)
主节点服务器挂了,可以迅速把从节点提升为主的,继续工作
复制可以帮助完成做备份
热备可能出问题
冷备的数据最可靠——线上不能实现,加上复制结构后,可以给线上的主服务器配上一个从节点,
需要做备份时,将从节点从 主从复制上 下线,停止服务,直接复制数据即可
高可用(冗余功能)和故障切换(编写脚本,监测主节点的可靠性,一旦发现主节点故障,将主节点下线,自动提升从节点为主节点)
高可用的解决方案
MySQL自身没有像keepalive等高可用的功能,但是开发脚本可帮助mysql辅助高可用
mysql升级测试(拿副本/备份来测试)
主从复制:
从节点
I/O thread 从master请求二进制日志事件,并保存于中继日志;
SQL thread 从中继日志读取日志事件,在本地完成重放replay;
主节点
dump thread 为每个slave的I/O thread启动一个dump线程,用于向其发送binary log events;
二进制日志的开启
级联复制模型:从节点既是主节点的从,又是其他从节点的主
特点:
1异步复制 主服务器写入客户端的请求,不等待从节点,性能好;从服务器数据落后主服务器,避免误操作;主服务器的事务并行操作导致从节点的操作落后,最理想的时间是:中继日志写入和replay这样一个时间段;
2主从数据不一致比较常见;自己的解决方案;
复制架构:
M/S; M/M; 环状复制; black hole引擎(本地不存储数据)
一主多从;
从服务器还可以再有从服务器;
一从多主
二进制日志的事件记录格式
STATEMENT
ROW 建议
MIXED 然后采用
复制 通过互联网进行 SSALL 企业VPN
演示的模型
主从、主主、半同步复制(gogle)、复制过滤功能
半同步复制(gogle):至少1个从节点与主同步;
复制过滤:在从节点上,中继日志记录,过滤所需的数据库,replay本地
mysql扩展解析
并发访问量过大,一台主机不能完成众多客户端的请求 解决办法
2台主机如何获取相同数据
多个数据集:每个mysql服务器在本地保存一个完整的数据副本
节点:从一个节点写的数据,在另外一个节点可以获取到;
DNS的主从:主服务器能写,从服务器只读,从服务器的所有文件都是从主服务器同步而来
简答架构:仅一个节点可以读写,其他节点只能读;
每个节点都持有完整的数据集,其中仅一个节点可以接受写操作请求,
其他节点都通过同步方式把数据复制一份,写在本地。
MySQL的复制机制:
客户端发出请求,写操作发送给主节点,读操作发送给复制节点(从节点);
MySQL的主从复制:
mysql节点(从节点)——自己不负责接收任何修改数据的请求,把自己当做是客户端,
向主服务器请求主服务器上的所有数据修改,并在本地replay一遍,形成和主服务器相同的数据集,
在这个数据集上,可以接受其他用户的读请求,但不接受写请求;
Paste_Image.png
解析
主从复制的实现
master:
主节点必须启用二进制日志,即主节点要有数据
检查slave请求的二进制日志文件的位置,发送
mysqldump线程,检索日志更新,读取二进制日志文件的事件,再响应给请求者;
slave:
开启一个线程,扮演客户端,通过mysql协议,向主服务器请求读取主服务器的二进制日志中的事件;
读到事件,记录在中继日志;再用一个文件记录主服务器的哪一个二进制日志文件的哪一个事件位置;
Paste_Image.png
从节点荡机:
健康状态检测的方式,重定向到其他节点即可;
mysql本地的quary cashed,负载均衡器调度时,基于一致性hash或取模算法;
轮询;利用前端客户端自行通过缓存服务器执行缓存
主节点荡机:
写操作:gtid 全局事务id
共享存储解决放方案
多个主节点/双主模型/master-master模型
互为主从、读请求均衡、写请求没有负载均衡、写冗余、前端不用读写分离、高可用、数据不一致
MMM; MHA; Galera-Cluster
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
基于ssl复制
Paste_Image.png
主机2
服务器验证客户端——加密、认证复制者有复制权限
Paste_Image.png
使用ssl功能,要在服务器端指明ca的证书(或者所在目录)
服务器端自己提供的证书——在配置文件中指明证书和私钥路径,然后再启动服务器端
客户端——不需要在配置文件中指明,只需要在change master to的时候指明即可;
Paste_Image.png
主机1
Paste_Image.png
无require ssl,即便帐号和密码正确,也不能连接
Paste_Image.png
mysql复制及mha/Galera
分摊——切分
Paste_Image.png
Paste_Image.png
3种存储:
结构化存储 mysql postgrapsql
事务、本身可以结果化的数据放在mysql中,
方便检索的数据——放在nosql上
mysql 存储原数据——数据框架
日志信息——nosql上
结构化的数据
不用结构化,无需支持事务,非关键性数据 nosql(文档性数据库——mongdb,kv式存储——redis)
图片 分布式文件系统(存储)
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
MHA
mha建构在mysql的复制集群之上的,提供高可用,需要自己配置mysql复制
Paste_Image.png
Paste_Image.png
自定义的扩展
master_ip...——编写脚本,主节点荡机时,可以自动更换ip/主机(网上很多)
shutdown_scrip——主节点荡机后恢复为从节点,防止没有完全死
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
实验
maridb已经全部安装好了
所有节点必须能够通过ssh进行互信通信
安装node
每一个复制集群叫做applacation
67 管理节点
在68,69,70,完成操作1后进行
Paste_Image.png
Paste_Image.png
Paste_Image.png
----------------------------------------------------------------------------------1
Paste_Image.png
manager节点上要安装manager和node 注意要配置好base和epel(包依赖)
另外3个节点只需要安装node节点即可
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------2
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------3
知识
Paste_Image.png
Paste_Image.png
Paste_Image.png
操作
Paste_Image.png
Paste_Image.png
知识
Paste_Image.png
操作
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
知识
Paste_Image.png
Paste_Image.png
--------------------------------------------------------------------------4
在68完成操作4后进行
Paste_Image.png
------------------------------------------------------------------------------------5
Paste_Image.png
Paste_Image.png
Paste_Image.png
68 主节点
vim /etc/my.cnf
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------1
创建管理权限的用户账号
Paste_Image.png
------------------------------------------------------------------------------------2
在67完成操作2后进行
Paste_Image.png
-------------------------------------------------------------------------------3
在67完成操作4后进行
Paste_Image.png
-------------------------------------------------------------------------------4
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
69 从节点
vim /etc/my.cnf
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------1
Paste_Image.png
Paste_Image.png
建议把其中一个节点配置成半同步复制
------------------------------------------------------------------------------------2
在67完成操作2后进行
Paste_Image.png
在70完成操作4后进行
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------3
70 从节点
vim /etc/my.cnf
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------1
在67完成操作1后进行
Paste_Image.png
------------------------------------------------------------------------------------2
在67完成操作2后进行
Paste_Image.png
------------------------------------------------------------------------------------3
在67完成操作5后进行
Paste_Image.png
Paste_Image.png
------------------------------------------------------------------------------------4
主服务器——必须被监控
数据——必须被冗余和备份
Paste_Image.png
Paste_Image.png
三者时间同步
Paste_Image.png
Paste_Image.png
67
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
-----------------------------------------------------------------------------------------1
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
-----------------------------------------------------------------------------------------2
Paste_Image.png
Paste_Image.png
-----------------------------------------------------------------------------------------3
在68完成操作3后
创建自动增长的id
Paste_Image.png
-----------------------------------------------------------------------------------------4
68
Paste_Image.png
Paste_Image.png
-----------------------------------------------------------------------------------------1
Paste_Image.png
-----------------------------------------------------------------------------------------2
在69完成操作3后进行
Paste_Image.png
-----------------------------------------------------------------------------------------3
在67完成操作4后
Paste_Image.png
id问题解决方案——全局id唯一生成器
-----------------------------------------------------------------------------------------4
69
Paste_Image.png
Paste_Image.png
-----------------------------------------------------------------------------------------1
Paste_Image.png
-----------------------------------------------------------------------------------------2
在67完成操作3后,在任何一个节点操作此步骤都行
Paste_Image.png
-----------------------------------------------------------------------------------------3
在68完成操作4后
Paste_Image.png
Paste_Image.png
tomcat、keepalived、haproxy、wanish、nigx、lvmp、mysql复制、分布式
主从复制、半同步复制、主主复制
如何构建MHA、galera-cluster
mysql的备份和恢复













网友评论