Keepalived高可用
高可用介绍
1.什么是高可用
2.高可用使用什么方式实现
硬件
软件 keepalived
3.keepalived如何实现高可用?
通过vrrp协议实现的高可用. 虚拟路由冗余协议
VMAC和VIP实现高可用技术方案 地址漂移
4.keepalived核心概念
1.如何确定谁是主节点谁是备节点。(投票选举?优先级?)
2.如果Master故障,Backup自动接管,那Master恢复后会夺权吗?(抢占式、非抢占式)
3.如果两台服务器都认为自己是Master会出现什么问题?(脑裂)
keepalived 服务安装配置
1.keepalived安装
[root@lb01 ~]# yum install keepalived -y
[root@lb02 ~]# yum install keepalived -y
2.keepalived主配置
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
}
}
3.keepalived备份配置文件
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
}
}
4.keepalived启动
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl enable keepalived
5.主配置文件和备配置文件的区别
Keepalived配置区别 Master配置 Backup节配置
route_id(唯一标识) lb01 lb02
state(角色状态) MASTER BACKUP
priority(优先级) 150 100
测试
1.测试IP地址是否会自动漂移 systemctl stop keepalived
2.测试漂移之后,检查windows的arp缓存表 arp -a
3.使用wireshark抓包分析
抢占式(默认)和非抢占式
1、两个节点的state都必须配置为BACKUP(官方建议)
2、两个节点都在vrrp_instance中添加nopreempt参数
3、其中一个节点的优先级必须要高于另外一个节点的优先级。
PS: 两台服务器都角色状态启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。
配置步骤
1.修改state 为backup
2.增加nopreempt
如何将keepalived与nginx负载均衡结合
强调: keepalived只做地址漂移,keepalived与nginx没有任何关系.
user --> blog.oldboy.com --> 10.0.0.3 --->lb01 -->80 --->nginx
1.先让10.0.0.6 能够正常的访问到对应的业务 scp
2.修改windows Host解析,指向到10.0.0.6
3.接入keepalived技术,修改windows Host解析 10.0.0.3
4.测试一台出现故障,另一台是否能自动接管,并且正常访问
如何使用keepalived (生产)
1.需要有硬件服务器,在云上不需要keepalived,阿里云自带高可用.
2.申请虚拟IP,是内网的,公网能不能申请
keepalived检测脑裂
检测脑裂脚本
vip=10.0.0.3
master_ip=10.0.0.5
while true;do
#1.通过ping命令测试主是否是通
ping -c 2 -W 3 $master_ip &>/dev/null
#2.ping的通master的ip,同时本地还存在一个vip地址
if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
echo "ha is split brain.warning."
else
echo "ha is ok"
fi
sleep 5
done
nginx故障问题解决
1.尝试拉起nginx
2.如果拉不起nginx,则把keepalived杀死
脚本文件
[root@lb01 ~]# cat /scripts/check_web.sh
#!/bin/sh
nginxpid=$(ps -C nginx --no-header|wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginxpid -eq 0 ];then
systemctl start nginx
sleep 3
#2.等待3秒后再次获取一次Nginx状态
nginxpid=$(ps -C nginx --no-header|wc -l)
#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
配置keepalived支持脚本
1.给脚本增加执行权限
[root@lb01 conf.d]# chmod +x /scripts/check_web.sh
2.修改keepalived配置文件
[root@lb01 conf.d]# 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 BACKUP
priority 150
nopreempt
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
#调用并运行该脚本
track_script {
check_web
}
}
keepalived高可用总结
1.高可用目的
减少系统故障时间
2.高可用通常使用keepalived来实现
3.keepalived底层借助的是vrrp虚拟路由冗余协议
4.vrrp诞生\vrrp解决了什么问题
1.用户手动修改IP (人员过多的情况, pass)
2.将backup机器的地址改为master的IP
1.arp缓存表的问题:
1.清理所有用户的arp缓存表,让其重新广播 那master恢复了怎么办?
3.vrrp解决这样问题?
新增一个vip ->vmac(对应的是真实服务器的mac地址)
1.用户只需要链接vip,无需在关心底层有多少机器
2.当master故障,backup顶上时,会通知客户端更新vip对应的vmac