【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 

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

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux