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