Haproxy搭建web群集

1.常见的web集群调度器

目前常见的web集群调度器分为软件和硬件 :

软件:LVS (基于内核的性能最好搭建复杂) Haproxy, nginx(配置简单,对健康节点功能检查不强(请求发过去才知道有没有问题)高并发性能没有Haproxy好)

硬件: 国际的 F5, Array 国内的一些产品,如梭子鱼 , 绿盟等。

软件调度器好维护,价格便宜

硬件调度器,厂家维保

Haproxy应用分析:可提供高可用性,负载均衡以及基于http,tcp应用的代理。免费快速可靠的一种解决方案。。。与硬件级的F5负载均衡设备相媲美。

最高可维护40000-50000连接,单位时间内处理最大请求数20000个,最大处理能力可达10Git/s

支持通过获取指定的url来检测后端服务器的状态。

支持tcp协议的负载均衡转发

支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,,让多个请求在一个tcp连接中完成。

2.Haproxy应用分析

LVS在企业应用中抗负载能力很强,但存在不足.LVS不支持正则处理,不能实现动静分离

对于大型网站,LVS的实施配置复杂,维护成本相对较高Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件。

●适用于负载大的Web站点

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

Haproxy调度算法原理

HAProxy负载均徼策略非常,常见的有如卜8种:

(1)roundrobin,表示简单的轮询

(2)static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理(4 ) sorce,表示根据请求源TP

(4) source,表示根据请求源TP

(5) uri,表示根据请求的门RT,做ccJn 需使用;

(6) url_param,表示根据请求的Rl参数' talance url_param' raquirea an URT. parameter         name( / )  

(7)hdr(name),表示根据http请求头来锁定每一次http请求

( 8 ) rdp-cookie (name),表示根据cookie(name)来锁定并哈希每一次TcP请求。

 LVS, Nginx ,Haproxy区别

1.LVS基于内核 : nginx.haproxy基于应用程序;(实施负载)

2.负载均衡性能 : LVS最好 >Haproxy其次>>nginx若与其他两种;

3.支持的代理类型 LVS只能实现4层代理转发(不支持正则)。 nginx和Haproxy都能实现4层和7层的代理转发(支持正则);

4.对节点的健康检查 : LVS只能对端口进行检查(主动的),nginx只能被动的对端口进行检查Haproxy支持端口和uri,脚本等多种检查;

 3.Haproxy支持多种调度算法

最常用的有三种· RR (Round Robin)

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

有三个节点A、B、C第一个用户访问会被指派到节点A第二个用户访问会被指派到节点B第三个用户访问会被指派到节点C,第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

SH(source Hashing)(好处,会话保持a主机连接之后还会在a主机连接只要不重启还在a主机这一块。并发量大会导致负载不均衡,影响业务)

一. 你是如何实现负载均衡的高可用,具体描述?

1. 将多台服务器绑定在一起,做一个集群,实现性能最大化。

2.配置负载均衡策略指定调度算法,合理分配服务器性能

二. nginx和haproxy如何实现会话保持?

     hsproxy:  1. 源地址hash

                     2. 设置cookie

                     3. stick_table粘性会话表 

      nginx:  iphash     cookie

“Nginx会话保持一般有基于ip_hash和基于cookie两种方式,尽管Nginx的会话保持可以使某个ip客户端访问固定的后端服务器,但这可能会导致负载的不均衡。采用cookie的方式进行会话保持时,需要引入第三方模块(sticky模块)才能实现。

四,keepalived工作原理?基于什么协议?如何确定master?如何处理脑裂问题?

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。    优先级

通过双线连接。利用脚本进行ping主备服务器

Haproxy搭建web群集

 

4.LVS、Nginx、HAproxy的区别

  • LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy 和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方。
  • HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;
  • Nginx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

5.使用Haproxy搭建web群集

Haproxy负载均衡器:192.168.72.6.170/24

Nginx1:192.168.6.155/24

Nginx2:192.168.6.156/24

部署2台web服务器

web服务器共享nfs服务器的内容,直接将nfs服务器挂载web服务器目录中

Haproxy服务器配置

1.安装编译环境:

---------------------参数说明---------------------------------------------------------------------------
TARGET=linux26    #内核版本,
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

ARCH=x86_64     #系统位数,64位系统

1.yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

2.tar zxvf haproxy-1.5.19.tar.gz
3.cd haproxy-1.5.19/
4.make TARGET=linux2628 ARCH=x86_64
5.make install

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global		#全局配置,主要用于定义全局参数,属于进程级的配置,通
--4~5行--修改,定义haproxy日志输出设置和日志级别,local0为日志设备,默认存放到系统日志常和操作系统配置有关
		log /dev/log   local0 info		#修改
        log /dev/log   local0 notice	#修改
        #log loghost    local0 info
        maxconn 4096			#最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
        #chroot /usr/share/haproxy
        uid 99					#用户UID
        gid 99					#用户GID
        daemon					#守护进程模式
		nbproc 1				#添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults   	#配置默认参数,这些参数可以被用到Listen,frontend,backend组件     
		log     global			#引入global定义的日志格式
        mode    tcp				#模式为tcp(7层代理http,4层代理tcp)
		option  http-keep-alive #使用keepAlive连接
		option forwardfor       #记录客户端IP在X-Forwarded-For头域中
        option  httplog			#开启httplog,HAProxy会记录更丰富的请求信息
        option  dontlognull		#不记录健康检查日志信息
        retries 3				#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch				#当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000			#最大连接数,“defaults”中的值不能超过“global”段中的定义
        #contimeout 5000        #设置连接超时时间,默认单位是毫秒
        #clitimeout 50000       #设置客户端超时时间,默认单位是毫秒
        #srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒
        timeout http-request 10s 	#默认http请求超时时间,从连接创建开始到从后端服务器读取 
                                    完整HTTP请求的超时时间,用于避免类DoS攻击
        timeout queue 1m   		#默认队列超时时间
        timeout connect 10s		#默认连接超时时间,新版本中替代contimeout,该参数向后兼容
        timeout client 1m		#默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
        timeout server 1m		#默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
        timeout http-keep-alive 10s		#默认持久连接超时时间
        timeout check 10s		#设置心跳检查超时时间

--删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80    #haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /test.html    #检查服务器的test.html文件
        balance roundrobin                #负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.80.100:80 check inter 2000 fall 3        #定义在线节点
        server inst2 192.168.80.101:80 check inter 2000 fall 3

----------------参数说明---------------------------------------------------------------------------
balance roundrobin        #负载均衡调度算法
#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash

check inter 2000        #表示启用对此后端服务器执行健康检查,设置健康状态检查的时间间隔,单位为毫秒
fall 3                    #表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,仅在所有在线节点都失效该节点才启用。不携带“backup”,表示为主节点,和其它在线节点共同提供服务。

修改主配置文件

默认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配置

要修改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

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

haproxy优化

1.maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10240 2.daemon:守护进程模式,Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
3.nbprod:负载均衡的并发进程数,建议与当前服务器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左右
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值