设为首页 收藏本站
查看: 1781|回复: 0

[经验分享] HAProxy-keepalived负载均衡及基于域名动静分离

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-15 09:32:20 | 显示全部楼层 |阅读模式
项目环境:
系统版本:centos6.6-x86 kernel:2.6
HAproxy版本:haproxy-1.5.2-2.el6.x86_64
Keepalived版本:keepalived-1.2.13-4.el6.x86_64




拓扑结构:

wKiom1SNMFqQs7U6AAE-uuvWhxc645.jpg



wKioL1SNMPah1b2cAAFkXmIndYY757.jpg
前端使用HAproxy调度客户请求,部署keepalived避免单节点故障,有两个站点www.test.com和[url=www.dragon.com]www.dragon.com[/url]的业务需求,后端部署四台服务器为两个站点做动静分离,把www.dragon.com的DNS解析到虚拟IP:22.22.22.251,把www.test.com的DNS解析到虚拟IP22.22.22.252,又利用keepalived相互备份。




配置Haproxy
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
global
     log 127.0.0.1 local0 notice    //local0是日志设备,info是日志记录级别(err,warning,info,debug),可以在系统日志里查看      
     maxconn 5535         //HAproxy接受的最大连接数,还要注意linux文件接受的最大连接数,用命令"ulimit -n"看以查看,在/etc/security/limit.conf可以永久修改。      
    chroot /usr/local/haproxy  //   
     user nobody  //进程用户
     group nobody  //进程组
     nbproc 1    //进程可以创建的进程数,建议小于服务器的cpu数           
     daemon          //后台运行            
defaults
    option httplog  //记录http日志
    mode http   //http模式,不与RFC格式兼容的请求都会被拒绝,还有TCP模式作为4层转发,多用于SSL,SSH,SMTP
    option dontlognull
    retries 3     //连接失败后重试此树                    
    maxconn 5535                     
    timeout connect       5s  //连接后端服务器的最长等待时间
    timeout server            30s     //服务端回应客户端数据发送的最长等待时间
    timeout client              30s    //连接客户端发送数据的最长等待时间
    timeout check 5s                //每5s检验一次后端服务器
    stats refresh 30s   //后端服务器健康状态刷新时间                  
    stats uri  /stats       //通过浏览器可以查看业务状态,例如:www.w4ya.com/stats
    stats realm welcome    //提示信息   
    stats auth admin:dragon123   //查看HA监控后端状态时的帐号密码验证      
    stats hide-version      //不显示haproxy的版本信息   
frontend www
  bind :80
  
  acl host_web hdr(host) -i   www.draon.com  //定义ACL匹配域名www.dragon.com
  acl url_static path_end  .html .css .jpg   //定义ACL匹配静态文件
  acl host_test hdr_dom(host) -i  www.test.com    //定义ACL匹配域名www.test.com
  acl url_dynamic path_end  .php .jsp   //定义ACL匹配动态
  
   use_backend web-dynamic-server if host_web url_dynamic   
   //如果域名为www.dragon.com和页面是动态的,则把请求调度给web-dynamic-server
   use_backend web-static-server if host_web url_static || host_web
   //如果域名为www.test.com和页面是静态的,或则域名为www.dragon.com,则把请求调度给web-static-server
   use_backend test-dynamic-server if  host_test url_dynamic
   use_backend test-static-server if   host_test url_static || host_test
                                                                                                                                          
backend    web-static-server          //定义www.dragon.com动态页面的管理集群
  mode http
  balance   roundrobin     //负载均衡算法为轮询
  option    redispatch  // 保持cookie环境,使客户机的session持久连接。
  option    abortonclose     //在服务器高负载时,自动放弃队列中处理时间较长的连接
  option  httpchk GET /index.html  /通过请求后端http服务的页面,判断状态
  server     web01 192.168.1.118:80  check inter 2000 rise 2  fall  3 weight 10
//后端响应的服务器,根据需求可能会有多个。
ckeck:表示启用对后端服务器的健康检查
rise:由故障切换会正常需要进行的检查次数
fall:由正常到故障认定检查的次数
weight:权重                  
                                                      
backend web-dynamic-server
   mode http
   option  redispatch
   option  abortonclose
   option  httpchk GET /index.php
   balance     roundrobin                          
   server     web02 192.168.1.111:80  check inter 2000 rise 2 fall 3 weight 10
                                                            
backend test-static-server
   mode http
   option  redispatch
   option  abortonclose
   option  httpchk GET /index.html
   balance     roundrobin                          
   server     test01 192.168.1.117:80  check inter 2000 rise 2 fall 3 weight 10
  
  
backend test-dynamic-server
   mode http
   option  redispatch
   option  abortonclose
   option  httpchk GET /index.php
   balance     roundrobin
   server     test02 192.168.1.114:80  check inter 2000 rise 2 fall 3 weight 10
  
HA1和HA2的配置文件都是一样的。



请求www.dragon.com和静态页面:
wKioL1SNMifjTgJEAACbWJlpPrE361.jpg
wKioL1SNO_LhfrYLAACheS_cvLA778.jpg
请求www.dragon.com和动态页面:
wKiom1SNMdOxNbYrAAFeAIFBh4A365.jpg

请求www.test.com和静态页面:
wKioL1SNPGqQX2RLAACMdIFd7-8187.jpg
wKiom1SNO6bwORXMAACVUCNmyqo615.jpg
请求www.test.com和动态页面:
wKioL1SNMruAluMsAAGQdLyHmlI036.jpg
查看HA检测的后端服务集群健康状况:
wKioL1SNMurBWnlVAAnzZ7wjtWg898.jpg



配置keepalived:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  global_defs {    //全局配置
   notification_email {    //报警邮箱
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 220.181.12.11  smtp server地址
   smtp_connect_timeout 30    smtp连接超时
   router_id haproxy_DEVEL    邮箱主题信息
}
vrrp_script check_haproxy {   
   script "killall -0 haproxy"   //对HAproxy的健康检查
   interval  2
}
vrrp_instance VI_1 {   //实例标识
    state MASTER    //设置为MASTER   #另一keepalived配置这里为SLAVE或者BACKUP
    interface eth2    //指定HA监听的网卡
    virtual_router_id 51  //虚拟路由ID  
    priority 100    //MASTER选举的优先级   #另一keepalived配置改为80
    advert_int 1   //MASTER和BACKUP的同步检查时间间隔
     
    authentication {    //MASTER和BACKUP密码验证
        auth_type PASS
        auth_pass 1234
    }
   track_script {  //调用HA检查
    check_haproxy
}   
   virtual_ipaddress {   //虚拟IP,可以有多个
        22.22.22.251/24 dev eth2
     
    }
nopreempt  //故障恢复以后,不抢夺VIP重回MASTER.
nopreempt_delay 300  //抢占延时
}
vrrp_instance VI_2 {
    state MASTER    #另一keepalived配置为MASTER
    interface eth2
    virtual_router_id 52
    priority 80  #另一keepalived配置为100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
track_script {
    check_haproxy
        }
   virtual_ipaddress {
        22.22.22.252/24 dev eth2
    }
}

需要注意两个keepalived配置文件不同的地方已经用#注释




查看keepalived运行效果:
root@centos-server ~]# cat /var/log/messages
wKiom1SNM0bC_MVCAAUxHLS-QlE808.jpg
这里实例VI_1进入BACKUP状态,VI_2发现自己优先级比对方的高切换成MASTER状态,并把VIP:22.22.22.252加入了eth2网卡

查看虚拟IP:
wKiom1SNOvzBZgPBAAHF9BATbpg796.jpg

wKioL1SNM9GDVJVaAAXDt_NGKUQ253.jpg
这里实例VI_1进入MASTER,VI_2也进入了MASTER但后来发现网络中有更高优先级的keepalived主机,自动切换回BACKUP状态.
查看虚拟IP:
wKiom1SNNnyQxnHpAAGwZryC8ZI701.jpg


模拟Haproxy发生故障:
1
2
3
在其中一台机停掉Haproxy
[iyunv@centos-server ~]# service haproxy stop
停止 haproxy:                                             [确定]



另一台主机获取故障Haproxy的VIP接管工作:

wKioL1SNN_yAg5qYAAIcfWEws1Y563.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-38029-1-1.html 上篇帖子: 一个拆分haproxy serverlist的小脚本 下篇帖子: 【haproxy初始化】haproxy_ctl.sh
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表