HAproxy七层负载均衡部署、权限控制、添加程序日志、设置黑名单、动静分离、读写分离

一、HAproxy介绍
HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket[3]、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和Tuenti[7]在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
haproxy的优点
(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。
(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。
(3)haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
(4)haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
(5)haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。
(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。
haproxy的功能
HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性环境
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP报文首部
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息
7层负载平衡:
7层负载平衡是更复杂的负载均衡网络流量的方法是使用第7层(应用层)负载均衡。使用第7层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载平衡模式允许您在同一域和端口下运行多个Web应用程序服务器。
二、HAproxy部署
实验环境

主机信息	                 主机的功能(服务)
server1(172.25.254.1)	  haproxy服务
server2(172.25.254.2)	  后端web服务器
server2(172.25.254.3)    后端web服务器
真机(172.25.254.66)   	  用作客户端测试

在这里插入图片描述
也可以去官网下载

https://www.haproxy.org/#down

[root@server1 ~]# id haproxy  安装完成会自动建立haproxy用户
uid=188(haproxy) gid=188(haproxy) groups=188(haproxy)

/usr/sbin/haproxy  二进制文件
/usr/share/haproxy  共享文件
/var/lib/haproxy  库文件
/etc/rc.d/init.d/haproxy  启动二进制文件
/etc/logrotate.d/haproxy  日志切割
/etc/sysconfig/haproxy   配置
/etc/haproxy  配置目录

在这里插入图片描述
haproxy 配置中分成五部分内容,分别如下:
global: 设置全局配置参数,属于进程的配置,通常是和操作系统相关。
defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件;
frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend;
backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;
Listen :frontend和backend的组合体。
更改配置文件:

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要使用的配置文件:
在这里插入图片描述
在这里插入图片描述

在两台服务端设置

[root@server2 ~]# yum install httpd -y  安装http服务
[root@server2 ~]# echo www.server2.com > /var/www/html/index.html默认发布页面写入内容
[root@server2 ~]# systemctl restart httpd.service   重启httpd
[root@server2 ~]# curl localhost  测试访问
www.server2.com

[root@server3 ~]# yum install -y httpd
[root@server3 ~]# echo www.server3.com > /var/www/html/index.html
[root@server3 ~]# systemctl restart httpd
[root@server3 ~]# curl localhost
www.server3.com

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
客户端主机测试
实现反向代理+负载均衡
在这里插入图片描述
配置监控后段服务器状态和监控页面

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
[root@server1 ~]# systemctl start haproxy

在这里插入图片描述
客户端访问测试
监控页面
在这里插入图片描述
查看后端服务器状态页面
在这里插入图片描述

[root@client Desktop]# curl 172.25.254.1
www.server3.com
[root@client Desktop]# curl 172.25.254.1
www.server2.com
[root@client Desktop]# curl 172.25.254.1
www.server3.com
[root@client Desktop]# curl 172.25.254.1
www.server2.com

在这里插入图片描述

haproxy实现访问权限控制(不能让所有人都访问监控页面)

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
[root@server1 ~]# systemctl restart haproxy

在这里插入图片描述
访问会自动保存密码需清理缓存删除登录密码信息
在这里插入图片描述
haproxy定义程序日志的存放路径

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 

在这里插入图片描述

[root@server1 ~]# vim /etc/rsyslog.conf  添加程序日志存放路径
[root@server1 ~]# systemctl restart rsyslog.service 

在这里插入图片描述

在这里插入图片描述
**访问四次查看日志

[root@client Desktop]# curl 172.25.254.1
www.server3.com
[root@client Desktop]# curl 172.25.254.1
www.server2.com
[root@client Desktop]# curl 172.25.254.1
www.server3.com
[root@client Desktop]# curl 172.25.254.1
www.server2.com

在这里插入图片描述
在这里插入图片描述
haproxy设置黑名单

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
[root@server1 ~]# systemctl restart haproxy.service

在这里插入图片描述

测试客户端被限制访问并且看到了代码或者就在页面看到了403报错信息
在这里插入图片描述
在这里插入图片描述
设置客户端访问看到的是提示语

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
[root@server1 ~]# systemctl restart haproxy.service
更改httpd的端口为8080因80端口已经被haproxy服务占用
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf 
[root@server1 ~]# echo “不好意思!!访问页面丢失,请刷新试试.....” > /var/www/html/index.html
[root@server1 ~]# systemctl restart httpd
[root@client Desktop]# vim /etc/httpd/conf/httpd.conf  更改客户端的80端口
[root@client Desktop]# systemctl restart httpd

在这里插入图片描述
客户端测试
在这里插入图片描述
haproxy精准定位客户端请求(动静态访问页面分离)

是效果明显在两台后端服务器同时安装php
[root@server2 ~]# vim /var/www/html/index.php
[root@server2 ~]# cat  /var/www/html/index.php  
<?php
phpinfo()
?>
[root@server2 ~]# systemctl restart httpd
[root@server3 ~]# vim /var/www/html/index.php
[root@server3 ~]# cat  /var/www/html/index.php
<?php
phpinfo()
?>
[root@server3 ~]# systemctl restart httpd

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 注意吧名单主机172.25.254.66取消)
[root@server1 ~]# systemctl restart haproxy.service

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
haproxy精准定位客户端请求实现读写分离

上传upload目录
[root@client Desktop]# ls
rpms.tar.gz  upload.tar.gz
[root@client Desktop]# tar zxf upload.tar.gz  解压
[root@client Desktop]# ls
rpms.tar.gz  upload  upload.tar.gz
[root@client Desktop]# mv upload /var/ftp/pub/  移动搭配vsftpd的pud目录下
上传到server2/3
[root@server2 html]# lftp 172.25.254.66
lftp 172.25.254.66:~> cd pub/
lftp 172.25.254.66:/pub> ls
drwxr-xr-x    2 0        0              46 Dec 21 07:07 upload
lftp 172.25.254.66:/pub> mirror upload  上传
Total: 1 directory, 2 files, 0 symlinks       
New: 2 files, 0 symlinks
1184 bytes transferred
lftp 172.25.254.66:/pub> exit
[root@server2 html]# ls
index.html  index.php  upload  upload_file.php

[root@server2 html]# scp -r index.php  upload  upload_file.php server3:/var/www/html/
root@server3's password: 
index.php                                                                                                                                                  100%  257   235.3KB/s   00:00    
index.php                                                                                                                                                  100%  257   298.8KB/s   00:00    
upload_file.php                                                                                                                                            100%  927     1.1MB/s   00:00    
upload_file.php    
[root@server3 html]# ls  查看
index.html  index.php  upload  upload_file.php

server1(安装haproxy的主机)

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 
[root@server1 ~]# systemctl restart haproxy.service

在这里插入图片描述
server2/3两台后台服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主机客户端上测试
在这里插入图片描述
在这里插入图片描述
后端两台服务器验证读写分离
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值