七层负载均衡 —— Haproxy

Table of Contents

1. Haproxy

1.1 Haproxy定义

1.2 实验环境

1.3 Haproxy实现反向代理 + 负载均衡

1.3.1 安装haproxy

1.3.2 编辑配置文件 

1.3.3 测试

1.4 模块管理

1.4.1 页面管理 

1.4.2 访问权限控制 

1.4.3 配置日志

1.5 设置用户访问权限 

1.5.1 增加黑名单

1.5.2 重定向

1.6 Haproxy实现动态页面和静态页面分离

1.7 Haproxy实现读写分离 


四层负载均衡:lvs

七层负载均衡:nginx | haproxy | apache,将请求分发到具体应用的服务器上。例如:请求搜索,分发到搜索服务器。布置在应用服务器前

1. Haproxy

官方文档:https://www.haproxy.org/#docs

下载地址:https://www.haproxy.org/#down

1.1 Haproxy定义

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)HTTP(第七层)应用的代理软件。适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理

1.2 实验环境

node1:192.168.1.11  安装haproxy服务器

node2:192.168.1.12  

node3:192.168.1.13

1.3 Haproxy实现反向代理 + 负载均衡

1.3.1 安装haproxy

yum list haproxy                # 查找系统中是否含有haproxy安装包
yum install -y haproxy.x86_64   # 安装haproxy

rpm -qa | grep haproxy                  # 获得haproxy软件包的文件全名
rpm -ql haproxy-1.5.18-8.el7.x86_64     # 列出haproxy-1.5.18-8.el7.x86_64.rpm包安装的文件

1.3.2 编辑配置文件 

vim /etc/haproxy/haproxy.cfg
  • 全局设置

安装之后,系统会创建haproxy用户和用户组,在我们使用haproxy时使用该用户和用户组

  • 默认设置

  • 前端设置【判断请求类型或请求资源,然后分发给对应的后端集群组】

  • 后台设置

1.3.3 测试

  • 安装httpd【node2和node3均安装】
yum install -y httpd

  • 编辑默认发布页面【node2和node3均添加】
echo This is node2 page > /var/www/html/index.html

  • 开启httpd服务【node2和node3】
systemctl start httpd.service

  • 开启haproxy【node1】

  • 访问

没错,反向代理+负载均衡已经实现了。

那么除了这些默认的设置,我们能不能添加一些别的模块,来,我们试试~

1.4 模块管理

1.4.1 页面管理 

  • 编辑配置文件

在这里我们添加查看后端状态、 监控路径模块

  • 重启haproxy

  • 访问

但是这里我们要注意:服务器状态信息不能让所有人都可以访问,否则会泄漏信息,我们必须要设置只有管理员访问才可以保证安全性~

1.4.2 访问权限控制 

  • 编辑配置文件

  • 重启haproxy

  • 访问

可以看到,登录控制已经实现,且页面每5秒自动刷新一次

1.4.3 配置日志

vim /etc/rsyslog.conf       # 编辑系统日志
###
*.* 第一个*代表日志类型,第二个*代表日志级别
日志级别[由高到低]:
critical
error
warning
info
debug
###
  • 日志是UDP的,打开UDP 

  • 根据配置文件日志路径定义系统日志

  • 重启系统日志

1.5 设置用户访问权限 

1.5.1 增加黑名单

  • 编辑配置文件

  • 重启服务

  • 测试结果

192.168.1.250主机访问被拒绝,为了验证不是所有主机均无法访问,这里我们由192.168.1.13访问测试

正常访问~~

1.5.2 重定向

当访问出现403时,重定向到192.168.1.11:8080/index.html

  • 编辑haproxy配置文件

  • 安装Apache【node1】,并启用
yum install -y httpd
systemctl start httpd.service
  • 编辑默认发布页面 
echo 'This access is denied' > /var/www/html/index.html

  • 编辑Apache配置文件,修改端口
vim /etc/httpd/conf/httpd.conf           # 编辑配置文件
###
将端口修改为8080,因为80端口已经被Haproxy占用
###

image widget

  • 启动Apache,并重启haproxy

  • 访问

可以看到,当我们通过192.168.1.250访问192.168.1.11时,因为在黑名单的原因,403被拒绝,因此重定向到index.html页面

1.6 Haproxy实现动态页面和静态页面分离

  • 编辑配置页面

  • 重启haproxy

由于我们node3分发的是动态资源,这里我们需要安装php

  • 安装php【node3】,并编辑index.php

  • 测试 

默认访问的是node2 

php页面访问的是node3

上面完成的操作是不是有些眼熟,是的,上面的操作我们通过nginx也可以实现,我们访问nginx自己就可以了,为什么要使用Haproxy呢?Haproxy的优势在哪?

Haproxy可以实现读写分离,读从其中一台服务器读取,写则写入另一台服务器上。

1.7 Haproxy实现读写分离 

node2安装php,步骤就不赘余了

  • 编辑haproxy配置文件

这里我们配置node2读,node3写,默认访问node2

node2:

  • 给upload目录权限

能够让Haproxy有写的权限,完成上传操作

重启httpd

node3:

vim dsd2333.php
###
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 30000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>
###
  • 测试

上传

可以看到,上传成功,已经写入upload目录下。

可以看到,已经写到node3的upload目录下 

 

  

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值