企业 安装配置haproxy

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

安装

haproxy 的官网:https://www.haproxy.org/,需要新版本的话可以在这里下载,但是官网上的包都是源码包需要自行编译
在系统里也有自带的haproxy的安装包,不是最新版而已,也可以去使用
企业 安装配置haproxy_第1张图片
执行yum install 安装,查看一下安装出的文件

/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 配置测试

vim /etc/haproxy/haproxy.cfg ,编辑主配置文件
进入可以看到里面4个大块
global ,全局设定
defaults,默认设定
frontend,前端
backend ,后端

更改配置:
global 我们暂时不做更改

defaults 设定改为:
企业 安装配置haproxy_第3张图片

forntend 配置,要将前端的端口设为80,因为这是对外开放到,需要让用户访问到,
企业 安装配置haproxy_第4张图片

backend 后端的配置可以自行定义,这里是定义一个负载均衡服务器组,使用轮询的方式,配置两台服务器测试,这样就可以了
企业 安装配置haproxy_第5张图片

企业 安装配置haproxy_第6张图片
测试:
打开配置的两台服务器主机,并安装打开apache服务,开启80端口,主机配置火墙服务
在两天的主机的默认发布页面分别写入不同的内容方便区分
配置完成后访问测试,就实现了负载均衡
企业 安装配置haproxy_第7张图片

功能测试

这里了可以在defauls 配置里写一些参数,这写功能都是haproxy自带的

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

企业 安装配置haproxy_第8张图片
然后重启haproxy服务测试,使用浏览器访问“域名下的/admin/stats”页面
企业 安装配置haproxy_第9张图片
这里有我们后台服务器的状态信息,并且可以看到Total列显示的被访问次数
在这里插入图片描述
访问另一个功能 http://172.25.254.5/monitoruri,监控显示的200就是我们的页面是没有问题的
企业 安装配置haproxy_第10张图片

配置访问权限控制

这里我们配置监控、状态查询等功能目前看来对谁都是可见的,这就很不安全,会暴露我们的服务器信息,所以需要配置访问权限让只有内部人员可以看到这些信息
编辑主配置文件:

    stats auth              admin:redhat	#指定登录的用户和密码
    stats refresh           3s				#设置自动刷新时间

企业 安装配置haproxy_第11张图片
配置完重启服务,再去访问 http://172.25.254.5/admin/stats,发现需要输入用户名密码,输入进去后,自动的每3s刷新一次页面
企业 安装配置haproxy_第12张图片
这样我们就完成haproxy的反向代理和负载均衡的搭建和测试

日志重定向

对于haproxy的服务,我们可以重定向它的日志存放路径方便我们查看,因为在启动或重启服务时发现它如果配置文件出错也是不会报错的,需要手动查看状态才知道启动是否成功,如果失败去查看 /var/log/message s 也是比较麻烦的
在主配置文件里的global 设定里也是给了一个示例
在这里插入图片描述
这样可以去编辑 rsyslog 重定向日志: vim /etc/rsyslog.conf
在里面开启UDP功能
在这里插入图片描述
在 RULES 下写入日志路径,就是用主配置文件中给定的示例
在这里插入图片描述
重启 rsyslog 后,我们测试重启haproxy服务,就可以看到日志被记录在新定义的文件里
在这里插入图片描述
也可以使用 tail -f /var/log/haproxy.log 监控日志

访问黑名单配置

编辑主配置文件

    acl blacklist src 172.25.254.2		#设置黑名单里的主机
    bloack if blacklist		#读取黑名单

企业 安装配置haproxy_第13张图片
写完配置重启服务,使用172.25.254.2主机访问,访问错误被拒绝
在这里插入图片描述
使用其他主机去访问就没有问题
在这里插入图片描述
这里有一个需要说明的是,查看日志系统又给一个警告对block这个配置参数的说明,不推荐使用block ,推荐去使用 ‘http-request deny’
在这里插入图片描述
所以可以将参数改为

    acl blacklist src 172.25.254.2		
    http-request deny if blacklist		
错误页面重定向

如果用户访问页面时出现403这类的报错我们可以配置错误代码的页面重定向,可以配图片或详细说明,对用户有更好的体验
配置参数,编辑主配置文件

errorloc 403 http://172.25.254.5:8080/index.html	#遇到403报错时请求8080端口的index.html页面

企业 安装配置haproxy_第14张图片
这个8080端口可以去安装apache或nginx配置一个index.html页面

haproxy 7层负载均衡配置

编辑主配置文件

use_backend dynamic if { path_end .php } #如果访问页面时php结尾的类型,访问dynamic服务器组

backend dynamic		#定义服务器组
    balance     roundrobin
    server      web2 172.25.254.3:80 check

企业 安装配置haproxy_第15张图片

然后重启服务,这里我们定义的172.25.254.3为动态php的服务器,为了测试需要在该主机上安装php服务,并写一个php页面方便测试

[root@sever3 ~]# yum install -y php

[root@sever3 ~]# cat /var/www/html/index.php
<?php
phpinfo()
?>

配置完成重启httpd服务,访问测试php默认页面是成功的
企业 安装配置haproxy_第16张图片
php的配置没有问题后,我们访问haproxy主机
企业 安装配置haproxy_第17张图片
企业 安装配置haproxy_第18张图片
这样就完成了7层负载均衡的配置,动态请求和静态请求分离处理

haproxy 中配置读写分离

读写分离是haproxy中的独特功能
为何要配置读写分离,因为对于不同的服务器配置,可以读速度快的服务器和写入快的服务器分开使用,这样对服务器的性能最大化使用

配置测试文件:
首先在后端服务器server4和server3的apache默认发布目录中写入两个php页面和一个upload目录,并都要安装php,为了使haproxy主机用户对upload目录可写,需要更改文件权限为777
在这里插入图片描述
在这里插入图片描述
index.php 作为读取使用的页面,upload_file.php 作为上传操作的页面
php页面的内容如下:

[root@sever3 html]# cat 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>
[root@sever3 html]# cat 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>
[root@sever3 html]# cat upload_file.php 
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000000))
  {
  if ($_FILES["file"]["error"] > 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"; } ?>

编辑haproxy主配置文件
配置读和写的方式:

    acl read method HEAD
    acl read method GET
    acl write method POST
    acl write method PUT

企业 安装配置haproxy_第19张图片
配置读写的访问:

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

企业 安装配置haproxy_第20张图片
重启haproxy服务

测试
访问172.25.254.5/index.php,这是读的访问,是在sever3服务端上
企业 安装配置haproxy_第21张图片
点击 “Browse” 上传一个文件测试
企业 安装配置haproxy_第22张图片
这里我上传了一张图片,点击 “Submit” 提交,得到一个反馈页面
企业 安装配置haproxy_第23张图片
这时我们去在接受上传的主机上查看到刚才上传的图片

你可能感兴趣的:(企业环境运维操作)