威尼斯人娱乐关于Haproxy安装和配置:负载配置【haproxy.cfg】问题记录

负载均衡之Haproxy配置,负载均衡haproxy

烂泥:高负载均衡学习haproxy之安装与配置,负载均衡haproxy

本文由秀依林枫提供友情赞助,首发于烂泥行天下

有关高负载均衡的软件,目前使用比较多的是haproxy、nginx和lvs。下面我们就开始学习haprxoy这款软件。

一、haproxy介绍

以下开始介绍有关haproxy的原理及其优点。

1.1、haproxy原理

haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

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

haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。

事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

1.2、haproxy的优点

(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。

(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。

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

(4)haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux
2.4/2.6内核打了tcp
proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

(5)haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。

(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。

(7)HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。

PS:本次实验的OS为ubuntu server 14.04。

二、业务架构图

现在我们以实际的业务架构图,来使用haproxy。业务架构图如下:

这个是基本的业务架构图,对外是haproxy这台服务器。目前暂时没有考虑haproxy的单点故障问题,这个问题我们会在后续的keepalived文章中会进行介绍。

现在要求如下:

2.1、域名跳转

客户端访问

客户端访问

2.2、IP地址跳转

客户端访问

2.3、端口跳转

客户端访问

2.4、默认跳转

如果客户端访问的不是dg.test.com与192.168.5.171,这两个地址的话,要把请求全部分发到192.168.5.178:8080上。

2.5、多ACL匹配

如果客户端的IP是192.168.5.140,同时访问的是

三、安装haproxy

haproxy的官网是

haproxy的安装我们可以分为源码方式和apt-get方式。下面对其安装方式进行一一讲解。

3.1 源码方式安装haproxy

haprxoy目前最新的版本为1.6,为了业务的稳定,在此我们选择的是1.3.15.27这个版本。

在进行源码安装之前,首先要安装相关的软件库。如下:

sudo apt-get -y install make gcc

创建运行haproxy时,使用的用户。在此我们使用haproxy这个用户,而且此用户不能登录到系统。如下:

sudo useradd -m haproxy

cat /etc/passwd |grep haproxy

通过上图,我们可以看到haproxy用户及用户组的ID均为1005。

现在开始下载源码包如下:

wget

解压源码包,如下:

tar -xf haproxy-1.3.15.27.tar.gz

cd haproxy-1.3.15.27/

查看haproxy的安装文件,如下:

more README

这张图很明显的告诉我们,编译安装haproxy需要的软件库。除此之外还需要选择OS的内核版本,linux2.6以上的版本,我们都选择linux26。

通过查看安装文档,我们可以很清楚的看出要编译haproxy,我们首先要知道OS内核版本以及OS的位数。如下:

uname –a

通过上图,我们可以很容易的看出linux内核的版本与OS的位数。

现在开始编译haproxy,如下:

make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy

其中TARGET表示OS的内核版本,ARCH表示OS的位数,PREFIX表示haprxoy的安装路径。

现在开始安装haproxy,如下:

sudo make install PREFIX=/usr/local/haproxy

查看安装后的文件,如下:

ll /usr/local/haproxy/

编辑haproxy的配置文件,haproxy默认给我们提供一个配置文件模版。如下:

sudo cp examples/haproxy.cfg /usr/local/haproxy/

查看haprxoy的版本,如下:

/usr/local/haproxy/sbin/haproxy -v

通过上图,可以看到haproxy的版本确实是1.3.27。有关haproxy的配置实例见第三章。

3.2 apt-get方式安装haproxy

apt-get方式安装haproxy,如下:

sudo apt-get -y install haproxy

查看haproxy安装的文件

dpkg -L haproxy

安装完毕后,haproxy默认已经启动。如下:

ps -ef |grep haproxy

查看haproxy版本,如下:

haproxy -v

通过上图,我们知道现在haproxy的版本为1.5.4。

注意:apt-get方式安装haproxy,如果版本为1.4.24的话。我们一定要修改/etc/default/haproxy,如下:

sudo vi /etc/default/haproxy

ENABLED=1

如果不修改的话,使用haproxy启动脚本的话,是没有用处的,也就说脚本不会重新加载haproxy的配置。

查看haproxy的配置文件,如下:

cat /etc/haproxy/haproxy.cfg

通过上图,我们可以很明显的看出默认的配置文件里面是没有内容的。

四、配置haprxoy

haproxy安装完毕后,我们来配置haproxy。源码安装的haprxoy在前面我们已经讲解了,haproxy提供的配置模版haproxy.cfg。

4.1、haproxy配置实例

我们现在就以这个模版为例,配置haproxy。haproxy配置文件内容,如下:

grep -vE “^#|^$” haproxy.cfg

威尼斯人娱乐,global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

maxconn 4096

uid 1005

gid 1005

daemon

defaults

log global

mode http

option httplog

option dontlognull

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen admin_stats

bind 192.168.5.171:1080

mode http

option httplog

maxconn 10

威尼斯人棋牌游戏,stats refresh 30s

stats uri /stats

stats auth admin:admin

stats hide-version

frontend weblb

bind *:80

acl is_dg hdr_beg(host) dg.test.com

acl is_ilanni hdr_beg(host) ilanni.test.com

acl is_171 hdr_beg(host) 192.168.5.171

acl is_ip src 192.168.5.140

use_backend acl if is_171 is_ip

use_backend dgserver if is_dg

use_backend ilanni if is_ilanni

use_backend 171server if is_171

default_backend backend_default

backend dgserver

balance source

server web1 192.168.5.171:8080 maxconn 1024 weight 3 check inter 2000
rise 2 fall 3

server web2 192.168.5.174:8080 maxconn 1024 weight 3 check inter 2000
rise 2 fall 3

server web3 192.168.5.178:8080 maxconn 1024 weight 3 check inter 2000
rise 2 fall 3

backend 171server

balance roundrobin

server dg1 192.168.5.174:80 check

server dg2 192.168.5.178:80 check

backend ilanni

server web1 www.yuanbaopu.com:80 weight 3 check inter 2000 rise 2 fall 3

backend acl

balance source

server web1 www.ilanni.com:80 maxconn 1024 weight 3 check inter 2000
rise 2 fall 3

backend backend_default

server web1 192.168.5.178:8080 weight 3 check inter 2000 rise 2 fall 3

listen 8090

bind 0.0.0.0:8090

mode http

balance roundrobin

server web1 192.168.5.174:8090 maxconn 1024 weight 5 check inter 2000
rise 2 fall 3

server web2 192.168.5.178:8090 maxconn 1024 weight 3 check inter 2000
rise 2 fall 3

4.2、haproxy配置实例讲解

有关haproxy配置文件我们先简单介绍,如下:

global配置段,用于设定全局配置参数。

代理配置段中,主要是使用defaults、frontend、backend、listen关键词。

defaults配置段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所重新设定。

frontend配置段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。

backend配置段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。

listen配置段通过关联“前端”和“后端”定义了一个完整的代理,通常只对TCP流量有用。

在上述haproxy配置文件中,我们主要讲解ACL的匹配规则。

acl is_dg hdr_beg(host) dg.test.com

该行定义一个is_dg规则,如果客户端请求的是dg.test.com这个域名,则定义该规则为is_dg。

use_backend dgserver if is_dg

该定义一个dgserver服务器组,如果客户端请求符合is_dg定义的规则,则把该客户端的请求分发到dgserver服务器组。

acl is_ip src 192.168.5.140

该行定义一个is_ip规则,如果客户端的IP地址是192.168.5.140,则定义该规则为is_ip。

use_backend acl if is_171 is_ip

该定义一个acl服务器组,如果客户端请求同时符合is_ip和is_171定义的规则,则把该客户端的请求分发到acl服务器组。

default_backend backend_default

该行定义一个默认服务器组,如果客户端请求不符合上述定义的任何一个规则,则把该客户端的请求分发到backend_default服务器组。

其他的规则就不一一进行讲解了。

以上就是按照目前的业务要求,配置的haproxy。有关这些配置项参数,我们会在下一篇文章中进行详细介绍。

五、查看haproxy监控页面

haproxy配置完毕后,现在来启动haproxy,使用如下命令:

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

ps -ef |grep haproxy

netstat -tunlp|grep 3173

现在我们来打开haproxy的监控页面,如下:

输入用户名和密码后,haproxy监控后台服务器的情况,如下:

现在我们来看看haprxoy所有后台服务器的情况,先来看看dgserver组,如下:

通过上图,我们可以看到dgserver组,目前web1这台服务器处于宕机状态。也就是说haprxoy不会把客户端的请求分发到web1服务器上了。

现在我们再来看看171server组,如下:

通过上图,我们可以很明显的看出171server组的服务器目前都是正常运行的。

8090组服务器的情况,如下:

通过上图,我们可以看到8090组的服务器也是有一台是宕机的。

六、测试haproxy负载均衡

haprxoy配置完毕并正常启动后,我们现在来根据业务的要求进行测试。

6.1 测试域名跳转

使用如下命令测试域名跳转:

curl

通过上图,我们可以看到当我们使用dg.test.com这个域名访问时,haproxy确实为我们进行跳转了,而且跳转到了192.168.5.174这台服务器上。

因为考虑到客户端session会话的问题,所以我们在配置haproxy负载均衡没有使用roundrobin轮询的方法,而是使用source方法。所以haproxy目前没有把请求分发到192.168.5.171:8080、192.168.5.178:8080这两台服务器上。

现在我们访问ilanni.test.com,如下:

通过上图,我们可以看到访问不同的域名,haproxy把请求分发到不同的服务器上。

6.2 测试IP地址跳转

使用如下命令测试IP地址跳转:

curl

通过上图,我们可以很明显的看到,第一次使用curl

因为在haproxy配置中,我们使用的是roundrobin轮询方法,所以客户端的每一次请求,haproxy会把请求分发到不同的服务器上。

6.3 测试端口跳转

使用如下命令测试IP地址跳转:

curl

curl

通过上图,我们可以很明显的看到客户端在通过dg.test.com:8090和ilanni.test.com:8090进行访问时,haproxy确实把请求分发到了8090组服务器上的192.168.5.178:8090上。

6.4 测试默认跳转

要测试默认跳转,我们可以随便使用一个域名进行测试。如下:

curl

通过上图,我们可以很明显的看出haproxy把test.test.com的请求转发到了默认服务器组的192.168.5.178:8080上。

6.5 测试多ACL匹配

要测试默认跳转,我们先切换到192.168.5.140这台机器上,然后访问

通过上图,我们可以很明显的看到在192.168.5.171这台机器上访问

七、centos安装haproxy

有关在centos上安装haproxy,我们在此就不多做介绍了。只把相关的操作命令贴出来。

yum方式安装:yum -y install haproxy

源码方式安装:

useradd haproxy

cat /etc/passwd |grep haproxy

uname –a

yum -y install gcc make

wget

tar -xf haproxy-1.3.27.tar.gz

cd haproxy-1.3.27

make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

本文由秀依林枫 提供友情赞助,首发于烂泥行天下
有关高负载均衡的软件,目…

下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1、web2、web3、img1、img2.但是由于haproxy会存在单点故障问题,因此使用keepalived来实现对Haproxy单点问题的高可用处理。

HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。HAProxy适用于那些负载较大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy可以支持数以万计的并发连接,并且HAProxy的运行模式使得它可以很简单安全的整合进架构中,同时可以保护web服务器不被暴露到网络上。

1.
 
存放地址:

常用开源软件负载均衡器有:Nginx、LVS、Haproxy。

威尼斯人娱乐 1

它在7层负载均衡方面的功能很强大(支持cookie track, header
rewrite等等),支持双机热备,支持虚拟主机,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,
HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入;同时还提供直观的监控页面,可以清晰实时的监控服务集群的运行状况。

more /etc/haproxy/haproxy.cfg

三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)

一、LVS:
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置 复杂,对网络依赖比较大,稳定性很高。

二、Ngnix:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request
header的支持不是很好,
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
10、Nginx还能做Web服务器即Cache功能。

三、HAProxy的特点是:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round
Robin),加权源地址哈希(Weighted Source
Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。

三大主流软件负载均衡器适用业务场景:
1、网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
2、网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。

注:Niginx与Haproxy比较:Niginx支持七层、用户量最大,稳定性比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说Haproxy由于弥补了一些Niginx的缺点用户量也不断在提升。

衡量负载均衡器好坏的几个重要因素:
1、会话率 :单位时间内的处理的请求数
2、会话并发能力:并发处理能力
3、数据率:处理数据能力
经过官方测试统计,haproxy
单位时间处理的最大请求数为20000个,可以同时维护40000-50000个并发连接,最大数据处理能力为10Gbps。综合上述,haproxy是性能优越的负载均衡、反向代理服务器。

总结HAProxy主要优点:

一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;

二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10
Gbps using Myricom’s 10GbE NICs (Myri-10G
PCI-Express),这个作为软件级负载均衡,也是比较惊人的;

三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;

四、自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;

五、HAProxy支持虚拟主机。

下述将选择Haproxy作为负载均衡器进行讲解:

常用开源软件负载均衡器有:Nginx、LVS、Haproxy。

三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)

LVS:
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置 复杂,对网络依赖比较大,稳定性很高。
Ngnix:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request
header的支持不是很好,
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
10、Nginx还能做Web服务器即Cache功能。
HAProxy的特点是:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round
Robin),加权源地址哈希(Weighted Source
Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。

新的1.3版本引入了frontend,backend配置段,
frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend,通过ACL可以实现类似与F5的irules的功能。功能非常强大。目前haproxy支持以下5种负载均衡算法,同时也支持通过weight来实现负载比率的调整和通过cookie来实现连接保持。

ps -ef | grep haproxy

本次使用环境:

ubuntu16.04+Haproxy 192.168.93.21
centos6+httpd 192.168.93.5
centos6+httpd 192.168.93.7

Haproxy配置文件

vi /etc/haproxy/haproxy.cfg
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3




defaults
    log global
    mode    http   #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    option  httplog
    option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

########统计页面配置########
listen admin_stats
bind 0.0.0.0:1080 #监听端口
mode http #http的7层模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm XingCloud\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息


########test配置#################
listen test
bind 0.0.0.0:8080 #注意端口号要不低于1024
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.93.5:80
server s2 192.168.93.7:80

假若想访问监控界面:配置stats uri /haproxy项,重启服务:

service haproxy restart

接下来对Haproxy+web负载均衡使用进行实战讲解:
首先配置两台web服务器:192.168.93.5/192.168.93.7
两台都是同样操作:

1、实验环境

CentOS release 6.8 (Final)

2、配置web服务器(node5/7):

测试方便,关闭selinux、关闭iptables

一下都采用默认,不做配置即可。

yum install httpd -y

# vim /etc/httpd/conf/httpd.conf 

httpd监听端口:

DocumentRoot:网页存放的路径,文档的根目录

重启httpd

#service httpd restart

修改显示内容:

# vim /var/www/html/index.html

I'm node5!!! My IP is 192.168.93.5...

再次访问:

这样三个web服务就搭好了

接下来配置负载均衡(本次实验只用一个Haproxy:192.168.93.21):
vim /etc/haproxy/haproxy.cfg

########test配置#################
listen test
bind 0.0.0.0:8080 #注意端口号要不低于1024
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.93.5:80
server s2 192.168.93.7:80

浏览器请求192.168.93.21:8080

从上述结果可知,前端对192.168.93.21的请求,被Haproxy的负载均衡器,均衡请求到两个后端web192.168.93.5、192.168.93.7上面去了。
这样当两个中的一个出现故障,流量则能正常分发到剩余一个正常的web上,从来提高了系统可靠性。

三大主流软件负载均衡器适用业务场景:

1、网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
2、网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。

注:Niginx与Haproxy比较:Niginx支持七层、用户量最大,稳定性比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说Haproxy由于弥补了一些Niginx的缺点用户量也不断在提升。

  1. 轮询 roundrobin
  2. 最少连接数 Leastconn
  3. 根据源IP source
  4. 根据URI uri
  5. 根据URL里的参数
    url_param(根据请求串中的数据hush后做lb,譬如需要一个userid永远在某台服务器上,该策略是静态的)

看看有没有haproxy的进程就是了

衡量负载均衡器好坏的几个重要因素:

1、会话率 :单位时间内的处理的请求数
2、会话并发能力:并发处理能力
3、数据率:处理数据能力
经过官方测试统计,haproxy
单位时间处理的最大请求数为20000个,可以同时维护40000-50000个并发连接,最大数据处理能力为10Gbps。综合上述,haproxy是性能优越的负载均衡、反向代理服务器。

部署haproxy
1、安装
# wget
# tar zcvf haproxy-1.4.20.tar.gz
# cd haproxy-1.4.20
# make TARGET=linux26 ARCH=x86_64
# make install PREFIX=/usr/local/haproxy

或者看看服务器的23306的端口有没有打开

总结HAProxy主要优点:

一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;
二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10
Gbps using Myricom’s 10GbE NICs (Myri-10G
PCI-Express),这个作为软件级负载均衡,也是比较惊人的;
三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为mysql(读)负载均衡;
四、自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;
五、HAProxy支持虚拟主机。

下述将选择Haproxy作为负载均衡器进行讲解:

本次使用环境:
环境centos7.1
Haproxy 1.5.4

Haproxy+keeplived 172.31.2.31
Haproxy+keeplived 172.31.2.32

2、配置
mkdir /usr/local/haproxy/conf
vi /usr/local/haproxy/conf/haproxy.cfg
global
log 127.0.0.1 local0
maxconn 65535 #最大连接数
chroot /usr/local/haproxy
uid 99
gid 99
daemon
#debug
#quiet
nbproc 1 #负载均衡的并发进程数
pidfile /var/run/haproxy.pid
defaults
log global
mode http #工作模式,目前支持3种(tcp/http/health)
option httplog #日志类别
option dontlognull
option redispatch
#当serverid对应的服务器宕机后,强制定向到其他健康的服务器上
log 127.0.0.1 local0
retries 3 #重试次数
maxconn 32000
stats enable
stats uri /haproxy-stats
stats realm Haproxy\ Statistics #提示信息
stats auth admin:admin #用户认证/用户名、密码
stats hide-version #隐藏版本信息
stats refresh 10s #刷新时间
contimeout 5000 #超时时间
clitimeout 50000
srvtimeout 50000
listen appserver *:80
hash-type consistent
balance uri len 100
option httpclose #启用被动的http连接关闭
option httpchk HEAD /do_not_delete/noc.gif HTTP/1.0 #健康检测
server img_web_01 192.168.11.51:80 cookie 10 weight 3 check inter 2000
rise 2 fall 3
server img_web_02 192.168.11.52:80 cookie 20 weight 3 check inter 2000
rise 2 fall 3
server img_web_03 192.168.11.53:80 cookie 30 weight 3 check inter 2000
rise 2 fall 3

netstat -an | grep 23306

下述针对Haproxy的配置文件进行详解:

vim /etc/haproxy/haproxy.cfg

威尼斯人娱乐 2

文本部分:
global                               # 全局参数的设置
    log         127.0.0.1 local2             # log语法:log <address_1>[max_level_1]
                                           # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog
                                             服务中的local0日志设备,记录日志等级为info的日志

    chroot      /var/lib/haproxy             #改变当前工作目录
    pidfile     /var/run/haproxy.pid         #当前进程id文件
    maxconn     4000                         #最大连接数
    user        haproxy                      #所属用户
    group     haproxy                        #所属组
    daemon                                   #以守护进程方式运行haproxy
    stats socket /var/lib/haproxy/stats
defaults
    mode           http            #默认的模式mode { tcp|http|health },
                                   tcp是4层,http是7层,health只会返回OK
    log            global          #应用全局的日志配置
    option         httplog         # 启用日志记录HTTP请求,默认haproxy日志记
                                     录是不记录HTTP请求日志

    option         dontlognull     # 启用该项,日志中将不会记录空连接。所谓空
                                     连接就是在上游的负载均衡器或者监控系统为
                                     了探测该 服务是否存活可用时,需要定期的
                                     连接或者获取某一固定的组件或页面,或者探
                                     测扫描端口是否在监听或开放等动作被称为空
                                     连接;官方文档中标注,如果该服务上游没有
                                     其他的负载均衡器的话,建议不要使用该参
                                     数,因为互联网上的恶意扫描或其他动作就不
                                     会被记录下来

     option http-server-close        #每次请求完毕后主动关闭http通道

     option forwardfor       except 127.0.0.0/8   
           #如果服务器上的应用程序想记录发起请求的客户端的IP地址,需要在HAProxy
           上 配置此选项, 这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请
           求中添加"X-Forwarded-For"字段。 启用 X-Forwarded-For,在requests
         头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP。 

    option                  redispatch      
           # 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到
           cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉
           了, 但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求
           强制定向到另外一个后端server上,以保证服务的正常。

    retries            3              
          # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后
            将会将对应后端服务器标记为不可用

    timeout http-request    10s          #http请求超时时间
    timeout queue           1m           #一个请求在队列里的超时时间
    timeout connect         10s          #连接超时
    timeout client          1m           #客户端超时
    timeout server          1m           #服务器端超时
    timeout http-keep-alive 10s          #设置http-keep-alive的超时时间
    timeout check           10s          #检测超时
    maxconn                 3000         #每个进程可用的最大连接数
frontend  main *:80                      #监听地址为80

    acl url_static   path_beg   -i /static /images /javascript /stylesheets

    acl url_static   path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static

    default_backend        my_webserver     
           #定义一个名为my_app前端部分。此处将对于的请求转发给后端

backend static              
           #使用了静态动态分离(如果url_path匹配 .jpg .gif .png .css .js静态
           文件则访问此后端)

    balance     roundrobin        
           #负载均衡算法(#banlance roundrobin 轮询,balance source 保存
            session值,支持static-rr,leastconn,first,uri等参数)

    server      static 127.0.0.1:80 check         
           #静态文件部署在本机(也可以部署在其他机器或者squid缓存服务器)

backend my_webserver                                  
           #定义一个名为my_webserver后端部分。PS:此处my_webserver只是一个自
           定义名字而已,但是需要与frontend里面配置项default_backend 值相一致

    balance     roundrobin        #负载均衡算法

    server  web01 172.31.2.33:80  check inter 2000 fall 3 weight 30
                                    #定义的多个后端
    server  web02 172.31.2.34:80  check inter 2000 fall 3 weight 30
                                    #定义的多个后端
    server  web03 172.31.2.35:80  check inter 2000 fall 3 weight 30
                                    #定义的多个后端

配置完成则重启服务:

systemctl restart haproxy

假若想访问监控界面:配置stats uri /haproxy项,重启服务:

威尼斯人娱乐 3

systemctl reload haproxy

威尼斯人娱乐 4

注意:假若页面范围不了,是否selinux关闭了,iptables开启此端口了(iptables
-F)

同理在172.31.2.32上面安装上述步骤安装配置好haproxy:

威尼斯人娱乐 5

上述对Haproxy的优缺点及配置进行了详细讲解。

haproxy启动
  /usr/local/haproxy/sbin/haproxy –f
/usr/local/haproxy/conf/haproxy.cfg

2. 问一个问题,安装了haproxy,自己默认就会产生/etc/haproxy.cfg

接下来对Haproxy+web负载均衡使用进行实战讲解:

首先配置三台web服务器:172.31.2.33、172.31.2.34、172.31.2.35
三台都是同样操作:

1、实验环境
centos 7

2、配置web服务器(node33/34/35):

测试方便,关闭selinux、关闭iptables

以下都采用默认,不做配置即可。

yum install httpd -y
# vim /etc/httpd/conf/httpd.conf 

httpd监听端口:

威尼斯人娱乐 6

DocumentRoot:网页存放的路径,文档的根目录

威尼斯人娱乐 7

重启httpd

# systemctl restart httpd

页面访问httpd:

威尼斯人娱乐 8

修改显示内容:

# vim /var/www/html/index.html
I'm node33!!! My IP is 172.31.2.33...

再次访问:

威尼斯人娱乐 9

威尼斯人娱乐 10

威尼斯人娱乐 11

这样三个web服务33/34/35搭建成功!!!!

重启服务
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
-st `cat /var/run/haproxy.pid`

这个文件吗? 还是安装好了之后要拷过去呢?

接下来配置负载均衡(本次实验只用一个Haproxy:172.31.2.31):

vim /etc/haproxy/haproxy.cfg

威尼斯人娱乐 12

浏览器请求172.31.2.31:

威尼斯人娱乐 13

威尼斯人娱乐 14

威尼斯人娱乐 15

从上述结果可知,前端对172.31.2.31的请求,被Haproxy的负载均衡器,均衡请求到三个后端web172.31.2.33、172.31.2.34、172.31.2.35上面去了。
这样当三个当中的一个出现故障,流量则能正常分发到剩余两个正常的web上,从来提高了系统可靠性。

本文来源:blog.csdn.net/tantexian。

Web界面查看

都不是

威尼斯人娱乐 16

要自己创建!一般放在/etc/haproxy.cfg!

这个文件和里面的内容都自己手工创建?
 — 对头

另外,我自己创建的haproxy.cfg文件,haproxy怎么知道我这个文件在哪里呢?

 你启动haproxy的时候要加参数去指定配置文件的位置!

 也就是说我创建N个配置都可以,只要启动时告诉他加载哪一个就OK了?

对头 

我们启动haproxy命令
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy.cfg

启动HA

 启动就是
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy.cfg

3.
启动、停止HA

haproxy没得停止的命令

直接kill掉进程

Last login: Wed Mar 5 18:04:33 2014 from 172.16.3.218
[root@gsidc-4q-saas16 ~]# ps -ef | grep haproxy
root 11687 1 0 Mar05 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy.cfg
root 14188 14159 0 15:00 pts/1 00:00:00 grep haproxy
[root@gsidc-4q-saas16 ~]# kill -9 11687
[root@gsidc-4q-saas16 ~]# ps -ef | grep haproxy
root 14197 14159 0 15:01 pts/1 00:00:00 grep haproxy
[root@gsidc-4q-saas16 ~]# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy.cfg
[root@gsidc-4q-saas16 ~]# ps -ef | grep haproxy
root 14199 1 0 15:01 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy.cfg
root 14201 14159 0 15:01 pts/1 00:00:00 grep haproxy
[root@gsidc-4q-saas16 ~]# 

4.
实际配置文件

 威尼斯人娱乐 17

global
        log     127.0.0.1   local0
        maxconn 4096
        stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin
        # nbproc  2
        pidfile /tmp/haproxy.pid
        daemon

defaults
        log     global
        log     127.0.0.1   local0
        mode    tcp
        option  tcplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 2000
        timeout connect 5s
        timeout client  120s
        timeout server  120s

listen mysql_proxy :23306
        mode    tcp
        balance roundrobin
        server  mysql_65 172.16.12.65:3306 check inter 5000 rise 2 fall 3
        server  mysql_67 172.16.12.67:3306 check inter 5000 rise 2 fall 3

listen private_monitoring :8101
        mode    http
        option  httplog
        stats   enable
        stats   uri       /stats
        stats   refresh   5s

5.
关键设置
 

【添加负载均衡,只需要设置这里】

威尼斯人娱乐 18

 

希望对安装的你有所帮助,喜欢请赞一下!

相关文章