day46 keepalived高可用

keepalived高可用

昨日练习

  • 需求: 公司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。10.0.0.1 10.0.0.100
server {
 listen 80;
 server_name url.oldxu.com;
 root /data;
​
 if ($http_user_agent ~* "android|iphone|ipad") {
 rewrite ^/$  http://m.oldxu.com;
 }
}
server {
 listen 80;
 server_name m.oldxu.com;
 root /data/m;

 location / {
 index index.html;
 }
}
  • 需求:公司网站后台/admin,只允许公司的出口公网IP可以访问,其他的IP访问全部返回500,或直接跳转至首页。
server {
 listen 80;
 server_name ds.oldxu.com;
 root /data;
 set $ip 0;
 if ($remote_addr ~* "10.0.0.1") {
 set $ip 1;
 }
​
 location /admin {
 if ($ip = 0) {
 rewrite ^(.*)$  http://ds.oldxu.com;
 #return 500;
 }
 index index.html; 
 }
​
}

1.什么是高可用,为什么要设计高可用?

简单理解:两台机器启动着相同的业务系统,当有一台机器宕机,另外一台能快速接管,对于访问的用户是无感知的。

专业理解:高可用是分布式系统架构设计中必要的一环,主要目的:减少系统不能提供服务的时间。

2.高可用使用什么工具来实现?是硬件还是软件?

软件keepalive

3.keeplived是如何实现高可用的?

keeplived软件是基于VRRP协议实现的。VRRP虚拟路由冗余协议,主要用于解决单点故障问题。

4.那么VRRP是如何诞生的,VRRP的原理又是什么?

比如公司的网络是通过网关转换进行上网的那么如果该路由器故障了,网关无法转发报文了此时所有人都将无法上网,这时候怎么办?

image

通常做法是给路由增加一台备节点,但问题来了?如果我们的主网关master故障了,用户是需要手动修改网关指向Backup,如果用户过多修改起来会非常的麻烦。 第一个问题: 假设用户将指向都修改到Backup路由器,那么Master路由器如果修复好了又该怎么办? 第二个问题: 假设Master网关故障,我们将Backup网关配置为Master网关IP行不行? 其实上不行,因为PC第一次是通过ARP广播寻找到Master网关的Mac地址与IP地址,PC则会将Master网关的对应IP与MAC地址写入ARP缓存表中,那么PC第二次则会直接读取ARP缓存表中的MAC地址与IP地址,然后进行数据包的转发。此时PC转发的数据包还是会教给Master。(除非PC的ARP缓存表过期,在次发起ARP广播的时候才能正确获取Bakcup的Mac地址与对应的IP地址。)

image

如何才能做到出现故障自动转移,此时VRRP就应运而生,我们的VRRP其实是通过软件或硬件的形式在Master和Backup外面增加一个虚拟MAC地址(简称VMAC)与虚拟IP地址(简称VIP)。那么在这种情况下,PC请求VIP的时候,无论是Master处理还是Backup处理,PC仅会在ARP缓存表中记录VMAC与VIP的对应关系。

image

5.高可用keepalived使用场景

通常业务系统需要保证7x24小时不DOWN机, 比如公司内部OA系统,每天公司人员都需要使用,则不允许Down机。作为业务系统来说随时都可用

image

1.6.高可用核心概念总结

  • 1.如何确定谁是主节点谁是备节点。(投票选举?优先级?)

  • 2.如果Master故障,Backup自动接管,那Master恢复后会夺权吗?(抢占式、非抢占式)

  • 3.如果两台服务器都认为自己是Master会出现什么问题?(脑裂)

7.keepalived高可用安装与配置?

10.0.0.5 10.0.0.6

  • 1.安装
yum install keepalived -y</pre>
  • 2.配置
#抢占式
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
global_defs { 
 router_id lb01 
}
​
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
 }
}
#############################################
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs {
 router_id lb02
}
​
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@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl enable keepalived</pre>
  • 4.验证
[root@lb01 ~]# ip addr|grep 10.0.0.3</pre>

8.keepalived高可用地址漂移测试?

  • 在命令提示符ping 10.0.0.3抓包分析

当停止10.0.0.5上的keepalived是虚拟ip10.0.0.3跳转至10.0.0.6上


image.png

当恢复10.0.0.5上的keepalived是又跳转回来


image.png
  • arp分析

当主机10.0.0.5正常的时候虚拟ip10.0.0.3的mac地址与主机10.0.0.5的mac地址一致

image.png

当主机故障时虚拟ip10.0.0.3的mac地址与主机10.0.0.6的mac地址一致,主机恢复后又回到主机


image.png

9.keepalived高可用抢占式与非抢占式*
1.master故障--->backup顶上--->master恢复--->backup 抢占式 默认 2.master故障--->backup顶上--->master恢复--->backup继续工作 非抢占式

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

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

10.keepalived高可用与Nginx集成 地址漂移实现高可用 nginx和keeplaived没有关系? nginx需要借助keeplaived VIP 地址漂移 实现 高可用.

11.如果Nginx宕机, 会导致用户请求失败, 但Keepalived并不会进行切换, 所以需要编写一个脚本检测Nginx的存活状态, 如果不存活则kill nginx和keepalived

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 ~]# mkdir /scripts
[root@lb01 ~]# vim /scripts/check_web.sh
#!/usr/bin/bash
​
nginx_port=$(netstat -lntp|grep :80|wc -l)
if [ $nginx_port -ne 1 ];then

 systemctl start nginx &>/dev/null
 rc=$?
 sleep 3
 if [ $rc -ne 0 ];then
 systemctl stop  keepalived 
 fi
fi
[root@lb01 ~]# chmod +x /scripts/check_web.sh </pre>
  • 2.keeplaived调用该脚本
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
 global_defs { 
 router_id lb01 
 }
​
 #定义脚本名称,以及脚本所在的路径
 vrrp_script check_web {
 script "/scripts/check_web.sh"
 interval 5
 }
​
​
 vrrp_instance VI_1 {
 state MASTER
 #nopreempt
 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
 }
 }
  • 3.模拟nginx停止,检查nginx是否会被拉起

  • 4.模拟nginx故障,检查keeplaived的VIP是否会漂移至备节点

11.keepalived高可用脑裂与故障解决?

脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。

对于无状态服务的HA,无所谓脑裂不脑裂; 但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。 (但有些生产环境下的系统按照无状态服务HA的那一套去配置有状态服务,结果可想而知...)

master 10.0.0.3 backup 10.0.0.3 1.在备上编写检测脚本, 测试如果能ping通主并且备节点还有VIP的话则认为产生了脑列

[root@lb02 conf.d]# cat /scripts/check_spilt.sh 
vip=10.0.0.3
master_ip=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 "脑列"
 systemctl stop keepalived
 fi
fi
[root@lb02 conf.d]# cat /etc/keepalived/keepalived.conf 
global_defs {
 router_id lb02
}
​
vrrp_script check_spilt {
 script "/scripts/check_spilt.sh"
 interval 3
}
​
​
vrrp_instance VI_1 {
 state BACKUP
 nopreempt
 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
 }
​
}
​

keeplaived使用: 1.不能在公有云上使用 2.公有云要想实现负载均衡高可用-----> 购买的SLB 自带高可用 3.虚拟IP咋使--->真实的硬件环境:


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

推荐阅读更多精彩内容