文章目录
1.Haproxy的介绍与安装
1.1 Haproxy的介绍
1.2 Haproxy的安装
实验环境:
server:192.168.43.11 提供haproxy
server2:192.168.43.20 后端1
server3:192.168.43.30 后端2
rhel7:用户端
yum install haproxy.x86_64 -y
注意:启动haproxy后需要查看日志是否有报错
在server2与server3中安装httpd
2.Haproxy的功能实现
2.1 Haproxy的负载均衡
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
frontend main *:80
default_backend static
backend static
balance roundrobin
server web1 192.168.43.20:80 check
server web2 192.168.43.30:80 check
systemctl restart haproxy.service
测试
2.2 Haproxy查看后端服务器的状态
vim /etc/haproxy/haproxy.cfg
systemctl restart haproxy.service
defaults
mode http
log global
option httplog
option dontlognull
retries 3
timeout connect 5s
timeout client 1m
timeout server 1m
maxconn 3000
stats uri /admin/stats##查看后端服务器状态
monitor-uri /monitoruri##监控页面
status auth admin:123##设置查看权限(用户:密码)
status refresh 5s##自动更新时间间隔
测试:
http://192.168.43.11/admin/stats
http://192.168.43.11/monitoruri
2.3 Haproxy的日志配置
vim /etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#### RULES ####
local2.* /var/log/haproxy.log
systemctl restart rsyslog.service
2.4 Haproxy的访问控制
vim /etc/haproxy/haproxy.cfg
frontend main *:80
acl blacklist src 192.168.43.100 ##设置访问黑名单
http-request deny if blacklist ##黑名单请求拒绝
errorloc 403 http://192.168.43.11:8080/index.html##对黑名单设置访问报错页面
default_backend static
yum install -y httpd
在server中安装httpd
vim /etc/httpd/conf/httpd.conf
修改httpd的端口
Listen 8080
systemctl restart httpd
systemctl restart haproxy.service
测试:
指定黑名单访问:
其他用户访问:
2.5 Haproxy的请求精确定位(动静分离)
vim /etc/haproxy/haproxy.cfg
frontend main *:80
default_backend static
use_backend dynamic if { path_end .php } ##访问以.php结尾访问动态数据后端
backend static ##静态数据后端
balance roundrobin
server web1 192.168.43.20:80 check
backend dynamic ##动态数据后端
balance roundrobin
server web2 192.168.43.30:80 check
systemctl restart haproxy.service
在server3中:
yum install -y php
在server3中安装php
vim /var/www/html/index.php
设置php发布页面
<?php
phpinfo()
?>
systemctl restart httpd.service
重启服务
测试:
2.6 Haproxy的读写分离
在server2中
yum install -y php
vim /var/www/html/index.php
读的php页面
mkdir /var/www/html/upload
建立用户写的目录
chmod 777 /var/www/html/upload
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename(server2):</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
vim /var/www/html/upload_file.php
写的php页面
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000000000000000))
{
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";
}
?>
systemctl restart httpd.service
在server3中
yum install -y php
vim /var/www/html/index.php
读的php页面
vim /var/www/html/upload_file.php
写的php页面
systemctl restart httpd.service
mkdir /var/www/html/upload
建立用户写的目录
chmod 777 /var/www/html/upload
在server中
``
backend static
balance roundrobin
server web1 192.168.43.20:80 check
backend dynamic
balance roundrobin
server web2 192.168.43.30:80 check
``
测试
总结:用户读的内容为server2中的内容,写的内容为server3.