目录
主要功能
典型应用场景
优点
keepalived工作原理
Nginx+keepalived高可用实验
一. 环境准备
二. 下载并部署配置
对master和backup都操作
对master主机操作
对备用backup主机进行操作
验证当主节挂掉,VIP能否转义到备用机
"Keepalived" 是一个用于 Linux 系统的高可用性和负载均衡解决方案。它主要通过提供虚拟路由器冗余协议 (VRRP) 和健康检查来实现高可用性。以下是 Keepalived 的主要功能和特点的总结:
官网地址:Keepalived for Linux
Keepalived 的配置文件通常位于 /etc/keepalived/keepalived.conf
主要功能
-
高可用性 (High Availability):
- VRRP (Virtual Router Redundancy Protocol): Keepalived 使用 VRRP 提供路由冗余。通过配置主备服务器,当主服务器发生故障时,备服务器可以自动接管,保证服务的持续性。
- Failover 机制: 监控主服务器的健康状况,一旦检测到故障,自动切换到备用服务器,从而实现服务的高可用性。
-
负载均衡 (Load Balancing):
- 健康检查 (Health Checking): 定期检查后端服务器的健康状态。如果某个服务器出现故障,会将其从负载均衡池中移除,避免影响用户访问。
- 负载分发策略: 支持多种负载分发策略,例如轮询 (Round Robin)、最少连接 (Least Connections) 等。
-
监控和报警:
- 可以配置详细的监控和报警机制,及时发现并处理服务器故障。
典型应用场景
- Web 服务器集群: 在一组 Web 服务器之间分配流量,确保某台服务器宕机时,流量能自动切换到其他服务器。
- 数据库服务器高可用性: 监控数据库服务器的状态,确保数据库服务的高可用性和稳定性。
- 网络设备冗余: 通过 VRRP 提供路由器、交换机等网络设备的冗余,保证网络的高可用性。
优点
- 可靠性高: 提供高可用性和冗余,确保服务的持续性。
- 灵活性强: 支持多种负载均衡算法和健康检查机制,配置灵活。
- 开源免费: 基于开源许可证,免费使用和修改。
keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
脑裂 split barin:
Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。
解决方式:
1、添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少"裂脑"发生机会。(治标不治本,只是提高了检测到的概率);
2、设置仲裁机制。两方都不可靠,那就依赖第三方。比如启用共享磁盘锁,ping网关等。(针对不同的手段还需具体分析);
3、爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信
Nginx+keepalived高可用实验
一. 环境准备
两部虚拟机,两个虚拟机要在同一网段并可以互相通信。
主机名 | IP | 系统发行版本 |
master | 192.168.226.100 | Centos7 |
backup | 192.168.226.129 | Rocky_linux9.4 |
两个虚拟机都关闭防火墙和SElinux,配置好YUM源可以用,时间同步,修改对应主机名等基础配置准备。
二. 下载并部署配置
对master和backup都操作
对master和backup下载nginx和keepalived
yum install -y nginx keepalived
启动并设置开启自启master和backup的Nginx
systemctl enable --now nginx
备份keepalived.conf文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
对master主机操作
对mastar的keepalived.conf进行配置
vi /etc/keepalived/keepalived.conf
#删除原来配置文件的所有内容,复制这里的模板
! Configuration File for keepalivedglobal_defs {router_id directory1 #备用主机改为directory2,不同主机要使用不同的标识
}
vrrp_script check_nginx {script "/etc/keepalived/check_nginx_status.sh"interval 5
}
vrrp_instance VI_1 {state MASTER #定义主还是备interface ens33 #VIP绑定接口virtual_router_id 80 #整个集群的调度器一致priority 100 #master主机优先级为100,要比backup高,backup改为50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.226.200/24
# vip 这个是虚拟IP,找一个本网段内没有占用的IP使用,并和backup主机要保持一致}track_script {check_nginx}
}
创建一个检测脚本
vim /etc/keepalived/check_nginx_status.sh#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stopsystemctl stop keepalived
fi #将上面的内容复制进创建的脚本文件里
给脚本加上执行权限
chmod a+x /etc/keepalived/check_nginx_status.sh
启动并设置开机自启keepalived
systemctl enable --now keepalived
对备用backup主机进行操作
对backup的keepalived.conf进行配置
vi /etc/keepalived/keepalived.conf
#删除原来配置文件的所有内容,复制这里的模板
! Configuration File for keepalivedglobal_defs {router_id directory2
}vrrp_instance VI_1 {state BACKUP #设置为backupinterface ens33nopreempt #设置到back上面,不抢占资源virtual_router_id 80priority 50 #辅助改为50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.226.200/24}
}
验证当主节挂掉,VIP能否转义到备用机
在master上查看IP如下:
浏览器访问192.168.226.200如下
虚拟IP已经在主节点机器上了,现在模拟web服务宕机关闭nginx
systemctl stop nginx
然后刷新去看虚拟IP 192.168.226.200,发现页面发现打开的是roucky_linux中的web服务页面:
然后去查看backup主机的IP如下:
keepalived自动把IP切换到了备用主机上,从而实现避免单点故障,高可用。
现在重新把master主机的nginx和keepalived服务启动,然后再刷新页面:
再查看IP可以发现虚拟IP又恢复到了master主机上, web服务又切换到了主服务器上。