RHEL6.6_x86_64

主要软件:

    keepalived-1.2.16.tar.gz

    ipvsadm-1.26-4.el6.x86_64.rpm

 

Keepalived是一种高性能的服务器高可用解决方案,架构不同于corosyncheartbeatKeepalived的实现是基于VRRPVirtual Router Redundancy Protocol,虚拟路由冗余协议),VRRP是一种容错协议。一个网络内的所有主机都设置有一条默认路由,这样,主机发出的目的地址不在本网段的报文将通过默认路由发送往RouterA,从而实现主机与外网通信。当RouterA挂掉,本网段中所有以RouterA为默认路由下一跳的主机将不能与外网通信。VRRP就是解决这一问题而出现的。

VRRP将局域网的(两台或以上)路由器虚拟成一个设备,对外提供虚拟路由器IP,在路由器组内部,若实际拥有这个对外IP的路由器工作正常的话就是MASTERMASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,数据转发等。其他设备不拥有该IP,则是BACKUPBACKUP只接收MASTERVRRP状态通告信息。当MASTER宕掉,BACKUP接管MASTER的网络功能。

 

                             wKioL1WnbNfid2NnAAFN5E5FngE725.jpg

在这个结构图里,处于下端的是内核空间,它包括 ipvs NETLINK 两个部分。netlink 提供高级路由及其他相关的网络功能,如果我们在负载均衡器上启用 netfilter/iptable,将会直接影响它的性能。出于图形上方的组件为用户空间,

1 WatchDog 负责监控 checkers VRRP 进程的状况。

2 Checkers 负责真实服务器的健康检查 healthchecking,是 keepalived 最主要的功能。

3 VRRP Stack 负责负载均衡器之间的失败切换 FailOver. 如果只用一个负载均衡器,则VRRP 不是必须的。

4 IPVS wrapper 用来发送设定的规则到内核 ipvs 代码。

5 Netlink Reflector 用来设定 vrrp vip 地址等。


 

Master_DS : 192.168.1.5 

Backup_DS : 192.168.1.8

RS1:192.168.1.6

RS2: 192.168.1.7

VIP: 192.168.1.10

 

编译安装keepalived

# tar xf keepalived-1.2.16.tar.gz
# cd keepalived-1.2.16
# ./configure --prefix=/usr/local/keepalived --sysconfdir=/etc
# make
# make install

 

配置keepalived

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
   #keepalived状态切换时通知email出现故障,邮件报警
   root@localhost
   }
   notification_email_from keepalived@localhost #
指定发件人
   smtp_server 127.0.0.1  #smtp
服务器地址
   smtp_connect_timeout 30 #smtp
连接超时时间
   router_id LVS_DEVEL    #
运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
    state MASTER         #
配置为主
    interface eth1       #
通讯网卡
    virtual_router_id 51 #
路由标识
    priority 100         #
优先级
    advert_int 1         #
通告时间间隔:发送通告报文的时间间隔。在VRRPVersion2中单位为秒,默认值为1秒。
    authentication {
        auth_type PASS
        auth_pass 1111  #
验证密码,通讯主机间验证
    }
    virtual_ipaddress {  #
虚拟IP地址
        192.168.1.10/24 dev eth1 label eth1:0
    }
}
virtual_server 192.168.1.10 80 {
    delay_loop 6
    lb_algo rr    # rr
调度算法, 有rr|wrr|lblc|sh|sh
    lb_kind DR    # DR
模型
    nat_mask 255.255.255.0
    #persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80  #
所有RS故障,重定向到本机


    real_server 192.168.1.6 80 { 
        weight 1    #
权重,0为失效
        TCP_CHECK {
            connect_timeout 3    #
连接超时时间
            nb_get_retry 3       #
重试次数
            delay_before_retry 3#
重试时间间隔
        }
    }
    real_server 192.168.1.7 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

# yum install ivsadm

 

192.168.1.8主机中

安装keepalived192.168.1.5

配置文件中:

    “state MASTER" 改为 ”state BACKUP"

    "priority 100"改为比100小的值,这里改为“priority 70".

# yum install ipvsadm

 

 

配置Real server

 

编写Real Server脚本

#/bin/bash
# Author xiaoming
# mail: xiaoming.linux@gmail.com

VIP=192.168.1.10
. /etc/init.d/functions
case "$1" in
    start)
   echo "Start Real Server "
   /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
   route add -host $VIP dev lo:0
   echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
   echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
   echo 2 > /proc/sys/net/ipv4/conf/eth1/arp_announce
   echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
   ;;
     stop)
    echo "Stop Real Server"
    /sbin/ifconfig lo:0 down
    route del $VIP
    echo 0 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/eth1/arp_announce
   ;;
    *)
   echo "Usage: $0 {start|stop}"
   exit 1
esac

分别在Real Server1Real Server2上执行此脚本

 

配置完毕,分别在director server上启动keepalived服务,

# service keepalivedstart

 

 

查看LVS路由表信息

# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.10:80 rr
  -> 192.168.1.6:80               Route   1      0          0  
  -> 192.168.1.7:80               Route   1      0          0