keepalived高可用的经常使用功能介绍

Keepalived的作用是检測webserver的状态,假设有一台webserver死机,或工作出现问题,Keepalived将检測到,并将有故障的webserver从系统中剔除,当webserver工作正常后Keepalived自己主动将webserver增加到server群中。这些工作所有自己主动完毕,不须要人工干涉,须要人工做的仅仅是修复故障的webserver。本篇文章会介绍keepalived的安装。配置,还有keepalived的一些脚本,keepalived+nginx高可用实现和keepalived双机互为主从的实现。



keepalived环境安装:
centos6.5上默认提供的keepalived版本号为1.2.7的版本号。可是官网最新的版本号已经为1.2.13,所以这里我们源代码的方式来安装keepalived。首先去http://www.keepalived.org/software/keepalived-1.2.13.tar.gz下载最新的keepalived。然后直接编译安装的话就能够,假设没有装上默认的开发环境,编译过程中会报一些常见的错误,遇到什么错误,装上相应的环境包就可以。当然假设为了方便,能够直接装上centos 6提供的开发包。这样编译过程中就不会出现什么问题。yum groupinstall "Desktop Platform Development" "Development tools" "Server Platform Development"。我的编译安装步骤例如以下:
[root@bogon ~]#  tar xf keepalived-1.2.13.tar.gz
[root@bogon ~]#  cd keepalived-1.2.13
[root@bogon ~]# ./configure --prefix=/usr/local/keeaplived --sysconfdir=/etc/
[root@bogon ~]# make && make install
[root@bogon ~]# chkconfig --add keepalived

上面装的keepalived在使用service keepalived start的时候会报错,由于我们把keepalived的脚本安装在了/usr/local/keepalived/sbin文件夹下。而/etc/rc.rd下的keepalived中直接使用的是keepalived脚本。因此能够在PATH中增加/usr/local/keepalived/sbin这个文件夹或者在keepalived把调用keepalived的地方所有改成/usr/local/keepalived/sbin/keepalived就可以。

为了查阅keepalived.conf文件的方便。能够在/etc/man.config文件里增加例如以下配置:
MANPATH /usr/local/keepalived/share/man
这样以后就能够直接使用man keepalived.conf来方便的查看keepalived的配置文件了

keepalived+ipvs实现httpd的高可用实验环境(centos6.5):
1.keepalived的MASTER节点(192.168.1.134)
2.keepalived的BACKUP节点(192.168.1.136)
3.两台real server的地址各自是(192.168.1.143,192.168.1.170)
4.vip的地址是192.168.1.200

一。

首先在两台real server下配置好arp协议,vip地址和路由策略:
[root@bogon ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@bogon ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@bogon ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@bogon ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@bogon ~]# ifconfig lo:0 192.168.1.200 broadcast 192.168.1.200 netmask 255.255.255.255
[root@bogon ~]# route add -host 192.168.1.200 dev lo:0

二。

在192.168.1.134和192.168.1.136两台节点上装上keepalived和ipvsadm。
而且为MASTER节点的/etc/keepalived/keepalived.conf中提供例如以下的配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost #邮件的收信人地址
   }
   notification_email_from keepalived@localhost #邮件的发信人地址
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 110
    advert_int 1  #两台节点之间同步信息的间隔
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.200
    }
}

virtual_server 192.168.1.200 80 {
    delay_loop 6 #选举服务投票的延迟时间
    lb_algo rr  #调度算法
    lb_kind DR  #LVS的类型
    nat_mask 255.255.255.0
#    persistence_timeout 50  #持久连接的超时时间
    protocol TCP

    real_server 192.168.1.143 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3  #连接的超时时间
            nb_get_retry 3   #尝试的次数
            delay_before_retry 3 #尝试的延迟
        }
    }
    real_server 192.168.1.170 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

把上面的内容拷贝到BACKUP节点上,仅仅须要改动state MASTER为state BACKUP和priority 110为priority 100就可以。

然后启动keepalived服务,观察ipvsadm中是否有相应的列表。假设有。证明我们的keepalived已经配置成功.

keepalived默认支持的检查机制不止HTTP的方式。还有SSL_GET,TCP_CHECK。SMTP_CHECK,MISC_CHECK。

假设想要插叙详细的使用方法,直接man keepalived.conf就可以

扩展keepalived的功能:
1.在real server中全部的节点都挂了的时候。再次訪问的时候将不会得到服务,为了用户的体验友好性。能够在MASTER和SLAVE节点上提供一个错误,当全部的节点都不在的时候,提供一个错误的页面。因此在MASTER和BACKUP两台主机上装上httpd服务,而且提供默认的页面。在此须要在MASTER和BACKUP上改动keepalived.conf配置文件
virtual_server 192.168.1.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
#   persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80  #virtual_server的配置地方和上面一样,仅仅是这里须要新增一行
    real_server 192.168.1.143 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.170 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

通过上述的配置以后,当全部的real server都挂掉的时候。默认MASTER上的httpd服务器将启用,而当有一台real server上线的时候,MASTER上面的http服务器将会下线。



2.默认情况下,keepalived的默认配置邮件服务功能。仅仅会在real server发生宕机或者恢复功能的时候发出邮件。非常多时候,更希望看到的是提供keepalived的节点发生问题的时候提供邮件服务。keepalived默认提供了三个參数为notify_master,notify_backup和notify_fault。他们分别表示在节点变为master。节点变为backup和节点不可用时能够运行的脚本。详细的信息能够通过man查看。

因此以下的配置是为keepalived的MASTER节点发生转移的时候提供邮件功能:

在/etc/keepalived/以下建立一个新的脚本文件keepalived_message.sh,这个脚本接收2个參数,各自是状态和VIP的地址。

当我们调用前面notify_master等脚本的时候就去自己主动调用这个脚本相应的參数,实现发送邮件的功能。脚本内容例如以下:

#!/bin/bash

VIP=$2

Usage (){
   echo "Usage: `basename $0` {mater|backup} VIP"
}

Send_message (){
  subject="${VIP}'s server keepalived state is translate"
  content="`date +'%F %T'`: `hostname`'s state change to $1"
  echo $content | mail -s "$subject" root@localhost
}

[ $# -lt 2 ] && Usage && exit

case $1 in
  master)
    Send_message master
    ;;
  backup)
    Send_message backup
    ;;
  fault)
    Send_message fault
    ;;
  *)
    Usage
    exit 1
    ;;
esac

然后在配置文件keepalived.conf中加入例如以下内容:
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qiguo139
    }
    virtual_ipaddress {
        192.168.1.200
    }
    #以下的内容是我们新加入的三行,当keepalived的节点变成相应状态的时候就去运行上面给出的脚本发邮件
    notify_master "/etc/keepalived/keepalived_message.sh master 192.168.1.200"  
    notify_backup "/etc/keepalived/keepalived_message.sh backup 192.168.1.200"
    notify_fault "/etc/keepalived/keepalived_message.sh fault 192.168.1.200"
}

把上面新加入的keepalived_message.sh脚本和主配置文件里新加入的三条信息传给另外一台keepalivedserver。然后測试。会发现,相应keepalived的关闭。启动都会有相应的邮件过来了。



3.keepalived还提供了vrrp_script脚本,能够扩展当前的监控,这样我们就能够让keepalived用在nginx和haproxy的高可用上了。vrrp_script的默认语法为:
vrrp_script check_name {
    script ""   须要运行的脚本内容或脚本文件存放的位置
    interval 2  每隔多少秒做一次检測
    weight -2   假设失败了,减少多少权重
    fail 2      检測多少次失败。才觉得是真的失败
    rise 1      检測一次成功。就觉得在线了
}
vrrp_script脚本定义在实例之外。

上面仅仅是定义了一个vrrp_script脚本,还须要运行它,运行的话能够通过track_script来运行。

track_script须要放在实例中,让实例随时的去运行这个脚本。推断服务的状况。因此假设我们定义的是vrrp_script check_name{xxx},在vrrp_instance中须要对应的加入:
track_script{
    check_name
}

以下实现keepalived+nginx的高可用功能脚本。这里的nginxserver仍然做的是负载均衡server。MASTER上的脚本例如以下:

! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script check_nginx {
    script "killall -0 nginx"
    interval 2
    weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qiguo139
    }
    virtual_ipaddress {
        192.168.1.200
    }
    track_script {
        check_nginx
    }
}

在BACKUP节点上仅仅须要把priority 的值换成100,把state的状态换成BACKUP就可以.

4.有时候让一台BACKUP长期处于空暇状态easy造成资源浪费。因此能够配置双机互为主从。

其基本的思路就是创建2个虚拟路由器。并以两个节点互为主从。

我们改动上面顶一个nginx+keepalived的高可用脚本来实现互为主从:
! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script check_nginx {
    script "killall -0 nginx"
    interval 2
    weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qiguo139
    }
    virtual_ipaddress {
        192.168.1.200
    }
    track_script {
        check_nginx
    }
}

vrrp_instance VI_2 {
    state BACKUP  #对于另外一台主的从
    interface eth0
    virtual_router_id 52  #定义一个新的虚拟路由的时候,不能和原来的虚拟路由ID的值一样
    priority 100  #对于另外一台的优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qiguo139
    }
    virtual_ipaddress {
        192.168.1.201  #定义在BACKUP上的VIP
    }
    track_script {
        check_nginx
    }
}

然后在BACKUP上面互换关系就可以。然后再次查看会发如今原来的MASTER上面会绑定192.168.1.200的VIP。原来的BACKUP上面会绑定192.168.1.201的VIP。







posted @ 2017-05-23 15:57  jzdwajue  阅读(295)  评论(0编辑  收藏  举报