Keepalived+nginx

问题:

vip无法ping通
keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,但是无法ping通,并且防火墙都已关闭,原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。
 

 

环境:

虚拟IP:172.16.10.49

nginx1:172.16.10.50   主

nginx2:172.16.10.51   备

分别在两台机器上安装nignx和keepalived,这里采用yum的方式安装。

keepalived应该说是lvs的衍生项目,与lvs的配合比较紧密。当用于做其他服务的HA的时候,只能依靠脚本去扩展相应的功能。

在keepalived+nginx的组合中,包括了两个层次上的HA:

主机层HA,这个依赖keepalived本身的功能,当主机down掉的时候,可以自动将VIP切换到备机上;

服务层HA,这部分是通过脚本结合keepalived的来实现的,通过脚本判断服务是否正常,从而操控keepalived的进程来实现vip在主备机之间的漂移。

 

 

1.设置nginx的yum源   

创建文件/etc/yum.repos.d/nginx.repo

加入以下内容:


[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/

gpgcheck=0

enabled=1


将其中的OS改成当前系统的类型(rhel|centos),OSRELEASE改成当前的版本(5|6|7)

yum install -y nginx

启动nginx:

/etc/init.d/nginx restart

查看当前端口 有80端口出现刚nginx安装完成。在备机上按上述安装nginx.

 

 

2.安装keepalived

在centos的源里有keepalived这个软件,这里不再采用源码安装的方式,直接

yum install keepalived -y

 

 

________________________________________

3.配置

nginx的配置正常进行,主服务器跟备机上nginx的配置要保持一致。(此处配置只供实验,且在K+N的配合中,nginx配置并无特别要求,只要主备上配置一致即可)

为了验证keepalived的效果,启动两台机器的上nginx,在Web目录下创建一个文件,index.html主备机上的文件稍有不同以区别当前生效的是哪台服务器。

nignx1: this is the master server

nginx2: this is the backup server

 

 

3.1 keepalived配置

配置文件:


! Configuration File for keepalived

global_defs {

   notification_email {

        root@localhost

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vvrp_script chk_ngx {    !定义脚本

        script "/root/bin/chk_nginx.sh"

        interval 2

        weight 2

}

vrrp_instance VI_1 {

    state BACKUP  !(主:MASTER,备:BACKUP)

    interface eth0

    virtual_router_id 51  !(主备一致)

    priority 200 !(主 > 备)

    nopreempt

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.16.10.49/16 dev eth0

    }

 

   track_script {   !调用脚本

        chk_ngx

}

}


 

3.2 nginx服务检测脚本

功能很简单:

检测-->nginx进程--存活-->检测结束

       |

       |-->不存在nginx进程-->启动nginx-->等待-->再次检测-->存活-->检测结束

                                     |

                                     |-->进程不存在-->shutdown keepalived让vip漂移到备机-->结束


FN=`ps -C nginx --no-header | wc -l`

if [ $FN -eq 0 ]; then

        echo  stop

        /etc/init.d/nginx start

        sleep 2

 

        SN=`ps -C nginx --no-header | wc -l`    

        if [ $SN -eq 0 ];then

                echo sec-stop

                /etc/init.d/keepalived stop

        fi

fi


注:这个脚本有一个问题,在nginx假死,即nginx进程在,但无法正常提供http服务的情况下,无法完成杀掉keepalived使用vip漂移的功能。可采用检测http服务的方式来改善,用wget(curl)去访问80端口,正常返回结果刚正常,否则重启nginx,再次检测,如果还失败,刚杀掉keepalived进程。

 


code=`curl -I http://172.16.10.50/sfe | head -n 1 | awk '{print $2}'`

if [ $code != "200" ];then

        /etc/init.d/keepalived stop

fi


 

4.启动         

/etc/init.d/keepalived  start

启动后执行ip add 可以看到vip已经绑定到eth0上了。


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:ca:8f:b1 brd ff:ff:ff:ff:ff:ff

    inet 172.16.10.50/16 brd 172.16.255.255 scope global eth0

    inet 172.16.10.49/16 scope global secondary eth0

    inet6 fe80::5054:ff:feca:8fb1/64 scope link 

       valid_lft forever preferred_lft forever


 

停掉主服务器的nginx,检测脚本在检测到后会先启动一次nginx,当再次检测到nginx失败的时候,杀掉keepalived进程,vip漂移到backup服务器上:


2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:de:f8:42 brd ff:ff:ff:ff:ff:ff

    inet 172.16.10.51/16 brd 172.16.255.255 scope global eth1

    inet 172.16.10.49/16 scope global secondary eth1

    inet6 fe80::5054:ff:fede:f842/64 scope link 

       valid_lft forever preferred_lft forever


5.应用模式

常用的为MASTER-BACKUP(可以有多个)模式,配置主备服务器大部分一致只有两个地方需要注意:

MASTER--BACKUP

    priority 200 

    virtual_router_id 51 

    interface eth0

    state MASTER

    priority 100

    virtual_router_id 51 

    interface eth0

    state BACKUP  

在这种模式下,当主机Down之后,vip会漂移到备机,但当主机恢复重启后,vip会再次漂移回主机,但这个过程可能会发生一些预料之外的问题。既然备机已经绑定vip正常工作了,这里就可以考虑通过设置实现,主机恢复后,VIP不再自动漂移回主机,而是在备机出现故障的时候再漂移,或者是在人工维护时再漂移回主机。

BACKUP--BACKUP

    priority 200 

    virtual_router_id 51 

    interface eth0

    state BACKUP

    nopreempt

    priority 100

    virtual_router_id 51 

    interface eth0

    state BACKUP      

当主机备机同时启动时,keepalived通过priority来动态决定谁作为MASTER,主机增加nopreempt项,确认主机在down机重启后不会抢占vip. 继续由备机绑定VIP提供服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值