本文Centos6.0
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
这里是两台Haproxy负责后台的控制;使用keepalived实现热备;下面就是正题了:
做的图太恶心了,将就下吧
角色; 主机名; ip;
Haproxy1; node1 192.168.244.147
Haproxy2; node2 192.168.244.148
S1(web1); lv1 192.168.244.149
S2(web2); lv2 192.168.244.150
Haproxy的两台服务器提供的Vip:192.168.244.200
1、首先在lv1、lv2上部署httpd
[root@lv1 ~]# yum install -y httpd
[root@lv2 ~]# yum install -y httpd
将这两台的Index.html全部标记;
分别显示lv1、lv2
访问测试是否正常
2、分别在node1、node2上部署haproxy、keepalived
[root@node1 ~]# yum install -y keepalived haproxy
[root@node2 ~]# yum install -y keepalived haproxy
接下来配置haproxy
node1:
####################全局配置信息######################## global log 127.0.0.1 local0 #[err warning info debug] chroot /var/lib/haproxy #chroot运行的路径 pidfile /var/run/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 maxconn 4000 #默认最大连接数 user haproxy #所属运行的用户 group haproxy #所属运行的用户组 nbproc 1 #进程数量(可以设置多个进程提高性能) daemon #以后台形式运行haproxy #####################默认的全局设置###################### ##这些参数可以被利用配置到frontend,backend,listen组件## defaults mode http #所处理的类别 (#7层 http;4层tcp ) log global option httplog #日志类别http日志格式 option dontlognull #不记录健康检查的日志信息 option httpclose #每次请求完毕后主动关闭http通道 option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器 retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置 stats refresh 20 #统计页面刷新间隔 timeout connect 10s #连接超时 timeout client 5000 #客户端超时 timeout server 50000 #服务器超时 maxconn 3000 balance roundrobin #默认的负载均衡的方式,轮询方式 stats uri /haproxy-stats #监控页面的url listen proxy *:8080 option httpchk HEAD /index.html #心跳检测的文件 server server1 192.168.244.149:80 cookie server1 check inter 1500 rise 3 fall 3 #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用 #fall 3是3次失败认为服务器不可用,weight代表权重 server server2 192.168.244.150:80 cookie server2 check inter 1500 rise 3 fall 3
node2的haproxy配置是一样的,copy过去就可以了
3、在node1、node2上配置keepalived
node1:
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/etc/keepalived/check_haproxy.sh" interval 2 #脚本执行间隔 weight -20 #脚本结果导致的优先级变更:20表示优先级+20;-20则表示优先级-20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port } virtual_ipaddress { 192.168.244.200 } }
编辑脚本:
[root@node1 ~]# cat /etc/keepalived/check_haproxy.sh #!/bin/bash A=`ps -C haproxy --no-header |wc -l` if [ $A -eq 0 ];then /etc/init.d/haproxy restart echo "启动haproxy" &> /dev/null sleep 3 if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then /etc/init.d/keepalived stop echo "关闭keepalived" &> /dev/null fi fi
node2和上面的一样,只是将priority
改成 90;
state 改成 BACKUP;
4、分别启动keepalived和haproxy
[root@node1 ~]# /etc/init.d/haproxy start 正在启动 haproxy: [root@node1 ~]# /etc/init.d/keepalived start 正在启动 keepalived: [确定]
5、测试
node2:
[root@node2 ~]# tcpdump vrrp
说明现在的vip是node1是提供服务
当你在node1上stop掉keepalived后,你会发现
node2进行了顶替
现在进行测试web
http://192.168.244.200:8080
两个浏览器浏览发现,是不同的机器进行了服务
现在打开http://192.168.244.200:8080/haproxy-stats
当你在lv1上将httpd停掉后:
[root@lv1 ~]# /etc/init.d/httpd stop 停止 httpd: [确定]
你会发现:
haproxy进行了自动剔除,当你恢复后,就自动顶上了;
简单应用就写到这里了~~欢迎大家拍砖,建议~~