Keepalived高可用
1.什么是高可用
一般是指2台机器启动着'完全相同'的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。
2.常用的工具
1.硬件通常使用 F5
2.软件通常使用 keepalived
3.keepalived是如何实现高可用的?
VRRP协议
'keepalived软件是基于VRRP协议实现的,VRRP虚拟路由冗余协议,主要用于解决路由单点故障问题
# 什么是VRRP虚拟路由冗余协议?
ARP广播 :# 我们在连接交换机的时候,需要广播。我们的电脑,上网需要以太网协议以及IP协议,根据arp协议判断源目标是否在同一lan,这时候需要广播请求给交换机做广播,这时候我们需要广播的MAC地址,不在同一LAN,我们需要路由器IP,让路由器帮我们转发。
VRRP协议:# 可生成VIP(虚拟IP)以及(VMAC)
vip负责IP漂移 # 把虚拟IP,转到备份的‘交换机’
vmac负责通知ARP广播修改mac地址。
1# 珍贵的例子
'比如公司的网络是通过网关进行上网的,那么如果该路由器故障了,网关无法转发报文了,此时所有人都无法上网了,怎么办?
通常做法是给路由器增加一台备节点,但是问题是,如果我们的主网关master故障了,用户是需要手动指向backup的,如果用户过多修改起来会非常麻烦。所以我们需要用到`keepalived`.
'问题一:假设用户将指向都修改为backup路由器,那么master路由器修好了怎么办?
`康配置文件抢占式、非抢占式。`最好`keepalived`配置非抢占式,减少一个断开。
'问题二:假设Master网关故障,我们将backup网关配置为master网关的ip是否可以?
其实是不行的,因为PC第一次通过ARP广播寻找到Master网关的MAC地址与IP地址后,会将信息写到ARP的缓存表中,那么PC之后连接都是通过那个缓存表的信息去连接,然后进行数据包的转发,即使我们修改了IP但是`Mac地址是唯一的`,pc的数据包依然会发送给master。(
如何才能做到出现'故障自动转移',此时VRRP就出现了,我们的VRRP其实是通过软件或者硬件的形式在Master和Backup外面增加一个虚拟的MAC地址(VMAC)与虚拟IP地址(VIP),那么在这种情况下,PC请求VIP的时候,无论是Master处理还是Backup处理,PC仅会在ARP缓存表中记录VMAC与VIP的信息。
4.高可用keepalived核心概念
1.如何确定谁是主节点谁是备节点'(选举投票,优先级,用命令查。。。)'ip addr | grep '配置的VIP'
2.如果Master故障,Backup自动接管,那么Master恢复后会夺权吗'(抢占式、非抢占式)'
3.如果两台服务器都认为自己是Master会出现什么问题'(脑裂)'
1.环境准备
主机 | IP | 身份 |
---|
lb01 | 10.0.0.4 | keepalived master |
lb02 | 10.0.0.5 | keepalived backup |
web01 | 172.16.1.7 | web端 |
web02 | 172.16.1.8 | web端 |
db01 | 172.16.1.51 | 数据库 |
- | 10.0.0.3 | VIP |
2,模拟keepalived搭建
1.` 保证七层负载均衡完全一致
[root@lb01 conf.d]# scp linux.wp.com.conf 172.16.1.5:/etc/nginx/conf.d/
[root@lb01 conf.d]# scp -r /etc/nginx/ssl_key 172.16.1.5:/etc/nginx/ #因为lb01 是使用了https协议。所以把假私钥,推送过去,搭建keepalived
3.` 安装keepalived
[root@lb01 ~]
[root@lb02 ~]
4.` 配置keepalived
1)`查找配置文件
[root@lb01 ~]
/etc/keepalived/keepalived.conf
2)'+配置主节点的配置文件
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
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
}
}
3)'配置备节点
[root@lb02 ~]
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
5.` 启动服务
[root@lb01 ~]
[root@lb01 ~]
[root@lb02 ~]
[root@lb02 ~]
keepalived配置文件的几大架构说明
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
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.keepalived开启日志
[root@lb01 ~]
KEEPALIVED_OPTIONS="-D -d -S 0"
[root@lb01 ~]
local0.* /var/log/keepalived.log
[root@lb01 ~]
三、keepalived的抢占式与非抢占式
1.两个节点都启动的情况
[root@lb01 ~]
inet 10.0.0.3/32 scope global eth0
[root@lb02 ~]
2.停止主节点
[root@lb01 ~]
[root@lb01 ~]
[root@lb02 ~]
inet 10.0.0.3/32 scope global eth0
3.重新启动主节点
[root@lb01 ~]
[root@lb01 ~]
inet 10.0.0.3/32 scope global eth0
4.配置非抢占式
节点配置
`节点一配置
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
... ...
vrrp_instance VI_1 {
state BACKUP
# nopreempt 开启非抢占式
nopreempt
priority 100
... ...
}
[root@lb01 ~]# systemctl restart keepalived
`节点二配置
[root@lb02 ~]
... ...
vrrp_instance VI_1 {
state BACKUP
nopreempt
priority 90
... ...
}
[root@lb02 ~]
'配置非抢占式说明白
1.两个节点的state都必须配置为BACKUP
2.两个节点都必须加上配置 nopreempt
3.其中一个节点的优先级必须要高于另外一个节点的优先级。
两台服务器都角色状态启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。