前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >部署Haproxy的高可用

部署Haproxy的高可用

作者头像
剧终
发布于 2020-08-26 16:33:59
发布于 2020-08-26 16:33:59
1.8K00
代码可运行
举报
文章被收录于专栏:Linux学习日志Linux学习日志
运行总次数:0
代码可运行

Haproxy与Keepalived VRRP 介绍

软件:haproxy---主要是做负载均衡的7层,也可以做4层负载均衡 apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。 负载均衡是通过OSI协议对应的 7层负载均衡:用的7层http协议, 4层负载均衡:用的是tcp协议加端口号做的负载均衡

ha-proxy概述 ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。

ha-proxy的特点 ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。

支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。 支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。 性能非常优秀,基于单进程处理模式(和Nginx类似)让其性能卓越。 拥有一个功能出色的监控页面,实时了解系统的当前状况。 功能强大的ACL支持,给用户极大的方便。

haproxy算法: 1.roundrobin 基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整. 2.static-rr 基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制 3.leastconn 新的连接请求被派发至具有最少连接数目的后端服务器.

keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。(云服务器不支持VRRP)

虚拟路由冗余协议,可以认为是实现高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

脑裂(裂脑): Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。 解决方式: 1、添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少"裂脑"发生机会。(指标不治本,只是提高了检测到的概率); 2、做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。 3、爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信

实验环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

在所有服务器上面进行配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl stop firewalld  #关闭防火墙
setenforce 0   #关闭selinux,临时生效
vim /etc/hosts
172.16.0.10 master
172.16.0.8  backup
172.16.0.4  server1
172.16.0.5  server2

安装nginx

给两台web服务器配置安装nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server1 /]# yum install nginx -y
[root@server2 /]# yum install nginx -y

创建测试文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server1 /]# echo "Hello World server1" > /usr/share/nginx/html/index.html
[root@server2 /]# echo "Hello World server2" > /usr/share/nginx/html/index.html

安装Haproxy调度器

master:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# yum -y install haproxy
[root@master /]# cp -rf /etc/haproxy/haproxy.cfg{,.bak}
[root@master /]# vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2 info
    pidfile     /var/run/haproxy.pid
    maxconn     4000   #优先级低
    user        haproxy
    group       haproxy
    daemon               #以后台形式运行ha-proxy
    nbproc 1            #工作进程数量  cpu内核是几就写几
defaults
    mode                    http  #工作模式 http ,tcp 是 4,http是 7 层   
    log                     global
    retries                 3   #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查
    option                  redispatch  #服务不可用后重定向到其他健康服务器。
    maxconn                 4000  #优先级中
    contimeout              5000  #ha服务器与后端服务器连接超时时间,单位毫秒ms
    clitimeout              50000 #客户端超时
    srvtimeout              50000 #后端服务器超时
listen stats
    bind            *:81
    stats                       enable
    stats uri               /haproxy  #使用浏览器访问 http://172.16.0.10:81/haproxy,可以看到服务器状态  
    stats auth              we:123  #用户认证
frontend  web
    mode                    http  
    bind                            *:80   #监听哪个ip和什么端口
    option                  httplog     #日志类别 http 日志格式
    acl html url_reg  -i  \.html$  #1.访问控制列表名称html。规则要求访问以html结尾的url(可选)
    use_backend httpservers if  html #2.如果满足acl html规则,则推送给后端服务器httpservers
    default_backend    httpservers   #默认使用的服务器组
backend httpservers    #名字要与上面的名字必须一样
    balance     roundrobin  #负载均衡的方式
    server  http1 172.16.0.4:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
    server  http2 172.16.0.5:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

backup:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup /]# yum -y install haproxy
[root@backup /]# cp -rf /etc/haproxy/haproxy.cfg{,.bak}
[root@backup /]# vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2 info
    pidfile     /var/run/haproxy.pid
    maxconn     4000   #优先级低
    user        haproxy
    group       haproxy
    daemon               #以后台形式运行ha-proxy
    nbproc 1            #工作进程数量  cpu内核是几就写几
defaults
    mode                    http  #工作模式 http ,tcp 是 4,http是 7 层   
    log                     global
    retries                 3   #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查
    option                  redispatch  #服务不可用后重定向到其他健康服务器。
    maxconn                 4000  #优先级中
    contimeout              5000  #ha服务器与后端服务器连接超时时间,单位毫秒ms
    clitimeout              50000 #客户端超时
    srvtimeout              50000 #后端服务器超时
listen stats
    bind            *:81
    stats                       enable
    stats uri               /haproxy  #使用浏览器访问 http://172.16.0.8:81/haproxy,可以看到服务器状态  
    stats auth              we:123  #用户认证
frontend  web
    mode                    http  
    bind                            *:80   #监听哪个ip和什么端口
    option                  httplog     #日志类别 http 日志格式
    acl html url_reg  -i  \.html$  #1.访问控制列表名称html。规则要求访问以html结尾的url(可选)
    use_backend httpservers if  html #2.如果满足acl html规则,则推送给后端服务器httpservers
    default_backend    httpservers   #默认使用的服务器组
backend httpservers    #名字要与上面的名字必须一样
    balance     roundrobin  #负载均衡的方式
    server  http1 172.16.0.4:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
    server  http2 172.16.0.5:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

启动Haproxy服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# systemctl start haproxy
[root@backup /]# systemctl start haproxy

使用客户机测试

Keepalived实现调度器HA高可用

安装keepalived

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# yum install -y keepalived
[root@backup /]# yum install -y keepalived

编辑配置文件 master:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# cp /etc/keepalived/keepalived.conf{,.bak}
[root@master /]# vim /etc/keepalived/keepalived.conf
global_defs {
   router_id directory1   #调度器的名称,备调度器改为directory2(两个名字一定不能一样)
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备,备用的话写backup
    interface ens33     #VIP绑定接口
    virtual_router_id 80  #整个集群的调度器一致(在同一个集群)
    priority 100         #主调度器优先级  备调度器改为50
    advert_int 1         #发包
    authentication {
        auth_type PASS      #主备节点认证信息
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.100/24    #VIP  设置为自己网段
    }
}

backup:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@backup /]# cp /etc/keepalived/keepalived.conf{,.bak}
[root@backup /]# vim /etc/keepalived/keepalived.conf
global_defs {
   router_id directory2   #调度器的名称,备调度器改为directory2(两个名字一定不能一样)
}

vrrp_instance VI_1 {
    state backup        #定义主还是备,备用的话写backup
    interface ens33     #VIP绑定接口
    nopreempt        #设置到backup上面,不抢占资源
    virtual_router_id 80  #整个集群的调度器一致(在同一个集群)
    priority 50
    advert_int 1         #发包
    authentication {
        auth_type PASS      #主备节点认证信息
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.100/24    #VIP  设置为自己网段
    }
}

启动keepalived

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# systemctl start keepalived
[root@backup /]# systemctl start keepalived

查看VIP IP绑定成功了没

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# ip add |grep 172.16.0.
inet 172.16.0.10/24 brd 172.16.0.255 scope global dynamic ens33
inet 172.16.0.100/24 scope global secondary ens33

[root@backup /]# ip add |grep 172.16.0.
inet 172.16.0.8/24 brd 172.16.0.255 scope global dynamic ens33

可以看到VIP地址在主调度器上 如果这个时候keepaliedv主节点服务器宕机了,VIP会自己漂移到备用节点上。

5>浏览器访问VIP地址

基于nginx的高可用性

以上我们只是实现了高可用,基于Haproxy的前提是Haproxy服务是正常。如果有突发情况使得nginx服务不能启动,但是我们的keepalived服务是正常,这个时候用户是访问不到的,VIP也不会自动漂移到备用的节点服务器上。所以我们需要写一些代码来判断一下Haproxy服务是不是正常,如果不正常的话我们就将Haproxy服务关掉,然后实现VIP的漂移,这个时候用户就不会出现无法访问的情况了。

思路: 让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Haproxy失败,则关闭本机的Keepalived

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@master /]# vim /etc/keepalived/check_haproxy_status.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null   
if [ $? -ne 0 ];then                                                                     
#       /etc/init.d/keepalived stop
        systemctl stop keepalived
fi     

[root@master /]# chmod a+x /etc/keepalived/check_haproxy_status.sh  

2>keepalived使用script

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
master:
[root@master /]# vim /etc/keepalived/keepalived.conf
global_defs {
   router_id directory1
}
vrrp_script check_haproxy {
   script "/etc/keepalived/check_haproxy_status.sh"
   interval 5  #每5秒执行一次
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 80
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.100/24
    }
 track_script {
        check_haproxy
    }
}

测试

将keepalived的主节点的haproxy服务关闭,查看vip是否漂移,如果漂移,即成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mysq+Haproxy+Keepalived高可用
在连接数据库的时候需要使用VI+haproxy_PORT,上面我们配置haproxy监听了6039端口,那么连接的时候就是用VIP+6039端口。
剧终
2020/08/27
5460
Keepalived+Nginx高可用集群
如果有突发情况使得nginx服务不能启动,但是我们的keepalived服务是正常,这个时候用户是访问不到的,VIP也不会自动漂移到备用的节点服务器上。所以我们需要写一些代码来判断一下Nginx服务是不是正常,如果不正常的话我们就将Nginx服务重新启动,如果Nginx启动不了就将keepalived服务关掉,然后实现VIP的漂移,这个时候用户就不会出现无法访问的情况了。
剧终
2020/08/27
7530
Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
Nginx、LVS、HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能。 1)在四层(tcp)实现负载均衡的软件: lvs------>重量级 nginx------>轻量级,带缓存功能,正则表达式较灵活 haproxy------>模拟四层转发,较灵活 2)在七层(http)实现反向代理的软件: haproxy------>天生技能,全面支持七层代理,会话保持,标记,路径转移; nginx------>只在ht
洗尽了浮华
2018/01/22
9K0
Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
基于Haproxy的高可用实战
软件:haproxy---主要是做负载均衡的7层,也可以做4层负载均衡 apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。负载均衡是通过OSI协议对应的 7层负载均衡:用的7层http协议, 4层负载均衡:用的是tcp协议加端口号做的负载均衡
民工哥
2020/09/15
6520
基于Haproxy的高可用实战
rabbitmq高可用集群搭建_mongodb高可用架构
​ 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的。RabbitMQ 集群是一个或多个节点的逻辑分组,集群中的每个节点都是对等的,每个节点共享所有的用户,虚拟主机,队列,交换器,绑定关系,运行时参数和其他分布式状态等信息。一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图:
全栈程序员站长
2022/09/30
2.5K0
rabbitmq高可用集群搭建_mongodb高可用架构
基于HAProxy+Keepalived高可用负载均衡web服务的搭建
1.HAProxy HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进当前的架构中, 同时可以保护web服务器不被暴露到网络上。 2.Keepalived Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现。 3.vrrp协议 在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有两种: 在主机上使用动态路由协议(RIP、OSPF等) 在主机上配置静态路由 很明显,在主机上配置动态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点故障。VRRP的目的就是为了解决静态路由单点故障问题,VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。
菲宇
2019/06/12
8970
基于HAProxy+Keepalived高可用负载均衡web服务的搭建
004.Heartbeat+HAProxy+MySQL半复制高可用架构
192.168.77.100 master-private.ha.com master-private
木二
2019/07/26
9310
HAProxy基于KeepAlived实现Web高可用及动静分离
前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。 HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。 本文带来的是HAProxy基于KeepAlived实现Web高可用及动静分离。 相关介绍 HAProxy HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应
互联网老辛
2018/07/03
1.1K0
构建高可用nginx集群
案例需求 部署基于nginx分发器的高可用web集群 分发器故障自动切换 数据服务器自动容错 任何机器宕机不中断web业务 实验拓扑 实验环境 角色 IP client 192.168.0.10 master 192.168.0.40 VIP=192.168.0.150 backup 192.168.0.41 VIP=192.168.0.150 web1 192.168.0.42 web2 192.168.0.43 实验步骤 a、配置nginx集群 master&backup安装nginx和k
星哥玩云
2022/09/15
8690
构建高可用nginx集群
mycat+haproxy服务与高可用(
4.2修改keeplived 的配置文件,配置自己需要的配置 4.2.1修改主从的配置文件
py3study
2020/01/06
3390
Heartbeat + Haproxy + MySQL双主复制 实现读写负载均衡及高可用
本篇我们将利用haproxy实现MySQL双主复制的读写负载均衡与MySQL的高可用,同时用Heartbeat保证两台负载均衡器的高可用性。
大数据真好玩
2021/01/26
2.1K0
从零开始掌握 HAProxy 负载均衡器,详细!
HAProxy 是一个免费的负载均衡软件,可以运行于大部分主流的 Linux 操作系统上。
杰哥的IT之旅
2021/07/13
2.2K0
从零开始掌握 HAProxy 负载均衡器,详细!
企业 keepalived 高可用项目实战
keepalived可以做一个集群,在服务进行运行的时候,会在vrrp协议上的,backup机子上会一直收到keepalived主机(master)所发送的vrrp包,当没有收到这个包的时候,集群里面就认为master宕掉啦,这就会选举新的机器来做主机,这样就实现了高可用
全栈程序员站长
2022/09/14
8580
01 . HAProxy原理使用和配置
1 . 采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。
iginkgo18
2020/09/27
3.6K0
01 . HAProxy原理使用和配置
集群高可用代理实践分享
在 Kubernetes 集群的 高可用拓扑选项[1] 中,介绍了集群高可用的两个方案:
gopher云原生
2022/06/08
8940
集群高可用代理实践分享
HAProxy+Keepalived实现Mycat高可用
在实际项目中,Mycat服务也需要考虑高可用性,如果Mycat所在的服务器出现宕机,或者Mycat服务故障,需要有备机提供服务,需要考虑Mycat集群。 高可用方案: 我们可以使用HAProxy+Keepalived配合两台Mycat搭起Mycat集群,实现高可用性。HAProxy实现了Mycat多节点的集群高可用和负载均衡,而HAProxy自身的高可用则可以通过Keepalived来实现。 Mycat及主从可参考MySQL 中间件Mycat部署
小手冰凉
2020/06/28
1.1K0
haproxy+keepalived实现高可用负载均衡
检查主机上是否有yum Extra Packages for Enterprise Linux (EPEL)
全栈程序员站长
2022/07/05
3690
Haproxy+Keepalived+Apache实现高可用
环境介绍:CentOS 6.5平台 Haproxy1:10.10.10.128/24 Haproxy2:10.10.10.129/24 web1:10.10.10.130/24 web2:10.10.10.131/24 VIP:10.10.10.100/24
星哥玩云
2022/07/14
3450
005.HAProxy+Keepalived高可用负载均衡
下载连接:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/
木二
2019/07/26
5390
Keepalived实现HAproxy高可用详解
keepalived是一个可以实现某些资源高可用的开源软件,其主要的组件包括core,check,vrrp,libipfwc,libipvs,这里说下各个组件的功能。
星哥玩云
2022/06/30
1.6K0
相关推荐
Mysq+Haproxy+Keepalived高可用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档