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负载均衡高可用架构

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会漂移到从服务器上,而且网站照常可以访问

关闭主服务器后IP漂移:

测试haproxy:

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

实验二、通过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之后就不能访问了

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

在frontend中加入

acl url_static  path_beg  -i /data /p_w_picpaths /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的日志就会看到访问该服务器的真实的客户端IP

实验五、实现会话保持

在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会被清理。如果该服务器宕机了,那么会被重新标记到别的服务器。

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

转载于:https://blog.51cto.com/13150617/1980419

haproxy+keepalived实现负载均衡及高可用相关推荐

  1. nginx日志打印header_小水敲黑板--Nginx+Keepalived实现负载均衡和高可用

    介绍: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived是自动完成,不需人工干涉.主要提供loadb ...

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

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

  3. keepalived介绍和keepalived实现nginx负载均衡机高可用

    1. keepalived简介 1.1 keepalived是什么? Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  4. Haproxy+Keepalived实现负载均衡

    Haproxy+Keepalived实现负载均衡 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAPr ...

  5. nginx负载均衡和高可用

    代理和负载均衡的区别 代理负责把连接请求直接转发到后台某个web节点     负载均衡负责把请求使用某种调度算法分散发布给后台所有web节点 ----------------------------- ...

  6. LVS实现负载均衡及高可用

    LVS实现负载均衡及高可用 1 实验环境 1.1 虚拟机最小化封装 1.1.1 虚拟机母机安装 1.1.2 清理和压缩母机 1.1.3 创建子机 1.2 名词理解 2 lvs的工作模式 2.1 NAT ...

  7. 微服务负载均衡实现高可用_使用负载平衡实现大容量可用性

    微服务负载均衡实现高可用 Written by Yona Gidalevitz 由Yona Gidalevitz撰写 Most users of the web are blissfully unaw ...

  8. TCP接入层的负载均衡、高可用、扩展性架构

    转载自 TCP接入层的负载均衡.高可用.扩展性架构 一.web-server的负载均衡 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡.整个架构分三层: 上游调用层 ...

  9. Ansible(四)ansible roles实现(apache+haproxy+keepalived)负载均衡+高可用

    1.ansible roles简介 <1> roles 用于层次性.结构化地组织playbook. <2> roles 能够根据层次型结构自动装载变量文件.tasks以及han ...

最新文章

  1. 武汉大学计算机学院放假时间,计算机学院关于2019年学生放暑假的通知
  2. python输入字符串转换为公式_python从字符串转换为boolean ?
  3. [Android] Gradle 安装
  4. 发表论文不用愁,十大技巧治秃头
  5. Microsoft .NET Pet Shop 4 架构与技术分析(转)
  6. php mysql 分组 分页_简单的PHP+Mysql实现分页
  7. 005 form组件---基本使用.
  8. 第三十六期:学 Java 网络爬虫,需要哪些基础知识?
  9. STM32 软件模拟 IIC 代码,标准库、HAL库可用
  10. 互联网日报 | 2021年春运火车票今起开抢;好未来达成33亿美元私人配售协议;盒马mini开进菜场...
  11. 将EnyimMemcached从.NET Core RC1升级至RC2
  12. java全局变量加锁_Java锁Synchronized,对象锁和类锁举例
  13. LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
  14. 编程实现计算n!,键盘输入n
  15. 绿厂Oppo年终刚刚开奖!只有去年的3-5折,员工心态炸了!
  16. 每日一分享C语言代码(The first day)
  17. 关于11月28日CSDN遭受网络攻击的情况说明
  18. vue高德地图点击放大Maker
  19. python爬虫真假网址,python爬取福利网站图片完整代码,懂得人都懂
  20. oj题目 P1809 wzy的跑步

热门文章

  1. 双向链表(带头结点)
  2. 找规律万能公式_有一个万能公式,可以帮你解决任何烦恼!
  3. fastjson 不转某些字段_全面总结Fastjson过滤字段、排除字段的5种方法(含示例)...
  4. php phpexcel用法,PHPExcel用法总结
  5. tos重装mysql_云服务器(腾讯云)从零开始部署记录(3)之mysql5.7安装
  6. android getter不起作用,java - 如何在Android Studio中自动生成getter和setter
  7. mysql 不指定 长度吗_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...
  8. python动态映射_Python Django框架url反向解析实现动态生成对应的url链接示例
  9. 用友邮件撤回怎么操作_用户体验原则——“操作可控”
  10. 1113: 递归调用的次数统计(函数专题)