Day-45 keepalived

keepalived

高可用

概念:当一台服务器宕机,另一台能快速接管。

工具:keepalived

原理:通过vrrp协议,虚拟路由冗余协议;在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

VRRP

原理:

master在工作状态会不断群发一个广播包

backup与 master进行优先级对比

由虚拟IP进行连接选举出的master

keeplived 应用

#1.安装
[root@lb01 ~]# yum install -y keeplived
#2.配置
#(1)lb1配置
[root@lb01 ~]# vim /etc/keeplived/keeplived.conf
globoal_defs {
    router_id lb1
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
#(2)lb2配置
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
globog_defs {
    router_id lb2
}
vrrp_instance VI 1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
#3.启动测试
[root@lb02 ~]# systemctl start keepalived
[root@lb02 ~]# systemctl enable keepalived

抢占式与非抢占式

#master故障--->backup顶上--->master恢复--->backup  抢占式   
#master故障--->backup顶上--->master恢复--->backup工作 非抢占式

#两个节点的state都必须配置为BACKUP(官方建议)
#两个节点都在vrrp_instance中添加nopreempt参数
#其中一个节点的优先级必须要高于另外一个节点的优先级。
#两台服务器都角色状态启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。

1.抢占:   硬件配置不一
2.非抢占: 硬件配置一致,业务不允许多次切

#[keepalived vip漂移基本原理及选举算法]
keepalived可以将多个无状态的单点通过虚拟IP(以下称为VIP)漂移的方式搭建成一个高可用服务,常用组合比如 keepalived+nginx,lvs,haproxy和memcached等。它的实现基础是VRRP协议,包括核心的MASTER竞选机制都是在[VRRP协议](http://tools.ietf.org/html/rfc3768)所约定的。

一、配置说明:
keepalived的配置位于/etc/keepalived/keepalived.conf,配置文件格式包含多个必填/可选的配置段,部分重要配置含义如下:
global_defs: 全局定义块,定义主从切换时通知邮件的SMTP配置。
vrrp_instance: vrrp实例配置。
vrrp_script: 健康检查脚本配置。

细分下去,vrrp_instance配置段包括:
state: 实例角色。分为一个MASTER和一(多)个BACKUP。
virtual_router_id: 标识该虚拟路由器的ID,有效范围为0-255。
priority: 优先级初始值,竞选MASTER用到,有效范围为0-255。
advert_int: VRRP协议通告间隔。
interface: VIP所绑定的网卡,指定处理VRRP多播协议包的网卡。
mcast_src_ip: 指定发送VRRP协议通告的本机IP地址。
authentication: 认证方式。
virtual_ipaddress: VIP。
track_script: 健康检查脚本。

vrrp_script配置段包括:
script: 一句指令或者一个脚本文件,需返回0(成功)或非0(失败),keepalived以此为依据判断其监控的服务状态。
interval: 健康检查周期。
weight: 优先级变化幅度。
fall: 判定服务异常的检查次数。
rise: 判定服务正常的检查次数。

这里有[MASTER](https://gist.github.com/fengchj/66f5c6e5afc4603942aa#file-master)和[BACKUP](https://gist.github.com/fengchj/66f5c6e5afc4603942aa#file-backup)的参考配置。

二、选举算法
keepalived中优先级高的节点为MASTER。MASTER其中一个职责就是响应VIP的arp包,将VIP和mac地址映射关系告诉局域网内其 他主机,同时,它还会以多播的形式(目的地址224.0.0.18)向局域网中发送VRRP通告,告知自己的优先级。网络中的所有BACKUP节点只负责 处理MASTER发出的多播包,当发现MASTER的优先级没自己高,或者没收到MASTER的VRRP通告时,BACKUP将自己切换到MASTER状 态,然后做MASTER该做的事:1.响应arp包,2.发送VRRP通告。

MASTER和BACKUP节点的优先级如何调整?
首先,每个节点有一个初始优先级,由配置文件中的priority配置项指定,MASTER节点的priority应比BAKCUP高。运行过程中keepalived根据vrrp_script的weight设定,增加或减小节点优先级。规则如下:

1. 当weight > 0时,vrrp_script script脚本执行返回0(成功)时优先级为priority + weight, 否则为priority。当BACKUP发现自己的优先级大于MASTER通告的优先级时,进行主从切换。
2. 当weight < 0时,vrrp_script script脚本执行返回非0(失败)时优先级为priority + weight, 否则为priority。当BACKUP发现自己的优先级大于MASTER通告的优先级时,进行主从切换。 
3. 当两个节点的优先级相同时,以节点发送VRRP通告的IP作为比较对象,IP较大者为MASTER。 以上文中的配置为例: 
HOST1: 10.15.8.100, priority=91, MASTER(default) 
HOST2: 10.15.8.101, priority=90, BACKUP VIP: 10.15.8.102 weight = 2 
抓包命令: tcpdump -nn vrrp 
示例一:HOST1和HOST2上keepalived和nginx均正常。

事故模拟

如果nginx宕机,keepalived并不会进行切换,会导致用户请求失败,如何解决

思路:如果nginx宕机,如果keepalived启动,通过写脚本使二者相依相存。

第一种:当nginx停止,keepalived也立即停止,进行切换

缺点:停止切换需要一定的时间

第二种:当nginx,keepalived其中一个启动,就拉起另一个服务;

缺点:当nginx配置有误,怎样都起不来该怎么办

第三种:结合第一第二种;当nginx起不来时在去kill 掉keepalived

判断nginx存活的方法

1.判断nginx进程是否存在         ps aux|grep nginx|grep -v grep
2.判断nginx的端口是否存在        netstat -lntp|grep :80|wc -l
3.通过curl来模拟访问,判断访问结果是否ok   curl -H Host:url.oldxu.com http://10.0.0.3
#1.编写脚本
[root@lb01 ~]# vim /script/check.sh
#!/usr/bin/bash
nginx_prot=$(netstat -lntp |grep :80|wc -l)
if [ $nginx_prot -ne 1 ];then
    systemctl start nginx
    rc=$?
    sleep 3
    if [ $rc -ne 0 ];then
        systemctl stop keepalived
    fi
fi
#2.调用脚本
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
globog_defs {
    router_id lb1
}
vrrp_script check_web {
    script "/script/check.sh"
    interval 5
}
vrrp_instance VI 1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
track_script {
    check_web
}

脑裂

#1.概念
指在一个高可用系统,当联系着的两个节点断开联系时,本来一个整体的系统,分裂为两个独立的节点,此时节点会互抢共享资源,对无状态的无影响
#2.解决方法
通过能ping通主并且备节点还有VIP的话则认为产生了脑列
#3.方案
[root@lb02 ~]# vim /scripts/check_spilt.sh 
#!/usr/bin/bash
vip=10.0.0.3
master=10.0.0.5
ping -c2 $master_ip &>/dev/null
if [ $? -eq 0]; then
    ip_check=$(ip addr|grep "$vip" |wc -l)
    if [ $ip_check -eq 1 ]; then
        echo "naolie"
        systemctl stop keepalived
    fi
fi
#4.调用脚本
[root@lb02 conf.d]# vim /etc/keepalived/keepalived.conf 
globog_defs {
    router_id lb2
}
vrrp_script check_spilt {
    script "/scripts/check_spilt.sh"
    interval 3
}
vrrp_instance VI 1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.3
    }
}
track_script {
    check_spilt
}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341