HAProxy&Nginx负载均衡集群架构

七层负载均衡
HAProxy
NGINX

HAProxy

haproxy 是一款高性能的负载均衡软件,因为其专注负载均衡,因此与Nginx比起来,在负载均衡上做的更好,更专业

特点
支持tcp/http 两种协议层的负载均衡,使得其负载均衡功能非常丰富
支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求
性能优秀,基于事件驱动的链接处理模式及单线程处理模式(和Nginx类似) 让其性能卓越
自带功能出色的监控页面,实时了解系统的当前状况
功能强大ACL支持,给用户极大的方便

处理模式
单进程处理模式:
所有客户端连接全部都由同一个服务器进程来处理,目标就是等待连接,来一个分配一个,主要消耗CPU
多线程处理模式:
多线程模式消耗内存,会限制并发而且多线程需要进程间通信,也会消耗许多的CPU资源

Demo

拓扑

环境
4台linux
client 192.168.12.1/24(真实机做客户端)
HAproxy 196.168.122.254/24
web1 192.168.122.10/24
web2 192.168.122.20/24

步骤

html A & html B 创建测试页面
四台主机域名解析
systemctl stop firewalld && setenforce 0
ntpdate 时钟服务器同步
yum -y install httpd
准备页面

安装haproxy
yum -y install epel-release.noarch
yum -y install haproxy

配置haproxy

gobal 
    log 127.0.0.1 local3 info 
    maxconn 4096 
    uid nobody
    gid nobody 
    daemon
defaults
   log   gobal
   mode  http
   maxconn  2048 
   retries  3
   option  redispatch
   stats   uri/haproxy
   stats auth  admin 123
   contimeout  5000
   clitimeout  50000
   srvtimeout  50000  
frontend http-in 
   bind 0.0.0.0:80
   mode http
   log global
   option httplog
   option httpclose 
acl html url_reg -i \.html$
use_backend html-server if html
default_backend html-server         
backend html-server
  mode http
  balance roundrobin
  option httpchk GET /index.html
  cookie SERVERID insert indirect nocache
  server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
  server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
global 全局配置
log  日志配置
maxconn  最大链接限制(优先级低)
uid  用户
gid 组用户
deamon  守护线程运行
nbproc   haproxy进程数

defaults  针对(listen 和backedn块进行设置,如果)
log  日志使用全局配置
mode 模式7层LB
maxconn  最大连接数(优先级中)
retries  健康检查,3次连接失败就认为服务器不可用
option  服务不可用后的操作,重定向到其他服务器
stats   状态模块功能开启
stats auth  状态模块认证  用户名 密码
contimeout  定义haproxy将客户端请求转发至后端服务器所等待的超时时长 毫秒
clitimeout  haproxy作为客户,和后端服务器之间空闲连接的超时时间,到时候发送fin指令
srvtimeout  haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令

frontend  前端配置块, 面对用户侧
mode http模式的LB
log  日志使用全局模式
option httplog  默认日志格式非常简陋,包括源地址,目标地址和示例名称,而option
httplog参数会使日志格式变得丰富许多其通常包括但不限于HTTP请求,连接计时器,会
话状态,连接数,捕获的首部以及cookie,frontend, backend 以及服务器名称,当然也
包括源地址和端口号等
option httpclose: HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户
端, 客户端发送后续请求时会发送此cookie到HAProxy,Haproxy会针对此cookie分发到
上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果,如果避免
这种情况配置选此项,防止产生多余的cookie信息
acl html url_reg -i \.html$  1,访问控制列表名称html,规则要求访问以html结尾的uri时
use_backend html-server if html  2,如果满足acl html规则,则推送给后端服务器html-server
default_backend html-server  3,默认的后端服务器是html-server

backend html-server  后端服务器名称为html-server
mode http  模式为7层代理
balance roundrobin 算法为轮询
option httpchk GET /index.html  允许使用http协议检查server的健康,以请求网站根目录下的index.html页面的方式
cookie SERVERID insert indirect nocache  在转发客户端请求时插入cookie 再转给真实服务器,如果第二次访问就把cookie换掉
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5  对后
端服务器的健康状况检查间隔为2000毫秒,连续两次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机

systemctl start haproxy
systemctl enable haproxy 

测试结果
Linux 客户端
elinks –dump http://haproxy web1
elinks –dump httP://haproxy web2
windows 客户端缓存问题,会导致看到的是同一个网站


测试HAproxy 状态
196.168.122.254/haproxy

NGINX

负载均衡特点:
功能强大,性能卓越,运行稳定
配置简单灵活
能够自动剔除工作不正常的后端服务器 , 健康检查
上传文件使用异步模式 client –nginx–web1 web2 web3 lvs 同步请求DR client–> dr –web1
支持多种分配策略,可以分配权重,分配方式灵活

优势:
nginx 复制用户请求,在后端服务器出现问题时,nginx会再复制一份请求发给另外一台后端服务器, lvs 则在这种情况下,只能用户重新发请求

缺点:
流量会进过nginx,所以nginx会成为性能瓶颈

生产架构

7层负载均衡
通过location对不同的请求进行负载均衡,因为通过http协议,所以称为7层
location /{
}
location~\.html${
proxy_pass…..
}
location~\.php${
}
location~\.(jpg|png|css|js)${
}

demo 环境
client : client
nginx: nginx
Apache:web1
Apache:web2

步骤:
关闭防火墙和SELINUX(略)
域名解析 (略)
同步时间 (略)
准备web1 页面 (略)
配置nginx
测试负载均衡
动静分离

配置nginx
yum install -y epel-relase
yum install -y nginx
vim /etc/nginx/nginx.conf
upstream html{ #注意IP 地址
server web1:80;
server web2:80;
}
server{
location/{
proxy_pass http://html; #这里的html 是upstream的名称
}
}

测试负载均衡
访问nginx服务器,能够交替看到web1 和web2

动静分离
增加一个upstream php {server web3;}
增加一个location~\.php{}

示例:
upstream html{
   server web1:80;
   server web2:80;
}
upstream php{
   server web3:80;
   server web4:80;
}
server{
   location/{
    proxy_pass http://html;
  }
   location/{
    proxy_pass http://php;
  }
}

动静分离测试
elinks –dump http://nginx
elinks –dump http://nginx/index.html
elinks –dump http://nginx/index.php

其他相关知识点:

upstream  breeze.com{
#ip hash
   server 102.168.10.137 weight=1 max_fails=2 fail_timeout=2;
   server 192.168.10.20 weight=1 max_fails=2 fail_timeout=2;
   server 192.168.10.251 max_fails=2 fail_timeout=5 down;
   server 192.168.10.253 backup;
}

upstream支持的负载均衡算法
rr 轮询(默认) first in  first out:
  可以通过weight指定的轮询的权重,权重越大(比例),被调度的次数越多 rr roundrobin 
weight权重:用数字,谁的数字大,谁的权重就高,按比例 13 rr
wrr加权公平队列:
  wrr,rr
ip_hash IP摘要: 
  根据请求IP进行调度,可以解决session的问题,不能使用weight,同一个客户端IP,发给同一个web服务器
fair 公平:
  可以根据请求页面的大小和加载时间长短进行调度,使用第三方的upstream_fair 模块
需要安装第三方插件,请求页面比较大,可以转发给后端配置比较高的服务器
url_hash 地址摘要
  按请求的url的hash 进行调度,从而使每个url定向到同一台服务器,使用第三方的hash
模块需要安装第三方插件, 用户访问的页面是相同的,就转发给同一个真实服务器

upstream 支持的状态参数:
down 暂停对该服务器的调度
backup  类似于LVS Sorry Server,当所有非backup的服务器故障,全都坏了,就转发这台服务器
max_fails    转发请求失败的次数,进行尝试,默认为1 ,就尝试一次
fail_timeout  在经历max_fails次失败后,暂停真实服务器的时间(单位秒),在这个单位时间内,不进行转发给他

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据