• haproxy


    HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。

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

    其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。。
    如果说在功能上,能以proxy反向代理方式实现 WEB均衡负载,这样的产品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke 等。
    但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。

    但 其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。自1.3版本开始还引入了frontend,backend,frontend根 据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。

    另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:

    l 内容交换 : 可以根据请求(request)的任何一部分 来选择一组服务器, 比如请求的 URI , Host头(header) , cookie , 以及其他任何东西. 当然,对那些静态分离的站点来说,对此特性还有更多的需求。

    l 全透明代理 : 可以用 客户端IP地址 或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy 补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

    l 基于树的更快的调度器 : 1.2.16以上的版本要求所有的超时都设成同样的值以支持数以万计的全速连接. 这个特性已经移植到1.2.17.

    l 内核TCP拼接 : 避免了内核到用户然后用户到内核端的数据拷贝, 提高了吞吐量同时又降低了CPU使用率 . Haproxy 1.3支持Linux L7SW 以满足在商用硬件上数Gbps 的吞吐的需求。

    l 连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点。

    l 细微的头部处理 : 使得编写基于header的规则更为简单,同时可以处理URI的某部分。

    l 快而可靠的头部处理 : 使用完全RFC2616 兼容的完整性检查对一般的请求全部进行分析和索引仅仅需要不到2ms 的时间。

    l 模块化设计 : 允许更多人加入进此项目,调试也非常简单. poller已经分离, 已经使得它们的开发简单了很多. HTTP已经从TCP分离出来了,这样增加新的七层特性变得非常简单. 其他子系统也会很快实现模块化

    l 投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪个可能就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用就可以省去了。如果失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提升起码10%了。

    l ACLs : 使用任意规则的任意组合作为某动作的执行条件。

    l TCP 协议检查 : 结合ACL来对请求的任意部分进行检查,然后再进行转发。这就可以执行协议验证而不是盲目的进行转发。比如说允许SSL但拒绝SSH。

    l 更多的负载均衡算法 : 现在,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现。其他算法比如Weighted Measured Response Time也很快会实现。

    1.haproxy安装
        使用yum install haproxy进行一步安装,很简单

    2.配置说明
      

    Java代码  收藏代码
    1. #########################################################################  
    2. # HAProxy 配置文件  
    3. #########################################################################  
    4.    
    5. global  
    6. # 使用系统的syslog记录日志(通过udp,默认端口号为514)  
    7. log 127.0.0.1 local0 # info [err warning info debug]  
    8. chroot /home/user/haproxy  
    9.    
    10. #限制单个进程的最大连接数  
    11. maxconn 65535  
    12.    
    13. # 让进程在后台运行,即作为守护进程运行,正式运行的时候开启,此处先禁止,等同于在命令行添加参数 -D  
    14. # daemon  
    15. # 指定作为守护进程运行的时候,要创建多少个进程,默认只创建一个,需要daemon开启模式  
    16. # nbproc 1  
    17.    
    18. # 设置debug模式运行,与daemon模式只能互斥,等同于在命令行添加参数 -d  
    19. # debug  
    20. pidfile /home/user/haproxy/logs/haproxy.pid    # not work  
    21.    
    22. defaults  
    23. # 在连接失败或断开的情况下,允许当前会话被重新分发  
    24. option redispatch  
    25. # 设置在一个服务器上链接失败后的重连次数  
    26. retries 2  
    27. # 设置服务器分配算法  
    28. balance roundrobin  
    29.    
    30. # 不记录空连接  
    31. option dontlognull  
    32.    
    33. # 设置等待连接到服务器成功的最大时间  
    34. timeout connect 5000ms  
    35. # 设置客户端的最大超时时间  
    36. timeout client 1800000ms  
    37. # 设置服务器端的最大超时时间  
    38. timeout server 1800000ms  
    39.    
    40. # Enable the sending of TCP keepalive packets on both sides, clients and servers  
    41. # NOTE: 在服务器CPU强劲的情况下,最好不要开启保活,这样可减少资源消耗  
    42. #option tcpka  
    43.    
    44. ##############################统计页面配置##################################  
    45.    
    46. listen admin_stat  
    47. # 监听端口  
    48. bind *:8011  
    49. # http的7层模式  
    50. mode http  
    51. option httplog  
    52. log global  
    53. # 统计页面自动刷新时间  
    54. stats refresh 30s  
    55. # 统计页面URL  
    56. stats uri /admin?stats  
    57. # 统计页面密码框上提示文本  
    58. stats realm Haproxy\ Statistics  
    59. # 统计页面用户名和密码设置  
    60. stats auth admin:admin  
    61. # 隐藏统计页面上HAProxy的版本信息  
    62. stats hide-version  
    63.    
    64. ###########################TCP连接的监听配置################################  
    65.    
    66. listen  tcp-in  
    67. bind *:2211  
    68. mode tcp  
    69. # 日志记录选项  
    70. option tcplog  
    71. log global  
    72.    
    73. # 后台服务器  
    74. # weight  -- 调节服务器的负重  
    75. # check -- 允许对该服务器进行健康检查  
    76. # inter  -- 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000(ms)  
    77. # rise  -- 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2  
    78. # fall  -- 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3  
    79. # maxconn  -- 指定可被发送到该服务器的最大并发连接数  
    80. server localhost 0.0.0.0:2233 weight 3 check inter 2000 rise 2 fall 3  
    81. server 192.168.1.100 192.168.1.100:2233 weight 3 check inter 2000 rise 2 fall 3  
    82. server 192.168.1.101 192.168.1.101:2233 weight 3 check inter 2000 rise 2 fall 3  
    83.    
    84. #########################HTTP连接的监听配置################################  
    85.    
    86. listen  http-in  
    87. bind *:2212  
    88. mode http  
    89. option httplog  
    90. log global  
    91.    
    92. # 设置健康检查模式  
    93. #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www  
    94. #option smtpchk  
    95.    
    96. # 后台服务器  
    97. server localhost 0.0.0.0:2234 weight 3 check inter 2000 rise 2 fall 3  
    98. server 192.168.1.100 192.168.1.100:2234 weight 3 check inter 2000 rise 2 fall 3  
    99. server 192.168.1.101 192.168.1.101:2234 weight 3 check inter 2000 rise 2 fall 3  

     参考文献: 

     Haproxy参考文档

    http://sookk8.blog.51cto.com/455855/579719

    http://lam.iteye.com/blog/990796

    http://www.oschina.net/question/54100_30410

    http://wenku.baidu.com/view/6bcd968071fe910ef12df8ad.html

    http://network.51cto.com/art/201103/249586.htm

    http://wenku.baidu.com/view/28a9bf0bbb68a98271fefa52.html

  • 相关阅读:
    分享一个小故事
    思维局限
    java程序员笑不死的经历ส้้้้้้้้้
    一些话
    定位 java虚拟机内存问题 个人总结
    关于分布式事务、两阶段提交协议、三阶提交协议(转)
    maven常用配置信息和常量
    Mybatis-常见SQL语句示例
    Redis主从同步原理-SYNC
    B+树在mysql数据库索引中的使用
  • 原文地址:https://www.cnblogs.com/derekchen/p/2852035.html
Copyright © 2020-2023  润新知