当前位置:首页 » 《随便一记》 » 正文

使用Haproxy搭建Web群集

5 人参与  2024年03月09日 17:36  分类 : 《随便一记》  评论

点击全文阅读


        Hapraxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS 和Nginx。相 比较而言,LVS.性能最好,但是搭建相对复杂:Nginx的 upstream 模块支持群集功能,但是对群集节 点健康检查功能不强,性能没有Haproxy好。Heproxy官方网站是http://www.haproxy.org/ 

索例前置知识点

(1)HTTP请求

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

        例如,访问http://www.test.com/a.php?ld=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 Comections).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的连接数会动态释放,很难会出现一样连接数的情况,因此此算 法相比较爪算法有很大改进,是目前用到比较多的一种算法。

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

(3)常见的Web群集调度器

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

案例环境

        本案例使用三台服务器模拟搭建一套Web群集,拓扑图如下所示:

案例实施

关闭防火墙:systemctl disable firewalld --now

关闭Selinux:setenforce 0

                        sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

配置IP DNS 网关:nmtui

1.编译安装Nginx服务器

(1)搭建Nginx1,使用nginx-1.12.0.tar.gz安装包进行编译安装。

[root@Nginx1 ~]# mount /dev/cdrom /mnt/mount: /dev/sr0 写保护,将以只读方式挂载[root@Nginx1 ~]# yum -y install pcre-devel zlib-devel       //挂载后在本地yum仓库安装[root@Nginx1 ~]#useradd -M -s /sbin/nologin nginx   //创建nginx用户[root@Nginx1 ~]# rz -E  //把源码包nginx-1.24.0.tar.gz拉进来rz waiting to receive.[root@Nginx1 ~]# tar zxf nginx-1.24.0.tar.gz  //解压文件[root@Nginx1 ~]# cd nginx-1.24.0/       //执行编译安装[root@Nginx1 nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module[root@Nginx1 nginx-1.24.0]# make && make install

[root@Nginx1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/     //创建主程序链接文件[root@Nginx1 ~]# echo "<h1>This is nginx Server 192.168.55.49</h1>" > /usr/local/nginx/html/test.html     //建立测试页面[root@Nginx1 ~]# /usr/local/nginx/sbin/nginx              //启动Nginx[root@Nginx1 ~]# netstat -anpt | grep nginxtcp     0     0 0.0.0.0:80            0.0.0.0:*           LISTEN      11121/nginx: master [root@Nginx1 ~]# systemctl stop firewalld.service 

         为了方便实验,网站没有配置域名,直接使用IP地址。在客户端访问http://192.168.55.49/ test.huml测试。

(2)搭建Nginx2.

        编译安装的步骤与Nginx1相同,不同之处在于建立测试页面。

[root@Nginx2 ~]# echo "<h1>This is nginx Server 192.168.55.50</h1>" > /usr/local/nginx/html/test.html

 2.编译安装Haproxy

使用 haproxy-1.5.19.tar.gz安装包进行编译安装

[root@Haproxy ~]# yum -y install pcre-devel bzip2-devel   //组件[root@Haproxy ~]# rz -Erz waiting to receive.                   //将源码包haproxy-1.5.19.tar.gz上传拉进来[root@Haproxy ~]# tar zxf haproxy-1.5.19.tar.gz   [root@Haproxy ~]# cd haproxy-1.5.19/[root@Haproxy haproxy-1.5.19]# make TARGET=linux26      //64位系统[root@Haproxy haproxy-1.5.19]# make install

3.Haproxy服务器配置

(1)建立Haproxy的配置文件。

[root@Haproxy haproxy-1.5.19]# mkdir /etc/haproxy  //创建主配置文件[root@Haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/    //将haproxy.cfg文件复制到配置文件目录

(2)Haproxy配置项介绍。

(3)根据目前的群集设计,将haproxy.cfg配置文件的内容修改如下。

[root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg

4.创建自启动脚本

[root@Haproxy haproxy-1.5.19]# mkdir /usr/share/haproxy         //创建群集根目录添加haproxy系统服务:[root@Haproxy haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy    [root@Haproxy haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy[root@Haproxy haproxy-1.5.19]# chmod +x /etc/init.d/haproxy[root@Haproxy haproxy-1.5.19]# chkconfig --add haproxy启动服务:[root@Haproxy haproxy-1.5.19]# /etc/init.d/haproxy startStarting haproxy (via systemctl):                          [  确定  ]启动服务:[root@Haproxy haproxy-1.5.19]# systemctl start haproxy关闭防火墙浏览器可以进入:[root@Haproxy haproxy-1.5.19]# systemctl stop firewalld

5.测试Web群集 

        通过上面的步骤,已经搭建完成Haproxy 的Web群集,接下来需要验证群集是否工作正常。一 个群集一般需要具备两个特性,第一个是高性能,第二个是高可用,

(1)测试高性能

在客户端使用浏览器打开http://192.168.55.47/test.html,浏览器显示信息

 

再次打开一个新的浏览器页面访问http://192.168.55.47/test.html,浏览器显示信息 

 

 

(2)测试高可用

现在将 192.168.55.49的Nginx服务停用,在客户端使用浏览器打开http://192.168.55.47/ test.html,浏览器显示信息

从中可以看出,当一台节点故障,不会影响群集的使用,这祥就满足了群集的高可用性。也可 以将192.168.1.62的Nginx服务恢复,再将192.168.1.61的Nginx服务停用,测试高可用性。 


点击全文阅读


本文链接:http://zhangshiyu.com/post/76636.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1