基于Keepalived+Haproxy搭建四层负载均衡器[原创] 不指定

刘天斯 , 2011/03/10 18:17 , Haproxy , 评论(31) , 阅读(96141) , Via 本站原创 | |
一、前言
       Haproxy是稳定、高性能、高可用性的负载均衡解决方案,支持HTTP及TCP代理后端服务器池,因支持强大灵活的7层acl规则,广泛作为HTTP反向代理。本文则详细介绍如何利用它的四层交换与Keepalived实现一个负载均衡器,适用于Socket、ICE、Mail、Mysql、私有通讯等任意TCP服务。系统架构图如下:

点击在新窗口中浏览此图片

二、平台环境
引用

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

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

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

注:修改成系统python实际路径“#!/usr/local/bin/python”(第一行)
#chmod +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进入管理监控平台。
点击在新窗口中浏览此图片
haproxy-1.4.9以后版本最大的亮点是添加了手工启用/禁用功能,对升级变更应用时非常有用。

五、邮件通知
点击在新窗口中浏览此图片

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu
谢谢 Email Homepage
2014/08/08 14:44
受益匪浅。
械在职 Email Homepage
2014/03/11 16:25
不错的文章呵呵
80h大叔 Email Homepage
2013/07/31 09:57
刘哥,你这邮件通知脚本有点小问题,测试了,提示 smtp_user is not defined... 加一个smtp_user 值就好了,受益匪浅啊....
jason Email
2012/03/25 14:26
hi ,有个问题请教一下,谢谢!
如:Haproxy + tomcat ,

其中tomcat1号 down掉,由tomcat2号接管,但是session无法共享,就如购物车的情况,无法继续使用,需要客户再次登陆一次才行。

请问这种session共享的问题,该采用什么样的方式来处理 ?
刘天斯 回复于 2012/03/25 19:33
将session剥离出去,如用memcached或db存储。
minggong Email
2012/03/15 17:02
这是我的haproxy.cfg:                         global        log 127.0.0.1   local0        log 127.0.0.1   local1 notice        maxconn 4096        chroot /usr/local/haproxy        uid 99        gid 99        daemon        nbproc 1        pidfile /usr/local/haproxy/haproxy.pid        #debug        #quietdefaults        log     global        mode    http        option  httplog        option  dontlognull        retries 3        option redispatch        maxconn 2000        contimeout      5000        clitimeout      50000        srvtimeout      50000listen  web1 192.168.3.50:80        cookie  SERVERID rewrite        balance roundrobin        mode http        server web11 192.168.3.30:80 check inter 5000 fall 1 rise 2        server web12 192.168.3.32:80 check inter 5000 fall 1 rise 2listen stats_auth 192.168.3.21:80        stats enable        stats uri  /admin-status        stats auth  admin:123456        stats admin if TRUE                              192.168.3.30:80 和192.168.3.32:80 是nginx两台前段出来的地址 这是 keepalived.conf的配置:                       ! Configura tion File for keepalivedglobal_defs {   notification_email {      569127679@qq.com   }   notification_email_from 569127679@qq.com   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script chk_haproxy {    script "killall -0 haproxy"    interval 2     weight 2vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 50    priority 101    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.3.50    }}rack_script {    chk_haproxy}    notify_master "/etc/keepalived/Mailnotify.py master"    notify_backup "/etc/keepalived/Mailnotify.py backup"    notify_fault "/etc/keepalived/Mailnotify.py fault"}192.168.3.50   启动后是ping 不通的呢? http://192.168.3.20/admin-status    能进去 但进去后没有状态两台地址服务器运行状态是空白的!!! 能加你Q聊吗?
刘天斯 回复于 2012/03/16 09:17
将cookie选项去掉。
minggong
2012/03/14 16:34
[ALERT] 073/123120 (24330) : config : proxy 'AA01' : server cannot have cookie or redirect prefix in non-HTTP mode.[ALERT] 073/123120 (24330) : config : proxy 'AA01' : server cannot have cookie or redirect prefix in non-HTTP mode.[ALERT] 073/123120 (24330) : Fatal errors found in configuration.刘哥  什么问题啊?
刘天斯 回复于 2012/03/14 19:58
提示已经很明显了,配置添加了哪些项?
IT族蚁 Email Homepage
2012/03/10 00:03
您好,刘哥,我想请问下,每当主备中任何一台宕机了keepalived可以成功接管,但是需要手动开启haproxy服务网站才能正常访问,想请教您一下,问题会出在哪呢?
刘天斯 回复于 2012/03/11 10:23
backup haproxy服务是要一直开启的。
cc Email
2012/03/02 11:05
唯一一个问题,haproxy+keepalived为什么需要一个VIP啊
又不是用LVS
请博主指导,谢谢!
刘天斯 回复于 2012/03/02 15:20
支持多个VIP,一个VIP对应后端一组服务。
healthly Email Homepage
2011/12/29 12:51
这个网站配置文件的字符编码有问题。
wjnsmnh
2011/11/19 11:11
刘兄
我想问一下
根据你上面的配置说明我能顺利安装并启用.(Keepalived+Haproxy)
haproxy能正常使用
但是Keepalived能启用  可是所指定的vip似乎没有启动.
进程也有keepalived
不知道问题出在哪
请多我指教
刘天斯 回复于 2011/11/19 17:23
netstat -an|grep vip IP确认是否已监听。
小刘 Email
2011/10/15 11:21
mode http 和mode tcp 有什么区别啊 ,谢谢
刘天斯 回复于 2011/10/15 12:30
七层与四层转发的区别。
林旭 Email
2011/09/06 03:50
刘大哥,那个监控haproxy状态的脚本怎么是把haproxy给kill掉了,很不理解啊,求解释,谢谢啦……
刘天斯 回复于 2011/09/06 22:08
killall -0 haproxy非kill掉,只是一个探测。
kkpalm Email
2011/08/24 00:13
刘天斯 回复于 2011/08/23 21:37你的error_log并没有"%{X-Forwarded-For}参数呀?小弟愚蠢!我應該再補上甚麼code才行呢?請劉兄協助!!
刘天斯 回复于 2011/08/24 10:03
error_log一般只记录apache的错误信息,用户访问的错误信息如503、500、400都会记录在access_log中。
kkpalm Email
2011/08/23 17:18
感謝!!按照您說的, 目前 access_log 已經能獲取用戶IP, 但是error_log 失敗, 以下是httpd.conf 設置, 是否我的設定有問題??該怎麼作才能讓 error_log 也可以獲取用戶IP??httpd.conf :ErrorLog "|/usr/sbin/rotatelogs /etc/httpd/logs/error_log.%Y-%m-%d 86400"LogLevel warnLogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{User-agent}i" agentLogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b " combinedCustomLog "|/usr/sbin/rotatelogs /etc/httpd/logs/access_log.%Y-%m-%d 86400" combined
刘天斯 回复于 2011/08/23 21:37
你的error_log并没有"%{X-Forwarded-For}参数呀?
kkpalm Email
2011/08/23 15:31
看您的文章獲益良多!!想請問, 我在Haproxy配置中添加option forwardfor,後端Apache的設置文件則用X-Forwarded-For来获取用户IP成功, 但是 error_log 還是haproxy的IP, 該如何才能跟access_log 一樣呢??
刘天斯 回复于 2011/08/23 16:08
X-Forwarded-For只面向应用层,日志还需用X-Forwarded的格式支持,如LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
prometheus
2011/08/04 14:16
刘兄我也准备使用HAPROXY+keepalivekeepalive想只是用vrrp功能,故此编译的时候没加内核参数Keepalived configuration------------------------Keepalived version       : 1.2.2Compiler                 : gccCompiler flags           : -g -O2 -DETHERTYPE_IPV6=0x86ddExtra Lib                : -lpopt -lssl -lcrypto Use IPVS Framework       : NoIPVS sync daemon support : NoUse VRRP Framework       : YesUse Debug flags          : No现在问题是VIP有,可以PING通,但是内容页面过不去! 请问这个是为啥!
刘天斯 回复于 2011/08/04 17:19
使用#tcpdump vrrp来跟踪。
刀哥 Email Homepage
2011/07/27 17:10
感谢分享!
kawalamick Email Homepage
2011/06/03 17:16
顶顶更健康啊,多谢LZ分享啊~~~~~~~~~~~
蓝色夏威夷 Email Homepage
2011/03/30 17:10
我要是早点看到这个就好了,上次Haproxy怎么也装不上。后来更新了源。哎
刘天斯 回复于 2011/03/30 17:28
现在还不晚,开始吧 :)
im@sorry.com Email Homepage
2011/03/25 09:11
多谢答复。X-Forwarded-For 只支持HTTP模式吧,TCP模式可以吗?
刘天斯 回复于 2011/03/25 10:44
是的,TCP这块可能需要自己去实现。
分页: 1/2 第一页 1 2 下页 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]