阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Keepalived+Nginx架构配置

57次阅读
没有评论

共计 4400 个字符,预计需要花费 11 分钟才能阅读完成。

Keepalived 介绍

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

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

keepalved 官方体系结构图:

Keepalived+Nginx 架构配置
环境准备
操作系统:CentOS6.6 64 位 2 台
Nginx-Master   10.0.0.60
Nginx-Backup   10.0.0.61
VIP            10.0.0.62

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

安装 Nginx

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

安装 Keepalived

在 Nginx-Master、Nginx-Backup:

cd ~/oneinstack/src
wget http://www.keepalived.org/software/keepalived-1.2.22.tar.gz
tar xzf keepalived-1.2.22.tar.gz
cd keepalived-1.2.22
./configure --prefix=/usr/local/keepalived
make && make install
配置 Keepalived

在 Nginx-Master、Nginx-Backup:

ln -s /usr/local/keepalived/etc/keepalived /etc/keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/keepalived
chkconfig keepalived on

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

! Configuration File for keepalived

global_defs {notification_email {admin@linuxeye.com     #设置报警邮件地址,可以设置多个,每行一个。需开启本机的 sendmail 服务}
   notification_email_from no-reply@linuxeye.com  #设置邮件的发送地址
   smtp_server 127.0.0.1            #设置 smtp server 地址
   smtp_connect_timeout 30    #设置连接 smtp server 的超时时间
   router_id LVS_DEVEL              #表示运行 keepalived 服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_script chk_nginx {
    script "/usr /local/keepalived/sbin/check_nginx.sh"   #该脚本检测 ngnix 的运行状态,并在 nginx 进程不存在时尝 试重新启动 ngnix,如果启动失败则停止 keepalived,准备让其它机器接管。interval 2              #每 2s 检测一次
    weight 2               #检测失败(脚本返回非 0)则优先级 2
}

vrrp_instance VI_1 {
    state MASTER              #指定 keepalived 的角色,MASTER 表示此主机是主服务器,BACKUP 表示此主机是备用服务器
    interface eth0              #指定 HA 监测网络的接口
    virtual_router_id 55    #虚拟路由标识,这个标识是一个数字,同一个 vrrp 实例使用唯一的标识。即同一 vrrp_instance 下,MASTER 和 BACKUP 必须是一致的
    priority 100                  #定义优先级,数字越大,优先级越高,在同一个 vrrp_instance 下,MASTER 的优先级必须大于 BACKUP 的优先级
    advert_int 1            #设定 MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {        #设置验证类型和密码
        auth_type PASS      #设置验证类型,主要有 PASS 和 AH 两种
        auth_pass linuxeye  #设置验证密码,在同一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {     #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
        10.0.0.62
    }
    track_script {chk_nginx           #引用 VRRP 脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。}
}

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

! Configuration File for keepalived

global_defs {
   notification_email {admin@linuxeye.com     #设置报警邮件地址,可以设置多个,每行一个。需开启本机的 sendmail 服务}
   notification_email_from no-reply@linuxeye.com  #设置邮件的发送地址
   smtp_server 127.0.0.1      #设置 smtp server 地址
   smtp_connect_timeout 30    #设置连接 smtp server 的超时时间
   router_id LVS_DEVEL        #表示运行 keepalived 服务器的一个标识。发邮件时显示在邮件主题的信息
}

vrrp_script chk_nginx {
    script "/usr /local/keepalived/sbin/check_nginx.sh"   #该脚本检测 ngnix 的运行状态,并在 nginx 进程不存在时尝 试重新启动 ngnix,如果启动失败则停止 keepalived,准备让其它机器接管。interval 2              #每 2s 检测一次
    weight 2                #检测失败(脚本返回非 0)则优先级 2
}

vrrp_instance VI_1 {
    state BACKUP            #指定 keepalived 的角色,MASTER 表示此主机是主服务器,BACKUP 表示此主机是备用服务器
    interface eth0          #指定 HA 监测网络的接口
    virtual_router_id 55    #虚拟路由标识,这个标识是一个数字,同一个 vrrp 实例使用唯一的标识。即同一 vrrp_instance 下,MASTER 和 BACKUP 必须是一致的
    priority 50             #定义优先级,数字越大,优先级越高,在同一个 vrrp_instance 下,MASTER 的优先级必须大于 BACKUP 的优先级
    advert_int 1            #设定 MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位是秒
    nopreempt               #设置 nopreempt 防止抢占资源,只生效 BACKUP 节点
    authentication {        #设置验证类型和密码
        auth_type PASS      #设置验证类型,主要有 PASS 和 AH 两种
        auth_pass linuxeye  #设置验证密码,在同一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {     #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
        10.0.0.62
    }
    track_script {chk_nginx           #引用 VRRP 脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。}
}

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

#!/bin/bash
if ["$(ps -ef | grep"nginx: master process"| grep -v grep)" == "" ];then
    #echo 1
    /etc/init.d/nginx start
    sleep 5

    if ["$(ps -ef | grep"nginx: master process"| grep -v grep)" == "" ];then
        /etc/init.d/keepalived stop
        #echo 2
    fi
fi

脚本加上可执行权限

chmod +x /usr/local/keepalived/sbin/check_nginx.sh
验证
service keepalived start  #启动 Nginx-Master
service keepalived start  #启动 Nginx-Backup
ip addr  #2 台服务器分别执行,绑定虚拟 IP 在 Nginx-Master
service keepalived stop  #停止 Nginx-Backup
ip addr  #2 台服务器分别执行,绑定虚拟 IP 在 Nginx-Backup
service keepalived start  #再启动 Nginx-Backup
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

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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4400字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中