zoukankan      html  css  js  c++  java
  • Keepalived+Nginx架构整理版

    Keepalived介绍

    keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器

    官网地址:http://www.keepalived.org

    keepalved官方体系结构图:

    环境准备

    1. 操作系统:CentOS6.6 64位 2台
    2. Nginx-Master   10.0.0.60
    3. Nginx-Backup   10.0.0.61
    4. VIP                      10.0.0.62

    注:未做特别说明,两台服务器(两个节点)都一样操作

    安装Nginx

    使用《OneinStack》Nginx选择y,其余n

    安装Keepalived

    在Nginx-Master、Nginx-Backup:

     
    1. cd ~/oneinstack/src
    2. wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
    3. tar xzf keepalived-1.2.22.tar.gz
    4. cd keepalived-1.2.22
    5. ./configure --prefix=/usr/local/keepalived
    6. make && make install

    配置Keepalived

    在Nginx-Master、Nginx-Backup:

    1. ln -s /usr/local/keepalived/etc/keepalived /etc/keepalived
    2. ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
    3. ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
    4. ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/keepalived
    5. chkconfig keepalived on

    在Nginx-Master修改配置文件,vi /etc/keepalived/keepalived.conf

    1. ! Configuration File for keepalived
    2. global_defs {
    3.    notification_email {
    4.        admin@linuxeye.com     #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
    5.    }
    6.    notification_email_from no-reply@linuxeye.com  #设置邮件的发送地址
    7.    smtp_server 127.0.0.1            #设置smtp server地址
    8.    smtp_connect_timeout 30    #设置连接smtp server的超时时间
    9.    router_id LVS_DEVEL              #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
    10. }
    11. vrrp_script chk_nginx {
    12.     script "/usr/local/keepalived/sbin/check_nginx.sh"   #该脚本检测ngnix的运行状态,并在nginx进程不存在时尝试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。
    13.     interval 2              #每2s检测一次
    14.     weight 2               #检测失败(脚本返回非0)则优先级2
    15. }
    16. vrrp_instance VI_1 {
    17.     state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    18.     interface eth0              #指定HA监测网络的接口
    19.     virtual_router_id 55    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    20.     priority 100                  #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    21.     advert_int 1            #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    22.     authentication {        #设置验证类型和密码
    23.         auth_type PASS      #设置验证类型,主要有PASS和AH两种
    24.         auth_pass linuxeye  #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    25.     }
    26.     virtual_ipaddress {     #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
    27.         10.0.0.62
    28.     }
    29.     track_script {
    30.         chk_nginx           #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    31.     }
    32. }

    在Nginx-Backup修改配置文件,vi /etc/keepalived/keepalived.conf

    1. ! Configuration File for keepalived
    2. global_defs {
    3.    notification_email {
    4.        admin@linuxeye.com     #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
    5.    }
    6.    notification_email_from no-reply@linuxeye.com  #设置邮件的发送地址
    7.    smtp_server 127.0.0.1      #设置smtp server地址
    8.    smtp_connect_timeout 30    #设置连接smtp server的超时时间
    9.    router_id LVS_DEVEL        #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
    10. }
    11. vrrp_script chk_nginx {
    12.     script "/usr/local/keepalived/sbin/check_nginx.sh"   #该脚本检测ngnix的运行状态,并在nginx进程不存在时尝试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。
    13.     interval 2              #每2s检测一次
    14.     weight 2                #检测失败(脚本返回非0)则优先级2
    15. }
    16. vrrp_instance VI_1 {
    17.     state BACKUP            #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    18.     interface eth0          #指定HA监测网络的接口
    19.     virtual_router_id 55    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    20.     priority 50             #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    21.     advert_int 1            #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    22.     nopreempt               #设置nopreempt防止抢占资源,只生效BACKUP节点
    23.     authentication {        #设置验证类型和密码
    24.         auth_type PASS      #设置验证类型,主要有PASS和AH两种
    25.         auth_pass linuxeye  #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    26.     }
    27.     virtual_ipaddress {     #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
    28.         10.0.0.62
    29.     }
    30.     track_script {
    31.         chk_nginx           #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    32.     }
    33. }

    检测脚本,vi /usr/local/keepalived/sbin/check_nginx.sh

    1. #!/bin/bash
    2. if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
    3.     #echo 1
    4.     /etc/init.d/nginx start
    5.     sleep 5
    6.     if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
    7.         /etc/init.d/keepalived stop
    8.         #echo 2
    9.     fi
    10. fi

    脚本加上可执行权限

    1. chmod +x /usr/local/keepalived/sbin/check_nginx.sh

    验证

    1. service keepalived start  #启动Nginx-Master
    1. service keepalived start  #启动Nginx-Backup
    1. ip addr  #2台服务器分别执行,绑定虚拟IP在Nginx-Master
    1. service keepalived stop  #停止Nginx-Backup
    1. ip addr  #2台服务器分别执行,绑定虚拟IP在Nginx-Backup
    1. service keepalived start  #再启动Nginx-Backup
    1. ip addr  #2台服务器分别执行,绑定虚拟IP在Nginx-Master

    上述切换默认测试会导致的master和backup之间来回切换

    通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。我们可以在配置文件加入nopreempt非抢占,但是这个参数只能用于state为BACKUP,故我们在用HA的时候最好MASTER和backup的state都设置成BACKUP让其通过priority来竞争。

    拓展

    假设我要重装这2台服务器,但是过程不容许丢一个包,通常情况下先替换backup,把master停止,让vip漂移只backup,替换master,但是在vip漂移过程可能会有丢2个包,如果避免丢包?

    方法:我们可以在master替换之前,利用iptables将数据包转发到backup,再停止master keepalived

    1. iptables -F
    2. iptables -t nat -I PREROUTING -i eth0 -j DNAT --to-destination 10.0.0.61
    3. iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

    Thu Jun 16 19:32:57 CST 2016

  • 相关阅读:
    Security headers quick reference Learn more about headers that can keep your site safe and quickly look up the most important details.
    Missing dollar riddle
    Where Did the Other Dollar Go, Jeff?
    proteus 与 keil 联调
    cisco router nat
    router dhcp and dns listen
    配置802.1x在交换机的端口验证设置
    ASAv931安装&初始化及ASDM管理
    S5700与Cisco ACS做802.1x认证
    playwright
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/7374233.html
Copyright © 2011-2022 走看看