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 
相关推荐
大耳朵-小飞象3 分钟前
智能调光4巨头争霸!轨道照明如何破局?
运维·智慧城市·智慧路灯·智能照明·楼宇智控·0-10v调光模块
CHENKONG_CK4 分钟前
晨控CK-FR102ANS-EIP与基恩士KVX520系列PLC配置EtherNet/IP通讯连接手册
网络
sanzk8 分钟前
firefly开发板ubuntu安装ros2下的micro-ROS Agent
linux·运维·ubuntu
草根站起来1 小时前
“双算法SSL证书”伪方案、国产SSL证书营销话术与等保绑定乱象批判
网络·网络协议·ssl
努力进修2 小时前
Docker+cpolar 实战:打造灵活可控的远程办公系统
运维·docker·容器
Bobolink_2 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
其实防守也摸鱼2 小时前
运维--怎么看接口的请求和返回
运维·学习·网络安全·网络攻击模型·burpsuite·攻防对抗·蓝队
humors2212 小时前
【分享】火绒恶意网址自定义规则,根据互联网应急中心部分威胁预警恶意代码制作
网络·安全·规则·火绒安全·恶意网址·应急中心
weixin_307779133 小时前
Linux下Nginx故障系统化检查Shell脚本
linux·运维·服务器·nginx·自动化
广州灵眸科技有限公司3 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能