设为首页 收藏本站
查看: 2528|回复: 1

[经验分享] HAProxy+Keepalived高可用负载均衡配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-12 08:14:24 | 显示全部楼层 |阅读模式

前言 * 随着负载均衡器的成熟,人们熟知的软件负载均衡如 LVS 、 HAProxy ,各方面性能不亚于硬件负载均衡, HAProxy 提供高可用性、负载均衡以及基于 TCP和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。

我们平时用的负载均衡 LVS 是基于四层,新型的大型互联网公司也在采用 HAProxy ,了解了 haproxy 大并发、七层应用等特点,那今天我们来研究一下 HAProxy+Keepalived 基于七层负载高可用负载均衡的配置。

一、系统环境:

系统版本:CentOS6.0 x86_64

HAProxy版本:1.4.21  
Keepalived版本:1.2.1

Nginx版本:1.2.2
MASTER_IP:192.168.0.130  
BACKUP_IP:192.168.0.131

VIP:192.168.0.133  
WEB_1:192.168.0.134  
WEB_2:192.168.0.135

二、 HAProxy 安装:

1 )首先安装 192.168.0.130 上安装:

下载最新稳定版本: 1.4.21

1
2
3
4
5
6
[iyunv@lw-01 ~]# cd /usr/src  ;wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gz  
   
[iyunv@lw-01 ~]# tar xzf haproxy-1.4.21.tar.gz
[iyunv@lw-01 ~]# cd haproxy-1.4.21
[iyunv@lw-01 ~]# make  TARGET = linux26   PREFIX =/usr/local/haproxy
[iyunv@lw-01 ~]# make install  PREFIX =/usr/local/haproxy



安装完毕,在/usr/local/haproxy/目录下会看到三个目录:doc、sbin、share

2) 接下来配置 HAProxy 。

然后在 /usr/local/haproxy 下新建 haproxy.cfg 文件:

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
[iyunv@lw-01 ~]# cd /usr/local/haproxy
[iyunv@lw-01 haproxy]# vi haproxy.cfg
global               #全局设置
       log 127.0.0.1   local0      #日志输出配置,所有日志都记录在本机,通过local0输出
       #log loghost    local0 info
       maxconn 4096             #最大连接数
       chroot /usr/local/haproxy
       uid 99                   #所属运行的用户uid
       gid 99                   #所属运行的用户组
       daemon                   #以后台形式运行haproxy
       nbproc 1                 #启动1个haproxy实例
       pidfile /usr/local/haproxy/haproxy.pid  #将所有进程写入pid文件
       #debug
       #quiet
defaults             #默认设置
       #log    global
       log     127.0.0.1       local3         #日志文件的输出定向
       mode    http         #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
       option  httplog       #日志类别,采用httplog
       option  dontlognull
       option  forwardfor   #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
       option  httpclose    #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只>能模拟这种模式的实现
       retries 3           #3次连接失败就认为服务器不可用,主要通过后面的check检查
       option  redispatch   #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
       maxconn 2000                     #最大连接数
stats  enable
stats   uri     /haproxy-admin  #haproxy 监控页面的访问地址
       timeout connect      5000            #连接超时时间
       timeout client       50000           #客户端连接超时时间
       timeout server       50000           #服务器端连接超时时间
stats auth  liuwei:liuwei   #设置监控页面的用户和密码:Frank
stats hide-version         #隐藏统计页面的HAproxy版本信息
#frontend http-in                        #前台
#       bind *:81
#       mode    http
#       option  httplog
#       log     global
#       default_backend htmpool       #静态服务器池
#
#backend htmpool                    #后台
#       balance leastconn#负载均衡算法
#       option  httpchk HEAD /index.html HTTP/1.0       #健康检查
#       server  web1 192.168.2.10:80 cookie 1 weight 5 check inter 2000 rise 2 fall 3
#       server  web2 192.168.2.11:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
listen  web_proxy 0.0.0.0:81
        option  httpchk GET /index.html
        server  s1 192.168.2.10:80 weight 3 check
        server  s3 192.168.2.11:80 weight 3 check
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重



3) 然后启动 haproxy ,如下执行启动命令:

1
2
3
4
5
6
7
8
9
10
启动服务:
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
  
[WARNING] 217/202150 (2857) : Proxy 'chinaapp.sinaapp.com': in multi-process mode, stats will be limited to process assigned to the current request.

重启服务:
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid`

停止服务:
# killall haproxy



会提示如上[WARING]信息,nbproc进程如果设置为1则不会提示,如果想去掉这个提示可以修改编译文件即可。 在源码配置src/cfgparse.c找到如下行

if (nbproc > 1) { if (curproxy->uri_auth) { - Warning("Proxy '%s': in multi-process mode, stats will be limited to process assigned to the current request.\n",
+ Warning("Proxy '%s': in multi-process mode, stats will be limited to the process assigned to the current request.\n",

调整nbproc > 1数值即可。
    4)
设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:
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
# vim /etc/rc.d/init.d/haproxy  内容如下:
#! /bin/sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/$PROGNAME.conf
PIDFILE=$PROGDIR/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
       echo -n "Starting $DESC: $PROGNAME"
       $DAEMON -f $CONFIG
       echo "."
}
stop()
{
       echo -n "Stopping $DESC: $PROGNAME"
       haproxy_pid=cat $PIDFILE
       kill $haproxy_pid
       echo "."
}
restart()
{
       echo -n "Restarting $DESC: $PROGNAME"
       $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
       echo "."
}
case "$1" in
start)
       start
       ;;
stop)
       stop
       ;;
restart)
       restart
       ;;
*)
       echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
       exit 1
       ;;
esac
exit 0




保存后赐予可执行权限
1
# chmod +x /etc/rc.d/init.d/haproxy



并通过以下命令加载到开机服务启动列表
1
# chkconfig --add haproxy




三、安装 Keepalived:

1
2
3
4
5
6
7
cd /usr/src ;
wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz
tar xzf keepalived-1.2.1.tar.gz
cd keepalived-1.2.1 &&
./configure --with-kernel-dir =/usr/src/kernels/2.6.32-71.el6.x86_64/
make &&make install
DIR =/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/ && cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived  && cp $DIR/sbin/keepalived /usr/sbin/



四、配置 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
! Configuration File for keepalived
global_defs {
notification_email {
wgkgood@139.com
}
notification_email_from wgkgood@139.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
  script "/data/sh/check_haproxy.sh"
  interval 2
  weight 2
  }
# VIP1
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  lvs_sync_daemon_inteface eth0
  virtual_router_id 151
  priority 100
  advert_int 5
  nopreempt
  authentication {
    auth_typePASS
    auth_pass 2222
    }
  virtual_ipaddress {
    192.168.0.133
     }
  track_script {
    chk_haproxy
   }
}



五、创建haproxy脚本:

设置可执行权限 chmod +x check_haproxy.sh ,内容如下:

1
2
3
4
5
6
7
#!/bin/bash  
#auto check haprox process
#2012-8-12 wugk
killall -0 haproxy
if [[ $? -ne 0 ]];then
  /etc/init.d/keepalived stop
fi





BACKUP 同样如上配置 haproxy 、 keepalived ,配置完修改优先级为 90 即可,然后启动。

六、测试 haproxy+keepalived :

如图当手动 kill 掉 131 的 haproxy 进程后, 130 的 keepalived 后台日志显示如下,并且访问 VIP 192.168.0.133 正常访问:


访问haproxy status如下图:



运维网声明 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-45810-1-1.html 上篇帖子: HAProxy匹配泛解析域名排错经历 下篇帖子: 企业级高可用Web架构之HAProxy+Keepalived
累计签到:15 天
连续签到:1 天
发表于 2015-6-15 09:35:30 | 显示全部楼层
有虚拟机测试环境吗!

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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