【LVS】4、HAProxy搭建web集群

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

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

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

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

不在乎成本的公司会选择用硬件,更多的是采用软件

HAProxy介绍

LVS抗负载能力强,但不支持正则表达式、不能实现动静分离;大型网站,LVS实施配置复杂,维护成本相对较高;一般在上百台集群中使用

HAProxy是一款可提供高可用性和负载均衡,基于TCP(四层)和HTTP(七层)应用的代理的软件

适用于负载大的web站点,运行再硬件上,可以支持上万条并发连接的连接请求

HAProxy的主要特性

LVS在企业应用中抗负载能力强,但不支持正则表达式,不能实现动静分离;大型网站,配置复杂,维护成本高

HARoxy

HAProxy负载均衡的策略(8种)

(1)roundrobin,表示简单的轮询

(2)static-rr,表示根据权重

(3)leastconn,表示最少连接者先处理

(4)source,表示根据请求源IP

(5)uri,表示根据请求的URI,做cdn需使用;

(6)url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name

(7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

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

LVS、Nginx、HAProxy之间的区别

●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;

●HAProxy功能强大,但整体性能低于4层模式的LVS负载均衡。

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

nginx

① 支持正则

② 只支持基于端口的健康检查

③ 不支持session直接保持、但能通过ip_hash来解决

④ 对网络稳定性要求不高

⑤ 反向代理能力强

LVS

① 只能基于四层端口转发

② 尽在四层做分发作用 抗负载能力强

③ 应用范围广

haproxy

① 支持8中负载均衡策略

② 仅作负载均衡软件使用,在高并发情况下性能优于nginx

③ 支持URL检测 支持session保持

Haproxy搭建 Web 群集

Haproxy服务器:192.168.220.121

Nginx 服务器1:192.168.220.111

Nginx 服务器2:192.168.220.112

客户端:192.168.220.10

haproxy 服务器部署

1.关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
复制代码
systemctl stop firewalld
setenforce 0

cd /opt
上传haproxy-1.5.19.tar.gz
2.编译安装 Haproxy
复制代码
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install

---------------------参数说明-----------------------------------

TARGET=linux26 #内核版本,

#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

ARCH=x86_64 #系统位数,64位系统


3.Haproxy服务器配置
复制代码
mkdir /etc/haproxy
cp 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 /test.html	#检查服务器的test.html文件
        balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.10.16:80 check inter 2000 fall 3		#定义在线节点
        server inst2 192.168.10.17:80 check inter 2000 fall 3

---------------------参数说明-----------------------------------

balance roundrobin #负载均衡调度算法

#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash

check inter 2000 #表示启用对此后端服务器执行健康检查,设置健康状态检查的时间间隔,单位为毫秒连续三次检测不到心跳频率则认为该

fall 3 #表示节点失效

若节点配置后带有"backup"表示该节点只是个备份节点,仅在所有在线节点都失效该节点才启用。不携带"backup",表示为主节点,和其它在线节点共同提供服务。


4.添加haproxy 系统服务
复制代码
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start	或	/etc/init.d/haproxy start

节点服务器部署

【安装 Nginx 服务】(192.168.220.111、192.168.220.112)

复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1、安装依赖包
复制代码
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2、创建运行用户
复制代码
useradd -M -s /sbin/nologin nginx
3、编译安装
复制代码
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

./configure --with-stream

make -j 4 && make install
4、优化路径
复制代码
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
5、添加 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=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

6、赋权、启动Nginx服务

复制代码
chmod 777 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
--192.168.220.111--
复制代码
echo "this is H+N web1" > /usr/local/nginx/html/test.html
--192.168.220.112--
复制代码
echo "this is H+N web2" > /usr/local/nginx/html/test.html

测试 Web群集

在客户端使用浏览器打开

复制代码
http://192.168.220.121/test.html 

不断刷新浏览器测试负载均衡效果

相关推荐
你什么冠军?35 分钟前
云计算与服务器概述
运维·服务器·云计算
UNbuff_038 分钟前
Linux top 命令使用说明
linux·运维·服务器
---学无止境---1 小时前
Linux中dcache和inode缓存回收函数的实现
linux
Мартин.1 小时前
[Meachines] [Hard] Pollution MyBB+Redis_session+PHP-Filter+PHP-FPM+prototype
linux
总有刁民想爱朕ha1 小时前
银河麒麟v10 Mysql8部署教程(小白版)
linux·mysql数据库备份
weixin_307779132 小时前
AWS云上Quickwit部署指南与成本分析
服务器·自动化·云计算·运维开发·aws
LCG元2 小时前
性能排查必看!当Linux服务器CPU/内存飙高,如何快速定位并"干掉"罪魁祸首进程?
linux·后端
路由侠内网穿透2 小时前
本地部署开源数据分析平台 Elastic Stack 并实现外部访问( Windows 版本)
运维·服务器·网络·windows·开源·jenkins
回忆是昨天里的海2 小时前
k8s安装-kubeadm join,将工作节点加入k8s集群
java·服务器·kubernetes
TG_yunshuguoji3 小时前
亚马逊云代理:AWS的EC2, S3, RDS,Lambda具体简介
服务器·云计算·aws