Keepalived LVS群集

news/2024/10/22 18:29:16/

keepalived群集

Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

群集具备的特性

1)负载均衡 提高群集的性能
2)健康检查(探针) 探测调度器和节点服务器是否在正常运行
3)故障转移 通过VIP漂移实现主备切换

健康检查(探针)常用的工作方式

1)发送心跳消息 vrrp报文 ping/pong
2)TCP端口检查 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
3)HTTP URL检查 向目标主机的URL路径发起HTTP GET请求方法,如果响应状态码为 2XX 或 3XX,则认为健康检查正常;如果响应状态码为 4XX 或 5XX,则认为健康检查异常
http://IP:PORT/URI路径 http://www.nbpl.com/test.html

keepalived的工作原理

keepalived是基于 VRRP 协议实现多机热备的高可用方案。

默认情况下通过优先级决定主备服务器的角色(优先级最高的为主),主服务器(MASTER)会通过ip命令在本地生成VIP,并通过VIP接收并处理客户端发送的请求消息;同时主服务器还会定时发送VRRP报文给备服务器(BACKUP)告知主服务器的存活状态。当主服务器异常时,备服务器就会接管VIP(也是通过ip命令生成VIP)继续提供服务,保证服务的高可用。

keepalived的工作模式

1)抢占模式:keepalived的默认模式,MASTER节点从故障中恢复后,会将VIP从BACKUP节点中抢占过来

2)非抢占模式:MASTER节点恢复后不抢占VIP。(主备节点的state都配置为BACKUP,且都要添加nopreempt配置)

nginx做负载均衡器 + keepalived 实现高可用

1)先准备好对 nginx 进程做健康检查的脚本
2)修改keepalived配置文件,添加调用健康检查脚本的配置 使用vrrp_script XXX {}定义脚本路径 使用track_script { XXX }调用脚本
3)启动 nginx 和 keepalived

实验

keepalived + LVS

环境配置

客户机: 20.0.0.100
LVS1代理服务器 安装 Keepalived: 20.0.0.13
LVS2代理服务器 安装 Keepalived: 20.0.0.14

vip 虚拟ip: 20.0.0.200
web1服务器: 20.0.0.11
web2服务器: 20.0.0.12

实操

1) 代理服务器 LVS1、LVS2 关闭防火墙 安装keepalived、ipvsadm

systemctl disable firewalld.service --now
setenforce 0         #关闭防火墙、核心防护yum -y install ipvsadm keepalived    #安装 ipvsadm keepalived
rpm -qa | grep keepalived  #查看keepalived版本rpm -ql keepalived   #查看keepalived安装路径

2) 修改LVS1代理主服务器配置(主)

cp /etc/keepalived.conf /etc/keepalived.conf.bak    #备份配置文件
vim /etc/keepalived.conf......
global_defs {    #定义全局参数smtp_server 127.0.0.1    #邮件服务指向本地router_id LVS_01    #指定主服务器(路由器)的名称#vrrp_strict    #加注释,取消严格遵守VRRP协议功能,否则VIP无法被连接
}vrrp_instance VI_1 {				#定义VRRP热备实例参数state MASTER    #指定热备状态,主为MASTER,备为BACKUPinterface ens33    #指定承载vip地址的物理接口	virtual_router_id 10    #指定虚拟路由器的ID号,每个热备组保持一致#nopreempt		#如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreemptpriority 100    #指定优先级,数值越大优先级越高,这里设置主为100,备为90advert_int 1    #通告间隔秒数(心跳频率)authentication {    #定义认证信息,每个热备组保持一致auth_type PASS    #认证类型auth_pass abc123    指定验证密码,主备服务器保持一致}virtual_ipaddress {    #指定群集vip地址20.0.0.200}
}virtual_server 20.0.0.200 80 {    #指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数delay_loop 6    #健康检查的间隔时间(秒)lb_algo rr    #指定调度算法,轮询(rr)lb_kind DR    #指定群集工作模式,直接路由(DR)persistence_timeout 0    #连接保持时间(秒)protocol TCP    #应用服务采用的是 TCP协议real_server 20.0.0.11 80 {    #指定第一个Web节点的地址、端口weight 1    #节点的权重	TCP_CHECK {connect_port 80    #添加检查的目标端口connect_timeout 3    #添加连接超时(秒)nb_get_retry 3    #添加重试次数delay_before_retry 3    #添加重试间隔}}real_server 20.0.0.12 80 {    #添加第二个 Web节点的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}
}}systemctl start keepalived
ip a    #查看虚拟网卡vip

3) 加载IPVS模块、保存当前的IPVS配置,并且查看当前系统上的IPVS配置信息

modprobe ip_vs   #加载 IP 虚拟服务器 (IPVS) 模块ipvsadm-save > /etc/sysconfig/ipvsadm  #将当前 IPVS 的配置保存到 /etc/sysconfig/ipvsadm 文件中systemctl start ipvsadm.service
systemctl restart keepalived.service ipvsadm -ln    #列出当前系统上的 IPVS 配置信息

4)修改LVS2代理主服务器配置(备)

global_defs {smtp_server 127.0.0.1router_id LVS_02    #指定备服务器(路由器)的名称#vrrp_strict        #加注释,取消严格遵守VRRP协议功能,否则VIP无法被连接
}vrrp_instance VI_1 {state BACKUP    #指定热备状态,主为MASTER,备为BACKUPinterface ens33virtual_router_id 10priority 90    #指定优先级,数值越大优先级越高,这里设置主为100,备为90advert_int 1authentication {auth_type PASSauth_pass abc123}virtual_ipaddress {20.0.0.200}
}virtual_server 20.0.0.200 80 {delay_loop 6lb_kind DRpersistence_timeout 0protocol TCPreal_server 20.0.0.11 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 20.0.0.12 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}systemctl start keepalived
ip a    #查看虚拟网卡vip

5) LVS – DR模式构建负载均衡集群

#启动 ipvsadm 服务(主备皆如此)
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalive

6) 配置节点服务器,准备测试页面

systemctl stop firewalld
setenforce 0yum -y install httpd
systemctl start httpd#建立测试页
#192.168.80.100
echo 'this is kgc web!' > /var/www/html/index.html#192.168.80.101
echo 'this is benet web!' > /var/www/html/index.html

7)浏览器访问测试结果

8) 关闭主服务器的Keepalived服务,测试高可用

Nginx + Keepalived

环境配置

客户机: 20.0.0.100
Nginx1代理服务器 安装 Keepalived: 20.0.0.13
Nginx2代理服务器 安装 Keepalived: 20.0.0.14

vip 虚拟ip: 20.0.0.200
web1服务器: 20.0.0.11
web2服务器: 20.0.0.12

实操

1)编写Nginx服务监控脚本

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then/usr/local/bin/nginxsleep 2counter=$(ps -C nginx --no-heading|wc -l)if [ "${counter}" = "0" ]; then/etc/init.d/keepalived stopfi
fi

2) 配置Nginx1代理服务器(主)

global_defs {               router_id Nginx_01
}
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -5fall 3rise 2
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {20.0.0.200}track_script {check_nginx}
}

3)配置Nginx2代理服务器(备)

global_defs {               router_id Nginx_02
}
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -5fall 3rise 2
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {20.0.0.200}track_script {check_nginx}
}

4) Nginx负载均衡配置

#主备nginx均配置四层反向代理
vim /apps/nginx/conf/nginx.conf
stream{upstream iserver {server 20.0.0.103:80;server 20.0.0.104:80;
}server {listen       80;proxy_pass   iserver;}     }systemctl restart nginx

5)负载均衡测试

用curl命令对VIP地址进行访问

6)高可用测试

systemctl stop nginx     #关闭主服务器的nginx服务

脑裂故障问题

现象
服务器和备服务器都同时拥有相同的VIP
原因
因为主服务器和备服务器之间的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务器误认为主服务器已经故
障了并通过ip命令在本地生成VIP

解决

关闭主服务器或备服务器其中一个的keepalived服务

预防

(1)如果是系统防火墙导致,则关闭防火墙或者添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
(2)如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信或者做链路聚合
(3)在主服务器使用脚本定时判断与备服务器之间的通信链路是否中断,如果判断主备服务器之间的链路中断则自行关闭主服务器的keepalived服务
(4)利用第三方应用或监控系统检测是否发送了脑裂故障现象,如果确认发生脑裂故障则通过第三方应用或监控系统来关闭主备服务器其中一个的keepalived服务

http://www.ppmy.cn/news/1538968.html

相关文章

商标已拿证,为何无缘无故被撤销?

什么是“撤三”? 《商标法》第四十九条规定,“注册商标成为其核定使用的商品的通用名称或者没有正当理由连续三年不使用的,任何单位或者个人可以向商标局申请撤销该注册商标。”这就是我们通常所说的“撤三”。 那么怎样才算规范、正确的商标…

操作系统笔记---进程的同步与互斥方法汇总

实现互斥的四个原则主要特点空闲让进忙则等待有限等待让权等待软件方法单标志法❌turn 1/0双标志先检查法❌flag[i] true/flase双标志后检查法❌❌flag[i] true/flasePerterson法❌turn 1/0 flag[i] true/flase硬件方法关中断不适用多处理机 关中断权…

Sealos Devbox 发布,珍爱生命,远离 CI/CD

水滴攻击太阳系用的是最原始的攻击方式:撞击!却又如此有效率。 当我们搞了一堆容器、编排、CI/CD、DevOps,发明了一大堆没什么用的名词之后,最终发现这些操作都是花里胡哨,让开发者越陷越深。 最终你会发现一个真理&…

【大数据应用开发】2023年全国职业院校技能大赛赛题第09套

如有需要备赛资料和远程培训,可私博主,详细了解 目录 任务A:大数据平台搭建(容器环境)(15分) 任务B:离线数据处理(25分) 任务C:数据挖掘(10分) 任务D:数据采集与实时计算(20分) 任务E:数据可视化(15分) 任务F:综合分析(10分) 任务A:大数据平台搭…

MySQL 的数据类型

1.整数类型 1.1 tinyint tinyint 为小整数类型,存储空间为1个字节(8位),有符号范围-128 ~ 127,无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段,如某一字段 type 表示学科,其中 “type1” 表示语文…

【常用的安装破解版指令】MAC安装破解版软件显示文件损坏时

MAC安装破解版软件显示文件损坏时 复制以下命令粘贴到终端后 sudo xattr -rd com.apple.quarantine 打开Finder(访达),点击左侧的 应用程序,将应用拖进终端中,然后按键盘的回车键(return)&…

selenium的 presence_of_element_located 与 invisibility_of_element_located的区别

presence_of_element_located直到元素出现 invisibility_of_element_located直到元素可见 详解 presence_of_element_located:判断某个元素是否被加到了dom树里,并不代表该元素一定可见;校验程度轻一些,在页面跳转之后判断某种标…

雷池社区版如何使用静态资源的方式建立站点

介绍: SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、X…