使用 Haproxy 搭建 Web 群集(一)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

使用 Haproxy 搭建 Web 群集

一、常见的 Web 集群调度器

目前常见的 Web 集群调度器分为软件和硬件,软件通常使用开源的 LVS、Haproxy、Nginx, 硬件一般使用比较多的是 F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等。

使用 Haproxy 搭建 Web 群集_haproxy

二、Haproxy 与 LVS 应用对比分析

LVS 在企业应用中抗负载能力很强,但不支持正则处理,不能实现动静分离,对于大型 网站,LVS 的实施配置复杂,维护成本相对较高。

Haproxy 是一款可以提供高可用性、负载均衡、及基于 TCP 和 HTTP 应用的代理软件。 特别适用于负载特别大的 Web 站点,运行在当前的硬件上可支持数以万计的并发连接请求。

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用 的软负载实现。LVS 就是基于 Linux 操作系统实现的一种软负载,HAProxy 就是开源的并且基 于第三应用实现的软负载。

HAProxy 相比 LVS 的使用要简单很多,功能方面也很丰富。当前,HAProxy 支持两种主 要的代理模式:”tcp”也即 4 层(大多用于邮件服务器、内部协议通信服务器等),和 7 层(HTTP)。 在 4 层模式下,HAProxy 仅在客户端和服务器之间转发双向流量。7 层模式下,HAProxy 会 分析协议,并且能通过允许、拒绝、交换、增加、修改或者***请求(request)或者回应(response) 里指定内容来控制协议,这种操作要基于特定规则。(新的 1.3 之后的版本引入了 frontend,backend 指令;frontend 根据任意 HTTP 请求头内容做规则匹配,然后把请求定向到相关的backend.)

HAProxy 主要优点:

·        1、HAProxy 是支持虚拟主机的,通过 frontend 指令来实现

·        2、能够补充 Nginx 的一些缺点比如 Session 的保持,Cookie 的引导等工作

·        3、支持 url 检测后端的服务器出问题的检测会有很好的帮助。

·        4、它跟 LVS 一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 更会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。

·        5、HAProxy 可以对 Mysql 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,不 过在后端的 MySQL slaves 数量超过 10 台时性能不如 LVS,所以更推荐 LVS+Keepalived。

·        6、能对请求的 url 和 header 中的信息做匹配,有比 lvs 有更好的 7 层实现

若企业中,硬件负载均衡器发生故障时,应急处理所采用的方案顺序:

·        1、Haproxy+Keepalived

·        2、Nginx+Keepalived

·        3、LVS+Keepalived

三、Haproxy 调度算法及其原理

1、RR(Round Robin)轮询算法。

ABC,1–>A ,2–>B,3–>C,4–>A,…,

此外,加权轮询调度算法 WRR。根据每个节点的权重轮询分配访问请求。

2、LC(Least Connections)最少连接数算法。

A B C. A:4、B:5 C:6, 1 –> A, A:5 B:5 C:6,2 –> A:6 B:5 C:6 , 3 –> B , A:6 B:6 C:6 , 4 –> A:7 B:6 C:6 ,5 –> B , A:7 B:7 C:6 , 6 –>C A:7 B:7 C:7 (目前用的比较多的一种)

3、 SH(source hashing)来源访问调度算法。

A B C , 1 –> A, 2 –> B 1 –> A , 2 –> B, 只要保证负载调度器不重启,第一个用户 –> A , 2 –> B 这种调度算法的好处是会实现会话保持。

HAProxy 的负载均衡算法现在也越来越多了,具体有如下 8 种:

·        (1)roundrobin,表示简单的轮询,这个是负载均衡基本都具备的

·        (2)static-rr,表示根据权重,建议关注

·        (3)leastconn,表示最少连接者先处理,建议关注

·        (4)source,表示根据请求源 IP,这个跟 Nginx 的 IP_hash 机制类似,我们用其作为解 决 session 问题的一种方法

·        (5)ri,表示根据请求的

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

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

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

四、使用 Haproxy 搭建 Web 集群案例

实验环境:

·        Haproxy 服务器:192.168.100.100/24

·        Nginx1 服务器:192.168.100.11/24

·        Nginx2 服务器:192.168.100.22/24

·        Nginxbak 服务器:192.168.100.33/24

使用 Haproxy 搭建 Web 群集_haproxy_02

1、Nginx 的安装与启动


[root@nginx1 ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make

[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx

[root@nginx1 ~]# tar -xvf nginx-1.12.0.tar.gz -C /usr/src/

[root@nginx1 ~]# cd /usr/src/nginx-1.12.0/

[root@nginx1 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx &&make &&make install

[root@nginx1 nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

[root@nginx1 nginx-1.12.0]# nginx

[root@nginx1 nginx-1.12.0]# ss -utpln |grep nginx
tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=4359,fd=6),("nginx",pid=4358,fd=6))

[root@nginx1 nginx-1.12.0]# echo "<h1>1111</h1>" >/usr/local/nginx/html/index.html
#(nginx2 与 nginxbak 的配置与上述相同,唯一不同是最后测试页内容分别为 2222 和 bak)

[root@nginx2 nginx-1.12.0]# echo "<h1>2222</h1>" >/usr/local/nginx/html/index.html

[root@nginx-bak nginx-1.12.0]# echo "<h1>bak</h1>" >/usr/local/nginx/html/index.html
2、安装Haproxy

[root@haproxy ~] yum -y install haproxy

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
	log 127.0.0.1 local0                 #可不做修改
	chroot /var/lib/haproxy              # 改变当前工作目录
	pidfile /var/run/haproxy.pid         # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
	maxconn 4000                         # 最大连接数,默认4000
	user haproxy                         # 默认用户
	group haproxy                        # 默认组
	daemon                               # 创建1个进程进入deamon模式运行。此参数要求将运行模式设置为daemon
	stats socket /var/lib/haproxy/stats  # 创建监控所用的套接字目录
#---------------------------------------------------------------------
# defaults settings
#---------------------------------------------------------------------
# 注意:因为要使用tcp的负载,屏蔽掉与http相关的默认配置
defaults
	mode http                            # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
	log global
	option dontlognull                   # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器
	option redispatch                    # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
	retries 3                            # 3次连接失败就认为服务不可用,也可以通过后面设置        
	timeout queue 1m
	timeout connect 10s                  # 连接超时时间
timeout client 1m                    # 客户端连接超时时间
	timeout server 1m                    # 服务器端连接超时时间
	timeout check 10s                    
	maxconn 3000                         # 最大连接数
#---------------------------------------------------------------------

#注释掉 frontend mian *:5000 内容段的注释
#---------------------------------------------------------------------

手动添加以下内容:
listen admin_stats                           #开启haproxy监控界面
	bind *:8080                            #绑定8080端口
	mode http
	option httplog
	stats enable                         #开启统计
	stats refresh 30s
	stats uri /haproxy?stats     #监控界面url:http://ip:80/haproxy/stats
	stats auth admin:123456
	stats realm welcome\ Haproxy
	stats admin if TRUE
#---------------------------------------------------------------------
注释掉 backend app 内容段

手动添加以下内容:
listen nginx_server                      #代理nginx集群
	bind *:80                         	#绑定80端口
	mode http
	option httpchk GET /index.html
	server nginx_1 192.168.100.11:80 check inter 2000 rise 3 fall 3 weight 1
	server nginx_2 192.168.100.22:80 check inter 2000 rise 3 fall 3 weight 1
	server nginx_bak 192.168.100.33:80 check inter 2000 rise 3 fall 3 backup

[root@haproxy ~]# systemctl start haproxy.service

客户机访问测试:http://192.168.100.10/

使用 Haproxy 搭建 Web 群集_haproxy_03

使用 Haproxy 搭建 Web 群集_haproxy_04

客户端访问:http://192.168.100.10:8080/haproxy?stats

使用 Haproxy 搭建 Web 群集_haproxy_05

将nginx_1和nginx_2停止掉


[root@nginx1 ~]# nginx -s stop
[root@nginx2 ~]# nginx -s stop

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux运维老纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值