Linux--使用 Haproxy搭建Web群集

1、 案例概述

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

2、负载均衡常用调度算法

LVS、Haproxy、Nginx 最常用的调度算法有三种,如下所述。

(1)RR (Round Robin)。RR算法是最简单最常用的一种算法,即轮询调度。

(2) LC (Least Connections)。LC算法即最小连接數算法,根据后端的节点连接数大小动态分配前端请求。

(3) SH (Source Hashing)。SH即基于来源访问调度算法,此算法用于一些有 Session会话记录在 服务器端的场景,可以基于来源的IP、Cookie等做群集调度。

部署配置实验

实验环境

虚拟机 3台 centos7.3

网卡NAT模式 数量 1

组件包Haproxy nginx(httpd)

|----------|-----------------|-------------|
| 设备 | IP | 备注 |
| Centos01 | 192.168.161.102 | Node02 |
| Centos02 | 192.168.161.104 | Web1 node04 |
| Centos03 | 192.168.161.105 | Web2 node05 |

初始配置

关闭防火墙

复制代码
Systemctl disable firewalld --now

关闭Selinux

复制代码
setenforce 0

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

配置IP DNS 网关

复制代码
nmtui

编译安装 Haproxy

将haproxy安装包上传至node02

安装组件 node02配置

复制代码
[root@node02 ~]# yum -y install pcre-devel bzip2-devel gcc gcc-c++ make

解压安装包

复制代码
[root@node02 ~]# tar zxf haproxy-1.5.19.tar.gz

[root@node02 ~]# cd haproxy-1.5.19

[root@node02 haproxy-1.5.19]# make TARGET=linux26 && make install

创建主配置文件

复制代码
[root@node02 haproxy-1.5.19]# mkdir /etc/haproxy

[root@node02 haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

添加群集web配置信息

复制代码
[root@node02 ~]# vim /etc/haproxy/haproxy.cfg 

listen  web 0.0.0.0:80
        option  httpchk GET /index.html
        balance roundrobin
        server  inst1 192.168.161.104:80 check inter 2000 fall 3
        server  inst2 192.168.161.105:80 check inter 2000 fall 3

创建群集根目录

复制代码
[root@node02 ~]# mkdir /usr/share/haproxy

添加haproxy系统服务

复制代码
[root@node02 ~]# cd haproxy-1.5.19/
[root@node02 haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy

[root@node02 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@node02 ~]# chmod +x /etc/init.d/haproxy 
[root@node02 ~]# chkconfig --add haproxy

启动服务

复制代码
[root@node02 ~]# systemctl start haproxy

Nginx 节点配置

将nginx安装包上传至web1和web2

安装组件

复制代码
[root@node04 ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make

创建nginx用户

复制代码
[root@node04 ~]# useradd -M -s /sbin/nologin nginx

解压文件

复制代码
[root@node04 ~]# tar zxf nginx-1.24.0.tar.gz 

执行编译安装

复制代码
[root@node04 ~]# cd nginx-1.24.0/


[root@node04 nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

[root@node04 nginx-1.24.0]# make && make install

创建主程序链接文件

复制代码
[root@node04 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

添加测试页面web1 和 web2 对应自身IP地址

复制代码
[root@node04 ~]# echo "Server 192.168.161.104" > /usr/local/nginx/html/test.html

启动Nginx

复制代码
[root@node04 html]# /usr/local/nginx/sbin/nginx 

验证测试

访问 web1 http://192.168.161.104/test.html

访问 web2 http://192.168.161.105/test.html

测试Web群集

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

1)测试高性能

在客户端使用浏览器打开http://192.168.161.102/test.html、浏览器显示信息如图中所示。

再次打开一个新的浏览器页面访问http://192.168.161.102/test.html,浏览器显示信息如图中所示。

可以看到群集的负载均衡调度已经生效,已经满足了群集的高性能需求。

配置Haproxy 独立日志,为了便于管理

Node02 配置

复制代码
[root@node02 ~]# vim /etc/rsyslog.d/haproxy.conf


if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~

创建日志目录

复制代码
[root@node02 ~]# mkdir /var/log/haproxy

重新启动服务

复制代码
[root@node02 ~]# systemctl restart haproxy.service 
[root@node02 ~]# systemctl restart rsyslog.service

测试日志信息

在客户端访问http://192.168.161.102/test.html后,可以使用 tail -f /var/log/haproxy/haproxy-info.log即时查看 Haproxy的访问请求日志信息。

复制代码
[root@node02 ~]# tail -f /var/log/haproxy/haproxy-info.log 
相关推荐
爬树的小蚂蚁40 分钟前
Linux 修改bond后网关不生效的问题
linux·运维·服务器
洁洁!42 分钟前
从零开始在亚马逊云科技 EC2上部署DeepSeek R1大语言模型:完整实战指南
服务器·科技·语言模型
lisw053 小时前
网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
网络·devops
风行無痕4 小时前
Ubuntu Linux系统配置账号无密码sudo
linux·服务器·ubuntu
驱动小百科5 小时前
WiFi出现感叹号上不了网怎么办 轻松恢复网络
网络·智能路由器·wifi出现感叹号怎么解决·wifi无法上网·电脑wifi
好多知识都想学5 小时前
协议路由与路由协议
网络·智能路由器
爆农5 小时前
centos搭建dokcer和vulhub
linux·运维·centos
SZ1701102315 小时前
中继器的作用
服务器·网络·智能路由器
chenxy025 小时前
如何快速分享服务器上的文件
运维·服务器
重启就好6 小时前
【Ansible】模块详解
linux·服务器·ansible