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安装
下载 EPEL仓库的PRM包
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
添加到你服务器中的YUM配置.
rpm -ivh epel-release-6.8.noarch.rpm
开始安装
yum install haproxy
编译安装
编译会生成与硬件配置的二进制文件,需要安装编译器和开发库。可在单独的计算机上编译二进制文件,然后再将二进制文件复制到服务器。
安装开发工具
下载最新版本的haproxy.
wgethttp://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
开始解压.
tar xvzf haproxy-1.4.24.tar.gz
进入haproxy 目录.
cd ./haproxy-1.4.24
编译HAProxy。我们可以根据机器的硬件进行编译优化。
根据Linux内核版本与CPU优化:
make TARGET=linux2628 ARCH=native
对i386架构兼容式优化:
make TARGET=linux26 ARCH=i386
安装&编译.
make install
复制编译好 haproxy 二进制文件到 /usr/sbin
cp /usr/local/sbin/haproxy /usr/sbin/
复制样例文件到haproxy的初始化目录中.
cp/root/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
修改文件属性为755.
chmod 755 /etc/init.d/haproxy
创建haproxy用户.
useradd --system haproxy
在/etc/目录创建一个haproxy的目录,用于保存配置文件.
mkdir -p /etc/haproxy
下一步,我们开始配置HAProxy。
HAProxy配置
在开始创建负载平衡集群之前,要进行一些基本配置。如果使用Yum安装了HAProxy,一些默认值已预设。若是从源代码编译,则没有配置文件,需要手工创建一个。
基本配置
打开或新建一个haproxy配置文件.
vi /etc/haproxy/haproxy.cfg
配置文件的第一部分用于全局属性。以下是基本配置的例子。
global
user haproxy
group haproxy
nbproc 1
其中:
user |
本地运行HAProxy的用户名 |
group |
本地用户组 |
nbproc |
HPProxy的线程编号。推荐设置值为1。 |
以下的全局部分下面可以有一个默认段,定义了组的默认配置。
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
模式 |
|
timeout connect |
连接超时时间 |
timeout client |
客户端连接超时间 |
timeout server |
服务器连超时时间 |
将更改保存到haproxy配置文件中。
小结
现在我们的HAProxy服务器已经基本搭建好,但是目前还没有平衡任何机器。下篇再继续介绍对相应的负载均衡类型的配置实践。
以上是关于HAProxy负载均衡与最佳实践(中)的主要内容,如果未能解决你的问题,请参考以下文章
大型网站系统架构实践http层负载均衡之haproxy实践篇