关于此两者,随便google一下都会有大量的文章,因此这里也不用介绍如何来进行安装和配置了。主要从一个整体方案的角度来描述什么要这样做,以及这样做所解决的问题。

所有的系统,都是先经历一个单台机器搞所有业务的时代,一个程序+一个mysql数据库,就可以满足开发及第一个版本上线的要求。随着,数据的增加以及业务的增长,这些应用就面临一个访问量的扩大以及扩展的问题。最简单的扩展就是水平扩展,原来由一个mysql增加为2个或多个,形成一个集群,这样最简单的能力就是提供更强的服务能力。如原来的访问量支持每秒1000,现在可以支持2000(理想值),相当于将服务能力分散到多个节点。这里面涉及到多个问题,首先就是数据的相互备份,然后就是如何分配计算能力,外部如何来访问等。本文引入HaProxy和KeepAlived主要处理的就是一个外部访问问题。

在后面的介绍当中,假定有2个mysql,分别为mysqlA和mysqlB.

haproxy请求分发

可以理解为通过nginx来作后端的负载均衡,HaProxy可以通过监听一个统一的端口对外提供能力,然后内部进行分发。除支持http7层处理外,还顺便为mysql支持4层转发。(更高级的可以考虑采用lvs) 在这里,将两个mysql分别配置在backend当中,并且通过option mysql-check进行相应服务的检查。

程序进行访问时,就不再访问具体的mysql机器,而是访问这个HaProxy所在的机器。这里就提到需要一个额外的机器来提供服务,但是由于只为HaProxy使用,其根据很低,一个最低配机器即可,费用不大。同时,相应的端口也填写HaProxy所暴露的端口即可。对外即认为也只仍然只有一个mysql,即对外是透明的。

HaProxy在进行处理时,将自己根据相应的策略进行转发,最简单的策略就是轮询(ribbon),当然其它加权或者是随机等,需要具体进行配置。同时,根据设定的具体时间间隔,对后端服务进行有效性检测,当mysqlA或B不能工作时,将自动从可用列表中移除。

在加上HaProxy之后,负载的问题被解决,但另一个问题又来了,即服务单点的问题。如果一旦这个HaProxy机器挂掉(或网络原因)。虽然,mysql服务器没挂,但整个服务也是不可用了。前端程序不会自动退回到去访问原始的mysql(甚至由于防火墙的问题,它也不能访问)。这时候就要用到另一个东西,保证HaProxy不会成为单点,即KeepAlived。

KeepAlived高可用

保证服务不会单点的作法就是加机器,但加机器就会出现多个ip,如何保证前端程序使用单个ip又能保证后端的实际处理机器为多台,这就是KeepAlived的作用。

我们为了保证HaProxy的高可用,已经又加了一个机器,即为HaProxyA和HaProxyB(相当于原来的2个mysql机器,又加了2台HaProxy机器)。

通过KeepAlived,我们可以创造出第3个IP,由ip3来对外提供服务,但是与HaProxy的转发性质不同,这里的ip3实际上就是HaProxyA和HaProxyB的一个同名映射。可以理解为HaProxyA和HaProxyB都在争抢这个ip,哪个争抢到了,就由哪个来提供服务。可以理解为在一定的时间内,保证以下关系

IP3<=>IP1
IP2 wait IP3

因为KeepAlived不提供任何处理能力,实际上最终的处理能落在能够处理信息的程序上。因此,我们需要将KeepAlived和HaProxy部署在一起,即KeepAlived负责抢ip,接收前端的请求,在接收到了请求之后,由系统自动将请求分发到同一个机器上的HaProxy上进行处理。即一个机器有2个IP,ip1负责接收请求,ip2负责实际的信息处理(比喻而已,就是如何监听请求和端口处理程序)

在前面的处理模型当中,因为KeepAlived不处理请求,因此如果它所在机器上的HaProxy如果不可用,实际上这个模型也是有问题的。因此KeepAlived又要来监听自己机器上的HaProxy是否有效。在配置中,通过track_script指令可以达到这个效果,与HaProxy的工作模式差不多,它可以定时执行监控脚本来查看HaProxy是否可用。如果不可用,有2种处理办法,一种就是强行再启动HaProxy,另一种就是取消自己的抢占ip位(如将自己给kill掉),将相应的ip3的位置给让出来。这样IP2就能自动与IP3进行绑定(比喻),即由IP2来提供处理能力了。

在KeepAlived的配置之上,在单个时刻只有1台机器在进行工作,另一个机器在进行准备,可以理解为这里的服务能力只有1半。好在KeepAlived和HaProxy所占用资源都较小,费用不高。

最终部署模型

  1. MysqlA(ip5)和MysqlB(ip6)水平扩展,通过双主进行数据通信,并且同时提供服务能力
  2. 通过HaProxyA(ip3)和HaProxyB(ip4)提供mysql的负载能力,将请求路由到指定的mysql服务器,同时监控后端的mysql数据库可用性
  3. 将KeepAlivedA和KeepAlivedB分别和HaProxyA和HaProxyB部署在一起,同时绑定VIP ip1,对外提供访问ip,同时监控本机的HaProxy的可用性

通过以上的部署,一个最前端的数据访问可能是以下的访问路径

IP1=>IP3->IP5
IP1=>IP3->IP6 IP1=>IP4->IP5 IP1=>IP4->IP6

转载于:https://www.cnblogs.com/zs-wei/p/9213961.html

haproxy和keepalived的理解(转载)相关推荐

  1. 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用

    今天我们讲haproxy结合keepalived实现LNMP的负载均衡和高可用,现在的公司大部分都基于haproxy实现负载均衡.下面以一个事例去给大家详细讲解如何去实现: 一.用haproxy结合k ...

  2. kubernetes多master搭建,安装Haproxy、Keepalived

    目录 1.版本 2.主机名 3.系统配置(all) 4.开启ipvs的前置条件(all) 5.docker安装(all) 6.主节点配置Haproxy.Keepalived 7.主节点安装Kubead ...

  3. HAProxy基于KeepAlived实现Web高可用及动静分离

    前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载. HA ...

  4. haproxy,lvs keepalived || heartbeat,nginx对比

    VS的特点是:     1.抗负载能力强.是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;     2.配置性比较低,这是一个缺点也是一个优点,因为没 ...

  5. 简书上的大牛总结的 ServerSocket Accept() 的确是阻塞方法 与猜想一致 一些理解 转载如下

    当我们调用如下代码的时候,实际java封装了很多层调用 图1 new ServerSocket(9876) 这个构造函数的内部,会调用 bind() 以及 listen() 等系统调用,之后才是 ac ...

  6. 对Lucene PhraseQuery的slop的理解[转载]

    所谓PhraseQuery,就是通过短语来检索,比如我想查"big car"这个短语,那么如果待匹配的document的指定项里包含了"big car"这个短语 ...

  7. 卷积神经网络VGG16权重数量的计算和理解(转载)

    VGG16网络结构是: _________________________________________________________________ Layer (type)           ...

  8. haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群

    1.什么是Haproxy HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的we ...

  9. 对于超平面的理解[转载]

    转自:https://blog.csdn.net/dengheCSDN/article/details/77313758 1.引言 n 维空间中的超平面由下面的方程确定: 其中,w 和 x 都是 n ...

最新文章

  1. Design Pattern - Memento(C#)
  2. 关于c++的一些案例
  3. 使用python将数据导出excel表格
  4. (61)FPGA面试题-使用Verilog语言编写异步复位同步释放代码
  5. ubuntu系统下vscode字体显示异常(别扭)
  6. 实现QQ主界面效果[图]
  7. 浅谈防勒索病毒方案之主机加固
  8. 什么样的家具拆单软件才能称之为好用?全屋定制拆单 衣柜橱柜拆单 sketchup拆单 拆单软件 有屋拆单软件 筑木
  9. 记录一下,关于Instagram
  10. phpstudy安装部署DVWA
  11. python 笔记之“海龟”画图 演示画小猪佩奇,机器猫
  12. html蔚蓝网注册页面,如何在网站中添加手机短信验证码注册功能?
  13. 【老生谈算法】matlab实现模糊K-均值算法——均值算法
  14. 傅里叶变换经滤波处理及傅里叶逆变换
  15. docker 构建推送到阿里云仓库失败
  16. v-permission来做权限管理
  17. openlayes调用arcgis wms服务跨域问题(arcgis server10.2)
  18. 如何选择聚合支付平台
  19. 0x8(0x80070035找不到网络路径)
  20. 第一篇:SLAM-Gmapping 代码阅读(源码详细注释)

热门文章

  1. SpringCloud Alibaba Sentinel断路器介绍与控制台搭建
  2. 查找目录下的及子目录下的 所有的给定后缀名的文件并将其路径打印到一个文件中。
  3. Netty技术细节源码分析-内存池之PoolChunk设计与实现
  4. 图像处理论坛_【活动】CSIG菁英青云论坛第三期活动预告!!
  5. m.2接口和nvme区别_M.2接口硬盘当真速度就快吗?这些不懂就别乱买!今天再说一遍...
  6. 网络请求与本地函数调用的区别
  7. golang判断结构体是否实现了某个接口
  8. spring@Autowired的对象为null,非容器中的类如何调用容器中的类
  9. 网页截图和svg模版动态生成图片Java实现
  10. 性能调优从哪方面入手?