keepalived

最近在做一个华为的项目中,需要用到 keepalived。按我的理解,这keepalived 就是让多个机器相互竞争一个虚拟IP。这个虚拟IP是用来对外提供服务的。当然说竞争有点不妥,应该是协作,同一时间只有一个服务器提供服务,当这个服务挂掉以后,备用的服务器顶上来提供服务。

下面备忘一下 keepalived的安装和配置。

 

首先需要2个机器。分别假设是A和B

安装:

1、先检测依赖的程序: openssl 、openssl-devel  、gcc 、 kernel-devel 这几个我也是从网上看的,不确定如果其中一个不安装的话,有问题吗。

查看是否安装: yum list installed  openssl/XXX/XXX

安装:先查找名称:yum search openssl-devel ,列出来以后就安装: yum install  <soft_name> -y

2、获取程序:到网上下载或者wget下来都行。我下载以后是个安装包,解压

如解压后目录是: /home/mm/keepalived/

进入此目录,执行 ./configure --prefix=/usr/local/keepalived

然后执行: make && make install

安装完了,然后把一些配置和程序拷贝到对应 的默认目录:

cp /usr/local/keepalived/etc/keepalived  /etc/ -r

cp /usr/local/keepalived/etc/rc.d/keepalived  /etc/rc.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

然后修改文件:vi  /etc/sysconfig/keepalived

将KEEPALIVED_OPTIONS="-D"

修改为:

KEEPALIVED_OPTIONS="-D -f /etc/keepalived/keepalived.conf"

-f 用于指定配置文件。其实我写此文比较急促,很多冗余的地方,有些操作可能是没必要的。

两个机器都安装上面的操作。

然后就是配置文件:(严重注意:配置文件中 { 前面必须要有空格)

A机器(主机):vi  /etc/keepalived/keepalived.conf

======================================

global_defs {
        notification_email {
                aaaafd@mapsd.com
        }
        notification_email_from aaaafd@mapsd.com
        smtp_server 127.0.0.1
        stmp_connect_timeout 30
        router_id lnmp_node1
}

vrrp_script check_1 {
        script "/tmp/check.sh"
        interval 1   # 每1秒进行一次检测
        weight  -20   # 如果检测失败,那么将instance 的 priority (优先级)减去20.如此有用的地方是:如果双方都是backup,那么谁优先级高,谁拥有虚拟ip
}

vrrp_instance lnmp {
        state MASTER    # 这里是表示这个是主机,其他备机则是 BACKUP
        interface eth0
        virtual_router_id 100       #这个所有机器的配置都一样,作用类似于radio 的name
        priority 150                      #这是优先级,大的优先级高,当有2个备用机的时候大的先启用
        advert_int 5
        track_interface {                #这是额外的检测网卡,如果这2个网卡出现故障,则抹掉自己的虚拟ip
                eth0
                eth1
        }
        track_script {
                check_1               #上面申明的track脚本的名字
        }
        authentication {                              # 这个校验都保持一致
                auth_type PASS
                auth_pass 123456  
        }
        virtual_ipaddress {
                192.168.18.205/16            # 这里是指定虚拟IP,可以是多个
        }
}

 

 

B机器(备机)vi  /etc/keepalived/keepalived.conf

==============================================

 

global_defs {
        notification_email {
                aaaafd@mapsd.com
        }
        notification_email_from aaaafd@mapsd.com
        smtp_server 127.0.0.1
        stmp_connect_timeout 30
        router_id lnmp_node1
}
vrrp_script check_1 {
        script "/tmp/check.sh"
        interval 1   # 每1秒进行一次检测
        weight  -20   # 如果检测失败,那么将instance 的 priority (优先级)减去20.如此有用的地方是:如果双方都是backup,那么谁优先级高,谁拥有虚拟ip
}

vrrp_instance lnmp {
        state BACKUP    
        interface eth0
        virtual_router_id 100       #这个所有机器的配置都一样,作用类似于radio 的name
        priority 150                #这是优先级,大的优先级高,当有2个备用机的时候大的先启用
        advert_int 5
        track_interface {          #这是额外的检测网卡,如果这2个网卡出现故障,则抹掉自己的虚拟ip
                eth0
                eth1
        }
        track_script {
                check_1 
        }
        authentication {                              # 这个校验都保持一致
                auth_type PASS
                auth_pass 123456  
        }
        virtual_ipaddress {
                192.168.18.205/16            # 这里是指定虚拟IP,可以是多个 ,16是掩码长度
        }
}

 

 检测脚本:/tmp/check.sh 的内容如下

 

#!/bin/sh

c=`service iptables status |grep 'is not running'|wc -l`
if [ $c = '0' ]; then
        exit 0
else
        exit 1
fi

我这里是简单的来检测iptables 服务是否启动来作为测试。 

检测脚本需要通过exit 0或者1 的方式来表明检测结果,0表示正常,1表示失败。

另外通过这样执行: /tmp/check.sh  && echo 'ok'  ||  echo 'failed'  也可以看到0 和1  的效果。即1表示命令执行失败了。

 

看日志是 tail -fn 1000 /var/log/messages 这个文件

启动服务可以这样: service keepalived start  ,A B都启动。

另外可以用  nc -l 999 来监听本机的 任意端口,然后用任意的机器去telnet 它,tenet  192.168.18.205  999  即可知道 这个虚拟IP 被谁占用了。

上面的虚拟ip  指定的是 192.168.18.205 ,启动 keepalvied 之后,可以通过命令: ip addr 来看,可以发现,正常情况下, 主服务器的 eth0 网卡将拥有该虚拟ip 。

 

 keepalive貌似可以附带着 lvs一块安装。keepalived 的作用是主从切换,通过虚拟ip争夺的方式。应用场景是许多群集环境都是单一入口,比如一个 前端 lvs 或者 nginx 来做分发,但是lvs 或者 nginx 自身如果出现了问题,那么就歇菜了,这就是单一入口的坏处,应该多个lvs或者nginx来提供分发服务。但是对外的ip必须是唯一的,那么就可以通过keepalived来检测lvs或者nginx服务正常情况,来切换虚拟ip,将虚拟ip提供给服务正常者。虚拟ip将被公布出去。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值