Linux运维——用HAproxy实现负载均衡及网页的动静分离

HAProxy简介

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

(2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

(3)HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

环境:
调度器:vm3
后台服务:vm1、vm2

一、HAProxy搭建

1.服务器HAProxy

[root@vm1 ~]# scp /etc/yum.repos.d/rhel-source.repo root@172.25.38.3:/etc/yum.repos.d/rhel-source.repo ##vm3配置高可用yum源
[root@vm3 ~]# yum install haproxy -y
[root@vm3 ~]# cd /etc/haproxy/
[root@vm3 haproxy]# vim haproxy.cfg

 

 
[root@vm3 haproxy]# /etc/init.d/haproxy start
[root@vm3 haproxy]# /etc/init.d/haproxy reload       ###不可以restart

2.web

【vm1】
[root@vm1 ~]# yum install httpd -y
[root@vm1 ~]# cd /var/www/html/
[root@vm1 html]# ls
index.html
[root@vm1 html]# cat index.html
vm1
[root@vm1 html]# /etc/init.d/httpd start
【vm2】
[root@vm2 ~]# yum install httpd -y
[root@vm2 ~]# cd /var/www/html/
[root@vm2 html]# ls
index.html
[root@vm2 html]# cat index.html
vm2
[root@vm2 html]# /etc/init.d/httpd start

3.检测

1)轮询
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm1
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm2
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm1
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm2
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm1
监控:访问172.25.38.3:8080/status


2)带有后端检查
[root@vm2 html]# /etc/init.d/httpd stop
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm1
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm1
[kiosk@foundation38 ~]$ curl 172.25.38.3
vm1
监控:

二、动静分离

动态网页:只有一个ip
静态网页:ip+具体目录

1.调度器

[root@vm3 haproxy]# vim haproxy.cfg

 

 
[root@vm3 haproxy]# /etc/init.d/haproxy reload
[root@vm3 haproxy]# yum install httpd -y
[root@vm3 haproxy]# cd /var/www/html/
[root@vm3 html]# vim index.html
[root@vm3 html]# cat index.html
vm3调度器
[root@vm3 html]# vim /etc/httpd/conf/httpd.conf


[root@vm3 html]# /etc/init.d/httpd restart
[root@vm3 html]# netstat -antlpe | grep httpd
tcp        0      0 :::8000                     :::*                        LISTEN      0          19622      1226/httpd         

2.vm2配置静态页面

[root@vm2 html]# mkdir /var/www/html/images
[kiosk@foundation38 haproxy]$ scp redhat.jpg root@172.25.38.2:/var/www/html/images
[root@vm2 html]# ls
images  index.html
[root@vm2 html]# /etc/init.d/httpd restart

3.测试

1)动态网页及其集群(vm3作为vm1的备机)
[root@vm1 html]# /etc/init.d/httpd start
[kiosk@foundation38 haproxy]$ curl 172.25.38.3
vm1
[kiosk@foundation38 haproxy]$ curl 172.25.38.3
vm1

[root@vm1 html]# /etc/init.d/httpd stop         ##让vm1停止服务
 [kiosk@foundation38 haproxy]$ curl 172.25.38.3
vm3调度器
[kiosk@foundation38 haproxy]$ curl 172.25.38.3
vm3调度器
                                           
[root@vm1 html]# /etc/init.d/httpd start      ##vm1启动后,回切到主服务器
[kiosk@foundation38 haproxy]$ curl 172.25.38.3
vm1
[kiosk@foundation38 haproxy]$ curl 172.25.38.3
vm1
2)测试静态网页
访问172.25.38.3/images

三、haxproxy服务日志

[root@vm3 html]# vim /etc/rsyslog.conf


[root@vm3 html]# /etc/init.d/rsyslog restart
[root@vm3 html]# /etc/init.d/haproxy reload
[root@vm3 html]# tail /var/log/haproxy.log

四、错误重定向

1. http的403错误重定向

[root@vm3 html]# vim /etc/haproxy/haproxy.cfg


[root@vm3 html]# /etc/init.d/haproxy reload
[root@vm3 html]# vim index.html
[root@vm3 html]# cat index.html
vm3;sorry~~~
测试:访问172.25.38.3有403错误就自动跳转到了172.25.38.3:8000


[kiosk@foundation38 haproxy]$ curl 172.25.38.3 -I
HTTP/1.1 302 Found
Cache-Control: no-cache
Content-length: 0
Location: http://172.25.38.3:8000

2.所有错误重定向

[root@vm3 html]# vim /etc/haproxy/haproxy.cfg


[root@vm3 html]# /etc/init.d/haproxy reload
测试:访问172.25.38.3只要有错误就自动跳转到了172.25.38.3:8000


[kiosk@foundation38 haproxy]$ curl 172.25.38.3 -I
HTTP/1.1 302 Found
Cache-Control: no-cache
Content-length: 0
Location: http://172.25.38.3:8000
Connection: close

五、网页重定向

1.http状态码:

301:之前网站不再可用,永久性被移除(网站迁移)
302:只是此次重定向了(盗链,恶意刷流量)
浏览器拿到服务器返回的状态码,重定向到一个新地址

2.网页重定向

[root@vm3 html]# vim /etc/haproxy/haproxy.cfg

[root@vm3 html]# /etc/init.d/haproxy reload
测试:
[root@foundation38 kiosk]# vim /etc/hosts


访问:当访问172.25.38.3或westos.org时,跳转到www.westos.org 解析为172.25.38.3,动态网页到172.25.38.1


六、读写分离

1.真实服务器

[root@vm1 html]# yum install php -y
[root@vm2 html]# yum install php -y
[root@foundation38 haproxy]# scp -r upload/ root@172.25.38.1:/var/www/html/
[root@foundation38 haproxy]# scp -r upload/ root@172.25.38.2:/var/www/html/

[root@vm1 html]# cd upload/
[root@vm1 upload]# ls
index.php  upload_file.php
[root@vm1 upload]# mv * ..
[root@vm1 upload]# cd ..
[root@vm1 html]# ls
index.html  index.php  upload  upload_file.php
[root@vm1 html]# vim upload_file.php


[root@vm1 html]# chmod  777 upload
[root@vm1 html]# /etc/init.d/httpd restart
[root@vm2 html]# cd upload/
[root@vm2 upload]# mv * ..
[root@vm2 upload]# cd ..
[root@vm2 html]# vim upload_file.php


[root@vm2 html]# chmod 777 upload
[root@vm2 html]# /etc/init.d/httpd restart
2.调度器
[root@vm3 html]# vim /etc/haproxy/haproxy.cfg

[root@vm3 html]# /etc/init.d/haproxy reload
Reloading haproxy:
3.测试
1)写:访问www.westos.org 可上传到vm1的/var/www/html/upload目录下


[root@vm1 html]# cd upload
[root@vm1 upload]# ls
redhat.jpg
[root@vm2 html]# cd upload
[root@vm2 upload]# ls
2)读:访问www.westos.org/images 可读到vm2的/var/www/html/images目录下内容
[root@vm2 html]# cd images/
[root@vm2 images]# ls
redhat.jpg

 
[root@vm2 images]# vim du
[root@vm2 images]# ls
du  redhat.jpg

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值