Linux之Haproxy的部署(负载均衡、动静分离和读写分离等)

一、Haproxy

1. Haproxy的介绍

Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

2. Haproxy配置文件中各模块的含义

  • global参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改;
  • defaults段用于为所有其它配置段提供默认参数;
  • frontend段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接;
  • backend段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器;
  • listen段通过同时指定监听参数与后端服务器简要的定义了一个完整的代理

二、Haproxy的负载均衡

实验准备

  • server1:172.25.65.1(haproxy)
  • server2:172.25.65.2(httpd)
  • server3:172.25.65.3(httpd)
  • 测试机用于测试

1. yum安装软件

yum install -y haproxy

2. 编辑配置文件设置负载均衡策略(server1)

vim /etc/haproxy/haproxy.cfg
frontend  main
    bind     *:80
    default_backend             webserver
backend webserver
    balance     roundrobin
    server      web1 172.25.65.2:80 check
    server      web2 172.25.65.3:80 check
systemctl start haproxy.service
systemctl status haproxy.service

3. server2和server3中同时操作

安装httpd,编写默认发布文件index.html,由于步骤都是一样的,这里以server2为例

yum install -y httpd
vim /var/www/html/index.html
server2
vim /var/www/html/index.html
server3
systemctl start httpd

 4. 测试机进行测试,观察是否是轮询策略

curl 172.25.65.1

三、设置haproxy日志

server1中编辑日志文件,开启端口,设置日志采集策略

vim /etc/rsyslog.conf
$ModLoad imudp        #使用udp模式
$UDPServerRun 514
local2.*                       /var/log/haproxy.log
systemctl restart rsyslog.service

测试机进行页面的请求(curl 172.25.65.1),观察日志信息存储文件中是否有请求信息

curl 172.25.65.1

四、haproxy状态码的设置

server1中设置haproxy的状态码参数

vim /etc/haproxy/haproxy.cfg
stats uri           /admin/stats        #haproxy和后端服务器的状态
monitor-uri         /monitoruri         #返回状态码
systemctl restart haproxy.service

注意状态信息应该写在defaults模块中,如果在全局变量的模块中,服务会开启失败,开启时不会报错,但是查看haproxy的状态则是inactive

 测试机进行测试

在浏览器中输入网址进行查看

http://172.25.65.1/admin/stats
http://172.25.65.1/monitoruri

 

五、haproxy的认证及刷新时间设置

vim /etc/haproxy/haproxy.cfg
stats auth          admin:westos    #haproxy用户及密码
stats refresh       5s              #刷新时间
systemctl restart haproxy.service

测试机进行测试

在浏览器中输入网址

http://172.25.65.1/admin/stats

六、haproxy的acl名单设置

在server1中进行acl名单的设置

vim /etc/haproxy/haproxy.cfg
acl blacklist src 172.25.65.250
http-request deny if blacklist
errorloc 403 http://172.25.65.1:8080/index.html
systemctl restart haproxy

安装httpd,编写默认发布文件index.html

yum install -y httpd
vim /var/www/html/index.html
页面走丢了
vim /etc/httpd/conf/httpd.conf    #修改端口
Listen 8080
systemctl start httpd

 使用主机172.25.65.250进行测试,测试结果为该主机禁止访问该状态信息页面,页面重定向为server1中httpd下的默认发布页面

http://172.25.65.1/admin/stats

七、haproxy的动静分离

server1中操作

将之前的名单设置修改(acl blacklist src 172.25.65.250),只需要将ip改为其他的

vim /etc/haproxy/haproxy.cfg
acl blacklist src 172.25.65.100
use_backend dynamic if { path_end .php }
default_backend             static
backend dynamic
    balance     roundrobin
    server      web1 172.25.65.2:80 check
backend static
    balance     roundrobin
    server      web2 172.25.65.3:80 check
systemctl restart haproxy.service

 server2

yum install -y php
vim /var/www/html/index.php
<?php
phpinfo()
?>
systemctl restart httpd

server3

vim /var/www/html/index.php
this is server3
systemctl restart httpd

测试机进行测试

http://172.25.65.1/index.php    #访问server2动态页面
http://172.25.65.1              #访问server3静态页面

访问动态页面

访问静态页面

八、haproxy的读写分离

server1中进行设置

vim /etc/haproxy/haproxy.cfg
acl read method HEAD
acl read method GET
acl write method POST
acl write method PUT

use_backend dynamic if write
use_backend static if read
default_backend             static
systemctl restart haproxy.service

server2和server3中同时操作

其中upload中的文件是用来测试读写分离的

cd /var/www/html
chmod 777 upload
rm -fr index.php
mv upload/* /var/www/html

 下载之前写好的测试页面,添加权限后,对index.php文件中的文件名进行修改,以便于区分,在upload_file.php中将最大文件大小调大,设置步骤一致,这里以server2为例

测试机中进行测试

http://172.25.31.1/index.php    #读server3的页面

通过访问,我们看到的server3中的页面(读),上传文件后,是server2(写操作),可以再server2中的/var/www/html/upload中看到上传的图片,提交后的页面链接变为 http://172.25.31.1/upload_file.php

我们通过server3进行读,上传文件属于写过程,则上传的文件会出现在server2中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值