keepalived实现nginx的高可用-实战可用

Keepalived.conf解析


三大部分: 全局定义块、VRRP 实例定义块及虚拟服务器定义块

实例剖析


! Configuration File for keepalived
 
global_defs {
   notification_email {
     lisongtao@ihuilian.com
     #acassen@firewall.loc
     #failover@firewall.loc
     #sysadmin@firewall.loc
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定义的字符串
}
 
   ###在哪里找到自定义配置规范
   #vrrp_script chk_mantaince_down {   #定义可以手动控制状态的脚本
   #    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   vrrp_script chk_nginx_down {   #定义可以手动控制状态的脚本
       #script "killall -0 nginx"
       #script "killall -0 nginx && exit 0 || exit 1"
       script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
       interval 1                    #检查时间间隔
       weight - 13                   #如果检测失败,优先级-13
   }
 
 
vrrp_instance VI_1 {
    state MASTER    ###MASTER/BACKUP必须大写,且当MASTER恢复时,会自动恢复为MASTER状态
    interface eth0
    virtual_router_id 51  ###同一个vrrp使用相同的vrrp,整个vrrp内唯一
    priority 100   ###数字越大优先级越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout时长秒为单位
    authentication {   ###MASTER和SLAVE密码相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每个地址占一行,不能指定子网掩码,与lvs客户端设定的VIP一致
        192.168.65.200
        #192.168.200.17
        #192.168.200.18
    }
 
    ###跟global_defs中定义的vrrp_script chk_mantaince_down对应
    track_script {     #引用自定义的脚本
       chk_nginx_down
    }
    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault "/etc/keepalived/notify.sh fault"
 
}
 
#virtual_server 192.168.65.200  36379{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
virtual_server 192.168.65.200  80{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
    delay_loop 6    ###健康检查时间/秒
    #lb_algo wlc    ###负载均衡调度算法,常用rr/wlc
    lb_algo rr    ###负载均衡调度算法,常用rr/wlc
    lb_kind DR   ###负载均衡转发规则,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###会话保持时长
    protocol TCP   ###协议类型转发
    #virtualhost www.a.com
 
    real_server 192.168.65.128  80{   ###real server IP PORT
        weight 33   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
        }
    }
    real_server  192.168.65.129 80{
        weight 22
    }
    real_server  192.168.65.130 80{
        weight 11
    }
}

自定义脚本功能测试

配置keepalived.conf

###分发keepalived.confslave

# ansible keepalived -m copy  -a 'src=/etc/keepalived/keepalived.conf dest=/etc/keepalived'

01.png

修改优化级和状态

! Configuration File for keepalived
 
global_defs {
   notification_email {
     lisongtao@ihuilian.com
     #acassen@firewall.loc
     #failover@firewall.loc
     #sysadmin@firewall.loc
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定义的字符串
}
 
   ###在哪里找到自定义配置规范
   #vrrp_script chk_mantaince_down {   #定义可以手动控制状态的脚本
   #    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   vrrp_script chk_nginx_down {   #定义可以手动控制状态的脚本
       #script "killall -0 nginx"
       #script "killall -0 nginx && exit 0 || exit 1"
       script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
       interval 1                    #检查时间间隔
       weight - 13                   #如果检测失败,优先级-13
   }
 
 
vrrp_instance VI_1 {
    state SLAVE    ###MASTER/BACKUP必须大写,且当MASTER恢复时,会自动恢复为MASTER状态
    interface eth1
    virtual_router_id 51  ###同一个vrrp使用相同的vrrp,整个vrrp内唯一
    priority 99   ###数字越大优先级越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout时长秒为单位
    authentication {   ###MASTER和SLAVE密码相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每个地址占一行,不能指定子网掩码,与lvs客户端设定的VIP一致
        192.168.65.200
        #192.168.200.17
        #192.168.200.18
    }
 
    ###跟global_defs中定义的vrrp_script chk_mantaince_down对应
    track_script {     #引用定义的脚本
       chk_nginx_down
    }
    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault "/etc/keepalived/notify.sh fault"
 
}
 
#virtual_server 192.168.65.200  36379{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
virtual_server 192.168.65.200  80{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
    delay_loop 6    ###健康检查时间/秒
    #lb_algo wlc    ###负载均衡调度算法,常用rr/wlc
    lb_algo rr    ###负载均衡调度算法,常用rr/wlc
    lb_kind DR   ###负载均衡转发规则,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###会话保持时长
    protocol TCP   ###协议类型转发
    #virtualhost www.a.com
 
    real_server 192.168.65.128  80{   ###real server IP PORT
        weight 33   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
        }
 
    }
    real_server  192.168.65.129 80{
        weight 22
    }
    real_server  192.168.65.130 80{
        weight 11
    }
}

重启slavemasterkeepalived

# ansible keepalived -m command -a "service keepalived restart"

02.png

Touch down文件测试

/var/log/message日志信息

Jan 27 19:40:03 Mrds Keepalived_vrrp[6580]: VRRP_Script(chk_nginx_down) failed
Jan 27 19:40:03 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Entering FAULT STATE
Jan 27 19:40:03 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Now in FAULT state

keepalived实现nginx的高可用-实战可用

VIP信息

keepalived实现nginx的高可用-实战可用

Rm down文件测试

/var/log/message日志信息

Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Script(chk_nginx_down) succeeded
Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) prio is higher than received advert
Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jan 27 19:52:30 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Entering MASTER STATE

keepalived实现nginx的高可用-实战可用

VIP信息

keepalived实现nginx的高可用-实战可用

改造为检测nginx进程


修改master配置

keepalived实现nginx的高可用-实战可用

Stop nginx进程

keepalived实现nginx的高可用-实战可用

/var/log/message日志信息

serJan 27 20:06:05 Mrds Keepalived_healthcheckers[9992]: TCP connection to [192.168.65.128]:80 failed !!!
Jan 27 20:06:05 Mrds Keepalived_healthcheckers[9992]: Removing service [192.168.65.128]:80 from VS [192.168.65.200]:80
Jan 27 20:06:05 Mrds Keepalived_healthcheckers[9992]: Remote SMTP server [0.0.0.0]:25 connected.
Jan 27 20:06:05 Mrds Keepalived_vrrp[9993]: VRRP_Script(chk_nginx_down) failed
Jan 27 20:06:06 Mrds Keepalived_healthcheckers[9992]: SMTP alert successfully sent.
Jan 27 20:06:06 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Entering FAULT STATE
Jan 27 20:06:06 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Now in FAULT state

09.png

VIP信息

VIP资源被抢占

10.png

Start nginx进程

11.png

/var/log/message日志信息

Jan 27 20:08:55 Mrds Keepalived_vrrp[9993]: VRRP_Script(chk_nginx_down) succeeded
Jan 27 20:08:56 Mrds Keepalived_vrrp[9993]: Kernel is reporting: interface eth0 UP
Jan 27 20:08:56 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 27 20:08:57 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Entering MASTER STATE
Jan 27 20:08:59 Mrds Keepalived_healthcheckers[9992]: TCP connection to [192.168.65.128]:80 success.
Jan 27 20:08:59 Mrds Keepalived_healthcheckers[9992]: Adding service [192.168.65.128]:80 to VS [192.168.65.200]:80
Jan 27 20:08:59 Mrds Keepalived_healthcheckers[9992]: Remote SMTP server [0.0.0.0]:25 connected.
Jan 27 20:09:00 Mrds Keepalived_healthcheckers[9992]: SMTP alert successfully sent.

VIP信息

MASTER优化级最高,VIP资源被抢占回来

12.png

MASTER1slave异常,最后一台slave服务器是否还正常

keepalived实现nginx的高可用-实战可用

但会发现lvs池是异常的~~~ 129nginx应该是异常的.lvs池没有被剔除

keepalived实现nginx的高可用-实战可用

关闭slavekeepalived尝试

关闭Srds1上的keepalived,master被正常切换到Srds2,看来slavemaster的功能还是有一定的区别的。

Master可以自动发现自己后端服务的状态,并时刻保持lvs池的最新,slave是没有这个功能或者没有这个权限的!!

看来要想完全实现后端服务的高可用要其它方式来实现这个功能的

15.png

原创文章,作者:stanley,如若转载,请注明出处:http://www.178linux.com/3206

(0)
stanleystanley
上一篇 2015-04-14
下一篇 2015-04-14

相关推荐

  • puppet部署多台服务器

    利用puppet实现自动化部署 配置前准备:   图中:蓝线表示各个服务器之间通信      红线表示puppetmaster主机向各个agent主机部署信道 A主机puppet-master主机:192.168.126.129 B主机做两种服务:keepalived高性能和nginx反代  &nb…

    2017-07-23
  • 马哥教育网络班22期-第九周课程作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i count=0 declare -i bash_num=0 declare -i&nbs…

    Linux干货 2016-11-21
  • 文件管理命令及通配符练习

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例 按增删改查的思路来 增: touch filename:这个命令本身不是用来新建文件的,它是用来修改文件的时间属性,不过默认情况时当filename不存在时,它会默认建立一个空文件 mkdir: 常用参数 -p:相当于递归创建目录 -v:显示出创建过程中的信息 cp : 常用参数 -r:…

    Linux干货 2016-11-06
  • linux学习的环境构建

    俗话说磨刀不误砍柴工,所以在加入马哥linux培训班后第一件事情就是构建学习环境。在这里把一些心得分享给大家。 1:通过测试比较服务器选择运行ESXI6.0的虚拟机。刚开始准备采用微软的Hyper-v的,但是管理Hyper-v需要域环境(工作组环境下虽然也可以管理,但是配置复杂和安全性很低),额外的增加了系统开销所以果断放弃。 2:通过网络获得Esxi6.0…

    Linux干货 2016-02-28
  • 初识正则表达式

    正则表达式是个什么东东? 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。在很多文本编辑器里、命令中,通常要使用检索、替换、放行和拒绝那些符合某个模式的文本。而正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。  摘自《正则表达式之…

    Linux干货 2015-03-27
  • find文件查找

    文件查找      在文件系统上查找符合条件的文件:      实现工具:locate,find locate:      构建于实现构建好的索引库:/var/lib/mlocate/mlocate.db   &nbsp…

    Linux干货 2016-08-22