本文共 3776 字,大约阅读时间需要 12 分钟。
本文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
1 | [root@lv1 ~]# yum install -y httpd |
1 | [root@lv2 ~]# yum install -y httpd |
将这两台的Index.html全部标记;
分别显示lv1、lv2
访问测试是否正常
2、分别在node1、node2上部署haproxy、keepalived
1 | [root@node1 ~]# yum install -y keepalived haproxy |
1 | [root@node2 ~]# yum install -y keepalived haproxy |
接下来配置haproxy
node1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ####################全局配置信息######################## 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ! Configuration File for keepalived global_defs { notification_email { sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc 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 } } |
编辑脚本:
1 2 3 4 5 6 7 8 9 10 11 12 | [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
1 2 3 4 | [root@node1 ~]# /etc/init.d/haproxy start 正在启动 haproxy: [root@node1 ~]# /etc/init.d/keepalived start 正在启动 keepalived: [确定] |
5、测试
node2:
1 | [root@node2 ~]# tcpdump vrrp |
说明现在的vip是node1是提供服务
当你在node1上stop掉keepalived后,你会发现
node2进行了顶替
现在进行测试web
两个浏览器浏览发现,是不同的机器进行了服务
现在打开http://192.168.244.200:8080/haproxy-stats
当你在lv1上将httpd停掉后:
1 2 | [root@lv1 ~]# /etc/init.d/httpd stop 停止 httpd: [确定] |
你会发现:
haproxy进行了自动剔除,当你恢复后,就自动顶上了;
简单应用就写到这里了~~欢迎大家拍砖,建议~~
本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1212859
转载地址:http://uiaga.baihongyu.com/