haproxy+keepalived实现负载均衡及高可用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

 HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高性能性、负载均衡,以及基于TCP和HTTP的应用程序代理。相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。

    HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

   包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter在内众多知名网站,及亚马逊网络服务系统都使用了HAProxy。

 

Haproxy的特性:

1、可靠性与稳定性都非常出色,可与硬件级设备媲美。

2、支持连接拒绝,可以用于防止DDoS攻击

3、支持长连接、短连接和日志功能,可根据需要灵活配置

4、路由HTTP请求到后端服务器,基于cookie作会话绑定;同时支持通过获取指定的url来检测后端服务器的状态

5、HAProxy还拥有功能强大的ACL支持,可灵活配置路由功能,实现动静分离,在架构设计与实现上带来很大方便

6、可支持四层和七层负载均衡,几乎能为所有服务常见的提供负载均衡功能

7、拥有功能强大的后端服务器的状态监控web页面,可以实时了解设备的运行状态,还可实现设备上下线等简单操作。

8、支持多种负载均衡调度算法,并且也支持session保持。

有关keepalived请参看博客:http://13150617.blog.51cto.com/13140617/1979652 


实验:实现基于Haproxy+Keepalived负载均衡高可用架构

14d0d6fdafaa47e8990c96be35944f56.jpg

1、准备四台机器:两台用于haproxy主从架构,两台作为后端server

           haproxy-master:两块网卡,桥接模式和仅主机模式都有

                     VIP:172.17.111.10

           haproxy-backup:两块网卡,桥接模式和仅主机模式都有

                     VIP:172.17.111.10

           后端server1:仅主机网卡:RIP:192.168.199.146

           后端server2:仅主机网卡:RIP:192.168.199.143

2、在haproxy-master上操作

①安装keepalived,配置keepalived。

具体参数含义请参看博客:http://13150617.blog.51cto.com/13140617/1979652

vim /etc/keepalived/keepalived.conf    

! Configuration File for keepalived

 global_defs {   

   notification_email { 

     root@localhost  

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1   

   smtp_connect_timeout 2 

   router_id LVS_DEVEL2    

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 33

#    nopreempt

    priority 100

    advert_int 1

 authentication {

        auth_type PASS

        auth_pass 111111

    }

    virtual_ipaddress {

        172.17.111.10

    }

}

systemctl start keepalived  启动服务

 

②配置日志服务

vim /etc/rsyslog.conf

      $ModLoad imudp     开启UDP的日志服务,也可以开启TCP

     $UDPServerRun 514  

      local2.* /var/log/haproxy.log  定义日志标准

systemctl restart rsyslog  重启日志服务

③配置haproxy

vim /etc/haproxy/haproxy.cfg

  global                      全局配置    

    log        127.0.0.1 local2   日志类型

    chroot      /var/lib/haproxy  修改haproxy的工作目录

    pidfile     /var/run/haproxy.pid 进程id

    maxconn      4000        最大连接数

    user        haproxy        运行用户

    group       haproxy        所属组

    daemon                   让haproxy以守护进程的方式工作

    stats socket /var/lib/haproxy/stats可开启一个unix socket管理接口

  

defaults

    mode              http  实现http的7层规则

    log               global 日志定义,沿用global的日志定义

    option             httplog 启用日志记录HTTP请求

    option             dontlognull 日志中将不会记录空连接

    option http-server-close      强制短连接

    option forwardfor     except 127.0.0.0/8 添加xforward日志标记

    option            redispatch      出错时重新分配

    retries            3            重试次数

    timeout http-request   10s           请求超时时间

    timeout queue        1m           队列超时

    timeout connect      10s           连接超时

    timeout client       1m            客户端超时

    timeout server       1m            服务器端超时

    timeout http-keep-alive 10s           持久连接

    timeout check       10s            检查超时

    maxconn           3000           最大连接

 

listen stats   定义一个统计报告服务

        mode http #基于http协议

        bind 0.0.0.0:1080 #监听1080端口

        stats enable #开启统计报告服务

        stats hide-version #隐藏统计报告版本信息

        stats uri /haproxyadmin #统计报告访问url

        stats realm Haproxy\ Statistics #页面登陆信息

        stats auth admin:admin #验证账号信息

        stats admin if TRUE #验证模式

 

frontend  http-in   定义一系列监听的套接字

    bind *:80

    default_backend      app

 

backend app    定义一系列“后端”服务器

    balance  roundrobin

    option  httpchk /index.php   检查页面

    server  app1 192.168.199.146:80 check inter 3000 rise 3 fall 3

    server  app2 192.168.199.143:80 check inter 3000 rise 3 fall 3

 

systemctl start haproxy   启动haproxy服务

 

④开启转发

   echo 1 > /proc/sys/net/ipv4/ip_forward

 

3、在haproxy-backup上操作

 ①安装keepalived,配置keepalived

   vim /etc/keepalived/keepalived.conf

   配置基本同上,只需要修改state的状态为BACKUP

  systemctl start keepalived 启动服务

 ②配置日志服务

   完全同上

 ③配置haproxy

   完全同上

 ④开启转发

   echo 1 > /proc/sys/net/ipv4/ip_forward

 

4、测试keepalived高可用:当主服务器正常工作时,VIP在主服务器上,当关闭主服务器的keepalived服务,VIP会漂移到从服务器上,而且网站照常可以访问

324273a72741b16e719fde74ad59f39f.jpg3e7babaab0d53e70a5e3966d8a4540f4.jpg

关闭主服务器后IP漂移:

e55caa003bc7b2296ed11160077b65d9.jpg 

测试haproxy

访问:http://172.17.111.10:1080/haproxyadmin 查看统计报告,都正常

759c445373620c33b3761ed7786358aa.jpg 


实验二、通过ACL指定可访问的用户

在frontend中加入

    acl myhost src 172.16.100.1  指定可访问的ip

    acl myport dst_port 80     指定目标端口

    block if ! myhost myport   拒绝其他主机访问

重启haproxy服务:systemctl restart haproxy

测试:在添加此acl之前,其他主机可以访问

     添加此acl之后就不能访问了

d8c6fc3b3fb037995e5dd13b4fc05f65.jpg

实验三、根据用户访问内容实现动静分离

在frontend中加入

     acl url_static  path_beg  -i /data /images /javascript /stylesheets /themes 匹配开头

    acl url_static  path_end  -i .jpg .gif .png .css .js .jpeg 匹配后缀

    use_backend static   if url_static  如果符合条件就匹配到static中所定义的服务器 


backend static  定义“后端”服务器

     balance     roundrobin   轮询

     server  static1 192.168.199.146:80 check    

     server  static2 192.168.199.143:80 check

重启haproxy服务:systemctl restart haproxy

效果:所有的图片等静态页面就会被分配到这两个server里


实验四、实现真实日志记录

defaults里添加

     option forwardfor except 127.0.0.0/8

那么查看nginx的日志就会看到访问该服务器的真实的客户端IPc8c5f286c5707aa919f0e5ca32472c9f.jpg 

 

实验五、实现会话保持

在backend中的server中插入cookie,比如

 server  app1 192.168.199.146:80 cookie haha check inter 3000 rise 3 fall 3

 server  app2 192.168.199.143:80 cookie hehe check inter 3000 rise 3 fall 3 

    那么访问过app1服务器的主机就会被标记为haha(在cookie中插入此标记),下次访问时直接被调度到同一台机器,但是在到达服务器之前cookie会被清理。如果该服务器宕机了,那么会被重新标记到别的服务器。


感谢浏览,如有疑问,欢迎留言。

j_0080.gif















本文转自lc0108131451CTO博客,原文链接:http://blog.51cto.com/13150617/1980419 ,如需转载请自行联系原作者



相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
打赏
0
0
0
0
143
分享
相关文章
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
112 11
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
514 9
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
1132 4
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
508 3
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
202 8
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
158 5
HAProxy 和负载均衡概念简介
HAProxy 和负载均衡概念简介
162 3
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
420 0
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
115 21
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等