HAProxy负载均衡——搭建HAProxy负载均衡、 添加日志、动静分离、页面重定向、读写分离

实验环境

主机名IP服务
server1172.25.1.1haproxy+httpd,代理服务器
server2172.25.1.2httpd+php,后端服务器
server3172.25.1.3httpd+php,后端服务器
物理机172.25.1.250客户端,测试

一、搭建HAProxy负载均衡

在server1上

步骤一:安装haproxy

yum install haproxy -y

在这里插入图片描述
步骤二:更改配置文件,添加负载均衡信息及监控页面信息
(1)方式一:

vim /etc/haproxy/haproxy.cfg

 63 frontend  main
 64     bind     *:80
 65     default_backend             webserver
 
 70 backend webserver
 71     balance     roundrobin
 72     server      web1 172.25.1.2:80 check
 73     server      web1 172.25.1.3:80 check

在这里插入图片描述
(2)方式二:listen:可以理解为frontend和backend的组合体

 listen admin *:8080
       stats enable
       stats uri /status  		# 监控页面地址
       stats auth admin:westos  # 管理帐号和密码
       stats refresh 5s  		#刷新频率
       
listen  webserver *:80      		#监听的实例名称,地址和端口 
        balance roundrobin      #负载均衡算法
        server web1 172.25.1.2:80 check
        server web2 172.25.1.3:80 check

步骤三:开启haproxy

systemctl start haproxy
systemctl status haproxy
netstat -antuple

在这里插入图片描述
在这里插入图片描述
在server2上
步骤一:安装httpd服务

yum install httpd -y

在这里插入图片描述
步骤二:编写默认发布页面,并开启httpd服务

vim /var/www/html/index.html
<h1>server2's page</h1>

systemctl start httpd
systemctl status httpd

在这里插入图片描述
在server3上
步骤一:安装httpd服务

yum install httpd -y

在这里插入图片描述
步骤二:编写默认发布页面,并开启httpd服务

vim /var/www/html/index.html
<h1>server3's page</h1>

systemctl start httpd
systemctl status httpd

在这里插入图片描述
在物理机上测试
在这里插入图片描述
此时,可以看出实现了负载均衡

打开浏览器搜索http://172.25.1.1:8080/status
在这里插入图片描述在这里插入图片描述
模拟server3故障

systemctl stop httpd

在这里插入图片描述
在物理机上访问测试
在这里插入图片描述浏览器上查看集群节点状态:
在这里插入图片描述server3故障恢复
在这里插入图片描述浏览器上查看集群节点状态:web2恢复正常
在这里插入图片描述

二、给haproxy服务器添加日志

在server1上
步骤一:查看haproxy日志类型

vim /etc/haproxy/haproxy.cfg

在这里插入图片描述
步骤二:更改日志监控的配置文件,打开UDP接口,创建haproxy的日志文件

vim /etc/rsyslog.conf
 15 $ModLoad imudp
 16 $UDPServerRun 514
 55 local2.*                                             /var/log/haproxy.log

在这里插入图片描述
在这里插入图片描述
步骤三:重启haproxy和rsyslog服务,并查看日志

systemctl restart haproxy
systemctl restart rsyslog
cat /var/log/haproxy.log  #查看日志

在这里插入图片描述

三、动态静态请求分离

在server1上
步骤一:更改配置文件,添加访问控制策略

frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理

vim /etc/haproxy/haproxy.cfg

frontend  main *:80
    acl url_static       path_beg       -i  /images    #path_beg: 用于测试请求的URL是否以指定的模式开头
    acl url_static       path_end       -i .jpg .gif .png    #path_end:用于测试请求的URL是否以指定的模式结尾 

    use_backend static   if url_static   #满足上面条件,则为静态请求
    default_backend             webserver   #默认动态

backend static   #静态请求
       server web2 172.25.1.3:80 check

backend webserver  #动态请求
    server web1 172.25.1.2:80 check
    server local 172.25.1.1:8000 backup  #做本机8000端口的一个备错信息,若所有机器都down则启动

 listen admin *:8080
       stats enable
       stats uri /status
       stats auth admin:westos
       stats refresh 5s

在这里插入图片描述
步骤二:重启haproxy服务

systemctl restart haproxy

在这里插入图片描述
在server3上
在httpd默认发布目录下新建images目录,上传一张.jpg的图片。

mkdir /var/www/html/images

在这里插入图片描述
在server1上
步骤一:安装httpd服务

yum install -y httpd

在这里插入图片描述
步骤二:更改httpd服务的工作端口为8000,添加web服务的资源

vim /etc/httpd/conf/httpd.conf 
 42 Listen 8000
 
vim /var/www/html/index.html
<h1>server1's page</h1>

systemctl start httpd
netstat -antuple

在这里插入图片描述在这里插入图片描述
在真机上测试
打开浏览器搜索http://172.25.1.1/images/
在这里插入图片描述
在这里插入图片描述
访问到server3服务器上的资源

直接搜索http://172.25.1.1/
在这里插入图片描述
此时,访问到server2服务器上的资源

模拟server2和server3故障
在server2上:

systemctl stop httpd

在这里插入图片描述
在server3上:

systemctl stop httpd

在这里插入图片描述
在真机上测试
刷新页面
在这里插入图片描述
此时server1上线,故障顶替

四、访问控制和页面重定向

1、403错误页面重定向

在server1上
步骤一:更改配置文件,添加重定向规则

vim /etc/haproxy/haproxy.cfg

frontend  main *:80
    acl url_static       path_beg       -i  /images
    acl url_static       path_end       -i .jpg .gif .png
    acl badhost  src  172.25.1.250   #黑名单,设定物理机不能访问server1
    block if badhost
    errorloc 403 http://172.25.1.1:8000    #注意端口不要冲突,如果是403错误就重定向到 172.25.1.18000
    use_backend static   if url_static
    default_backend             webserver

backend static
       server web2 172.25.1.3:80 check

backend webserver
    server web1 172.25.1.2:80 check
    
 listen admin *:8080
       stats enable
       stats uri /status
       stats auth admin:westos
       stats refresh 5s

在这里插入图片描述
步骤二:修改默认发布页面内容

vim /var/www/html/index.html 
sorry!!!

在这里插入图片描述
在真机上测试
在这里插入图片描述打开server2和server3httpd服务
在这里插入图片描述在这里插入图片描述在真机上测试
刷新页面
在这里插入图片描述

2、黑名单重定向

步骤一:更改配置文件,修改访问控制策略

vim /etc/haproxy/haproxy.cfg

frontend  main *:80
    acl url_static       path_beg       -i  /images
    acl url_static       path_end       -i .jpg .gif .png
    acl badhost  src  172.25.1.250
    redirect location http://172.25.1.1:8000 if badhost  #如果badhost主机访问,就重定向
    use_backend static   if url_static
    default_backend             webserver

在这里插入图片描述
步骤二:重启haproxy服务

systemctl restart haproxy

在这里插入图片描述
在真机上测试
在这里插入图片描述

3、301永久重定向

301 代表永久性转移(Permanently Moved);302 redirect: 302 代表暂时性转移(Temporarily Moved )

301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

在server1上

vim /etc/haproxy/haproxy.cfg
frontend  xiyou *:80
    acl westos.org  hdr_beg(host) -i westos.org
    acl 172.25.1.1  hdr_beg(host) -i 172.25.1.1
    redirect code 301 location http://www.westos.org if westos.org #以westos.org访问 自动重定向 www.westos.org)
    redirect code 301 location http://www.westos.org if 172.25.1.1  #以172.25.7.1访问 自动重定向 www.westos.org)  

在这里插入图片描述
步骤二:重启haproxy服务

systemctl restart haproxy

在这里插入图片描述
在物理机测试
浏览器搜索:http://172.25.1.1
在这里插入图片描述
自动跳转:

在这里插入图片描述浏览器搜索:www.org
在这里插入图片描述

自动跳转:

在这里插入图片描述

五、Haproxy的读写分离

在server2上
步骤一:下载php

yum install php -y

在这里插入图片描述
步骤二:在网上下载upload目录,里面含php文件写好了用户上传页面及上传的文件所在地,将文件和目录放到默认发布目录下。

mv upload /var/www/html/
cd /var/www/html/
mv upload/* .

在这里插入图片描述
附:index.php文件内容

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

附:upload_file.php文件内容

 <?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  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目录权限,并重启httpd服务

chmod 777 upload
systemctl restart httpd

在这里插入图片描述在这里插入图片描述
在server3上
步骤一:下载php

yum install php -y

在这里插入图片描述
步骤二:在网上下载upload目录,里面含php文件写好了用户上传页面及上传的文件所在地,将文件和目录放到默认发布目录下。

mv upload /var/www/html/
cd /var/www/html/
mv upload/* .

在这里插入图片描述
步骤三:给upload目录权限,并重启httpd服务

chmod 777 upload
systemctl restart httpd

在这里插入图片描述在这里插入图片描述
在server1上
步骤一:修改配置文件,添加访问策略

vim /etc/haproxy/haproxy.cfg

    acl read method GET
    acl read method HEAD     #两个read write 只用一个就行
    acl write method PUT
    acl write method POST
    use_backend   webserver    if write
    default_backend  static
    
backend static
       server web2 172.25.1.3:80 check

backend webserver
    server web1 172.25.1.2:80 check  #默认会上传到这个real server
    server local 172.25.1.1:8000 backup

在这里插入图片描述
步骤二:重启haproxy

systemctl restart haproxy

在这里插入图片描述在真机上测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在server2上查看
在这里插入图片描述
发现文件提交到server2的upload目录中
在server3上查看
在这里插入图片描述
并没有提交的文件

至此,实现了haproxy读写分离

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值