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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月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 ,如需转载请自行联系原作者



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6天前
|
负载均衡 算法 前端开发
HAProxy 和负载均衡概念简介
HAProxy 和负载均衡概念简介
25 3
|
1月前
|
负载均衡 NoSQL 应用服务中间件
搭建高可用及负载均衡的Redis
【7月更文挑战第10天】
|
23天前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
67 0
|
1月前
|
负载均衡 算法 Java
实现高可用和可扩展的负载均衡系统的Java方法
实现高可用和可扩展的负载均衡系统的Java方法
|
2月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
3月前
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
3月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
98 0
|
3月前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
94 0
|
3月前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
105 4
|
2月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
77 2