HAproxy+nginx 搭建负载均衡集群

目录

一、HAproxy 概述

1、什么是Haproxy

2、Haproxy作用

3、常见的Web集群调度器

4、Haproxy应用分析

5、Haproxy的特性

6、常见负载均衡策略

1、Haproxy支持多种调度算法,最常用的有8种。

7、nginx和LVS和Haproxy有什么区别

二、Haproxy 搭建Web群集

1、实验准备及数据流向图

2、部署Haproxy服务器

1、关闭防火墙及核心防护

2、安装依赖环境

3、上传压缩包、解压、编译安装 Haproxy

4、修改 Haproxy服务配置文件

5、 添加haproxy 系统服务

3、部署nginx服务器

1、手动安装nginx

2、配置本地源安装nginx

3、获取网络源的安装包,并安装nginx

4、部署httpd服务器

1、关闭防火墙及核心防护

2、下载httpd服务并开启

3、配置httpd服务页面文件 

4、客户端访问页面 

5、 haproxy 服务器验证

三、Haproxy集群日志重新定义

1、正常访问节点日志

2、断开节点访问日志


一、HAproxy 概述

1、什么是Haproxy

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

2、Haproxy作用

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

3、常见的Web集群调度器

目前常见的Web集群调度器分为软件和硬件:
① 软件通常使用开源的LVS、Haproxy、Nginx。

② 硬件一般有F5、绿盟和深信服等。

③ LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发没有Haproxy好

4、Haproxy应用分析

LVS在企业中抗负载能力很强,但存在不足:

LVS不支持正则处理,不能实现动静分离
对于大型网站LVS的事实配置较为复杂,维护成本相对较高
Haproxy是一款可以供高可用性、负载均衡和基于TCP和HTTP应用的代理软件:

适用于负载较大的Web站点
运行在硬件上可支持数以万计的并发连接请求

5、Haproxy的特性

1、可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美
2、最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s
3、支持多达8 种负载均衡算法,同时也支持会话保持
4、支持虚拟主机功能,从而实现web负载均衡更加灵活
5、支持连接拒绝、全透明代理等独特功能
6、拥有强大的ACL支持,用于访问控制
7、其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查询速度不会随着数据条目的增加而速度有所下降
8、支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成
9、支持TCP加速,零复制功能,类似于mmap机制
10、支持响应池(response buffering)
11、支持RDP协议
12、基于源的粘性,类似于nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器
13、更好统计数据接口,其web接口显示后端冀全中各个服务器的接受、发送、拒绝、错误等数据的统计信息
14、详细的健康状态检测,web接口中有关对上流服务器的健康检测状态,并提供了一定的管理功能
15、基于流量的健康评估机制
16、基于http认证
17、基于命令行的管理接口
18、日志分析器,可对日志进行分析

6、常见负载均衡策略

1、Haproxy支持多种调度算法,最常用的有8种。

① 轮询调度(Round Robin)RR

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

② 权重轮询 static-rr:

对高性能节点提高优先级即提高权重,使高性能节点处理的更多,减轻低性能节点负担。

③ 最小连接数算法 LC(Least Connections)

根据后端的节点连接数大小动态分配前端请求。

④ 基于来源访问调度算法 SH(Source Hashing)

用于一些有Session会话记录在服务端的场景,可以基于哈希算法对来源的IP、Cookie等做集群调度。

此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。

⑤ URL:

表示根据请求的URI,做cdn需使用。

⑥ url_param:

表示根据HTTP请求头来锁定每 一 次HTTP请求。

⑦ rdp—cookie(name)

表示根据据cookie (name)来锁定并哈希每一次TCP请求。

⑧ source:

表示根据请求的源IP,类似Nginx的IP hash机制。

7、nginx和LVS和Haproxy有什么区别

LVS

基于第三方应用实现的软负载均衡
只能实现4层的IP负载均衡技术,状态监测功能单一,但整体负载均衡性能最强

nginx

基于第三方应用实现的软负载均衡

可以实现4层和7层技术

主要用于Web服务器或缓存服务器,nginx的upstrean模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

Nginx主要用于web服务器或缓存服务器

Haproxy

基于linux操作系统内核实现软负载均衡
可以提供TCP和HTTP应用的负载均衡综合解决方案
在状态监测方面功能更丰富、更强大,可支持端口、URL、脚本等多种状态监测方式

Haproxy支持TCP协议的负载均衡转发

Haproxy支持8种负载均衡器策略

二、Haproxy 搭建Web群集

1、实验准备及数据流向图

Haproxy服务器  192.168.100.20

nginx1 服务器 192.168.100.30

nginx2 服务器 192.168.100.40

客户端   192.168.100.100

HAproxy+nginx 搭建负载均衡集群_第1张图片

2、部署Haproxy服务器

1、关闭防火墙及核心防护

systemctl stop firewalld

systemctl disablle firewalld

setenforce 0

2、安装依赖环境

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

3、上传压缩包、解压、编译安装 Haproxy

上传压缩包

tar zxvf haproxy-1.5.19.tar.gz    #解压安装包
cd haproxy-1.5.19/    #进入解压目录

make TARGET=linux2628 ARCH=x86_64     #进行编译
(TARGET=linux2628 表示内核版本,使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628)
(ARCH=x86_64   系统位数,现在基本都是64位)

make install      # 安装

HAproxy+nginx 搭建负载均衡集群_第2张图片

HAproxy+nginx 搭建负载均衡集群_第3张图片

4、修改 Haproxy服务配置文件

mkdir /etc/haproxy  
cp /opt/haproxy/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 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    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项--,添加
listen  webcluster 0.0.0.0:80    #haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /index.html    #检查服务器的index.html文件 

  此处文件名需要与后面节点服务器页面文件名一致
        balance roundrobin                #负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.100.30:80 check inter 2000 fall 3        #定义在线节点
        server inst2 192.18.100.40:80 check inter 2000 fall 3

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

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

 vim /etc/haproxy/haproxy.cfg

HAproxy+nginx 搭建负载均衡集群_第4张图片

5、 添加haproxy 系统服务

cp /opt/haproxy/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy  添加到系统管理中

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy  
service haproxy start    或    /etc/init.d/haproxy start  //如果ningx服务器未部署会提示找不到web服务器,可以等web部署完后再开启haproxy

HAproxy+nginx 搭建负载均衡集群_第5张图片

注意开启haproxy 服务需要关闭nginx服务

HAproxy+nginx 搭建负载均衡集群_第6张图片

3、部署nginx服务器

1、手动安装nginx

systemctl stop firewalld

systemctl disablle firewalld

setenforce 0

useradd -M -s /sbin/nologin nginx  创建运行用户、组

yum -y install gcc gcc-c++ pcre-devel zlib-devel make   安装依赖环境

上传nginx-1.15.9.tar.gz至/opt/nginx目录
cd /opt/nginx
tar xzvf nginx-1.15.9.tar.gz 
cd nginx-1.15.9/

编译
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make instal    安装  

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/    路径优化

添加 Nginx 系统服务

vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service  给权限

systemctl start nginx 开启服务

netstat -anutp | grep nginx

nginx -t 检查配置文件

2、配置本地源安装nginx

cd /etc/yum.repos.d/

mkdir repo.bak

 mv *.repo repo.bak/

配置本地nginx安装源

vim nginx.repo

[nginx]
name=nginx.repo
baseurl=https://nginx.org/packages/centos/7/$basearch
enabled=1
gpgcheck=0

yum clean all && yum makecache  清空缓存并更新缓存

yum -y install nginx

systemctl start nginx  开启服务

netstat -ntap| grep nginx  查看服务

HAproxy+nginx 搭建负载均衡集群_第7张图片

HAproxy+nginx 搭建负载均衡集群_第8张图片

rpm -ql nginx  #因为用本地yum安装的nginx,不知道html文件位置,使用rpm -ql 进行查看 

HAproxy+nginx 搭建负载均衡集群_第9张图片

 配置页面文件

HAproxy+nginx 搭建负载均衡集群_第10张图片

客户端页面访问 

HAproxy+nginx 搭建负载均衡集群_第11张图片

3、获取网络源的安装包,并安装nginx

rpm -Uvh  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum -y install nginx 

systemctl start nginx  开启服务

netstat -ntap| grep nginx  查看服务

rpm -ql nginx 查看html文件位置

cd /usr/share/nginx/html  配置页面文件

4、部署httpd服务器

1、关闭防火墙及核心防护

systemctl stop firewalld

systemctl disablle firewalld

setenforce 0

HAproxy+nginx 搭建负载均衡集群_第12张图片

2、下载httpd服务并开启

HAproxy+nginx 搭建负载均衡集群_第13张图片

3、配置httpd服务页面文件 

HAproxy+nginx 搭建负载均衡集群_第14张图片

4、客户端访问页面 

HAproxy+nginx 搭建负载均衡集群_第15张图片

5、 haproxy 服务器验证

service haproxy stop

service haproxy start

重新关闭后再次开启HAproxy服务在进行访问

HAproxy+nginx 搭建负载均衡集群_第16张图片

三、Haproxy集群日志重新定义

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

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

vim /etc/haproxy/haproxy.cfg
#更改日志文件
global
    log /dev/log local0 info   节点服务器正常访问时的日志文件
    log /dev/log local1 notice    断掉一个节点服务器再次开启时的日志记录

#重启haproxy服务
service haproxy restart

#为了便于管理将haproxy相关的配置独立定义到haproxy.conf
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

HAproxy+nginx 搭建负载均衡集群_第17张图片

HAproxy+nginx 搭建负载均衡集群_第18张图片

1、正常访问节点日志

客户端访问haproxy服务器后,会产生对应的日志文件

查看/var/log/haproxy/haproxy-info.logHAproxy+nginx 搭建负载均衡集群_第19张图片

2、断开节点访问日志

 停止掉某个节点服务器,然后再刷新haproxy服务器页面,开启节点服务器,再次刷新haproxy服务器页面 则会产生haproxy-notice.log文件 

HAproxy+nginx 搭建负载均衡集群_第20张图片

 

你可能感兴趣的:(linux,负载均衡,nginx,运维)