LVS+keepalived高可用负载均衡集群

keepalived介绍

keepalived为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。

但是keepalived不是专门为LVS集群服务的,也可以做其他代理服务器的高可用。

LVS高可用集群的组成

主调度器+备调度器(一般是一主二备)

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器都处于冗余状态。备用调度器是不参与集群的运转,只有主调度器出现了故障,无法运行,此时备调度器才会承担主调度器的工作

一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成为冗余(基于VRRP)

  • 主服务器作用:转发数据;发送报文告诉备服务器自己在线。
  • 备服务器作用:监听主服务器发来的数据;收不到消息的时候就接替主服务器。

VRRP:keepalived是基于VRRP协议,实现LVS的高可用。解决了调度器和单节点的故障问题。

VRRP协议:提高网络路由器的可靠性开发的一种协议。

选举出主和备,预先设定好了主和备的优先级,备的优先级低。一旦开启服务,优先级高的会自动抢占主的位置

vrrp的组播通信:224.0.0.18 vrrp协议当中的主备服务器通过这个组播地址进行通信,交换主备服务器之间的运行状态。主服务器会周期性的发送VRRP报文消息,以告知其他服务器,主服务器现在的状态。

主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转义到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发送了主备切换,确保新的主服务器可以正常的处理客户端的请求。

故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。

高可用集群的脑裂现象以及预防措施

高可用集群的脑裂现象及其诱发原因

 脑裂现象:主和备同时拥有vrrp地址。在高可用系统当中,联系两个节点的心跳线,本来是一体的。动作协调的高可用系统。心跳线断开之后,分裂了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。两个调度器就像脑裂人一样抢占VIP。导致主有VIP,备也有VIP,因此整个集群失败。

解决方法

软件层面:

1.配置文件有问题

2.通过tcpdump抓包分析

3.重启两边服务

网络层面:

1.高可用服务器之间心跳线检测失败。主备之间无法进行通信。

2.硬件层面:

2.1连接主备之间的心跳线老化

2.2网卡或者网卡驱动失效,IP地址配置冲突

2.3 防火墙没有配置心跳线消息的传输通道

2.4后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUG

脑裂预防预防措施 

 针对脑裂现象的产生,运维人员第一时间要做的不是处理发生故障的调度器或则故障线路,而是首先确保业务不会因此中断,进行脑裂的预防尤为重要。出现问题,先保证业务的进行,再进行排障。

keepalived的体系和模块

全局模块:core模块,负责整个keepalived的启动加载和维护

VRRP模块,实现VRRP协议,主备切换

check:负责健康检查,检查后端真实服务器的健康情况,配置在真实服务器的模块当中

LVS+keepalived的实时和部署

test1  主调度器 20.0.0.10
test2  备调度器 20.0.0.20
后端真实服务器1 : 20.0.0.50
后端真实服务器2 : 20.0.0.90
vip地址:20.0.0.100
客户端:20.0.0.60

test1
//关闭防火墙
systemctl stop firewalld
setenforce 0yum -y install ipvsadm keepalived
//安装所需工具cd /etc/keepalived.conf
cp keepalives.conf keepalives.conf.bak
//对重要文件进行备份

vim keepalived.conf
smtp_server 127.0.0.1  //line 10
route_id LVs_01        // line 12
//主备服务器名称id不能一致#vrrp_strict   //line 15
//取消严格遵守vrrp协议功能,注释该行state MASTER     //LINE 22
//表示身份,主备 备:BACKUP
interface ens33    //line 24
//指定vip的物理接口virtual_router_id 10  //26
//虚拟路由的id号priority 100 
//优先级advert-int 1
//发送报文的间隔时间(工作中一般为30)authenication {auth_type PASSauth_pass 1111
}virtuak_ipaddress {192.168.233.100//指定集群的真实地址
}
virtual-server 20.0.0.100 80 {
delay_loop 6
//健康检查的间隔时间
lb_algo rr
//负载均衡的调度算法
lb_kind DR                 //46
//指定整个LVS的工作方式,要大写
persistence_timeout 0     //48
//连接保持时间
protocol TCP
//
}real_server 20.0.0.30 80 {   //52
weight 1
//后端真实服务器的轮询权重
TCP_CHECK {
//对真实服务器的检查connect_port 80//检测目标的端口号(此处检测是30)connect_timeout 3//检测连接超时时间nb_get_retry 3//重试次数delay_before_retry 4//重试的间隔秒数}
}real_server 20.0.0.40 80 {   //52
weight 1
//后端真实服务器的轮询权重
TCP_CHECK {
//对真实服务器的检查connect_port 80//检测目标的端口号(此处检测是30)connect_timeout 3//检测连接超时时间nb_get_retry 3//重试次数delay_before_retry 4//重试的间隔秒数}
}
}
wq!

systemctl restart keepalived.service
ipvsadm -ln
//重启服务并查看

test2 
//关闭防火墙
systemctl stop firewalld
setenforce 0yum -y install ipvsadm keepalivedcd /etc/keepalived.conf
cp keepalives.conf keepalives.conf.bakscp root@192.168.233.10:/etc/keepalived/keepalived.conf /etc/keepalived
//远程复制到test2本机
//此处得修改route_id号等

安装nginxsystemctl restrat nginx
cd /usr/local/nginx/html
vim index.html
//制作访问页面
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
ifup ifcfg-lo:0
route add -host 20.0.0.100 dev lo:0
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore=1
//设置lo接口忽略任何接口的ARP请求net.ipv4.conf.lo.arp_announce=2
//设置lo接口仅会相应本地的IP地址,其他的接口ARP请求全部忽略
net.ipv4.conf.all.arp_ignore=1
//所有接口忽略来自任务接口的ARP请求net.ipv4.conf.all.arp_announce=2
//所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略sysctl -p 
//刷新

创建页面内容

修改内核

添加虚拟网卡

test3 test4 操作相同
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255
wqifup ifcfg-lo:0
route add -host 20.0.0.100 dev lo:0

测试

本机访问
curl 本机ip

'

客户端访问
curl 20.0.0.100

下面关闭其中一个keepalived

关闭主站

观察备站

curl 20.0.0.100依然可以负载均衡访问成功

测试轮询

查看端口加权成功

结果

keepalived+nginx实验

nginx1   20.0.0.10 主
nginx2   20.0.0.20 备

实验开始前先备份以防报错而无法修改

主站
systemctl restart nginx
yum -y install keepalived
cd /etc/keeplived
cp keepalived.conf keepalived.conf.bak

smtp_server 127.0.0.1
#vrrp_strict
virtual_route_id 51vrrp_script check_nginx {script "/opt/check_nginx.sh"interval 5
}
//添加脚本
vrrp_intance VI_1 {}virtual_ipaddress {
192.168.233.100
}
track_script {
check_nginx
}scp root@192.168.233.61:/etc/keepalived/keepalived.conf /etc/keepalives/nginx2
/opt
vim check_nginx.sh
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
wq
chmod 777 check_nginx.shnginx1
拖入脚本
chmod 777 check_nginx.sh
systemctl restart keepalived.service
ip addrnginx2
设置访问页面

总结

keepalived的工作方式基于VRRP协议

1.确定主备

2.vrrp只能有一个,出现在主服务器上。

3.通过vrrp 组播地址 224.0.0.18 发送vrrp报文,检测主的心跳

4.主备切换,主出现故障,vip地址会漂移到备服务器。

5.主恢复了,vrrp地址还会回到主

6.脑裂 主备都有VIP

(硬件层面,软件层面)

脑裂解决(软件层面):

1.检查配置文件,重启

7.keepalive不是只能和lvs搭配,也可以和其他服务配合,实现高可用

如何解决keepalived脑裂问题

1.硬件:准备两条心跳线,这样短一条依然能够传送心跳消息

2.设置防火墙一定要让心跳消息通过。

3.依靠监控软件实时检测来实现(zabbix)

脑裂如何解决

软件层面:

1.配置文件有问题

2.通过tcpdump抓包分析

3.重启两边服务

网络层面:

1.高可用服务器之间心跳线检测失败。主备之间无法进行通信。

2.硬件层面:

2.1连接主备之间的心跳线老化

2.2网卡或者网卡驱动失效,IP地址配置冲突

2.3 防火墙没有配置心跳线消息的传输通道

2.4后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUG

了解即可

dev 开发环境 开发人员专用

sit 测试环境 测试人员使用(开发,运维)

pre:预生产环境 开发和运维(和最终生产环境保持一致)

prd:生产环境(面向用户的环境)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计——题目:用*号输出字母C的图案。程序分析:可先用‘*‘号在纸上写出字母C,再分行输出。

题目&#xff1a;用*号输出字母C的图案。 程序分析&#xff1a;可先用*号在纸上写出字母C&#xff0c;再分行输出。 #include<stdio.h> int main() {printf(" *****\n");printf(" *\n");printf("*\n");printf("*\n");printf(&…

Ubuntu deadsnakes 源安装新版 python

前言 适用于 Ubuntu 安装 python3.11 等新版本。 因为比较常用并且不想重新编译就记录一下&#xff0c;方便以后面向CV安装。 安装 添加 deadsnakes ppa 源 sudo add-apt-repository ppa:deadsnakes/ppa更新 apt sudo apt update安装 python3.11 sudo apt install python…

监控与升级

文章目录 主要内容一.部署Metrics1.部署代码如下&#xff08;示例&#xff09;: 2.解释 二.升级控制平面1.先确定要升级的版本代码如下&#xff08;示例&#xff09;: 2.禁止master节点接受新调度代码如下&#xff08;示例&#xff09;: 3.驱逐master节点上的现有任务代码如下&…

PhpStorm快速注释与取消注释

ctrl / 单行注释 ctrl shift / 多行注释 重复以上操作&#xff0c;取消注释。

5G投资下降,遥遥领先的主流5G或被运营商抛弃,“假5G”更获青睐

虽然媒体仍然在宣扬5G的诸多领先技术优势&#xff0c;不过需要付钱的运营商已在行动中做出抉择&#xff0c;那就是放缓主流5G的投资&#xff0c;大举投资曾被称为“假5G”的低频5G&#xff0c;现实迫使运营商做出了如此选择。 媒体披露的数据指2022年中国的5G投资下滑了2.5%&am…

jsoup的使用

本文在写作过程中参考了官方文档&#xff0c;传送门。 一、jsoup概述 jsoup 是一款基于 Java 的HTML解析器&#xff0c;它提供了一套非常省力的API&#xff0c;不但能直接解析某个URL地址、HTML文本内容&#xff0c;而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据&…

DevOps持续集成-Jenkins(4)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

Qt之自定义事件

在Qt中,自定义事件的步骤大概如下: 1.创建自定义事件,自定义事件需要继承QEvent 2.使用QEvent::registerEventType()注册自定义事件类型,事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间,在QEvent::User之前是预留给系统的事件 3.使用sendEvent() 和 postEv…

创建 Edge 浏览器扩展教程(上)

创建 Edge 浏览器扩展教程&#xff08;上&#xff09; 介绍开始之前后续步骤开始之前1&#xff1a;创建清单 .json 文件2 &#xff1a;添加图标3&#xff1a;打开默认弹出对话框 介绍 在如今日益数字化的时代&#xff0c;浏览器插件在提升用户体验、增加功能以及改善工作流程方…

搜维尔科技:Varjo-最自然和最直观的互动

创建真实生活虚拟设计 Varjo让你沉浸在最自然的混合和虚拟现实环境中。 世界各地的设计团队可以聚集在一个摄影现实的虚拟空间中,以真实的准确性展示新的概念-实时的讨论和迭代。这是一个充满无限创造潜力的新时代,加速了人类前所未有的想象力。 虚拟现实、自动反应和XR设计的…

用*画田字形状,numpy和字符串格式化都可以胜任

numpy的字符型元素矩阵&#xff0c;可以方便画&#xff1b;直接python字符串手撕&#xff0c;也可以轻巧完成。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《…

Monocular arbitrary moving object discovery and segmentation 论文阅读

基本信息 题目&#xff1a;Monocular Arbitrary Moving Object Discovery and Segmentation 作者&#xff1a; 来源&#xff1a;BMVC 时间&#xff1a;2021 代码地址&#xff1a;https://github.com/michalneoral/Raptor Abstract 我们提出了一种发现和分割场景中独立移动的…

TDengine(taos)数据库导出历史数据

业务需求&#xff1a;导出某个站点的累计充电量&#xff0c;累计放电量&#xff0c;光伏总放电量&#xff0c;进线总功率的所有数据‘ 1、登录taos&#xff0c;使用存数据的库&#xff1b; 提示Database changed&#xff1b;即为使用成功&#xff1b; 2、找到你想要导出的字段…

制作macOS Ventura U盘启动盘教程

macOS 14更新一段时间了&#xff0c;发现某些应用不适配想要无损降级&#xff0c;如何进行macOS的降级呢&#xff0c;除了备份好的时间机器备份&#xff0c;还需要一个可以引导的macOS U盘安装器&#xff0c;如何制作macOS 13 Ventura 系统启动U盘呢&#xff0c;小编带来对新手…

【uniapp】小程序开发7:自定义组件、自动注册组件

一、自定义轮播图组件、自动注册 以首页轮播图组件为例。 1、创建组件文件src/components/my-swipper.vue 代码如下&#xff1a; <template><view><view class"uni-margin-wrap"><swiper class"swiper" circular :indicator-dots…

ES6初步了解生成器

生成器函数是ES6提供的一种异步编程解决方案&#xff0c;语法行为与传统函数完全不同 语法&#xff1a; function * fun(){ } function * gen(){console.log("hello generator");}let iterator gen()console.log(iterator)打印&#xff1a; 我们发现没有打印”hello…

前端(二十三)——轮询和长轮询

&#x1f62b;博主&#xff1a;小猫娃来啦 &#x1f62b;文章核心&#xff1a;实现客户端与服务器实时通信的技术手段 文章目录 前言轮询技术轮询的概念轮询的实现原理轮询的优缺点轮询的使用场景 长轮询技术长轮询的概念长轮询的实现原理长轮询的优缺点长轮询的使用场景 轮询与…

《C和指针》笔记34:字符串函数

文章目录 1. 获取字符串长度strlen 2. 复制字符串strcpystrncpy 3. 拼接字符串strcatstrncat 4. 字符串比较strcmpstrncmp 1. 获取字符串长度 strlen 库函数strlen的原型如下&#xff1a; size_t strlen( char const *string );注意strlen返回一个类型为size_t的值。这个类型…

用 Go 访问 MySql 数据库

所有代码样例 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )var db *sql.DB// 初始化连接 func initDB() (err error) {db, err sql.Open("mysql", "root:mm..1213tcp(127.0.0.1:3306)/chapte…

【JavaEE】网络原理---TCP协议的易懂图文详解(确认应答、超时重传、连接管理、滑动窗口、流量控制)

一、TCP协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 1.1 TCP协议格式 &#xff08;为了方便排版这样化的&#xff0c;我们从上到下依次理解&#xff09; 二、TCP原理 2.1 确…