keepalived高可用
目录
一:keepalived高可用(私网)
1.什么是高可用?
copy一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。
2.keepalived是如何实现高可用的?
copykeepalived软件是基于VRRP协议实现的,VRRP虚拟路由冗余协议,主要用于解决单点故障问题 ARP广播 VRRP协议 vip负责IP漂移 vmac负责通知ARP广播修改mac地址
3.什么是keepalived?
copyKeepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。 后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。
- 私网: 用于公司等私有内网搭建使用
4.什么是LVS?
copyLVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一
copyLVS 个人理解就是利用多个物理机集群虚拟出一个虚拟ip(Virtual Server IP,简称VIP),虚拟ip不是实际存在的物理机,所以虚拟ip不会挂,而 LVS 的实现 Linux 内核已经帮助我们实现了,结构如下图:
5.keepalived作用
copy部署在整个集群中的一个高可用软件,作用是创建一个VIP(虚拟IP),在整个集群中有且只有一个机器上生成VIP,当这台机器出现问题时,keepalived将自动将VIP切换至其他的某一台服务器上。
6.什么是Haproxy?
copyHaproxy是高可用代理软件,它是一种比较流行的开源软件,基于TCP(四层)/HTTP(七层)协议的负载均衡代理解决方案,可以在Linux、FreeBSD等平台下运行,常见于跨多个服务器,比如:web、应用程序、数据库、MQ消息队列、MC数据库等等。通过多个Haproxy服务来提高服务的性能和可靠性。
7.高可用keepalived核心概念
copy1.如何确定谁是主节点谁是备节点(选举投票,优先级) 2.如果Master故障,Backup自动接管,那么Master恢复后会夺权吗(抢占试、非抢占式) 3.如果两台服务器都认为自己是Master会出现什么问题(脑裂)
- 注意:
copy1.虚拟VIP无法在云服务器上使用,因为云服务器不支持虚拟IP。 当前配置只限(私网)高可用 云服务器不支持虚拟VIP 2.公网高可用,只能在(云服务器)使用
- 部署前设备需求
lb01 | 192.168.15.5 | 负载均衡代理 |
---|---|---|
lb02 | 192.168.15.6 | 负载均衡代理 |
VIP | 192.168.15.3 | 虚拟网卡VIP |
web | 192.168.15.0 | web服务器等 |
二:实现虚拟VIP,部署keepalived
- 实现VIP,解决web服务器的单点故障
1.安装keepalived之前要保证lb01 lb02服务器配置是一样的
copylb01将game.conf 传给 lb02 [root@lb01 conf.d]# scp game.conf 172.16.1.6:/etc/nginx/conf.d/
copylb02服务器(将lb02原有配置文件压缩,只留一个与lb01服务器统一) [root@lb02 conf.d]# ll total 8 -rw-r--r-- 1 root root 1072 Nov 16 23:02 default.conf -rw-r--r-- 1 root root 462 Jan 9 10:25 game.conf
copylb01与lb02保持一致配置文件 [root@lb02 conf.d]# gzip default.conf
copy测试 nginx -t 重启 systemctl restart nginx
2.部署keepalived
copylb01与lb02统一安装keepalived
3.安装keepalived
copyyum install keepalived -y
4.lb01服务器(配置keepalived文件)
copy编写配置文件 vim /etc/keepalived/keepalived.conf
copy#全局配置 global_defs { #身份识别(全局唯一) router_id lb01 } # 配置VRRP协议 vrrp_instance VI_1 { # 主机节点 备用节点(当主机节点出现问题,就使用备用节点) # 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重) state MASTER # 绑定网卡(配置网卡与虚拟VIP 相符) interface eth0 # 虚拟路由标示,可以理解为分组(相当于频道50) virtual_router_id 50 # 优先级(数字越大,权重越大 越大oen) priority 100 # 监测心跳间隔时间 advert_int 1 # 配置认证 authentication { # 认证类型 auth_type PASS # 认证的密码 auth_pass 111111111 } # 设置VIP(配置那个网卡就需要配置该网段) virtual_ipaddress { # 虚拟的VIP地址 192.168.15.3 } }
5.lb02服务器(配置keepalived文件)
copy编写配置文件 vim /etc/keepalived/keepalived.conf
copy#全局配置 global_defs { #身份识别(全局唯一) router_id lb02 } # 配置VRRP协议 vrrp_instance VI_1 { # 主机节点 备用节点(当主机节点出现问题,就使用备用节点) # 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重) state BACKUP # 绑定网卡(配置网卡与虚拟VIP 相符) interface eth0 # 虚拟路由标示,可以理解为分组(相当于频道50) virtual_router_id 50 # 优先级(数字越大,权重越大 越大oen) priority 90 # 监测心跳间隔时间 advert_int 1 # 配置认证 authentication { # 认证类型 auth_type PASS # 认证的密码 auth_pass 111111111 } # 设置VIP(配置那个网卡就需要配置该网段) virtual_ipaddress { # 虚拟的VIP地址 192.168.15.3 } }
5.启动测试(lb01 与 lb02)
copysystemctl start keepalived
copyip a
三:测试lb01主机节点服务器宕机
1.测试lb01主机节点服务器宕机
copy1.lb01服务器优先级(会显示虚拟VIP地址) 2.当lb01服务器宕机会将(虚拟VIP切换到)lb02服务器 3.以实现备用自启动(防止一台服务器故障导致的损失) 当lb01主机节点服务器宕机 keepalived自动开启备用服务器lb02
四:实战测试(服务器宕机状态)
1.(统一配置文件)
copylb01服务器 与 lb02服务器 * 切换路径 [root@lb01 ~]# cd /etc/nginx/ 1.将nginx全局配置文件移动至 备用服务器lb02 [root@lb01 nginx]# scp nginx.conf 172.16.1.6:/etc/nginx/ root@172.16.1.6's password: nginx.conf 100% 645 779.0KB/s 00:00 2.将证书移动至 备用服务器lb02 [root@lb01 nginx]# scp -r ssl 172.16.1.6:/etc/nginx root@172.16.1.6's password: server.key 100% 1708 1.1MB/s 00:00 server.crt 100% 1220 985.4KB/s 00:00 3.将proxy_params代理缓存区 移动至 备用服务器lb02 [root@lb01 nginx]# scp proxy_params 172.16.1.6:/etc/nginx root@172.16.1.6's password: proxy_params 100% 1173 1.1MB/s 00:00
2.lb02服务器
3.lb01 与 lb02 服务器
copy测试 nginx -t 重启 systemctl restart nginx 开启keepalived systemctl start keepalived
4.DNS解析域名
5.网址测试
copywww.game.com 实现 负载均衡宕机自启动(备用服务器) 1.当lb01主机节点服务器宕机 2.keepalived自动开启备用服务器(负载均衡)lb02
6.当主机节点出现 宕机时
copy1.自动切换服务器(抢占式) 2.在切换过程中会有延时 3.延时途中 如网站访问量较多时 4.会导致报错造成(不可估量)的损失 解决方法: 所以就用到了以下的方法来解决以上所存在的问题 (非抢占式)
五:抢占式和非抢占式(通常建议开启非抢占式)
- 抢占模式:
copyharpxy的实际运行过程中,当master发生异常,且后期恢复master正常后,存在抢占或非抢占两种情况。简单点说抢占模式就是,当master宕机后,backup 接管服务。后续当master恢复后,vip漂移到master上,master重新接管服务,多了一次多余的vip切换,而在实际生产中是不需要这样。
- 非抢占模式:
copy实际生产中是,当 原先的master恢复后,状态变为backup,不接管服务,这是非抢占模式。
1.非抢占模式(配置)
copystate BACKUP (所有的机器全部设置成BACKUP) #开启非抢占式 nopreempt
六:高可用时如果出现脑裂问题时怎么解决
1.什么是脑裂?
copyKeepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
- 当其他服务不可用时如nginx,出现不可用时的解决方法,除了keepalived。
2.以下解决方法
copy使用脚本,并进行检测nginx等其他服务出现问题,并直接处理!如: 1.当nginx出现宕机,关机,脚本会自动检测,并自动开启nginx。 2.当nginx出现宕机,无法开启,脚本则会将keepalived关闭,自动切换备用服务器。 keepalived.conf : 每5秒执行一次脚本,作用于脚本(开关) check.sh : 执行内容脚本,作用于(脚本)
3.lb01服务器(搭建脚本)
copy切换路径 [root@lb01 ~]# cd /etc/keepalived/
4.编写执行内容脚本(执行内容)
copy[root@lb01 keepalived]# vim check.sh
copy#!/bin/bash # 1、判断端口 # 2、通过进程的方式 # 过滤nginx 不过滤进程 ps -aux | grep [n]ginx # 判断内容是否不等于0 if [ $? -ne 0 ];then # 代表nginx宕机 重启nginx systemctl restart nginx # 3秒 sleep 3; # 过滤nginx 不过滤进程 ps -aux | grep [n]ginx # 判断内容是否不等于0 if [ $? -ne 0 ];then # 关闭虚拟VIP 直接切换到另一台服务器 systemctl stop keepalived fi fi
5.增加可执行权限
copy[root@lb01 keepalived]# chmod +x check.sh
4.搭建(脚本开关)
5.编写执行用来启动检测作用脚本(启动开关)
copy[root@lb01 ~]# vi /etc/keepalived/keepalived.conf
copyvrrp_script check_web { # 指定脚本路径 script "/etc/keepalived/check.sh" # 5秒钟执行一次 interval 5 } # 配置VRRP协议 vrrp_instance VI_1 { # 主机节点 备用节点(当主机节点出现问题,就使用备用节点) # 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重) state MASTER # 绑定网卡(配置网卡与虚拟VIP 相符) interface eth0 # 虚拟路由标示,可以理解为分组(相当于频道50) virtual_router_id 50 # 优先级(数字越大,权重越大 越大oen) priority 100 # 监测心跳间隔时间 advert_int 1 # 配置认证 authentication { # 认证类型 auth_type PASS # 认证的密码 auth_pass 111111111 } # 设置VIP(配置那个网卡就需要配置该网段) virtual_ipaddress { # 虚拟的VIP地址 192.168.15.3 } #调用计划的脚本 track_script { check_web } }
6. lb01服务器将启动脚本文件传入lb02服务器(lb02服务器并再次编写脚本内容 达成一致)
copy[root@lb01 nginx]# scp nginx.conf 172.16.1.6:/etc/nginxroot @172.16.1.6's password: nginx.conf 100% 645 665.3KB/s 00:00
7.实战模拟测试脑裂(nginx)
- 情况一:
copy当除了keepalived的其他服务如nginx出现关闭(宕机)情况 1.脚本会检测到,然后自启动nginx服务
- 情况二:
copy当除了keepalived的其他服务如nginx出现(宕机)脚本无法自启动时 1.脚本会自启动关闭keepalived,切换到备用服务器。
copy1.1编辑nginx.conf全局配置文件,模拟宕机无法启动
copy1.22.实战测试 当除了keepalived的其他服务如nginx出现关闭(宕机)情况 1.脚本会检测到,然后自启动nginx服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?