Haproxy集群部署与优化

Haproxy集群部署与优化

一、常见的Web集群调度器

1、目前常见的Web集群调度器分为软件和硬件

2、软件通常使用开源的LVS、Haproxy、 Nginx

LVS性能最好,但是搭建相对复杂;Nginx 的upstream模块支持群集功能,但是对群

集节点健康检查功能不强,高并发性能没有Haproxy好。

3、硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟

等。

二、Haproxy应用分析

1、LVS在企业应用中抗负载能力很强,但存在不足

LVS不支持正则处理,不能实现动静分离

对于大型网站,LVS的实施配置复杂,维护成本相对较高

2、Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的

软件

适用于负载大的Web站点

运行在硬件上可支持数以万计的并发连接的连接请求

三、Haproxy调度算法原理

Haproxy支持多种调度算法,最常用的有三种

1、RR (Round Robin)

RR算法是最简单最常用的一种算法,即轮询调度

2、LC(Least Connections)

最小连接数算法,根据后端的节点连接数大小动态分配前端请求

3、SH(Source Hashing)

基于来源访问调度算法,用于一些有Session会话记录在服务器的场景,可以基于来

源的IP、Cookie等做集群调度。

四、Haproxy集群部署步骤

主机IP地址
Haproxy服务器192.168.132.10
Nginx服务器1192.168.132.20
Nginx服务器2192.168.132.30
客户端192.168.132.40

1、Haproxy服务器部署

1、关闭防火墙,将软件包haproxy-1.5.19.tar.gz 传到/opt目录下

systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

2、编译安装Haproxy

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
cd /opt
tar zxvf haproxy-1.5.19.tar.gz
cd ./haproxy-1.5.19
make TARGET=linux2628 ARCH=x86_64
make install
####参数说明
TARGET=linux2628  #内核版本
#使用uname -r查看内核,如2.6.18-371.e15,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
ARCH=x86_64		#系统位数,64位系统

3、haproxy服务器配置

mkdir /etc/haproxy
cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy

cd /etc/haproxy
vim haproxy.cfg
global
##4~5行修改,配置日志记录,local0为日志设备,默认存放到系统日志
	log /dev/log	local0  info
	log /dev/log   local0 notice
	#log loghost    local0 info
	maxconn 4096					#最大连接数,需考虑ulimit-n限制
##8行注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
	#chroot /usr/share/haproxy
	uid 99							#用户UID
	gid 99							#用户GID
	daemon							#守护进程模式
defaults
	log     global					#定义日志为global配置中的日志定义
    mode    http					#模式为http
    option  httplog					#采用http日志格式记录日志
    option  dontlognull				#不记录健康检查日志信息
    retries 3						#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
    redispatch						#当服务器负载很高时,自动结束当前队列处理比较久的连接
    maxconn 2000					#最大连接数
    contimeout      5000			#连接超时时间
    clitimeout      50000			#客户端超时时间
    srvtimeout      50000			#服务器超时时间
##删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80			#定义一个名为appli4-backup的应用
        option httpchk GET /test.html	#检查服务器的test.html文件
        balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.132.20:80 check inter 2000 fall 3		#定义在线节点
        server inst2 192.168.132.30:80 check inter 2000 fall 3
###参数说明
balance roundrobin		#负载均衡调度算法
#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash
check inter 2000		#表示haproxy服务器和节点之间的一个心跳频率
fall 3					#表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务。

4、添加haproxy 系统服务

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

service haproxy start	或	/etc/init.d/haproxy start

2、节点服务器部署

systemctl stop firewalld
setenforce 0

yum install -y pcre-devel zlib-devel gcc gcc-c++ make 

useradd -M -s /sbin/nologin nginx

cd /opt
tar zxvf nginx-1.12.0.tar.gz

cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx

make && make install

--192.168.132.20---
echo "this is kgc web" > /usr/local/nginx/html/test.html

--192.168.132.30---
echo "this is benet web" > /usr/local/nginx/html/test.html

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx      #启动nginx 服务


3、测试web群集

在客户端使用浏览器打开 http://192.168.132.10/test.html ,不断刷新浏览器测试负载均衡效果

4、日志定义

#默认 haproxy 的日志是输出到系统的 syslog 中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。

vim /etc/haproxy/haproxy.cfg
global
	log /dev/log local0 info
	log /dev/log local0 notice

service haproxy restart

#需要修改 rsyslog 配置,为了便于管理。将haproxy相关的配置独立定义到 haproxy.conf,并放到/etc/rsyslog.d/ 下,rsyslog启动时会自动加载此目录下的所有配置文件。

vim /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
&~

#说明:
这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,
将notice日志记录到/var/log/haproxy/haproxy-notice.log下。
“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

systemctl restart rsyslog.service

mkdir /var/log/haproxy
tail-f /var/log/haproxy/haproxy-info.log   #查看haproxy的访问请求日志信息

五、Haproxy 参数优化

1、maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10 240

2、daemon:守护进程模式,Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动

3、nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍

4、retries: 重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次

5、option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项

6、timeout http-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s

7、timeout http-request:http请求超时时间,建议将此时间设置为5 ~ 10s,增加http连接释放速度

8、timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值