海量数据架构下如何保证 Mycat 的高可用?
写在前面
在《冰河,能讲讲Mycat如何实现MySQL的读写分离吗?》一文中,我们实现了使用Mycat实现MySQL的读写分离。然而,此时的Mycat只有一个节点,如果Mycat节点宕机了,则整个MySQL集群将不可用,所以,我们有必要保证Mycat节点的高可用。那如何保证Mycat节点的高可用呢?今天,我们就一起来聊聊这个话题。一起搭建一套Mycat的高可用集群。
目前,我也在业余时间开发和维护Mycat源码,小伙伴们在学习和使用Mycat时,遇到问题也可以加我微信【sunshinelyz】共同交流哦!
注:文章已经收录到:
GitHub:https://github.com/sunshinelyz/technology-binghe
Gitee:https://gitee.com/binghe001/technology-binghe
软件版本
操作系统:CentOS-6.8-x86_64
JDK版本:jdk1.8
HAProxy版本:haproxy-1.5.19.tar.gz
Mycat版本:Mycat-server-1.6 (自行下载源码编译)
MySQL版本:mysql-5.7
部署规划
Mycat集群架构图
图解说明:
HAProxy负责将请求分发到Mycat上,起到负载均衡的作用,同时HAProxy也能检测到Mycat是否存活,HAProxy只会将请求转发到存活的Mycat上。如果一台Mycat服务器宕机,HAPorxy转发请求时不会转发到宕机的Mycat上,所以Mycat依然可用。
Mycat节点2的部署
Mycat主机2(liuyazhuang134,192.168.209.134)请参考《冰河,能讲讲Mycat如何实现MySQL的读写分离吗?》
注意:liuyazhuang133(192.168.209.133)和 liuyazhuang134(192.168.209.134) 中都要加上(或更新)主机名映射配置。
配置Mycat状态检查服务
注意:需要在Mycat节点主机上配置。
Mycat服务主机(liuyazhuang133、liuyazhuang134)上需要增加Mycat服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对Mycat的服务状态进行检测判断。可以使用xinetd来实现,通过xinetd,HAProxy可以用httpchk来检测Mycat的存活状态。(xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。xinetd为linux系统的基础服务)
(1)安装xinetd
如果xinetd还没有安装,可使用如下命令安装:
(2)添加 includedir /etc/xinetd.d
检查/etc/xinetd.conf的末尾是否有 includedir /etc/xinetd.d ,没有就加上
(3)创建/etc/xinetd.d 目录
检查 /etc/xinetd.d 目录是否存在,不存在则创建
(4)增加Mycat存活状态检测服务配置
增加以下内容:
(5)添加 /usr/local/bin/Mycat_status 服务脚本
增加以下内容:
(6)给新增脚本赋予可执行权限
(7)在 /etc/services 中加入 mycat_status 服务
在末尾加入:
保存后,重启xinetd服务
(8)验证mycat_status服务是否成功启动
能看到上图这样的信息,说明服务配置成功。
(9)Mycat服务主机的防火墙上打开 48700端口
增加:
保存后重启防火墙
脚本测试:
HAProxy介绍
HAProxy官网:http://www.haproxy.org/
HAProxy各版本的官方文档:http://cbonte.github.io/haproxy-dconv/index.html
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
HAProxy目前主要有三个版本:1.4、1.5、1.6、1.7,CentOS6.6自带的RPM包为1.5的。
HAProxy1.5版开始,支持SSL、DDoS防护等功能,可看官网说明:
version 1.5 : the most featureful version, supports SSL, IPv6, keep-alive, DDoS protection, etc...
Mycat官方推荐使用HAProxy做MyCat的高可用负载均衡代理。
HAProxy的安装
在192.168.209.135服务器上进行安装。
(1)下载(或上传) haproxy-1.5.19.tar.gz 到 /usr/local/src,解压安装
(2)如需了解安装注意点,可查看HAProxy的软件说明
(3)安装编译所需的依赖包
(4)编译
TARGET是指定内核版本,高于2.6.28的建议设置为linux2628,Linux操作系统内核版本查看命令# uname -r, ARCH指定系统架构,openssl pcre zlib 这三个包需要安装不然不支持
(5)创建安装目录 /usr/local/haproxy
(6)执行安装
(7)创建配置文件目录
(8)从配置文件模版复制配置文件,并添加配置文件软连接
(9)拷贝错误页面,并添加目录软连接(HTTP模式选配)
(10)拷贝开机启动文件,并赋予可执行权限
(11)添加haproxy命令脚本软连接
(12)设置HAProxy开机启动
搭建Mycat负载均衡集群
这里,我们使用HAProxy来搭建Mycat负载均衡集群。HAProxy支持TCP(第四层)和HTTP(第七层)应用的代理,本节课程我们使用HAProxy来做MyCat的负载均衡代理使用的是TCP模式。在4层模式下HAProxy仅在客户端和服务器之间转发双向流量。HAProxy配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后会自动将该服务器加入进来。
(1)修改haproxy.cfg 配置文件
具体参数说明可参考官方配置文档 /usr/local/haproxy/doc/haproxy/configuration.txt或GitHub连接:http://cbonte.github.io/haproxy-dconv/configuration-1.5.html
编辑后的文件内容如下所示。
注意:多节点部署时node 、 description的值要做相应调整。
(2)根据以上HAProxy配置文件要求做以下配置
添加haproxy用户组和用户
创建chroot运行的路径
防火墙中打开3306端口和48800端口
重启防火墙
(3)开启rsyslog的haproxy日志记录功能
默认情况下 haproxy是不记录日志的,如果需要记录日志,还需要配置系统的syslog,在linux系统中是rsyslog服务。syslog服务器可以用作一个网络中的日志监控中心,rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。安装配置rsyslog服务:
把 $ModLoad imudp 和 $UDPServerRun 514前面的 # 去掉
$ModLoad imudp ## 是模块名,支持UDP协议
$UDPServerRun 514
##允许514端口接收使用UDP和TCP协议转发过来的日志,
##而rsyslog在默认情况下,正是在514端口监听UDP
确认 #### GLOBAL DIRECTIVES #### 段中是否有 $IncludeConfig /etc/rsyslog.d/*.conf没有则增加上此配置,增加后的效果:
增加以下内容:
##如果不加上面的的"&~"配置则除了在/var/log/haproxy.log中写入日志外,也会写入/var/log/message文件中配置保存后重启rsyslog服务
等到HAProxy服务启动后,就能在/var/log/haproxy.log中看到日志了
(4)配置系统内核的IP包转发功能
使配置生效
(5)启动HAProxy
(6)使用MySQL客户端通过HAProxy连接Mycat
写数据测试
查询后的结果如下:
(7)登录HAProxy的状态信息统计页面
http://192.168.209.135:48800/admin-status
用户名和密码都是admin,对应的haproxy.cfg配置片段
统计页面如下图所示:
好了,今天就到这儿吧,我是冰河,我们下期见~~
冰河原创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/3d0769261f05868b193269231】。文章转载请联系作者。
评论