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

[经验分享] haproxy+keepalived

[复制链接]

尚未签到

发表于 2015-11-20 03:20:08 | 显示全部楼层 |阅读模式
  http://blog.liuts.com/post/223/
  
基于Keepalived+Haproxy搭建四层负载均衡器[原创] DSC0000.gif DSC0001.gif
刘天斯 , 2011/03/10 18:17 , Haproxy , 评论(28) , 阅读(18553) ,Via 本站原创
DSC0002.gif 大 | 中 | 小 DSC0003.gif DSC0004.jpg
一、前言
       Haproxy是稳定、高性能、高可用性的负载均衡解决方案,支持HTTP及TCP代理后端服务器池,因支持强大灵活的7层acl规则,广泛作为HTTP反向代理。本文则详细介绍如何利用它的四层交换与Keepalived实现一个负载均衡器,适用于Socket、ICE、Mail、Mysql、私有通讯等任意TCP服务。系统架构图如下: DSC0005.jpg

二、平台环境OS:Centos5.4(64X)
MASTER:192.168.0.20
BACKUP:192.168.0.21
VIP:192.168.0.100
Serivce Port:11231

三、平台安装配置
1、添加非本机IP邦定支持

#vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
#sysctl –p

2、配置平台日志支持

#vi /etc/syslog.conf
添加:
local3.*        /var/log/haproxy.log
local0.*        /var/log/haproxy.log

#vi /etc/sysconfig/syslog
修改:
SYSLOGD_OPTIONS="-r -m 0"
#/etc/init.d/syslog restart

3、关闭SELINUX

vi /etc/sysconfig/selinux
修改:
SELINUX=disabled
#setenforce 0

4、配置iptables,添加VRRP通讯支持

iptables -A INPUT -d 224.0.0.18 -j ACCEPT

5、Keepalived的安装、配置

#mkdir -p /home/install/keepalivedha
#cd /home/install/keepalivedha
#wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
#tar zxvf keepalived-1.2.2.tar.gz
#cd keepalived-1.2.2
#./configure
#make && make install


#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
#cp /usr/local/sbin/keepalived /usr/sbin/

#vi /etc/keepalived/keepalived.conf
view plainprint?

  • ! Configuration File for keepalived  
  •   
  • global_defs {  
  •    notification_email {  
  •          liutiansi@gmail.com  
  •    }  
  •    notification_email_from liutiansi@gmail.com  
  •    smtp_connect_timeout 3  
  •    smtp_server 127.0.0.1  
  •    router_id LVS_DEVEL  
  • }  
  • vrrp_script chk_haproxy {  
  •     script "killall -0 haproxy"  
  •     interval 2  
  •     weight 2  
  • }  
  • vrrp_instance VI_1 {  
  •     interface eth1  
  •     state MASTER # 从为BACKUP  
  •     priority 101 # 从为100  
  •     virtual_router_id 50 #路由ID,可通过#tcpdump vrrp查看。  
  •     garp_master_delay 1 #主从切换时间,单位为秒。  
  •   
  •     authentication {  
  •         auth_type PASS  
  •         auth_pass KJj23576hYgu23IP  
  •     }  
  •     track_interface {  
  •        eth0  
  •        eth1  
  •     }  
  •     virtual_ipaddress {  
  •         192.168.0.100  
  •     }  
  •     track_script {  
  •         chk_haproxy  
  •     }  
  •   
  •     #状态通知  
  •     notify_master "/etc/keepalived/Mailnotify.py master"  
  •     notify_backup "/etc/keepalived/Mailnotify.py backup"  
  •     notify_fault "/etc/keepalived/Mailnotify.py fault"  
  • }  

6、Haproxy的安装与配置

#cd /home/install/keepalivedha
#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.11.tar.gz
#tar -zxvf haproxy-1.4.11.tar.gz
#cd haproxy-1.4.11
#make install
#mkdir -p /usr/local/haproxy/etc
#mkdir -p /usr/local/haproxy/sbin
#cp examples/haproxy.cfg /usr/local/haproxy/etc
#ln -s /usr/local/sbin/haproxy /usr/local/haproxy/sbin/haproxy

#vi /usr/local/haproxy/etc/haproxy.cfg
view plainprint?

  • # this config needs haproxy-1.1.28 or haproxy-1.2.1  
  •   
  • global  
  • #        log 127.0.0.1   local0  
  •         log 127.0.0.1   local1 notice  
  •         maxconn 5000  
  •         uid 99  
  •         gid 99  
  •         daemon  
  •         pidfile /usr/local/haproxy/haproxy.pid  
  •   
  •   
  • defaults  
  •         log     global  
  •         mode    http  
  •         #option httplog  
  •         option  dontlognull  
  •         retries 3  
  •         option redispatch  
  •         maxconn 2000  
  •         contimeout      5000  
  •         clitimeout      50000  
  •         srvtimeout      50000  
  •   
  • listen  ICE01   192.168.0.100:11231  
  •         mode tcp #配置TCP模式  
  •         maxconn 2000  
  •         balance roundrobin  
  •         server  ice-192.168.0.128 192.168.0.128:11231 check inter 5000 fall 1 rise 2  
  •         server  ice-192.168.0.129 192.168.0.129:11231 check inter 5000 fall 1 rise 2  
  •         server  ice-192.168.0.130 192.168.0.130:11231 check inter 5000 fall 1 rise 2  
  •         server  ice-192.168.0.131 192.168.0.131:11231 check inter 5000 fall 1 rise 2  
  •         server  ice-192.168.0.132 192.168.0.132:11231 check inter 5000 fall 1 rise 2  
  •         server  ice-192.168.0.34 192.168.0.34:11231 check inter 5000 fall 1 rise 2  
  •         srvtimeout      20000  
  •   
  • listen stats_auth 192.168.0.20:80  
  • # listen stats_auth 192.168.0.21:80 # backup config  
  •         stats enable  
  •         stats uri  /admin-status #管理地址  
  •         stats auth  admin:123456 #管理帐号:管理密码  
  •         stats admin if TRUE  

7、邮件通知程序(python实现)
#vi /etc/keepalived/Mailnotify.py
view plainprint?

  • #!/usr/local/bin/python  
  • #coding: utf-8  
  • from email.MIMEMultipart import MIMEMultipart  
  • from email.MIMEText import MIMEText  
  • from email.MIMEImage import MIMEImage  
  • from email.header import Header  
  • import sys  
  • import smtplib  
  •   
  • #---------------------------------------------------------------  
  • # Name:        Mailnotify.py  
  • # Purpose:     Mail notify to SA  
  • # Author:      Liutiansi  
  • # Email:       liutiansi@gamil.com  
  • # Created:     2011/03/09  
  • # Copyright:   (c) 2011  
  • #--------------------------------------------------------------  
  • strFrom = 'admin@domain.com'  
  • strTo = 'liutiansi@gmail.com'  
  • smtp_server='smtp.domain.com'  
  • smtp_pass='123456'  
  •   
  • if sys.argv[1]!="master" and sys.argv[1]!="backup"  and sys.argv[1]!="fault":  
  •     sys.exit()  
  • else:  
  •     notify_type=sys.argv[1]  
  •   
  •   
  • mail_title='[紧急]负载均衡器邮件通知'  
  • mail_body_plain=notify_type+'被激活,请做好应急处理。'  
  • mail_body_html='<b><font color=red>'&#43;notify_type&#43;'被激活,请做好应急处理。</font></b>'  
  •   
  • msgRoot = MIMEMultipart('related')  
  • msgRoot['Subject'] =Header(mail_title,'utf-8')  
  • msgRoot['From'] = strFrom  
  • msgRoot['To'] = strTo  
  •   
  • msgAlternative = MIMEMultipart('alternative')  
  • msgRoot.attach(msgAlternative)  
  •   
  • msgText = MIMEText(mail_body_plain, 'plain', 'utf-8')  
  • msgAlternative.attach(msgText)  
  •   
  •   
  • msgText = MIMEText(mail_body_html, 'html','utf-8')  
  • msgAlternative.attach(msgText)  
  •   
  •   
  • smtp = smtplib.SMTP()  
  • smtp.connect(smtp_server)  
  • smtp.login(smtp_user,smtp_pass)  
  • smtp.sendmail(strFrom, strTo, msgRoot.as_string())  
  • smtp.quit()  

注:修改成系统python实际路径“#!/usr/local/bin/python”(第一行)
#chmod &#43;x /etc/keepalived/Mailnotify.py
#/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
#service keepalived start

8、查看VRRP通讯记录
#tcpdump vrrp

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:49:05.270017 IP 192.168.0.20 > VRRP.MCAST.NET: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 1s, length 20

四、Haproxy界面
访问http://192.168.0.20/admin-status,输入帐号admin密码123456进入管理监控平台。
DSC0006.jpg
haproxy-1.4.9以后版本最大的亮点是添加了手工启用/禁用功能,对升级变更应用时非常有用。

五、邮件通知


如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu
  

运维网声明 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-141294-1-1.html 上篇帖子: keepalived主从备份保活 下篇帖子: keepalived指定日志文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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