HAProxy负载均衡与最佳实践(中)

Posted 21CTO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HAProxy负载均衡与最佳实践(中)相关的知识,希望对你有一定的参考价值。

HAProxy是一个免费和开源的Linux应用,用于负载平衡网络流量。本文将继续讲解如何使用HAProxy进行负载均衡配置Web应用与大型网站。

 

在上篇中我们提到过,可根据流量的情况与复杂度,选择使用用第4层或第7层这两种负载均衡方案,这两种是针对不同场景的方案,所以在对负载均衡设备配置决策之前,需要清楚自己的需求很重要。

 

4层(TCP)负载

 

位于网络层数越高,处理请求的速度越快。

 

需要注意的是,额外的性能增益是以功能和灵活性损失为代价。

 

这种机制用很少的处理就可以实现,所以4层负载处理速度最快。

 

 

4层负载也有缺点,就是每个服务器都要部署应用组件(冗余部署,不论你是使用php,Java,CSS,JavsScript,图片等),并且每个节点上的文件必须是完全相同的版本。否则用户每次访问你的网站时,他看到的就会不一样。

 

使用4层负载均衡是小型网站或复杂度较低网站的理想选择。

 

在上一篇文章中,我有提到了nginx负载均衡,并提到只支持3层负载均衡,也不黑Nginx,它从1.1.5版本开始,也已支持4层和7层负载均衡。

 

 

7层(HTTP)负载

 

使用7层负载平衡,可能需要更多的计算能力来处理,比如较高的CPU和内存,但它为大型和复杂的网站提供的回报是值得付出的。7层负载均衡类型允许我们把每个组件分离到不同的服务器上,而且这些机器亦对用户透明。

另一个好处,是能把大访问量的应用移到独立的服务器上。

 

例如,比如我们正在运营一个类似于今日头条的网站,但也有社区,允许用户评论。有大量的人发帖讨论,数据库产生大量的写操作,可能会导致网站的其他应用变慢甚至没法访问。 使用7层负载,我们就可以将论坛分拆到独立的服务器或服务器集群,可以方便地扩展。

 

 

7层负载均衡通过分析每个分组应用的请求部分,然后将其与一组策略或规则做匹配分发。


对于Web服务器,它分析HTTP请求然后标识目标URI。


再拿新闻和社区示例,如果提交HTTP GET或POST请求从URI:/community开始,流量将被路由到部署社区应用程序的服务器集群,以缓解文章CMS部分的压力。

 

SSL处理

 

4层TCP负载平衡的优点是,若是SSL数据包直接扔给给应用服务器,它只是做转发。


使用7层HTTP负载均衡(比如用Nginx)时,因为它无法解析HTTP头

,不首先处理SSL,强制所有SSL在负载平衡设备上进行处理。


SSL在CPU占用率非常高,此时就会在此处出现瓶颈。最好是在一个应用集群中负载使用,而非集中在一个或两个负载均衡设备上。


当Nginx为负载均衡设备时,在后端执行集群健康检查的唯一方法是看服务器是否超时,如果是就从集群中删除,否则它被认为是健康的,即使它返回PHP代码/500/502错误。

 

而HAProxy提供了几种分发和健康检查算法来对集群执行检查,Nginx只能使用选择后端服务器的原始循环算法。

 

安装HAProxy


HAProxy已经被内置在Centos或Redhat中。当然也可下载编译安装。


使用EPEL安装


  1. 下载 EPEL仓库的PRM包

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

  1. 添加到你服务器中的YUM配置.

rpm -ivh epel-release-6.8.noarch.rpm

  1. 开始安装

yum install haproxy


编译安装


编译会生成与硬件配置的二进制文件,需要安装编译器和开发库。可在单独的计算机上编译二进制文件,然后再将二进制文件复制到服务器。

  1. 安装开发工具

  2. 下载最新版本的haproxy.

wgethttp://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz

  1. 开始解压.

tar xvzf haproxy-1.4.24.tar.gz

  1. 进入haproxy 目录.

cd ./haproxy-1.4.24

  1. 编译HAProxy。我们可以根据机器的硬件进行编译优化。

根据Linux内核版本与CPU优化:

make TARGET=linux2628 ARCH=native

对i386架构兼容式优化:

make TARGET=linux26 ARCH=i386

  1. 安装&编译.

make install

  1. 复制编译好 haproxy 二进制文件到 /usr/sbin

cp /usr/local/sbin/haproxy /usr/sbin/

  1. 复制样例文件到haproxy的初始化目录中.

cp/root/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy

  1. 修改文件属性为755.

chmod 755 /etc/init.d/haproxy

  1. 创建haproxy用户.

useradd --system haproxy

  1. 在/etc/目录创建一个haproxy的目录,用于保存配置文件.

mkdir -p /etc/haproxy

下一步,我们开始配置HAProxy。

HAProxy配置


在开始创建负载平衡集群之前,要进行一些基本配置。如果使用Yum安装了HAProxy,一些默认值已预设。若是从源代码编译,则没有配置文件,需要手工创建一个。

基本配置

  1. 打开或新建一个haproxy配置文件.

vi /etc/haproxy/haproxy.cfg

  1. 配置文件的第一部分用于全局属性。以下是基本配置的例子。

global

         user   haproxy

         group  haproxy

         nbproc 1

 

其中:

user

本地运行HAProxy的用户名

group

本地用户组

nbproc

HPProxy的线程编号。推荐设置值为1。

  1. 以下的全局部分下面可以有一个默认段,定义了组的默认配置。

defaults

       mode http

       timeout connect 5000ms

       timeout client 50000ms

       timeout server 50000ms


模式


timeout connect

连接超时时间

timeout client

客户端连接超时间

timeout server

服务器连超时时间

  1. 将更改保存到haproxy配置文件中。


小结


现在我们的HAProxy服务器已经基本搭建好,但是目前还没有平衡任何机器。下篇再继续介绍对相应的负载均衡类型的配置实践。


以上是关于HAProxy负载均衡与最佳实践(中)的主要内容,如果未能解决你的问题,请参考以下文章

HAProxy配置为代理与负载均衡器之实践

http层负载均衡之 haproxy实践篇

大型网站系统架构实践http层负载均衡之haproxy实践篇

微学堂TCP/HTTP 负载均衡利器 - HAProxy 介绍及实践

HAProxy+Redis实现负载负载均衡(待实践)

haproxy负载均衡与搭建web群集