Haproxy+Nginx搭建Web群集精华篇

一:负载均衡简介

负载均衡(Load
Balance,简称LB)是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。

mark

1.1:为什么使用负载均衡:

Web服务器的动态水平扩展–>对用户无感知
增加业务并发访问及处理能力–>解决单服务器瓶颈问题
节约公网IP地址–>降低IT支出成本
隐藏内部服务器IP–>提高内部服务器安全性
配置简单–>固定格式的配置文件
功能丰富–>支持四层和七层,支持动态下线主机
性能较强–>并发数万甚至数十万

1.2:负载均衡类型:

四层:

LVS(Linux Virtual Server)
HAProxy(High Availability Proxy)
Nginx(1.9)

七层:

HAProxy
Nginx

硬件:

F5 #https://f5.com/zh
Netscaler #https://www.citrix.com.cn/products/citrix-adc/
Array #https://www.arraynetworks.com.cn/
深信服 #http://www.sangfor.com.cn/
北京灵州 #http://www.lingzhou.com.cn/cpzx/llfzjh/

二:常见的Web集群调度器

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

  • 软件通常使用开源的LVS、Haprxy、Nginx

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

mark

2.1:Haprox应用分析

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

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

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

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

  • 适用于负载大的web站点

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

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

RR(Round Robin)

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

LC(Least Connections)

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

SH(Source Hasging)

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

2.3:haproxy功能

HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性高并发环境:      
可以针对HTTP请求添加cookie,进行路由后端服务器      
可平衡负载至后端服务器,并支持持久连接     
支持基于cookie进行调度      
支持所有主服务器故障切换至备用服务器      
支持专用端口实现监控服务      
支持不影响现有连接情况下停止接受新连接请求      
可以在双向添加,修改或删除HTTP报文首部      
支持基于pattern实现连接请求的访问控制      
通过特定的URI为授权用户提供详细的状态信息  历史版本更新功能:    
1.4  1.5  1.6  1.7  1.8 1.9  2.0 2.1 2.2-dev

2.4:haproxy组成

程序环境:
 	主程序:/usr/sbin/haproxy
	配置文件:/etc/haproxy/haproxy.cfg
	Unit file:/usr/lib/systemd/system/haproxy.service
配置段:
    global:全局配置段
	进程及安全配置相关的参数
	性能调整相关参数
	Debug参数
    proxies:代理配置段
	defaults:为frontend, backend, listen提供默认配置
	frontend:前端,相当于nginx中的server {
    
    }
	backend:后端,相当于nginx中的upstream {
    
    }
	listen:同时拥有前端和后端,适用于一对一环境

三:使用Haproxy搭建Web群集

mark

主机要求

  • 用1台客户端,三台虚拟服务器模拟搭建一套Web群集

  • 虚拟机安装Centos 7.6的系统

主机 操作系统 IP地址 主要软件
Haproxy服务器 Centos 7.6 20.0.0.41 haproxy-1.5.19.tar
Nginx服务器1 Centos 7.6 20.0.0.42 nginx-1.12.0.tar
Nginx服务器2 Centos 7.6 20.0.0.43 nginx-1.12.0.tar
客户端 win 10 20.0.0.50 Edge浏览器

3.1:Nginx的安装与启动

在两台网站服务器上安装Nginx,并启动服务

  • 使用编码的方式进行安装

  • 关闭Firewalld防火墙

  • 安装基础软件包

  • 增加系统用户nginx

  • 编译安装Nginx并启动

#关闭防火墙
setenforce 0
iptables -F

#安装环境包
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
#解压Nginx软件包
tar zxvf nginx-1.12.2.tar.gz -C /opt

#切换到nginx目录
[root@web1 ~]# cd /opt
[root@web1 opt]# cd nginx-1.12.2/

#配置
[root@web1 nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \       //安装目录
> --user=nginx \                    //用户
> --group=nginx                     //用户组

编译及安装
make && make install

#创建web站点首页index.html
[root@web1 nginx-1.12.2]# cd html/
[root@web1 html]# vim test.html
//编写以下信息
<h1>this is web1</h1>

#切换web2节点服务器
<h1>this is web2</h1>

#建立软链接,便于管理nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#两台节点服务器都启动
nginx    //启动
nginx -t   //检查配置文件
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

#查看端口
netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22361/ngin: master 

3.11:在客户机上访问等进行测试

mark

mark

mark

3.2:Haproxy配置安装与启动

3.21:在负载均衡器上安装Haproxy

//下载依赖环境
[root@haproxy ~]# yum install -y \

> pcre-devel \
> bzip2-devel \
> gcc \
> gcc-c++ \
> make

[root@haproxy ~]# ls
anaconda-ks.cfg        initial-setup-ks.cfg  模板  图片  下载  桌面
haproxy-1.5.19.tar.gz  公共                  视频  文档  音乐
//解压到当前目录
[root@haproxy ~]# tar zxvf haproxy-1.5.19.tar.gz 
#编译安装
[root@haproxy ~]# cd haproxy-1.5.19/
[root@haproxy haproxy-1.5.19]# make TARGET=linux26
[root@haproxy haproxy-1.5.19]# make install

#创建haproxy配置文件目录
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy

#复制模板配置文件到haproxy目录下
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

3.22:配置Haproxy文件

vim /etc/haproxy/haproxy.cfg 

删除:#chroot /usr/share/haproxy
          #redispatch


this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy     //这边注释
        uid 99      //使用系统为99的ID号
        gid 99
        daemon
        #debug
        #quiet

default
        log     global             //定义日志为global配置
        mode    http               //http模式
        option  httplog            //采用http日志格式记录日志
        option  dontlognull
        retries 3                  //检查节点服务器的失败连续达到三次认为节点不可用
        #iredispatch               //这边注释  不然服务启动不了
        maxconn 2000               //最大连接数
        contimeout      5000       //连接超时时间
        clitimeout      50000      //客户端超时时间
        srvtimeout      50000       //服务器超时时间
 
listen  webcluster 0.0.0.0:80
        option httpchk GET /test.html  检查节点服务器的test.html文件【首页文件】
        balance roundrobin
        server inst1 20.0.0.42:80 check inter 2000 fall 3 //定义备份点
        server inst2 20.0.0:43:80 check inter 2000 fall 3 //定义备份点

3.23:创建自启动脚本,并启动Haproxy

#关闭防火墙
[root@localhost haproxy-1.5.19]# iptables -F
[root@localhost haproxy-1.5.19]# setenforce 0
[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy

#为haproxy赋予可执行权限
[root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy

#加入系统服务
[root@localhost haproxy-1.5.19]# chkconfig --add /etc/init.d/haproxy
[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

#启动haproxy
[root@localhost haproxy-1.5.19]# service haproxy start
[root@localhost haproxy-1.5.19]# netstat -ntap | grep haproxy
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      87939/haproxy       

3.24:配置与测试

  • 测试Haproxy集群
    • 测试高性能
      • 可在两个不同的浏览器中分别访问两个测试网站,正常情况下应该出现两个网站的测试页面

mark

mark

  • 高可用性

  • 将其中一台 Nginx服务器停用,在客户端浏览器中访问 Haproxy,正常情况下应出现另外一台 Nginx服务器的网站测试页面

四:Haproxy日志管理

  • Haproxy的日志默认是输出到系统的 syslog中,在生产环境中一般单独定义出来
  • 定义的方法步骤
    • 修改 Haproxy配置文件中关于日志配置的选项,加入配置:
      • log /dev/log local0 info
      • log /dev/log local0 notice
    • 修改 rsyslog配置,将 Haproxy相关的配置独立定义到
      • haproxy.conf,并放到/etc/rsyslog.d/下
    • 保存配置文件并重启 rsyslog服务,完成 rsyslog配置

4.1:编辑haproxy配置文件


[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg 
//在global下面两行日志文件位置重新定义分离

global
        log /dev/log    local0 info
        log /dev/log    local1 notice
...省略信息........

#修改配置文件需要重启服务
[root@localhost haproxy-1.5.19]# service haproxy restart
Restarting haproxy (via systemctl):  

#创建配置文件目录
[root@localhost haproxy-1.5.19]# touch /etc/rsyslog.d/haproxy.conf
[root@localhost haproxy-1.5.19]# 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
&~

#重启日志文件
[root@localhost haproxy-1.5.19]# systemctl restart rsyslog.service 
  • 再次访问刷新会产生两个日志文件
[root@localhost log]# cd haproxy/
[root@localhost haproxy]# ls
haproxy-info.log  haproxy-notice.log

感谢观看

猜你喜欢

转载自blog.csdn.net/weixin_47151643/article/details/108372243