keepalived+lvs集群的搭建

                              

keepalived是专门用来监控集群系统中各个服务节点的状态,因为默认的LVS都需要通过调度节点(directory server,及要实现负载均衡的那台机子)。因为默认从所有客户端近来的请求都要跑到这个节点上,如果一旦这台机子出现了问题,那么整个lvs系统就会崩溃。这样的问题就是常说的单点故障。单点故障,是绝对不允许在一个健康的系统中出现的,因为一旦其中的一个服务器挂掉的话,整个系统就会处于瘫痪状态。因此我们可以使用lvs+keepalived的方案来解决这一问题.

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

下面就来看下一个完整的基于keepalived+lvs构建负载均衡的实现过程。

   安装keepalived:
   tar -zxvf keepalived-1.1.19.tar.gz
   cd keepalived-1.1.19
   ./configure --sysconf=/etc --with-kernel-dir=/usr/local/kernels/2.6.18-8.el5-i686
   make
   make install
   ln -s /usr/local/sbin/keepalived /sbin/
   (sysconf指定了keepalived配置文件的安装路径,with-kernel-dir是试用内核源码中的头文件)
   
    安装LVS软件:
   系统安装完成以后,可以通过modprobe -l | grep ipvs检查kernel是否已经支持了LVS的ipvs模块
   如果支持了,就可以安装ipvs软件了    
   在directroy server上安装ipvsadm  yum install ipvsadm*
   ipvsadm --help 如果看到提示信息证明ipvs已经安装成功   
   
    下面看下lvs集群实验的搭建
   我的实验环境: 外部的windows机子充当客户端(192.168.1.10),主directory server(192.192.168.1.11),备用directory server(192.168.1.12),real server1(192.168.1.100),real server2(192.168.1.200),vip(192.168.1.20)
  
1.在real server上的配置:
创建文件/etc/init.d/lvsrs
#!/bin/bash
VIP 192.168.1.20
case "$1" in
    start)
    echo "start lvs of real server "
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    ;;
    stop)
    /sbin/ifconfig lo:0 down
    echo "stop lvs of real server "
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    ;;    
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
esac    
chmod a+x /etc/init.d/lvsrs
service lvsrs {start|stop}



解释一下上面脚本,我们在lo本地回环网卡上绑定了一个vip(192.168.1.20),让广播地址也为vip,注意下后面的子网掩码不是我们常见的255.255.255.0,而是255.255.255.255。因为在一个网卡上面绝对不允许配置相同的ip网段,把广播地址设置成vip和子网掩码设置成255.255.255.255为0可以解决这个问题。下面的脚本是arp的忽略和arp的宣誓。这4行有什么用呢?设想一下,当我们去访问192.168.1.20这个网络地址的时候,会访问谁呢?现在的网络中会有3台机子都拥有这个ip地址,echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore的作用就是判断过来的请求是否是机子的真实网卡上的地址,如果不是的话,我忽略它。这样的话,就不会去请求两台real server了。这个时候就会去请求主directory server上绑定的vip,然后dr到rear server上。这个时候echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce,会访问到real server上的虚拟ip上,这个时候做arp的宣誓,就可以让它访问。

2.在主,备director server上配置keepalived
keepalived仅需要一个配置文件就可以完成对HA cluster和LVS服务节点监控,在通过keepalived搭建
高可用的LVS集群实例中,主,备directory server都需要安装keepalived软件,默认的配置文件在
/etc/keepalived/keepalived.conf,一个完整的keepalived配置文件由3个部分组成,分别是全局
定义部分,vrrp实例定义部分以及虚拟服务器定义部分.下面是配置文件的详细信息:(主directory server)

  //注:keepliaved下面的部分大多是借鉴南非蚂蚁的高性能linux运帷一本书上的内容。  

   #全局定义部分
   global_defs {
       notification_email{
           1547840014@qq.com   #设置报警邮件地址,可以设置多个,每行一个。需要开启邮件服务功能
           1547840014@qq.com
       }
       notification_email_from  keepalived@localhost  #设置邮件的发送地址
       smtp_server 192.168.200.1   #设置smtp server地址
       smtp_connect_timeout 30    #设置连接smtp server的超时时间
       router_id  LVS_DEVEL     #表示运行keepalived服务器的一个标识,发邮件时显示在邮件主题中的信息
   }
   
   vrrp_instance VI_1 {
       state MASTER      #指定keepalived的角色,MASTER表示此主机是主服务器,#BACKUP表示此主机是备份服务器
       interface eth0    #指定HA检测网络的接口
       virtual_router_id  51  #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个
                              vrrp_instance下,MASTER和BACKUP必须是一致的
       priority  100    #定义优先级,数字越大,优先级越高.在一个vrrp_instance下,MASTER的优先级必须大于BACKUP    
       advert_int 1      #设定master和backup负载均衡器之间同步检查的时间间隔,单位是秒
       authentication{  #设定验证类型和密码
           auth_type PASS   #设置验证类型,主要有HA和PASS两种
           auth_pass 1111   #设置验证密码,在一个vrrp_instance下,MASTER和BACKUP必须使用相同的密码才能正常通信
       }
       virtual_ipaddress{   #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
           192.168.1.20
       }
   }
   #虚拟服务器定义部分
   virtual_server 192.168.1.20 80 {  #设置虚拟服务器,需要指定虚拟服务器IP地址和服务端口,IP与端口之间用空格隔开
        delay_loop  6   #设置运行健康检查时间,单位是秒
        lb_algo  rr     #设置负载均衡调度算法,这里设置为rr,即轮询算法
        lb_kind  DR        #设置lvs实现负载均衡的机制,有NAT,TUN,DR三个模式可选
        persistence_timeout 50  #回话保持时间,单位是秒。这个对网页很有用,为session共享提供了好的方案
        protocol TCP    #指定转发协议类型,有TCP和UDP两种
        real_server 192.168.1.100 80{  #指定真实服务器的ip地址和端口,之间用空格隔开
            weight 3   #权值
            TCP_CHECK{  #realserver的状态检测设置部分,单位是秒
                connect_timeout 3  #表示3秒无响应超时
                nb_get_retry    3  #表示重试次数
                delay_before_retry  3  #表示重试间隔
            }
        }
        real_server 192.168.1.200 80{  
            weight 3   #权值
            TCP_CHECK{  
                connect_timeout 3  
                nb_get_retry    3  
                delay_before_retry  3  
            }
        }
    }
注意在配置keepalived.conf的时候,就算配置文件错误,keepalive也会正常启动,所以一定要保证配置的正确性
然后把该文件复制到192.168.1.12上去(备directory server)  
rsync -av keepalived.conf 192.168.1.12:/etc/keepalived/keepalived.conf,完成下面的修改:
state MASTER修改为state BACKUP
priority  100修改为priority 80
注意:主directory server上也需要添加虚拟ip,在eth0:0网卡上添加即可,备directory server不需要
ifconfig eth0:0 192.168.1.20 netmask 255.255.255.255 up
route add -n 192.168.1.20 dev eth0:0
主directory和备用directory都需要开启路由管道


3.启动keepalived+lvs集群
在主,备directory server上分别启动keepalived服务
/etc/init.d/keepalived start
接着在两个real server上执行如下脚本:
/etc/init.d/lvsrs start
检查ipvsadm能否识别机器
ipvsadm -ln
如果出现ipvsadm -L的详细转发机子信息,则证明配置成功


经过上面的一些步骤后,lvs+keepalived的实验就已经完成了。现在可以人为的把主directory server的apache服务器給挂掉,看看新来的请求还能到达不,如果到达的话,说明lvs+keepalived的实验就已经成功。在我的实验环境下,经过上面的步骤后没有问题,如果中途有什么错误的话,可以看下/var/log下的文件,里面有比较详细的纪录信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值