冰河,能不能讲讲如何实现 MySQL 数据存储的无限扩容?
写在前面
随着互联网的高速发展,企业中沉淀的数据也越来越多,这就对数据存储层的扩展性要求越来越高。当今互联网企业中,大部分企业使用的是MySQL来存储关系型数据。如何实现MySQL数据存储层的高度可扩展性成为了互联网企业必须要解决的问题。那么,如何实现真正意义上的MySQL无限扩容呢?今天,冰河就来以实战的角度为大家讲讲如何实现MySQL数据库的无限扩容。
文章已收录到:https://github.com/sunshinelyz/technology-binghe 和 [https://gitee.com/binghe001/technology-binghe](https://gitee.com/binghe001/technology-binghe),小伙伴们别忘记给个小星星哦~~
概述
本文是在《海量数据架构下如何保证Mycat的高可用?》一文的基础上进一步扩展,从而实现数据存储层每一个环节的高可用,从而实现MySQL的无限扩容。
要解决的问题
在《海量数据架构下如何保证Mycat的高可用?》一文中,我们的架构图如下:
由上图可以看出,HAProxy存在单点隐患,一旦这个HAProxy服务宕机,那么整个服务架构将不可用。那么,如何解决HAProxy存在的单点隐患问题呢?这就是这篇博文要解决的问题。
软件版本
操作系统:CentOS-6.8-x86_64
JDK版本:jdk1.8
HAProxy版本:haproxy-1.5.19.tar.gz
Mycat版本:Mycat-server-1.6(自行下载源码编译)
keepalived版本:keepalived-1.2.18.tar.gz
MySQL版本:mysql-5.7.tar.gz
部署规划
高可用负载均衡集群部署架构
上图中简化了数据存储部分的架构细节。例如,其中对于架构中的每一个部分,我们都可以单独进行扩展,独立成集群对外提供服务,而不会存在单点故障的问题。
图解说明:
(1) HAProxy 实现了 Mycat 多节点的集群高可用和负载均衡, 而 HAProxy 自身的高可用则可以通过Keepalived 来实现。 因此, HAProxy 主机上要同时安装 HAProxy 和 Keepalived, Keepalived 负责为该服务器抢占 vip(虚拟 ip,图中的 192.168.209.130),抢占到 vip 后,对该主机的访问可以通过原来的 ip(192.168.209.135)访问,也可以直接通过 vip(192.168.209.130)访问。
(2) Keepalived 抢占 vip 有优先级, 在 keepalived.conf 配置中的 priority 属性决定。但是一般哪台主机上的 Keepalived服务先启动就会抢占到 vip,即使是 slave,只要先启动也能抢到(要注意避免 Keepalived的资源抢占问题)。
(3) HAProxy 负责将对 vip 的请求分发到 Mycat 集群节点上, 起到负载均衡的作用。 同时 HAProxy 也能检测到 Mycat 是否存活, HAProxy 只会将请求转发到存活的 Mycat 上。
(4) 如果 Keepalived+HAProxy 高可用集群中的一台服务器宕机, 集群中另外一台服务器上的 Keepalived会立刻抢占 vip 并接管服务, 此时抢占了 vip 的 HAProxy 节点可以继续提供服务。
(5) 如果一台 Mycat 服务器宕机, HAPorxy 转发请求时不会转发到宕机的 Mycat 上,所以 Mycat 依然可用。
综上: Mycat 的高可用及负载均衡由 HAProxy 来实现,而 HAProxy 的高可用,由 Keepalived 来实现。
HAProxy 节点 2 的部署
HAProxy 主机 2(liuyazhuang136, 192.168.209.136)的安装部署请参考博文《海量数据架构下如何保证Mycat的高可用?》,注意配置文件的调整:多节点部署时 haproxy.cfg 配置文件中的 node 、 description 配置的值要做相应调整。
HAProxy 主机 2(liuyazhuang136, 192.168.209.136)上的HAProxy配置如下:
HAProxy 节点 1 的状态信息页:http://192.168.209.135:48800/admin-status
HAProxy 节点 2 的状态信息页:http://192.168.209.136:48800/admin-status
Keepalived 介绍
官网: http://www.keepalived.org/
Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Haproxy 可以实现 web 前端服务的高可用。Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。 VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议, VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,或者是通过算法选举产生。 MASTER 实现针对虚拟路由器 IP 的各种网络功能,如 ARP 请求, ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时, BACKUP 将接管原先 MASTER 的网络功能。VRRP 协议使用多播数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身网卡的 MAC 地址, VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP(组), BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。
Keepalived 的安装
注意:需要在192.168.209.135、 192.168.209.136两台服务器上安装Keepalived。
Keepalived (http://www.keepalived.org/download.html )
上传或下载 keepalived
上传或下载 keepalived(keepalived-1.2.18.tar.gz) 到 /usr/local/src 目录
解压安装
安装 keepalived 需要用到 openssl
将 keepalived 安装成 Linux 系统服务
因为没有使用 keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工作
复制默认配置文件到默认路径
复制 keepalived 服务脚本到默认的地址
设置 keepalived 服务开机启动
修改 Keepalived 配置文件
(1) MASTER 节点配置文件(192.168.209.135)
(2)BACKUP 节点配置文件(192.168.209.136)
特别注意: 如果非抢占模式不生效, 在 Keepalived 的故障节点恢复后会再次导抢占 vip,从而因 vip 切换而闪断带来的风险(视频解说)。 按以上配置,配置了 Keepalived 非抢占模式, 配置及注意点如下:
(1) 主设备、 从设备中的 state 都设置为 BACKUP
(2) 主设备、从设备中都不要配置 mcastsrcip (本机 IP 地址)
(3) 默认主设备(priority 值大的 Keepalived 节点) 配置一定要加上 nopreempt,否则非抢占不起作用
(4) 防火墙配置允许组播(主、备两台设备上都需要配置, keepalived 使用 224.0.0.18 作为 Master 和Backup 健康检查的通信 IP)
编写 Haproxy 状态检测脚本
我们编写的脚本为/etc/keepalived/haproxy_check.sh (已在 keepalived.conf 中配置)
脚本要求:如果 haproxy 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalied将虚拟 ip 绑定到 BACKUP 机器上。
内容如下:
haproxy_check.sh脚本内容如下:
保存后,给脚本赋执行权限:
启动 Keepalived
Keepalived 服务管理命令:
高可用测试
(1)关闭 192.168.209.135 中的 Haproxy, Keepalived 会将它重新启动
(2)关闭 192.168.209.135 中的 Keepalived, VIP(192.168.209.130) 会被 192.168.209.136 抢占
由上图可知:Keepalived 停止后, 192.168.209.135 节点的网络接口中的 VIP(192.168.209.130) 将消失
此时,由上图可知:在192.168.209.136节点的网络接口中会出现 VIP(192.168.209.130)。
查看此时 VIP 对应的 MAC, Windows 下使用 CMD 命令查看:
说明此时 VIP 已经漂移到物理主机 192.168.209.136上了
再通过 VIP(192.168.209.130) 来访问 Haproxy 集群, 访问到的也是 192.168.209.136
(3)重新启动 192.168.209.135 中的 Keepalived
重新启动 192.168.209.135 中的 Keepalived, vip(192.168.209.130)保留在 192.168.209.136 主机上, 不会出现 135 启动抢占 vip 的情况。
(4)模拟抢占了 vip 的节点(192.168.209.136) 中的 HAProxy 故障或启动失败
方式:把 192 节点中的 haproxy.cfg 文件重命名为 haproxy.cfgbak, 并把 haproxy 服务进行 kill 掉,此时 keepalived 会尝试去启动 haproxy,会由于找不到配置文件而启动失败,此时就会进行 haproxycheck.sh脚本中的 killall keepalived 命令,结束 keepalived 进行。随后就是 192.168.209.135 节点重新抢占 vip
说明此时 VIP 已经漂移到物理主机 192.168.209.135上了
再通过 VIP(192.168.209.130) 来访问 Haproxy 集群, 访问到的也是 192.168.209.135
验证数据库访问
通过 vip 访问数据库、验证 vip 切换后的数据库访问
(1)命令行访问数据库
(2)Navicat访问数据库
至此,Mycat高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)搭建完毕
大家可以到链接http://download.csdn.net/detail/l1028386804/9915621下载搭建Mycat高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)使用的Keepalived
其他推荐文章
冰河原创PDF
关注 冰河技术 微信公众号:
回复 “并发编程” 领取《深入理解高并发编程(第1版)》PDF文档。
回复 “并发源码” 领取《并发编程核心知识(源码分析篇 第1版)》PDF文档。
回复 ”限流“ 领取《亿级流量下的分布式解决方案》PDF文档。
回复 “设计模式” 领取《深入浅出Java23种设计模式》PDF文档。
回复 “Java8新特性” 领取 《Java8新特性教程》PDF文档。
回复 “分布式存储” 领取《跟冰河学习分布式存储技术》 PDF文档。
回复 “Nginx” 领取《跟冰河学习Nginx技术》PDF文档。
回复 “互联网工程” 领取《跟冰河学习互联网工程技术》PDF文档。
重磅福利
微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!!
写在最后
如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!
版权声明: 本文为 InfoQ 作者【冰河】的原创文章。
原文链接:【http://xie.infoq.cn/article/59d94bac2bace91497be08b7d】。文章转载请联系作者。
评论