Haproxy 搭建 Web 群集

Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如 LVS 和Nginx。

相较而言,LVS 性能最好,但是搭建相对复杂;Nginx  upstream 模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy 好。Haproxy 官方网站是 http://www.haproxy.org/

本案例介绍使用 Haproxy  Nginx 搭建一套 Web 群集。

1. HTTP 请求通过 URL 访问网站使用的协议是 HTTP 协议,此类请求一般称为 HTTP 请求。HTTP 请求的方式分为 GET 方式和 POST 方式。当使用浏览器访问某一个 URL,会根据求 URL 返回状态码,通常正常的状态码为 2××、3××(如 200、301),如果出现异常会返回 4××5××(如 400、500)。

例如,访问 http://www.test.com/a.php?Id=123,就是一个 GET 请求,如果访问正常,会从服务器的日志中获取 200 状态码。假如此请求使用 POST 方式,那么传递给 a.php  Id参数依旧是 123,但是浏览器的 URL 将不会显示后面的 Id=123 字样,因此表单类或者有用户名、密码等内容提交时建议使用 POST 方式。不管使用哪种方式,最终 a.php 获取的值是一样的。

2. 负载均衡常用调度算法LVS、Haproxy、Nginx 最常用的调度算法有三种,如下所述。

(1)RR(Round Robin)。RR 算法是最简单最常用的一种算法,即轮询调度。例如,有三个节点 A、B、C,第一个用户访问会被指派到节点 A,第二个用户访问会被指派到节点 B,第三个用户访问会被指派到节点 C,第四个用户访问继续指派到节点 A,轮询分配访问请求实现负载均衡效果。此算法还有一种加权轮询,即根据每个节点的权重轮询分配访问请求。

(2)LC(Least Connections)。LC 算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求。例如,有三个节点 A、B、C,各节点的连接数分别为 A∶4 、B∶5、 C∶

6,此时如果有第一个用户连接请求,会被指派到 A 上,连接数变为 A∶5 、B∶5、C∶6;第 二个用户请求会继续分配到 A 上,连接数变为 A∶6、B∶5、C∶6;再有新的请求会分配给 B,每次将新的请求指派给连接数最小的客户端。由于实际情况下 A、B、C 的连接数会动态释放,很难会出现一样连接数的情况,因此此算法相比较 rr 算法有很大改进,是目前用到比较多的一种算法。

(3)SH(Source Hashing)。SH 即基于来源访问调度算法,此算法用于一些有 Session会话记录在服务器端的场景,可以基于来源的 IP、Cookie 等做群集调度。例如,使用基于源 IP 的群集调度算法,有三个节点 A、B、C,第一个用户第一次访问被指派到了 A,第二个用户第一次访问被指派到了 B,当第一个用户第二次访问时会被继续指派到 A,第二个用户第二次访问时依旧会被指派到 B,只要负载均衡调度器不重启,第一个用户访问都会被指派到 A,第二个用户访问都会被指派到 B,实现群集的调度。此调度算法好处是实现会话保持,但某些 IP 访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。

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

1.准备环境

Haproxy 服务器          CentOS 7.3 x86_64           192.168.10.111         haproxy-1.5.19.tar.gz

Nginx 服务器 1           CentOS 7.3 x86_64           192.168.10.112         nginx

Nginx 服务器 2           CentOS 7.3 x86_64           192.168.10.113         nginx

案例需求

测试安装 haproxy

在 Haproxy 服务器使用 haproxy-1.5.19.tar.gz 安装包进行编译安装。

[root@hap-node ~]# yum -y install pcre-devel bzip2-devel gcc-c++

[root@hap-node ~]# tar xf haproxy-1.5.19.tar.gz

[root@hap-node ~]# cd haproxy-1.5.19

[root@hap-node haproxy-1.5.19]# make TARGET=linux2628

[root@hap-node haproxy-1.5.19]# make install

[root@hap-node haproxy-1.5.19]# echo $?

0

测试安装nginx

在这里使用yum安装nginx

yum install epel-release -y

yum install nginx -y

安装好验证启动

systemctl start nginx

查看有没有进程

netstat -napt | grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9235/nginx: master

tcp6 0 0 :::80 :::* LISTEN 9235/nginx: master

修改配置文件按方便验证

vim /usr/share/nginx/html/index.html

cp examples/haproxy.cfg /etc/haproxy/ //在133行修改为wed1 (第二个同理改为wed2)

systemctl start nginx  (重启刷新)

访问验证

curl -s 192.168.10.112 | grep wed
  <h1>wed1</h1>
 

Haproxy 服务器配置

建立 Haproxy 的配置文件。

mkdir /etc/haproxy //创建配置文件目录

//将 haproxy.cfg 文件复制到配置文件目录

修改 haproxy.cfg 配置文件

vim /etc/haproxy/haproxy.cfg

mode http //模式为 http

option dontlognull //采用 http 日志格式记录日志

retries 3 //检查节点服务器失败次数,连续达到三次失败,则认为节点不可

maxconn 2000 //最大连接数

contimeout 5000 //连接超时时间

clitimeout 50000  //客户端超时时间

srvtimeout 50000 //服务器超时时间

listen webcluster 0.0.0.0:80 //定义一个 appli4-backup 的应用

option httpchk GET /index.html //检查服务器的 index.html 文件

balance roundrobin //负载均衡调度算法使用轮询算法

server inst1 192.168.10.112:80 check inter 2000 fall 3 //定义备份节点

server inst2 192.168.10.113:80 check inter 2000 fall 3 //定义备份节点

创建自启动脚本

cp ~/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

 chmod +x /etc/init.d/haproxy

chkconfig --add /etc/init.d/haproxy

启动服务

/etc/init.d/haproxy start

验证

访问你haproxy的IP地址

curl -s 192.168.10.111 | grep wed

实现负载均衡

[root@localhost ~]# curl -s 192.168.10.111 | grep wed
    <h1>wed1</h1>
[root@localhost ~]# curl -s 192.168.10.111 | grep wed
    <h1>wed2</h1>
[root@localhost ~]# curl -s 192.168.10.111 | grep wed
    <h1>wed1</h1>
[root@localhost ~]# curl -s 192.168.10.111 | grep wed
    <h1>wed2</h1>
[root@localhost ~]# 
 

本人并不是多么专业,不喜勿喷                

                

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值