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

[经验分享] Haproxy+Keepalived实现负载均衡

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-5 09:19:25 | 显示全部楼层 |阅读模式
目录

一、Haproxy和Keepalived简介

二、实验环境

三、安装配置后端服务器

四、安装配置Haproxy

五、安装配置Keepalived

六、验证

一、Haproxy和Keepalived简介
什么是Haproxy?
    HAProxy,是免费、快速并且可靠的一种解决方案。特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
        HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
什么是Keepalived?
    Keepalived是一个高可用解决方案,通过虚拟IP地址和心跳检测对方状态来实现高可用功能。Keepalived由两台服务器分别指定Master与Backup两个角色,而指定Master的优先级比Backup的高;所以默认情况下虚拟IP会绑定到Master服务器上,对外提供服务。而Master、Backup服务器会在一定的时间间隔向对方发送心跳信息来检测对方的存活状态,时间间隔一般为2秒钟可以修改,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,然后把虚拟IP绑定到自己的网卡上,此时Backup对外提供服务,实现了自动化的故障转移,当Master恢复的时会重新接管所有资源。

二、实验环境

系统版本: CentOS 6

Keepalived版本: keepalived-1.2.7

下载地址:http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

Haproxy版本: Haproxy-1.4.24

拓扑介绍:

    前端HA1与HA2服务器上安装Keepalived+Haproxy软件,两台服务器互为主备而初始状态是每台服务器上各有一个虚拟IP地址(HA1的VIP:172.16.14.10 HA2的VIP:172.16.14.11);后台WEB1与WEB2服务器上面安装Apache软件实现负载均衡;而LAMP服务器只负责解析php程序,当用户访问的是静态页面时会由前端调度器分发到处理静态请求的服务器,如果访问的是php的动态页面,将会被分发到lamp动态服务器进行处理,实现了动、静分离的效果。
QQ截图20151105091815.png


三、安装配置后端服务器

1、安装LAMP服务器并测试
1
2
3
4
5
6
7
8
[iyunv@lamp~]# yum -y install httpd php mysql-server
######创建测试页
[iyunv@lamp~]# vim /var/www/html/index.php
<h1>LAMP:172.16.14.5</h1>
<?php
phpinfo();
[iyunv@lamp~]# service httpd start
[iyunv@lamp~]# chkconfig httpd on



QQ截图20151105091827.png 2、安装WEB1服务器的HTTPD服务并访问测试
1
2
3
4
[iyunv@WEB1~]# yum -y install httpd
[iyunv@WEB1~]# service httpd start
[iyunv@WEB1~]# chkconfig httpd on
[iyunv@WEB1 ~]# echo "<h1>WEB1:172.16.14.3</h1>"> /var/www/html/index.html



wKiom1Y5t9CCK_QMAABTVGOE-P8337.jpg
3、安装WEB2服务器的HTTPD服务并访问测试
1
2
3
4
[iyunv@WEB2~]# yum -y install httpd
[iyunv@WEB2~]# service httpd start
[iyunv@WEB2~]# chkconfig httpd on
[iyunv@WEB2~]# echo "<h1>WEB2:172.16.14.4</h1>" >/var/www/html/index.html



wKioL1Y5uHChIQ6IAACRJFXUDzE466.jpg

四、安装配置Haproxy
1、在HA1服务器安装Haproxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
安装开发环境
[iyunv@HA1~]# yum -y install gcc gcc-c++
[iyunv@HA1~]# tar xf haproxy-1.4.24.tar.gz
[iyunv@HA1~]# cd haproxy-1.4.24
[root@HA1haproxy-1.4.24]# uname -r
2.6.32-358.el6.x86_64
[root@HA1haproxy-1.4.24]# make TARGET=linux26 ARCH=x86_64
[root@HA1haproxy-1.4.24]# make install
注意:TARGET指定内核版本,而uname -r是查看内核版本;ARCH指定CPU架构
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
为Haproxy提供主配置文件与服务脚本,并将其添加到系统服务
[root@HA1haproxy-1.4.24]# mkdir /etc/haproxy
[root@HA1haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy
[root@HA1haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
[root@HA1haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@HA1haproxy-1.4.24]# chmod +x /etc/init.d/haproxy
[root@HA1haproxy-1.4.24]# chkconfig --add haproxy



2、修改主配置文件
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
创建Haproxy的工作目录
[iyunv@HA1 ~]#mkdir /usr/share/haproxy
[iyunv@HA1 ~]#vim /etc/haproxy/haproxy.cfg
# this configneeds haproxy-1.1.28 or haproxy-1.2.1
global
    log127.0.0.1   local0        #日志配置,所有日志都记录在本地,通过local0输出
    log127.0.0.1   local1 notice
    maxconn25600                 #最大连接数
    chroot /usr/share/haproxy     #改变Haproxy的工作目录
    uid99                        #用户的UID
    gid99                        #用户的GID
    nbproc1                      #进程数据(可以设置多个)
    daemon                        #以后台守护进程方式运行Haproxy
    #debug                       #是否开启调试
defaults
    logglobal        
    mode   http                  #默认使用协议,可以为{http|tcp|health}http:是七层协议 tcp:是四层 health:只返回OK
    option httplog               #详细记录http日志
    option dontlognull           #不记录健康检查的日志信息
    retries3                     #3次连接失败则认为服务不可用
    option redispatch            #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器
    maxconn30000                 #默认的最大连接数
    contimeout 5000              #连接超时
    clitimeout 50000             #客户端超时
    srvtimeout 50000             #服务器超时
    timeoutcheck  1s            #心跳检测超时
    timeouthttp-request    10s   #默认http请求超时时间
    timeoutqueue          1m    #默认队列超时时间
    timeoutconnect         10s   #默认连接超时时间
    timeoutclient         1m    #默认客户端超时时间
    timeoutserver         1m    #默认服务器超时时间
    timeouthttp-keep-alive 10s   #默认持久连接超时时间
listen stats
    modehttp
    bind0.0.0.0:8090             #指定IP地址与Port
    stats enable                  #开启Haproxy统计状态
    statsrefresh3s              #统计页面自动刷新时间间隔
    statshide-version            #状态页面不显示版本号
    statsuri   /allen            #统计页面的uri为"/allen"
    statsrealm Haproxy\ allen    #统计页面认证时提示内容信息
    statsauth  admin:admin       #统计页面的用户名与密码
    statsadmin if TRUE           #启用或禁用状态页面
frontendallen                    #定义前端服务器
    bind*:80
    modehttp
    optionhttpclose              #每次请求完成主动关闭http连接
    optionforwardfor             #后端服务器获取客户端的IP地址,可以从httpheader中获取
    aclurl_static path_end -i .html .jpg .gif #定义ACL规则以如".html"结尾的文件;-i:忽略大小写
    aclurl_dynamic path_end -i .php
    default_backendwebservers    #客户端访问时默认调用后端服务器地址池
    use_backendlamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配
backendwebservers                #定义后端服务器
    balanceroundrobin            #定义算法;基于权重进行轮询
    serverweb1 172.16.14.3:80 check rise 2 fall 1 weight 2
    serverweb2 172.16.14.4:80 check rise 2 fall 1 weight 2
backend lamp
    balance source            #定义算法;源地址hash运算;类似于Nginx的ip_hash
    serverlamp 172.16.14.5:80 check rise 2 fall 1
注意:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,超重越高



3、启动Haproxy服务并做访问测试
1
[iyunv@HA1 ~]#service haproxy start



QQ截图20151105091838.png
4、在HA2服务器上安装Haproxy,方法相同,不再赘述

五、安装配置Keepalived
1、在HA1与HA2服务器上安装Keepalived
1
2
[iyunv@HA1~]# yum -y install keepalived
[iyunv@HA2~]# yum -y install keepalived



2、修改HA1服务器的主配置文件
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
[iyunv@HA1~]# vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs{
   notification_email{
    root@localhost
   }
   notification_email_fromadmin@allen.com
   smtp_server127.0.0.1
   smtp_connect_timeout30
   router_idLVS_ALLEN
}
vrrp_scriptchk_proess {
    script "killall-0 haproxy"
    interval1
    weight-2
}
vrrp_instanceha_1 {
    stateMASTER
    interfaceeth0
    virtual_router_id56
    priority100
    advert_int1
    authentication{
        auth_typePASS
        auth_pass1056
    }
    virtual_ipaddress{
    172.16.14.10
    }
    track_script{
        chk_proess
    }
}
vrrp_instanceha_2 {
    stateBACKUP
    interfaceeth0
    virtual_router_id58
    priority92
    advert_int1
    authentication{
        auth_typePASS
        auth_pass1058
    }
    virtual_ipaddress{
    172.16.14.11
    }
}



3、修改HA2服务器的主配置文件
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
[iyunv@HA2~]# vim /etc/keepalived/keepalived.conf
!Configuration File for keepalived
global_defs{
   notification_email{
    root@localhost
   }
   notification_email_fromadmin@allen.com
   smtp_server127.0.0.1
   smtp_connect_timeout30
   router_idLVS_ALLEN
}
vrrp_scriptchk_proess {
    script "killall-0 haproxy"
    interval1
    weight-2
}
vrrp_instanceha_1 {
    stateBACKUP
    interfaceeth0
    virtual_router_id56
    priority99
    advert_int1
    authentication{
        auth_typePASS
        auth_pass1056
    }
    virtual_ipaddress{
    172.16.14.10
    }
}
vrrp_instanceha_2 {
    stateMASTER
    interfaceeth0
    virtual_router_id58
    priority93
    advert_int1
    authentication{
        auth_typePASS
        auth_pass1058
    }
    virtual_ipaddress{
    172.16.14.11
    }
    track_script{
        chk_proess
    }
}



4、启动Keepalived服务并查看HA1与HA2服务器上的虚拟IP地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@HA1~]# service keepalived start
[iyunv@HA1~]# ip addr show eth0
2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000
    link/ether 00:0c:29:2c:1a:24 brd ff:ff:ff:ff:ff:ff
    inet172.16.14.1/16 brd 172.16.255.255 scope global eth0
    inet172.16.14.10/32 scope global eth0
    inet6fe80::20c:29ff:fe2c:1a24/64 scope link
       valid_lftforever preferred_lft forever
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[iyunv@HA2~]# service keepalived start
[iyunv@HA2~]# ip addr show eth0
2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000
    link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet172.16.14.2/16 brd 172.16.255.255 scope global eth0
    inet172.16.14.11/32 scope global eth0
    inet6fe80::20c:29ff:feec:f63f/64 scope link
       valid_lftforever preferred_lft forever




六、验证
1、访问验证服务器的负载均衡功能
wKiom1Y5uo3AAJsTAACHAyGpmd0215.jpg
wKiom1Y5uo3ygrvuAABxYvMrDhg949.jpg
2、验证是否实现动、静分离的效果
QQ截图20151105091847.png
3、模拟前端服务器中的一台出现故障,来验证IP地址能否自动切换到备份服务器上
1
2
3
4
5
6
7
8
9
10
11
12
13
停止HA1服务器的haproxy服务
[iyunv@HA1~]# service haproxy stop

查看HA2服务器的IP地址
[iyunv@HA2~]# ip addr show eth0
2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000
    link/ether 00:0c:29:ec:f6:3f brd ff:ff:ff:ff:ff:ff
    inet172.16.14.2/16 brd 172.16.255.255 scope global eth0
    inet172.16.14.11/32 scope global eth0
    inet172.16.14.10/32 scope global eth0
    inet6fe80::20c:29ff:feec:f63f/64 scope link
       valid_lftforever preferred_lft forever
VIP已成功切换到HA2服务器;如果将服务器修好后上线,则VIP会切换回原来的服务器。



运维网声明 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-135250-1-1.html 上篇帖子: HAproxy的简单应用和基础知识 下篇帖子: haproxy+heartbeat的两种方案(注意,备服务器vip,正常haproxy启动方法)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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