HAproxy高可用实战

HAproxy与Keepalived VRRP

一、简介

1.1 HAproxy

​ HAProxy(High Availability Proxy)是一个高性能的开源负载均衡器和代理服务器,用于分发网络流量。它是一个免费的、快速的、可靠的解决方案,常用于提供高可用性、负载均衡和代理服务。HAProxy最初是为Linux系统设计的,但现在已经在多个平台上可用,包括各种Unix系统和Windows。

​ 主要特点和功能:

  1. **负载均衡:**HAProxy可以将传入的网络请求分发到多个后端服务器,确保各个服务器的负载大致相等,从而提高系统的整体性能和稳定性。

  2. **高可用性:**HAProxy可以检测后端服务器的健康状态,当某个服务器出现故障时,它会自动将流量重新路由到其他健康的服务器上,确保系统的高可用性。

  3. **SSL终端:**HAProxy可以作为SSL终端,处理SSL/TLS加密和解密,从而减轻后端服务器的负担,提高系统的安全性和性能。

  4. **代理:**HAProxy可以作为代理服务器,支持TCP和HTTP代理,用于转发客户端和后端服务器之间的网络请求,实现网络加速和访问控制等功能。

  5. **健康检查:**HAProxy可以周期性地检查后端服务器的健康状态,可以通过多种方式进行检查,包括TCP连接、HTTP请求和自定义脚本等。

  6. **灵活的配置:**HAProxy的配置非常灵活,可以根据具体需求进行定制,支持多种负载均衡算法、会话保持、请求重定向、ACL(Access Control List)等功能。

  7. **性能优化:**HAProxy具有出色的性能和低的资源消耗,可以处理大规模的并发连接,同时具有较低的延迟,适用于高性能的应用场景。

HAProxy通常用于构建高可用性的Web服务架构,例如将流量分发到多个Web服务器、应用服务器或数据库服务器上。它也可以用于构建WebSocket代理、API网关、SSL终端等各种网络应用场景。

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

1.2 Keepalived

​ Keepalived 是一个用于 Linux 系统的开源软件,它提供了一种简单而强大的方法来实现高可用性(High Availability, HA)和负载均衡(Load Balancing)。以VRRP协议为实现基础的。

​ Keepalived 主要用于确保在网络环境中的多台服务器之间的高可用性。它的工作原理是通过在多台服务器之间共享一个虚拟 IP 地址(VIP),并且在主服务器宕机时能够快速将 VIP 切换到备用服务器,从而确保服务的持续可用性。

​ 主要特点和功能:

  1. 虚拟服务器(Virtual Server):Keepalived 可以配置虚拟 IP 地址,并将它与一个或多个实际服务器关联起来。客户端请求虚拟 IP 地址时,Keepalived 会将请求转发到实际服务器上。
  2. 健康检查(Health Checking):Keepalived 可以周期性地对实际服务器进行健康检查,以确保它们正常工作。如果一个服务器被标记为不健康,Keepalived 将停止将流量转发到该服务器。
  3. 故障转移(Failover):如果主服务器宕机或不可达,Keepalived 能够快速将虚拟 IP 地址切换到备用服务器上,确保服务的持续可用性。
  4. 负载均衡(Load Balancing):Keepalived 可以根据服务器的负载情况进行请求分发,从而实现负载均衡,提高系统性能和可伸缩性。
  5. 提供 VRRP 协议支持:Keepalived 支持 VRRP(Virtual Router Redundancy Protocol),这是一种网络协议,用于提供多台路由器之间的高可用性。Keepalived 使用 VRRP 来实现服务器间的虚拟 IP 地址的共享和故障转移。
  6. 灵活的配置:Keepalived 提供了丰富的配置选项,允许管理员根据特定的需求进行定制和配置。

Keepalived 通常用于 Web 服务器、应用服务器、数据库服务器等关键服务的高可用性和负载均衡方案中,它可以显著提高系统的可靠性和稳定性。

二、项目准备

2.1 设备清单

hostnameip
master192.168.13.128
backup192.168.13.129
node1192.168.13.133
node2192.168.13.137

2.2 IP解析(/etc/hosts)

2.3 nginx安装(node)

只给node配置安装nginx ,所有机器关闭防火墙和selinux
node1

systemctl stop firewalld && setenforce 0
yum install yum-utils -y
yum install nginx -y
systemctl start nginx  #启动
echo "this is first real-server" > /usr/share/nginx/html/index.html #方便区分,看出效果
vim /etc/nginx/nginx.conf
	keepalive_timeout  0;           #设置长链接
nginx -s reload 	#刷新nginx

node2

systemctl stop firewalld && setenforce 0
yum install yum-utils -y
yum install nginx -y
systemctl start nginx  #启动
echo "this is first real-server" > /usr/share/nginx/html/index.html #方便区分,看出效果
vim /etc/nginx/nginx.conf
	keepalive_timeout  0;           #设置长链接
nginx -s reload 	#刷新nginx

2.4 调度器配置Haproxy(master/backup)

master

yum -y install haproxy
cp -rf /etc/haproxy/haproxy.cfg{,.bak}  #备份
sed -i -r '/^[ ]*#/d;/^$/d' /etc/haproxy/haproxy.cfg    #修改配置文件去掉注释,或者你可以直接复制我的代码
cat > /etc/haproxy/haproxy.cfg <<EOF
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://192.168.246.169/haproxy,可以看到服务器状态  
    stats auth               yjssjm:123  #用户认证,客户端使用elinks浏览器的时候不生效
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 192.168.13.133:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
    server  http2 192.168.13.137:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
EOF

backup

yum -y install haproxy
cp -rf /etc/haproxy/haproxy.cfg{,.bak}  #备份
sed -i -r '/^[ ]*#/d;/^$/d' /etc/haproxy/haproxy.cfg    #修改配置文件去掉注释,或者你可以直接复制我的代码
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://192.168.246.169/haproxy,可以看到服务器状态  
    stats auth               yjssjm:123  #用户认证,客户端使用elinks浏览器的时候不生效
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 192.168.13.133:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
    server  http2 192.168.13.137:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

2.5 Keepalived实现调度器HA(master/backup)

master

yum install -y keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak  #备份
vim /etc/keepalived/keepalived.conf
#! Configuration File for keepalived
global_defs {
   router_id directory1   #只是名字而已,辅节点改为directory2(两个名字一定不能一样)
}

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

}
--------------------------------------------------------------------

backup

yum install -y keepalived
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory2
}
vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens33
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 80
    priority 50   #辅助改为50
    advert_int 1    #检测间隔1s
    authentication {
        auth_type PASS
        auth_pass 1111            #认证类型和密码主备一样,要不然无法互相认证
    }
    virtual_ipaddress {
        192.168.13.144/24    #抢占的VIP也一样
    }
}

启用服务
systemctl start keepalived haproxy
systemctl enable keepalived haproxy

uth_type PASS
auth_pass 1111 #认证类型和密码主备一样,要不然无法互相认证
}
virtual_ipaddress {
192.168.13.144/24 #抢占的VIP也一样
}
}


启用服务
	systemctl start keepalived haproxy
	systemctl enable keepalived haproxy

验证:访问你自己设置的VIP 192.168.13.144
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值