Haproxy

Haproxy

haproxy:他也是常用的负载均衡软件

nginx:支持四层转发,七层转发

haproxy:也可以四层和七层转发

面试题:

lvs的DR和NAT是基于四层还是七层转发

四层转发

tun:四层加七层

基于四层的转发:

1、lvs

2、nginx

3、haproxy

基于七层的转发:

1、nginx

2、haproxy

haproxy:法国人开发的,威利塔罗在2000年基于c语言开发的一个开源的软件

可以支持一万以上的并发请求

高性能的tcp和http负载均衡器2.4 1.5.9

haproxy:主要用于高并发的web站点。工作原理和nginx一样。lvs都一样

支持的功能:

1、tcp和http的反向代理

2、https的代理配置

3、可以针对http请求添加cookie,转发到后端服务器(添加缓存)

4、也可以支持主备服务器切换(keepalived)

5、基于端口的实时监控

6、压缩响应报文

haproxy的特点:

  1. 可靠性和稳定非常好,可以和硬件f5 BIG负载均衡的硬件设备相媲美
  2. 同时维护40000-50000个并发连接,单位时间内处理最大请求数20000个
  3. 支持8种负载均衡算法,但是haproxy不带缓存功能,但是可以支持会话保持
  4. 也支持配置虚拟主机

haproxy的负载均衡算法:

1、roundrobin  rr轮询

2、static-rr  wrr加权轮询

3、leastconn  最小连接数

4、source  根据请求的源ip进行调度  sh

5、uri  根据请求地址进行调度

6、url  param URL的参数实现调度

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

8、rdp-cookie(name)表示根据cookie的名称来锁定每一次请求

lvs nginx haproxy

  1. lvs基于linux内核实现负载均衡,性能最高,但是对系统硬件要求也比较高

haproxy和nginx基于第三方应用实现负载均衡,性能相对较低,最低的就是nginx

  1. lvs可以实现ip+端口的四层负载均衡,无法实现http请求的转发。但是haproxy和nginx都可以实现四层和七层转发
  2. lvs只能实现四层转发,监测的状态只能是单一的功能(监测端口)

haproxy可以实现端口,uri也可以

  1. haproxy虽然功能强大,但是整体性能低于lvs nginx的性能比haproxy低

lvs------haproxy------nginx(bug多,稳定差)

  1. nginx主要应用还是web服务或者缓存服务器,nginx的stream模块和upstream也可以支持集群,但是对节点的健康检查能力不能。没有lvs和haproxy的监控性能好

haproxy:单节点部署,单实例运行。代理服务器出现故障,整个负载集群全部不可用

keepalived

haproxy+keepalived 实现代理地址的高可用

lvs+DR模式+keepalived+nginx(静态)+tomcat(动态)

主备2

nginx2

tomcat2

客户端1

haproxy是一个无状态的负载均衡器,没缓存,也没有会话保持,靠应用程序实现会话保持。状态不是保存在代理服务器。而是在后端服务器,或者依靠cookie

日志问题:haproxy的日志比较简答,只提供基本的请求日志和错误日志。需要更高级的日志,人工自定义

实验:

1、实现七层

2、实现四层

3、实现haproxy日志单独存放

haproxy负载调度器:192.168.233.61

nginx服务器1:192.168.233.62

nginx服务器2:192.168.233.63

1、实现七层

关掉防火墙和安全机制

编译安装haproxy:

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

tar zxvf haproxy-1.5.19.tar.gz

可以先配置两个后端真实服务器(需要有nginx)

vim /usr/local/nginx/html/index.conf

100dd删除,然后数test1

另一个后端真实服务器也一样

cd haproxy-1.5.19/

make TARGET=linux2628 ARCH=x86_64

Haproxy服务器配置:

mkdir /etc/haproxy

cp /opt/haproxy-1.5.19/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 10240         #最大连接数,需考虑ulimit -n限制,推荐使用10240

--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉

        #chroot /usr/share/haproxy

        uid 99 #用户UID

        gid 99 #用户GID

        daemon #守护进程模式

    nbproc 4         #添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults                               #配置默认参数,这些参数可以被用到Listen,frontend,backend组件     

log     global         #引入global定义的日志格式

        mode    http         #模式为http(7层代理http,4层代理tcp)

        option  httplog         #日志类别为http日志格式

        option  dontlognull         #不记录健康检查日志信息

        retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用

        redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接

        maxconn 2000         #最大连接数,“defaults”中的值不能超过“global”段中的定义

        #contimeout 5000                        #设置连接超时时间,默认单位是毫秒

        #clitimeout 50000                       #设置客户端超时时间,默认单位是毫秒

        #srvtimeout 50000                       #设置服务器超时时间,默认单位是毫秒

        timeout http-request 10s         #默认http请求超时时间

        timeout queue 1m            #默认队列超时时间

        timeout connect 10s         #默认连接超时时间,新版本中替代contimeout,该参数向后兼容

        timeout client 1m         #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容

        timeout server 1m         #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容

        timeout http-keep-alive 10s # 默认持久连接超时时间

        timeout check 10s         #设置心跳检查超时时间

listen  webcluster 0.0.0.0:80                   #haproxy实例状态监控部分配置,定义一个名为webcluster的应用

        option httpchk GET /index.html          #检查服务器的index.html文件,指向访问页面

        balance roundrobin                      #负载均衡调度算法使用轮询算法roundrobin

        server inst1 192.168.233.22:80 check inter 2000 fall 3 weight 3

        server inst2 192.168.233.23:80 check inter 2000 fall 3 weight 6

2、实现四层

关掉防火墙和安全机制

编译安装haproxy:

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

tar zxvf haproxy-1.5.19.tar.gz

可以先配置两个后端真实服务器(需要有nginx)

vim /usr/local/nginx/html/index.conf

100dd删除,然后数test1

另一个后端真实服务器也一样

cd haproxy-1.5.19/

make TARGET=linux2628 ARCH=x86_64

Haproxy服务器配置:

mkdir /etc/haproxy

cp /opt/haproxy-1.5.19/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 10240         #最大连接数,需考虑ulimit -n限制,推荐使用10240

--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉

        #chroot /usr/share/haproxy

        uid 99 #用户UID

        gid 99 #用户GID

        daemon #守护进程模式

    nbproc 4         #添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults                               #配置默认参数,这些参数可以被用到Listen,frontend,backend组件     

log     global         #引入global定义的日志格式

        mode    http         #模式为http(7层代理http,4层代理tcp)

        option  httplog         #日志类别为http日志格式

        option  dontlognull         #不记录健康检查日志信息

        retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用

        redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接

        maxconn 2000         #最大连接数,“defaults”中的值不能超过“global”段中的定义

        #contimeout 5000                        #设置连接超时时间,默认单位是毫秒

        #clitimeout 50000                       #设置客户端超时时间,默认单位是毫秒

        #srvtimeout 50000                       #设置服务器超时时间,默认单位是毫秒

        timeout http-request 10s         #默认http请求超时时间

        timeout queue 1m            #默认队列超时时间

        timeout connect 10s         #默认连接超时时间,新版本中替代contimeout,该参数向后兼容

        timeout client 1m         #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容

        timeout server 1m         #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容

        timeout http-keep-alive 10s # 默认持久连接超时时间

        timeout check 10s         #设置心跳检查超时时间

 frontend test

  bind *:80

  mode tcp

  default_backend test

  backend test

  mode tcp

  balance roundrobin

  server server1 192.168.233.62:80 check inter 2000 fall 3 weight 3

  server server2 192.168.233.63:80 check inter 2000 fall 3 weight 4

3实现haproxy日志单独存放

haproxy的日志是默认输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,

我们在生产环境中会单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中

vim /etc/haproxy/haproxy.cfg

global

log /dev/log local0 info

log /dev/log local0 notice

systemctl restart haproxy

#需要修改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的访问请求日志信息

你可能感兴趣的:(linux,运维,nginx)