-
如果LVS挂掉了(单点故障)怎么办,会出现什么问题?
所有用户都看不到,业务下线
-
如果RS挂掉的话,会出现什么问题?
一部分用户会访问异常,LVS还存有RS的负载记录
-
单点故障解决方式:既然是一个宕掉,就用多台(一变多)
(一)主备(使用较多)
- 方向性
- 效率性
(二)主主
为了方便理解,我们举一个例子
皇帝 - > 皇子们
方向性
- 皇子们轮训主动观察监视皇上(备轮询主)
- 皇上上朝,主动对外发布自己的行动,但这里有一个重试的机制,也就是如果发现皇上3天都没有上朝的话就准备替代皇上(主通告备)
效率性
如果皇上3天没上朝了,皇子们认为皇上驾崩了,那么谁来登基呢?
如果没有加什么条件,皇子们通过争抢的方式来替代的话,会争抢很多轮,抢不下来
所以我们加了一个权重值,通过权重值来判定谁来替代皇帝
也就是备用机替代主机是通过推选制而不是争夺制
扩展:
我们常听到主从和主备的概念,这两个相同是同一个东西么?
- 主从:有主有从,各司其职,是分布式的,在这里面主还是单点的,所以一般在主从中还会对主服务器进行主备的高可用设置
- 主备:有主无备
-
RS挂了怎么确定?
如果回答ping地址,是不对的.
原因:访问一下,验证的是底层中的应用层的http协议
解决方式:发请求,判断返回200 OK
问题:怎么实现主备呢?
- lvs:内核中有模块:ipvs->增加代码?
- 第三方实现?
- 人来监控 然后响应?(最不靠谱)
企业追求自动化,所以把人解耦出去,用程序来进行代替方向性和效率性对应的操作 ->keepalived!
通过keepalived代替自动运维,解决单点故障,实现HA
- 监控自己服务
- Master通告自己还活着,Backup监听Master状态,Master挂了,一堆Backup推举出新的Master
- 配置vip,添加ipvs(keepalived有配置文件)
- 对后端server做健康检查
二、DR-HA(keepalived)实践 1.详情步骤tip:
- keepalived是一个通用的工具,主要作为HA实现
- nginx可以作为公司的负载均衡来用,nginx成为了单点故障,也可以用keepalived来解决
基于上次我们做的负载均衡实验,我们进行高可用的实验.
所以node1,node2,node3为已经负载均衡的机器
keepalived实验:
主机: node01~node04
node01:
后续直接通过keepalived自动配置lvs和网卡,所以我们先清理掉
ipvsadm -C 清除lvs
ifconfig eth0:8 down 清除网卡
----------------------------
node01,node04:
yum install keepalived ipvsadm -y
配置:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak 备份,防止改错
vi keepalived.conf 修改配置
node01:
1.配置vrrp协议(vrrp:虚拟路由冗余协议)
vrrp_instance VI_1 {
state MASTER // node04 BACKUP(主从状态)
interface eth0
virtual_router_id 51
priority 100 // node04 50(优先级)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.100/24 dev eth0 label eth0:3
}
}
2.配置虚拟服务,相当于lvs配置
virtual_server 192.168.150.100 80 { //相当于配置A(访问进入)
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0 // (因为不同用户访问,会在服务器开辟内存资源,所以为了避免资源浪费,设置规定时间内访问就负载到之前访问的那台服务器上)
protocol TCP
real_server 192.168.150.12 80 { //相当于配置A(访问出去)
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.150.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
scp ./keepalived.conf root@node04:`pwd`
linux命令:
3 dd :删除3行
O:向上新开一行
tab:切进来
d G 删除当前到最后的所有
.,$-1y 赋值当前行到最后的文本
p 粘贴
r 替换
scp ./keepalived.conf root@192.168.188.104:`pwd` 远程拷贝
2.扩展
扩展:
通过帮助程序man学习
指令:
yum install man
哪里不会写了就把哪儿的文字复制命令上:例如我们不知道virural_ipaddress这里应该咋写,
man 5 keepalived.conf 然后再/vitural_ipaddress
问题:所有主备中,主宕了之后又能抢回主?
回答:lvs是,其他的不一定,要参考成本复杂度
- lvs没有数据同步(因为是数据包转发),所以能直接抢回,但如果不lvs就不一定
- 在大数据中nameNode还考率数据同步问题,如果又抢回主的话会出现用户请求阻塞,在这段时间来进行数据的同步,会导致业务下线
因为keepalived会对后端server做健康检查(主备),如果RS其中一台挂掉的话,他会在ipvsadm -ln 中剔除掉不健康的,
备机也是一样,这样就不会存在服务器宕机了之后,部分用户请求不到的情况
如果RS又修复好了,那么会有加载上,而这一切的操作对于用户来说是透明的
3.验证HA-
验证主备(ipvsadm -lnc)
-
删除node1的eth0网卡(可以关机,在这里我们直接把node1网卡删除)
-
命令 ifconfig eth0 down
-
结果
-
用户访问依旧
-
node1和node4的lvs(-a,-A)配置均启动
-
node1的eth0:3剔除,node4的eth0:3启动
-
用户访问走node4负载均衡
-
-
-
.恢复node1的eth0网卡
- 命令 ifconfig eth0 up
- 结果
- 用户访问依旧
- node1的eth0:3启动,node4的eth0:3剔除
- 用户访问走node1负载均衡
-
-
验证RS宕机
-
关闭node2的httpd服务
-
命令 ipvsadm -ln (查看ipvs转发对应服务信息)
-
结果 剔除了对应的负载均衡的信息
-
-
开启node2的httpd服务
-
命令 ipvsadm -ln (查看ipvs转发对应服务信息)
-
结果 恢复了对应的负载均衡的信息
-
-
keepalived功能:
1. 监控自己服务
2. Master通告自己还活着,Backup监听Master状态,Master挂了,一堆Backup推举出新的Master
3. 配置vip,添加ipvs(keepalived有配置文件)
4. 对后端server做健康检查
根据上述功能,我们对/etc/keepalived中的keepalived.conf文件进行配置,并启动
问题:
演示:通过杀死httped健康检查的进程(模拟keepalived异常退出)
问题:
两台主机都配了vip,且没有剔除对应的lvs的转发服务器的设置,从而导致数据包紊乱
(破坏了原子性,三次握手紊乱,连接建立不起来,数据包丢弃)
四、问题引入
1.问题提出
keepalived异常退出,出现的问题?
2.问题模拟 通过杀死httped健康检查的进程(模拟keepalived异常退出)
3.演示结果- 两台主机都配了vip
- 没有剔除对应的lvs的转发服务器的设置,
- 从而导致数据包紊乱(破坏了原子性,三次握手紊乱,连接建立不起来,数据包丢弃)



