HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离

1.什么是haproxy?

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理,HAProxy运行在当前的硬件上完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上

2.haproxy的功能

HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性环境
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP报文首部
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息

3.haproxy功能实现的实验

实验环境:
三台虚拟机和一台物理机
虚拟机server1(172.25.254.1)配置haproxy,httpd,做代理服务器
虚拟机server2(172.25.254.2)配置httpd,php,后端服务器
虚拟机server3(172.25.254.3)配置httpd,php,后端服务器
物理机(172.25.254.250)做测试
搭建haproxy服务器
在server1上搭建haproxy服务器
安装haproxy
在系统里有自带的haproxy的安装包,可以安装来使用
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第1张图片
查看安装后生成的文件

/etc/haproxy/haproxy.cfg	##主配置文件
/etc/logrotate.d/haproxy	##配置文件
/etc/sysconfig/haproxy		##配置文件
/usr/lib/systemd/system/haproxy.service		##启动脚本
/usr/sbin/haproxy	##命令

HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第2张图片
安装haproxy时会建立一个haproxy的用户
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第3张图片

haproxy实现负载均衡

(1)在server1上配置
配置haproxy,让haproxy负载均衡服务器去轮询两个后端服务器
编辑主配置文件:vim /etc/haproxy/haproxy.cfg
文件里有4个语句块
global ,全局设定
defaults,默认设定
frontend,前端
backend ,后端
在这里插入图片描述
defaults 设定改为下图:
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第4张图片
forntend 配置,因为这是对外开放,让用户可以访问,所以端口设为80
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第5张图片
backend 后端配置:定义一个负载均衡服务器组,使用轮询的模式循环,配置两台服务器测试
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第6张图片
思想:
前端判断你请求的资源是什么,然后把你的请求分配到相应的后端服务器群组里去
(2)在server2和server3上分别配置
安装httpd服务
在这里插入图片描述
编写测试页,开启httpd服务,并且检测
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第7张图片
在这里插入图片描述
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第8张图片
(3)配置完成后,开启haproxy服务
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第9张图片
(4)测试
在物理机上测试,可以看到通过haproxy实现了负载均衡,轮询访问两个后端web
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第10张图片
haproxy自带的功能测试实验
在主配置文件的defauls 语句块里加一些参数

stats uri              /admin/stats	##状态查询功能
monitor-uri            /monitoruri	##监视器功能

HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第11张图片
重启haproxy服务测试
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第12张图片
使用浏览器访问“172.25.254.1/admin/stats”页面,可以看到服务端服务器web1,web2状态都是up
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第13张图片后台服务器的状态信息,可以看到Total列显示的被访问次数
在这里插入图片描述
访问 http://172.25.254.5/monitoruri,监控显示状态码200说明我们的页面没有问题
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第14张图片
后台页面只有内部人员才能进来
设置加密访问

stats auth              admin:redhat	#指定登录的用户和密码
stats refresh           5s				#设置自动刷新时间,每5秒刷新一次

HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第15张图片
配置成功后重启haproxy服务
浏览器上访问 http://172.25.254.1/admin/stats时,需要输入用户名和密码
监控页面自动的每5s刷新一次

在这里插入图片描述
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第16张图片
在这里插入图片描述

配置haproxy服务日志

(1)查看日志格式(主配置文件中有个模板)
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第17张图片
(2)编辑系统日志服务的配置文件,打开UDP接口,创建haproxy的日志文件,重启服务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)使用 tail -f /var/log/haproxy.log 监控日志
在这里插入图片描述

设置访问控制(类似黑白名单)

(1)在haproxy主配置文件设置拒绝物理机访问haproxy服务器,重启服务
在这里插入图片描述
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第18张图片
(2)测试
物理机去访问出现403报错,其他主机可以访问
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第19张图片
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第20张图片
说明:
在查看日志时,系统有一个警告:对block这个配置参数不建议使用,建议使用 ‘http-request deny’,block参数对于后续版本可能会失效

在这里插入图片描述
在这里插入图片描述
对于服务器页面出现403报错,对于用户会很不友好,所以做一个错误页面重定向
(1)如果后端服务器都出现问题,就让客户端访问自己的http页面
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第21张图片
(2)安装apache
在这里插入图片描述
(3)编辑重定向页面
修改httpd端口,因为haproxy已经使用了80端口
重启服务
在这里插入图片描述
在这里插入图片描述
(4)测试:客户端输入172.25.254.1自动跳转到172.25.354.1:8080/index.html上
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第22张图片

haproxy配置动静分离

(1)编辑配置文件
如果客户端访问的是以php结尾的动态页面就去找server3,静态页面找server2
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第23张图片
(2)重启haproxy服务
在这里插入图片描述
(3)配置server3
在server3主机上安装php服务
写一个php页面方便测试
重启httpd服务,将php插件加载进去
在这里插入图片描述
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第24张图片
(4)测试
客户访问动态资源就去找server3
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第25张图片
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第26张图片
客户访问静态资源就去找server2
在这里插入图片描述

haproxy配置读写分离

配置读写分离:对于不同的服务器配置,可以读速度快的服务器和写入快的服务器分开使用(一台服务器磁盘配置的比较好,写就在这台服务器上;另外一台磁盘配置的不是那么好,但cpu好一点、内存大一点,读就在这台服务器上)

配置测试文件:
(1)从物理机上给server2和server3传一个测试目录
在后端服务器server2和server3的apache默认发布目录中写入两个php页面和一个upload目录
server2和server3都要安装php
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第27张图片
在这里插入图片描述
在这里插入图片描述
为了使haproxy主机用户对upload目录可写,需要更改文件权限为777
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第28张图片
index.php 作为读取使用的页面,upload_file.php 作为上传操作的页面
index.php 页面代码




##辨别读是在server2主机上

upload_file.php页面代码

 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "
"; } else { echo "Upload: " . $_FILES["file"]["name"] . "
"; echo "Type: " . $_FILES["file"]["type"] . "
"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
"; 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"; } ?>

(2)在server2和server3上分别配置
为了效果明显,添加访问服务器的名称
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第29张图片
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第30张图片
(3)配置server1
如果写就写在server3上,读就在server2上

use_backend dynamic if write  ##写访问dynamic服务器组  
use_backend static if read 	##读访问static服务器组

HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第31张图片
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第32张图片
(4)测试
客户端上传图片
访问172.25.254.1/index.php
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第33张图片
点击 “Browse” 上传一张图片,点击 “Submit” 提交,得到一个反馈页面
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第34张图片
在接受上传的主机上查看
发现上传到了server3上,server2上没有

在这里插入图片描述
在这里插入图片描述
访问172.25.254.1/index.php,这是读的访问,是在sever2服务器上
HAProxy实现负载均衡、配置日志、访问控制、动静分离、读写分离_第35张图片

你可能感兴趣的:(linux,负载均衡,运维)