haproxy+nginx群集案例部署

haproxy+nginx群集

  • 常见的web集群调度器
  • Haproxy应用分析
    • LVS在企业应用中负载能力很强,但有不足
    • Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件
  • Haproxy调度算法
    • RR(Round Robin)
    • LC(Least Connections)
    • SH(Source Hashing)
  • haproxy部署过程
    • 环境
      • 调度器:
      • web服务器
      • nfs服务器
      • 客户机
    • 编译安装haproxy
    • 日志管理
    • 配置NFS服务器
    • 配置web服务器
      • web1
      • web2
    • 客户机访问

常见的web集群调度器

软件:LVS、Haproxy、Nginx…
硬件:F5、绿盟、梭子鱼等

Haproxy应用分析

LVS在企业应用中负载能力很强,但有不足

  1. lvs不支持正则处理,不能实现动静分离
  2. 对于大型网站,lvs的实施配置负载,维护成本相对较高

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

  1. 适用于负载大的web网站
  2. 运行在硬件上可支持数以万计的并发连接的连接请求

Haproxy调度算法

RR(Round Robin)

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

LC(Least Connections)

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

SH(Source Hashing)

SH即基于来源访问调度算法,此算法用于一些有 Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

haproxy部署过程

环境

调度器:

20.0.0.11

web服务器

20.0.0.13(web1)
20.0.0.14(web2)

nfs服务器

20.0.0.15

客户机

20.0.0.16

编译安装haproxy

[root@haproxy ~]# yum -y install gcc gcc-c++ make pcre-devel bzip2-devel #解决依赖环境

[root@haproxy ~]# tar zxvf haproxy-1.4.24.tar.gz 

[root@haproxy ~]# cd haproxy-1.4.24/

[root@haproxy haproxy-1.4.24]# make TARGET=linux26 && make install

[root@haproxy haproxy-1.4.24]# mkdir /etc/haproxy #创建haproxy目录

[root@haproxy haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/ #将haproxy配置文件复制到haproxy目录下
[root@haproxy haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg
global
        log 127.0.0.1   local0 #配置日志记录,local0为日志设备,默认存放到系统日志
        log 127.0.0.1   local1 notice #notice为日志级别,通常有24个级别
        #log loghost    local0 info
        maxconn 4096 #最大连接数,根据应用实际情况进行调整,推荐使用10240
        daemon
#      chroot /usr/share/haproxy #注释
        uid 99 #用户uid
        gid 99 #用户gid
        #debug
        #quiet
defaults
        log     global #定义日志为global配置中的日志定义
        mode    http #模式为http
        option  httplog #采用http日志格式记录日志
        option  dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
        retries 3 #检查节点服务器失败连续达到三次则认为节点不可用
#      redispatch #注释
        maxconn 2000 #最大连接数
        contimeout      5000 #连接超时时间
        clitimeout      50000 #客户端超时时间
        srvtimeout      50000 #服务器超时时间
        ###删除所有listen,增加内容
###listen #配置项目,一般为配置应用模块参数
listen webcluster 0.0.0.0:80 
		option httpchk GET /index.html #检查服务器的index.html文件
#		option persist #强制将请求发送到已经down掉的服务器
		balance roundrobin #负载均衡调度算法使用轮询算法,HAProxy把请求轮流的转发到每一个服务器上,依据每台服务器的权重,此权重会动态调整。最常见的默认配置。
		server web1 20.0.0.13:80 check inter 2000 fall 3 #定义在线节点,间隔2秒,重试3次
		server web2 20.0.0.14:80 check inter 2000 fall 3 #定义在线节点,间隔2秒,重试3次
#		server inst2 192.168 114.56:81 check inter 2000 fall 3 backup #定义备份节点

随着企业网站负载增加, haproxy参数优化相当重要

daemon:守护进程模式, Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
retries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10 240
option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项
timeout http-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s
timeout http-request:http请求超时时间,建议将此时间设置为5~10s,增加http连接释放速度
timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右就可以了
[root@haproxy haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/
[root@haproxy haproxy-1.4.24]# vi /etc/init.d/haproxy
# chkconfig: 35 85 15 #将-换成35

[root@haproxy haproxy-1.4.24]# chmod 755 /etc/init.d/haproxy #给haproxy增加执行权限 
[root@haproxy haproxy-1.4.24]# chkconfig --add haproxy #将haproxy添加进系统管理服务
[root@server1 haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

[root@haproxy ~]# systemctl restart haproxy

## 调度器地址:20.0.0.11(haproxy服务器地址)

日志管理

Haproxy的日志默认是输出到系统的 syslog中,在生产环境中一般单独定义出来

[root@haproxy ~]# vi /etc/haproxy/haproxy.cfg 
global
        log /dev/log    local0 info
        log /dev/log    local0 notice

[root@haproxy ~]# vi /etc/rsyslog.d/haproxy.conf #编辑新的haproxy配置文件
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
&~

[root@haproxy ~]# systemctl restart haproxy
[root@haproxy ~]# systemctl restart rsyslog.service

[root@haproxy ~]# cd /var/log/haproxy/
[root@haproxy haproxy]# ls
haproxy-info.log  haproxy-notice.log 
haproxy-info.log #调度信息
haproxy-notice.log #haproxy启动信息

配置NFS服务器

[root@server1 ~]# yum -y install nfs*
[root@server1 ~]# yum -y install rpcbind

[root@server1 ~]# mkdir /web1 /web2
[root@server1 ~]# echo "

this is web1

"
> /web1/index.html [root@server1 ~]# echo "

this is web2

"
> /web2/index.html [root@server1 ~]# vi /etc/exports /web1/ 20.0.0.13(ro) /web2/ 20.0.0.14(ro) [root@server1 ~]# systemctl restart nfs-utils [root@server1 ~]# systemctl restart rpcbind [root@server1 ~]# showmount -e Export list for server1: /web2 20.0.0.14 /web1 20.0.0.13

配置web服务器

web1

###首先安装在线源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #不安装在线源无法yum安装nginx

yum安装nginx
yum -y install nginx

[root@server1 html]# mount 20.0.0.15:/web1/ /usr/share/nginx/html
[root@server1 html]# df -Th
[root@server1 html]# systemctl restart httpd
[root@server1 html]# curl localhost
<h1>this is web1</h1>

web2

###首先安装在线源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #不安装在线源无法yum安装nginx

yum安装nginx
yum -y install nginx

[root@server1 ~]# mount 20.0.0.15:/web2 /usr/share/nginx/html
[root@server1 ~]# df -Th
[root@server1 ~]# systemctl start httpd
[root@server1 ~]# curl localhost
<h1>this is web2</h1>

客户机访问

[root@server1 ~]# curl 20.0.0.11
<h1>this is web1</h1>

在这里插入图片描述

[root@server1 ~]# curl 20.0.0.11
<h1>this is web2</h1>

haproxy+nginx群集案例部署_第1张图片

你可能感兴趣的:(haproxy+nginx群集案例部署)