HAProxy--(负载均衡,动静分离,重定向,读写分离)

HAProxy简介:

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机。
它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。
Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配置。

global:用于设定全局配置参数;

default:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;

frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);

backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;

listen:Frontend和Backend的组合体

四层转发tcp(lvs) 七层代理http(haproxy)
稳定性的适合用lvs 网站负载适合用haproxy nginx

haproxy(单核)

实验环境:
server1: 172.25.40.1 haproxy
server2:172.25.40.2 web1
server3:172.25.40.3 web2

配置:

yum install haproxy -y 
cd /etc/haproxy/
vim haproxy.cfg
       stats uri  /status  # 监控页面地址
       stats auth admin:redhat  # 管理帐号和密码
       stats refresh 5s  #刷新频率
       monitor-uri /monitor 

frontend main #虚拟前端(代理)
	bind *:80 #haproxy虚拟前端监听80端口
	acl blacklist src 172.25.40.250 #设置访问控制列表,自命名为blacklist,将172.25.40.250加入blacklist
	http-request deny if blacklist #拒绝blacklist中的主机的访问
	#错误重定向
	# errorloc 403 http://172.25.40.1:8080 (注意端口不要冲突)(403:服务器拒绝你的访问 服务器设定你是坏的 )(如果是403错误就重定向到 172.25.40.1:8080)
 # redirect location http://172.25.40.1:8080 if blacklist (如果出现错误访问 就重定向 不管	是什么错误)
	error 503 http://172.25.40.1:8080/index.html #找不到服务器时重定向
	default_backend webserver #默认访问后端 webserver
backend webserver
    balance roundrobin #调度算法:轮询
    server web1 172.25.40.2:80 check #监听真实后端服务器80端口
    server web2 172.25.40.3:80 check

在这里插入图片描述两台 real server(server2,server3):

vim /var/www/html/index.html
systemctl start httpd

日志监控:

vim /etc/rsyslog.conf
$ModLoad imudp     #接受 haproxy 日志
$UDPServerRun 514

*.info;mail.none;authpriv.none;cron.none;local2.none     /var/log/messages
local2.*                       /var/log/haproxy.log   #日志文件位置

测试:
(自带健康检查)

在这里插入图片描述
web1,web2都在线
在这里插入图片描述
在这里插入图片描述
(server2)web1,(server3)web2轮询
在这里插入图片描述
当server2宕机:
在这里插入图片描述
在这里插入图片描述
设置acl后:
在这里插入图片描述在这里插入图片描述开启server1 httpd服务,修改监听端口8080(因为haproxy监听80):

vim /etc/httpd/conf/httpd.conf
systemctl start httpd

错误重定向

当server2,server3全部宕机,访问172.25.40.1出现503,重定向到server1
在这里插入图片描述
在这里插入图片描述
301永久重定向:(一般推荐用301 302临时重定向 有恶意刷点击的嫌疑)

    acl url_static       path_beg       -i  /images
    acl url_static       path_end       -i .jpg .gif .png
    acl westos.org hdr_beg(host) -i westos.org  
    acl 172.25.40.1 hdr_beg(host) -i 172.25.40.1
#    block if badhost
#    errorloc 403 http://172.25.40.1:8080 

#    redirect location http://172.25.40.1:8080 if badhost
     redirect code 301 location http://www.westos.org if westos.org
     (以westos.org访问 自动重定向 www.westos.org)
     redirect code 301 location http://www.westos.org if 172.25.40.1
     (以172.25.40.1访问 自动重定向 www.westos.org)
     use_backend static          if url_static
     default_backend  webserver

301 redirect: 301 代表永久性转移(Permanently Moved) 永久地,长期不变
302 redirect: 302 代表暂时性转移(Temporarily Moved )临时地,临时

详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

实现动静分离

frontend  main
    bind *:80
    acl url_static path_beg     -i /images   #(以什么开头 默认根目录)
    acl url_static path_end     -i .jpg .gif .png   # (以什么结尾)
    use_backend static          if url_static 
    # use_backend dynamic if { path_end .php }
    default_backend             webserver


# static backend for serving up images, stylesheets and such

backend static
        balance roundrobin
        server web1 172.25.40.2:80 check
backend webserver
    balance     roundrobin
    server      web2 172.25.40.3:80 check

server2存放图片
    [root@server2 ~]# mkdir /var/www/html/images
    [root@server2 ~]# scp kiosk@172.25.40.250:/home/kiosk/Desktop/redhat.jpg /var/www/html/images

当访问图片资源时,server2提供服务在这里插入图片描述
在这里插入图片描述其他默认server3提供服务:
在这里插入图片描述

读写分离

frontend  main
    bind *:80
     acl read method GET
     acl read method HEAD
     acl write method PUT
     acl write method POST
     use_backend static  if  write
     use_backend dynamic if  read
     default_backend static


backend static
        balance roundrobin
        server web1 172.25.40.2:80 check
backend dynamic
    balance     roundrobin
    server      web2 172.25.40.3:80 check

server2(server3同样,为测试):
mkdir /var/www/html/upload       # 用来保存上传的文件
chmod 777 /var/www/html/upload  

测试:
访问172.25.40.1/index.php,server3提供服务。如果上传文件,则只会保存到server2。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值