Haproxy+KeepAlived 负载均衡

客官°小女子只卖身不卖艺 2022-03-12 07:08 318阅读 0赞

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。还可以使用nginx来实现,不过nginx只工作在7层网络之上。详细请参考抚琴煮酒写的“软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比”这篇文章,简单很详细,很好。

HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当 前,HAProxy支持两种主要的代理模式:”tcp”也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

我现在用HAProxy主要在于它有以下优点,这里我总结下:

一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;

二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的;

三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;

自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;

HAProxy支持虚拟主机。

#

1.实验环境

  1. 系统版本:CentOS release 5.9 (Final) x86 32
  2. HAProxy版本:1.4.8
  3. Keepalived版本:1.2.4
  4. MASTER_IP:192.168.207.130
  5. BACKUP_IP:192.168.207.131
  6. VIP:192.168.207.141
  7. WEB_1:192.168.207.129 80端口
  8. WEB_2:192.168.207.130 8080端口
  9. WEB_3:192.168.207.131 8080端口

iptables和selinux都关掉

2.Haproxy安装

  1. cd /usr/local/src
  2. mkdir haproxy
  3. cd haproxy
  4. wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
  5. tar xf haproxy-1.4.8.tar.gz
  6. cd haproxy-1.4.8
  7. make TARGET=linux26;make install
  8. #这里你也可以这样写make TARGET=linux26 --prefix=/usr/local/haproxy,给haproxy安装添加个路径

写haproxy的配置文件,主从都一样的,都用这个配置文件

  1. useradd haproxy
  2. vi /etc/haproxy.cfg

内容如下:

  1. global
  2. log 127.0.0.1 local0 #这个是日志
  3. maxconn 65535
  4. user haproxy
  5. group haproxy
  6. daemon #以后台进程的方式打开
  7. nbproc 8 #haproxy的进程数
  8. pidfile /tmp/haproxy.pid
  9. defaults
  10. log 127.0.0.1 local3
  11. mode http
  12. option httplog
  13. option httpclose
  14. option dontlognull
  15. option forwardfor
  16. option redispatch
  17. retries 2
  18. maxconn 65535
  19. balance roundrobin #为了更好的观察出结果,这里就用roundrobin简单轮训,source算法了
  20. stats uri /web-status #这个是管理的url地址,配好后,只要输入http://ip或者VIP/web-status就可以访问了
  21. contimeout 5000
  22. clitimeout 50000
  23. srvtimeout 50000
  24. listen web_vip 0.0.0.0:80 #这里也要注意千万不要绑定VIP地址,keepalived主服务器还可以,但是备份服务器是不行的,因为只有keepalived是主的时候,才会在此服务器上设定VIP,所以咯,就用0.0.0.0吧
  25. mode http
  26. option httplog
  27. log global
  28. option httpchk HEAD /index.html HTTP/1.0 #这里呢,你得在三台web服务器上分别建立个index.html页面,可以添加不同的内容,给待会测试用,内容分别填写129:80,130:8080,131:8080好了,如果没有,haproxy会认为对应的web服务器挂掉了。
  29. server web1 192.168.207.129:80 weight 5 check inter 2000 rise 2 fall 3
  30. server web2 192.168.207.130:8080 weight 5 check inter 2000 rise 2 fall 3
  31. server web3 192.168.207.131:8080 weight 5 check inter 2000 rise 2 fall 3

这个说一下啊,如果不懂haproxy的配置参数呢,可以到 http://cbonte.github.io/haproxy-dconv/configuration-1.4.html这里

搜索一下关键词,就有解释了,挺方便的,不过是英文,嗯,你自己看着办吧

这里还说一下啊,HAProxy的算法现在也越来越多了,具体有如下8种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
②static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

在web服务器都打开的情况下,运行

  1. haproxy -f /etc/haproxy.cfg

这是后已经是个haproxy+3个web的负载均衡模式了

可以再浏览器上输入http://haproxy\_ip地址 来感受一下haproxy的运行方式

在url加上/web-status就可以访问管理界面了

3.安装keepalived

  1. wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
  2. tar -zxvf keepalived-1.2.4.tar.gz
  3. cd keepalived-1.2.4
  4. ./configure --prefix=/usr/local/keepalived
  5. make && make install
  6. cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
  7. cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  8. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  9. mkdir -p /etc/keepalived/
  10. cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  11. chmod +x /etc/init.d/keepalived

写keepalived的配置文件

  1. vi /etc/keepalived/keepalived.conf

内容如下:

  1. # Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_DEVEL
  4. }
  5. vrrp_script chk_http_port {
  6. script "/etc/keepalived/checkHaproxy.sh"
  7. interval 2
  8. weight 2
  9. }
  10. vrrp_instance VI_1 {
  11. state MASTER #从keepalived这里改成BACKUP
  12. interface eth0
  13. virtual_router_id 51
  14. priority 104 #从keepalived这里改成100吧,只要从比主小就行,数字是从0~255,数字越大权重越大
  15. advert_int 1
  16. authentication {
  17. auth_type PASS
  18. auth_pass 1111
  19. }
  20. track_script {
  21. chk_http_port
  22. }
  23. virtual_ipaddress {
  24. 192.168.207.141
  25. }
  26. }

几个注意点:

  1. /etc/keepalived/checkHaproxy.sh 一定要加上可执行权限,例如chmod +x /etc/keepalived/checkHaproxy.sh

  2. 配置文件写正规些吧,大括号{},要与前面的关键字留有一个空格

写/etc/keepalived/checkHaproxy.sh脚本,如下:

  1. #!/bin/bash
  2. A=`ps -C haproxy --no-header | wc -l`
  3. if [ $A -eq 0 ];then
  4. /usr/local/sbin/haproxy -f /etc/haproxy.cfg
  5. echo "Haproxy start"
  6. sleep 3
  7. if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then
  8. /etc/init.d/keepalived stop
  9. echo "keepalived stop"
  10. fi
  11. fi

意思就是先检查haproxy是否启动,如果没有先启动haproxy进程,启动不了则关闭keepalived进程,那边从keepalived,将立马编程主进程,继续工作

这个脚本可以自己写啦,还是挺简单的

4.打开服务,验证

其实就是把3个web服务打开

让后在打开两个主从keepalived服务器,而且keepalived会自动打开haproxy服务的,因为有/etc/keepalived/checkHaproxy.sh吗,哈哈

都打开后,访问http://192.168.207.141就可以轮回访问3个web服务器的内容啦

所以服务打开后,可以在主keepalived上运行

  1. ip addr

将会看到eth0多了个VIP的虚拟地址

为了了解keepalived的作用呢

先把主服务器的keepalived给关掉

  1. /etc/init.d/keepalived stop

查看从keepalived的/var/log/messages日志,可以看到

  1. Apr 18 12:20:23 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
  2. Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
  3. Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
  4. Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.141
  5. Apr 18 12:20:24 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.141 added
  6. Apr 18 12:20:24 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.141 added
  7. Apr 18 12:20:24 localhost avahi-daemon[4208]: Registering new address record for 192.168.207.141 on eth0.

是的吧,访问http://192.168.207.141呢,还是正常访问,

在把主keepalived服务打开,就可以看到

  1. Apr 18 12:20:29 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.141
  2. Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert
  3. Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
  4. Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
  5. Apr 18 12:21:07 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.141 removed
  6. Apr 18 12:21:07 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.141 removed
  7. Apr 18 12:21:07 localhost avahi-daemon[4208]: Withdrawing address record for 192.168.207.141 on eth0.

这里附上haproxy管理页面的图片,以及一个小实验

访问http://192.168.207.141/web-status,可以看到如下画面

1366264404_4798.png

可以看到后端的3个web服务器都是好的,

这时候呢,我把web3的web服务给关了,因为我用的是apache,所以直接运行service httpd stop

然后可以看到

1366264552_7928.png

明白了,然后访问http://192.168.207.141也不会出现web的index.html页面了

ok,搞定了,实践亲测,祝君成功

发表评论

表情:
评论列表 (有 0 条评论,318人围观)

还没有评论,来说两句吧...

相关阅读

    相关 负载均衡

    对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限...

    相关 负载均衡

    近来面试有被问到负载均衡,整理一下我所理解的。 一、 负载均衡(Load Balance):负载均衡的意思是分摊到多个处理机制,已达到各处理机制使用率最大化。这个使用率

    相关 负载均衡

    一、计算机集群 1、什么是计算机集群    计算机集群简称集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,

    相关 负载均衡

    定义 > 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外供应效力而无需其他服务器的辅助。经过某种负载分管技术,将外部发送

    相关 负载均衡

    一、什么是负载均衡(Load balancing) 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的