离职后的交接是一件有意思的事,被交接的时候有多头大,交接给别人的时候就有多爽,哈哈哈哈哈,不多说了,接手工作的同事要来打我了(手动狗头保命.jpg)。
不过话说回来,交接工作本身真的是学习和提升的好机会,在之前一次次接手同事工作的时候,自己也得到了快速的成长,虽然痛苦,但也学到了很多之前没接触过的技能;而当自己辞职把工作交接给同事的时候,也是回顾总结、反省自我和共同提升的好机会。
回想工作的 5 年里,一个人前前后后接下了系统的后端代码、架构、部署,从对后端一知半解到能够独立设计开发功能,到经验慢慢丰富可以给别人建议,再到掌握底层原理,一路走来,也感谢自己的坚持和不放弃。
目前对系统中使用的架构和部署方面还不够熟练,正好借着整理这篇博客的机会好好学习下 HAProxy + Keepalived 架构,也希望能给小伙伴们带来一些收获。
为什么选择 HAProxy
首先,先来了解一下 HAProxy 是什么。
HAProxy 是一个使用 C 语言编写的自由开源软件,提供了高性能的负载均衡能力,是一个基于 TCP 和 HTTP 的反向代理服务器。
它支持双机热备,支持虚拟主机,配置简单,拥有非常不错的服务器健康检查功能。当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
那么我们的系统又为什么偏偏要用 HAProxy?Nginx 也可以用于负载均衡,难道它不香么?
这就要结合具体的应用场景来说了,系统当年的场景和开发要求如下:
- 高可用。系统的业务是 7 * 24 小时运行的,几分钟的服务不可用就需要提供故障报告并杀掉一个或多个程序员祭天的那种;
- 高并发。虽然实际场景下的并发程度没那么高,但是甲方爸爸要求提供高并发的架构方案,不然不打钱;
- 安全可靠。稳定!稳定!稳定!重要的事情说三遍;
而 HAProxy 的特点如下:
- 相较于 Nginx,HAProxy 更专注于反向代理,它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
- 它尤其适合于要求高可用性的高并发环境,本身的运行模式也使得它可以很简单安全地整合进当前的架构中, 同时可以保护 web 服务器不被暴露到网络上。
- 此外,它拥有功能强大的后端服务器的状态监控 web 页面,可以实时了解设备的运行状态,还可实现设备上下线等简单操作,这个是 Nginx 不具备的。
这么一看,HAProxy 略胜一筹,猜测这大概是当年选择它的原因吧。
架构解析
如上图所示,系统中使用了 虚拟 IP +