一、Haproxy与LVS

  LVS不支持正则处理,不能实现动静分离,对于大型网站,LVS的实施配置复杂,维护成本相对较高

  Harpoxy是一款可提供高可用性,负载均衡、及基于TCP和HTTP应用的代理的软件,特别适用于负载特别大的Web站点。运行在当前的硬件上可支持数以万计的并发连接请求。

  Haproxy支持多种调度算法,常用的有四种: rr、wrr、LC、SH

  SH即基于来源访问的调度算法,此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、cookie等做集群调度;举例:使用源IP的集群调度算法,有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B,当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度、此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。

二、应用案例分析

1、安装

 [root@localhost ~]# yum -y install pcre-devel zlib-devel
[root@localhost ~]# tar -zxvf haproxy-1.4.24.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/haproxy-1.4.24/
[root@localhost ~]# make TARGET=linux26 #linux26是指linux的内核版本号。
[root@localhost ~]# make install

2、配置haproxy

 [root@localhost ~]# mkdir /etc/haproxy #创建配置文件目录
[root@localhost ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.cfg /etc/haproxy/
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg

修改:(配置文件里的内容很多,只写下列即可,其他的可以删除)

 global
log 127.0.0.1 local0 #配置日志记录,local0为日志设备,默认存放到系统日志
log 127.0.0.1 local1 notice #notice为日志级别,通常有24个级别
#log loghost local0 info
maxconn 4096 #最大连接数
chroot /usr/share/haproxy
uid 99 #用户uid
gid 99 #用户gid
#debug
#quiet defaults #配置选项默认参数,一般会被应用组件继承,如果再应用组件中没有特别声明,将安装默认配置参数设置
log global #定义日志为global配置中的日志定义
mode http #模式为http
option httplog #采用http日志格式记录日志
option dontlognull
retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
#redispatch
maxconn 2000 #最大连接数
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端超时时间
srvtimeout 50000 #服务器超时时间 listen webcluster 0.0.0.0:80 #定义一个监听web的应用名称
option httpchk GET /index.html #注意:检查服务器的index.html文件,可以删除
balance roundrobin #算法
server inst1 192.168.10.61:80 check inter 2000 fall 3
server inst2 192.168.10.62:80 check inter 2000 fall 3 #server inst2 192.168.10.62:80 check inter 2000 fall 3 backup的意思是定义备份节点,就是说这个服务器不在线

注意:
如果启动时出现报错:/haproxy.main()] Cannot chroot(/usr/share/haproxy)
则手动创建:
[root@localhost ~]# mkdir /usr/share/haproxy
如果启动时出现报错:Starting proxy cacti: cannot bind socket
则执行:
[root@localhost ~]# sysctl -e net.ipv4.ip_nonlocal_bind=1

3、启动haproxy

 [root@localhost ~]# cp /usr/src/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
[root@localhost ~]# chmod +x /etc/init.d/haproxy
[root@localhost ~]# /etc/init.d/haproxy start
[root@localhost ~]# /etc/init.d/haproxy status
[root@localhost ~]# netstat -anp | grep haproxy #占用的是TCP的80端口
[root@localhost ~]# chkconfig --add haproxy
[root@localhost ~]# chkconfig haproxy on

4、验证

客户端输入
http://192.168.10.60/
断开其中一个节点,再访问

三、日志管理

  Haproxy的日志默认是输出到系统的syslog中,查看起来不是非常方便,为了更好地管理Haproxy的日志,在生产环境中一般单独定义出来

(1)在全局配置中添加

 log /dev/log    local0 info
log /dev/log local0 notice

(2)修改rsyslog配置,将Haproxy相关的配置独立定义到haproxy.conf中,并放到/etc/rsyslog.d/下

 ~]# touch /etc/rsyslog.d/haproxy.conf
~]# vi /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~
~]#/etc/init.d/rsyslog restart
~]#tail -f /var/log/haproxy/haproxy-info.log #保存客户端访问信息
tail -f /var/log/haproxy/haproxy-notice.log #haproxy的启动停止记录

最新文章

  1. [LeetCode] Populating Next Right Pointers in Each Node II 每个节点的右向指针之二
  2. HttpUrlConnection 的 setDoOutput 与 setDoInput
  3. UIScrollView的基本使用
  4. Assertion failure in -[UITableView _classicHeightForRowAtIndexPath:], /SourceCache/UIKit_Sim/UIKit-3318/UITableView.m:10772
  5. Asp.Net MVC中使用ACE模板之Jqgrid
  6. C# 操作Cookie类
  7. 怎么进入BAT的研发部门?
  8. Cisco 交换机的操作
  9. hdu 1396 Counting Triangles(递推)
  10. Not found org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
  11. Python&MySQL&PyQt
  12. Spring(一)Spring的第一滴血
  13. 对thinkphp的命名空间的理解
  14. Spring Boot程序的执行流程
  15. vb中的sortedList和java中的
  16. POJ3977 Subset
  17. ENGINE_API CXNoTouch
  18. golang test cannot find import
  19. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)
  20. mysql的安装以及简单的命令符

热门文章

  1. push和pop指令的使用
  2. selenium IDE测试中的坑
  3. Halcon中缩放Region或XLD的方法研究
  4. DevExpress,LayoutControl,TreeList,GridControl等
  5. python之使用API(WEB应用编程接口)
  6. 加载 bean.xml 的几种方式 (java or web project)
  7. [转]分布式中使用Redis实现Session共享(二)
  8. Codeforces 768A Oath of the Night's Watch 2017-02-21 22:13 39人阅读 评论(0) 收藏
  9. [label][IDE] Develop Node.js Project With WebStorm
  10. Homework 4