设为首页 收藏本站
查看: 506|回复: 0

[经验分享] Keepalived+nginx

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-8-10 09:58:39 | 显示全部楼层 |阅读模式
环境:
虚拟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提供服务。         


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255795-1-1.html 上篇帖子: nginx 高并发参数配置及linux内核参数优化 下篇帖子: Nginx优化指南
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表