Haproxy

Haproxy

haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。
事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

图解:
Haproxy_第1张图片
本篇博客中涉及的所有软件包下载可参考此博客:https://blog.csdn.net/qq657886445/article/details/83662696

haproxy配置

server1
rpmbuild -tb haproxy-1.4.24.tar.gz #需安装 rpm-build 和 pcre-devel
Haproxy_第2张图片
rpm -qpl haproxy-1.4.24-1.x86_64.rpm --scripts #查看rpm包隐藏的脚本
Haproxy_第3张图片
rpm -ivh haproxy-1.4.24-1.x86_64.rpm
在这里插入图片描述

groupadd -g 200 haproxy
useradd -g 200 -u 200 -M haproxy
vim /etc/security/limits.conf
最后一行添加
haproxy         -       nofile          65535

Haproxy_第4张图片

tar zxf haproxy-1.4.24.tar.gz
cp haproxy-1.4.24/examples/content-sw-sample.cfg  /etc/haproxy/haproxy.cfg
vim /etc/haproxy/haproxy.cfg     #修改配置文件

Haproxy_第5张图片
/etc/init.d/haproxy start #开启服务

物理机测试
浏览器访问172.25.254.1 访问轮询
Haproxy_第6张图片

172.25.254.1/status        #haproxy 监控页面
172.25.254.1/monitoruri   #若返回200 OK 则表示正常

Haproxy_第7张图片

创建指定日志文件
vim /etc/rsyslog.conf
取消注释,使UDP端口接收生效.
在这里插入图片描述
添加日志并指定日志保存路径,local0.none表示在/var/log/messages下不保存
Haproxy_第8张图片
acl权限列表
1)建立acl黑名单,指定ip,更改配置文件
Haproxy_第9张图片
/etc/init.d/haproxy restart #重启服务
测试查看:提示403错误
Haproxy_第10张图片
2)错误重定向
修改haproxy配置文件将错误重定向到本机的apache服务
为避免与haproxy服务端口发生冲突,将apache端口改为8080
Haproxy_第11张图片
Haproxy_第12张图片
重启服务
Haproxy_第13张图片
测试:
Haproxy_第14张图片
3)指定ip重定向
修改haproxy配置文件并重启服务
Haproxy_第15张图片
测试:
Haproxy_第16张图片

动静分离
server1:
修改配置文件/etc/haproxy/haproxy.cfg,并重启服务
Haproxy_第17张图片
server2:
写一个简单的.php文件
Haproxy_第18张图片

测试:
访问Server1 ip 默认访问server3页面
Haproxy_第19张图片
访问server1 ip/index.php 访问server2页面 # server2安装php并重启apache
Haproxy_第20张图片
读写分离
Server1:
修改配置文件/etc/haproxy/haproxy.cfg,如果有写入操作,访问动态主机server3,并重启服务
Haproxy_第21张图片

Sever2:

cd  /var/www/html/
mkdir upload
# 编写php页面
vim index.php




vim 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"; } ?> scp -r /var/www/html/* server3:/var/www/html/

Haproxy_第22张图片

Server3:
安装php并重启httpd
Haproxy_第23张图片
测试:
访问server1 ip/index.php
Haproxy_第24张图片
上传一个图片
Haproxy_第25张图片
server2实现写 图片实际保存在server2上 读的时候访问的是server3;server2查看可以看到图片保存在server2上
实现了读写分离
Haproxy_第26张图片

你可能感兴趣的:(Haproxy)