LVS+Keepalived集群(主、备)

news2024/9/22 7:31:31

1、Keepalived及其工作原理

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

keepalived 高可用之间是通过VRRP进行通信,VRRP是通过竞选的来确定主备,主优先级高于备。在一个LVS服务集群中通常有主服务器(Master)和备份服务器(Backup)两种服务器,但是对外表现为一个虚拟IP,主服务器会广播VRRP报文给备份服务器,告诉备我还活着,此时备不会去抢占主;当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

VRRP 虚拟路由冗余协议

VRRP会把多台路由器组成一个虚拟路由组vrid,VRIP回生成虚拟路由器(包含虚拟IP 和 虚拟MAC,局域网内用户不关心谁是主备,能提供服务就行)

实际上 虚拟IP是承载在Master路由器上,也就是说实际上 数据包是通过Master进行转发,master 和 backup 是通过优先级决定谁是Master ,优先级最大的是Master                                                  

Backup 只负责监听Master定时发来的VRRP报文,如果超时未收到 Master 发来的VRRP报文,Backup 就会进行抢占,虚拟IP也会随着 VIP 飘逸到 Backup 上

2、Keepalived体系主要模块及作用

故障自动切换 failover                                                                                                                     

实现LVS集群中节点健康检查         (检查 Master 和 Backup 的LVS-DR,如何 LVS-DR 是坏的,就会切换到备)                                             

节点服务器可高用性 H A

keepalived体系架构中主要有三个模块,分别是 core、check、vrrp
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
vrrp模块:(检查主、备问题)是来实现VRRP协议的。
check模块:(检查后端服务nginx、tomcat什么的)负责健康检查,常见的方式有端口检查及URL检查。

3、LVS+Keepalived 高可用群集

主DR 服务器:ens33(192.168.190.10) ipvsadm 、keepalived(热备) 虚拟IP:192.168.190.100  网卡 ens33:0
备DR 服务器:ens33(192.168.190.20) ipvsadm 、keepalived
虚拟IP:192.168.10.180  网卡 ens33:0
Web 服务器1:ens33 192.168.190.50
lo:0(VIP)192.168.10.100
Web 服务器2:ens33 192.168.190.60
lo:0(VIP)192.168.190.100
VIP:192.168.190.100         
客户端:192.168.190.200

---------------------LVS 部署-------------------------
1.配置负载调度器(主、备相同)  (192.168.190.10、192.168.190.20)

systemctl stop firewalld.service
setenforce 0

yum -y install ipvsadm keepalived


modprobe ip_vs
cat /proc/net/ip_vs

(1)配置keeplived(主、备DR 服务器上都要设置)*****注意主、备不一样的地方

cd /etc/keepalived/


cp keepalived.conf keepalived.conf.bak          #备份


vim keepalived.conf
......
global_defs {                        #定义全局参数
--10行--修改,邮件服务指向本地回环地址
    smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主(Master)为LVS_01,备(Backup)为LVS_02
    router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    #vrrp_strict
}

keepalived抢占模式:主挂了之后恢复,抢占回主

keepalived非抢占模式:主挂了之后恢复,不抢占回主,就当备

vrrp_instance VI_1 {                #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致    
    virtual_router_id 10
    #nopreempt        #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_int 1                    #通告间隔秒数(心跳频率)
    authentication {                #定义认证信息,每个热备组保持一致
        auth_type PASS                #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123456
    }
    virtual_ipaddress {                #指定群集vip地址(虚拟IP)
        192.168.190.100
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.190.100 80 {          #HTTP 80  HTTPS 443
    delay_loop 6                    #健康检查的间隔时间(秒)
    lb_algo rr                        #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50            #连接保持时间(秒)
    protocol TCP                    #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.190.50 80 {
        weight 1                    #节点的权重
--45行--删除,添加以下健康检查方式        
        TCP_CHECK {
            connect_port 80            #添加检查的目标端口
            connect_timeout 3        #添加连接超时(秒)
            nb_get_retry 3            #添加重试次数
            delay_before_retry 3    #添加重试间隔
        }
    }

    real_server 192.168.190.60 80 {        #添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
##删除后面多余的配置##
}

192.168.190.10

192.168.190.20


节点服务器192.168.190.10(master)和192.168.190.20(backup)都需要配置vip(虚拟IP)     

cd /etc/sysconfig/network-scripts/


cp ifcfg-ens33 ifcfg-ens33:0


vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.190.100
NETMASK=255.255.255.255


ifup  ens33:0 


systemctl start keepalived


ip addr                        #查看虚拟网卡vip
==============================================
配置文件里有,可以不做
ipvsadm -ln


(2)启动 ipvsadm 服务
--192.168.190.10---

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm


ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived


--192.168.190.20---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -ln

192.168.190.10

192.168.190.20


(3)调整 proc 响应参数,关闭Linux 内核的重定向参数响应

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p


2.配置节点服务器192.168.190.50、192.168.190.60

systemctl stop firewalld
setenforce 0

yum -y install httpd
systemctl start httpd

--192.168.190.50---
echo 'this is benet web!' > /var/www/html/index.html

--192.168.190.60---
echo 'this is kgc web!' > /var/www/html/index.html

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.190.100
NETMASK=255.255.255.255

service network restart 或 systemctl restart network


ifup lo:0
ifconfig lo:0


route add -host 192.168.190.100 dev lo:0

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p


3.测试验证
在客户端访问 http://192.168.190.100/ 

切换故障
 主(Master)服务器192.168.190.10       关闭 keepalived 服务后再测试,

systemctl stop keepalived

如果主、备 ens33:0 不配 ,192.168.190.100能不能过来

4、脑裂

1、什么是脑裂?
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,
就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障,都会去抢占主。

两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了;或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏

2、都有哪些原因导致脑裂?
高可用服务器 心跳之间发生故障,导致无法正常通信。


因心跳线坏了(包括断了,老化)。
网卡驱动坏了,ip地址冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)                                                                                仲裁的服务器出现问题
高可用服务器上开启了 iptables防火墙 阻挡了心跳消息传输
keepalived VRID 不一致,优先级一致

4、如何解决keepalived脑裂问题?
在实际生产环境中,我们从以下方面防止脑裂:
①增加一条心跳线路(增加网卡),这样一条线路断了,另外一条还是好的,依然能传送心跳消息

②通过检测端地址,比如 ping后端的tomvcat的ip,能ping通,说明服务器是好的,就用这台服务器做Master

③通过脚本探测

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

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

相关文章

学习之appium的简单使用

使用之前需要先安装一下依赖 1、安装jdk:暂时为整理笔记以后补充 2、安装nodejs:https://blog.csdn.net/qq_42792477/article/details/141363957?spm1001.2014.3001.5501 3、安装SDk(安卓篇):https://blog.csdn.net/qq_42792477…

<数据集>Visdrone数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:8629张 标注数量(xml文件个数):8629 标注数量(txt文件个数):8629 标注类别数:10 标注类别名称:[pedestrian,people,bicycle,car,van,truck,tricycle,awning-tricycle…

HubSpot 自动化营销平台助力出海企业精准获客与转化 | 自动化营销

HubSpot 提供了多个开源 cms 和一体化且全面的解决方案,可帮助出海企业优化内容营销策略 HubSpot 自动化营销加速国际化 随着全球化的推进,越来越多的企业开始寻求拓展国际市场,而在这个过程中,有效的客户关系管理和营销自动化成…

ActiveMQ指南

入门 官网: http://activemq.apache.org/ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。 JMS JMS即Java消息服务(Java Message Service&#xf…

Linux自旋锁和读写锁

在前面的文章中我们已经介绍了有关互斥锁的概念与使用,本篇将开始介绍在 Linux 中的自旋锁和读写锁。这三种锁分别用于在不同的应用场景之中,其中互斥锁最为常用,但是我们需要了解一下其他的锁。 对于自旋锁和读写锁都介绍了其原理以及接口使…

【信创】麒麟KylinOS V10打开root登录桌面权限

原文链接:【信创】麒麟KylinOS V10打开root登录桌面权限 Hello,大家好啊!今天给大家带来一篇关于在麒麟KYLINOS V10上如何打开root用户登录桌面的文章。在大多数Linux发行版中,出于安全考虑,root用户默认情况下是禁止直…

KRTS网络模块:TCP服务端、客户端实例

KRTS网络模块:TCP服务端、客户端实例 目录 KRTS网络模块:TCP服务端、客户端实例TCP简介KRST服务端简介核心特性界面设计核心代码 KRTS客户端简介核心特性界面设置核心代码 运行实例 Socket模块基于Packet模块,实时提供更高的协议,如RAW-IP、TCP 和 UDP(参…

【求助帖】用PyTorch搭建MLP网络时遇到奇怪的问题

求助:我在测试自己搭建的通用MLP网络时,发现它与等价的参数写死的MLP网络相比效果奇差无比,不知道是哪里出了问题,请大佬们帮忙看下。 我写的通用MLP网络: class MLP(nn.Module):def __init__(self, feature_num, cl…

3、Unity【基础】Resources资源场景动态加载

文章目录 一、Resources资源动态加载1、Unity中特殊文件夹1、工程路径获取2、Resources资源文件夹3、StreamingAssets流动资源文件夹4、persistentDataPath持久数据文件夹5、Plugins插件文件夹6、Editor编辑器文件夹7、默认资源文件夹StandardAssets 2、Resources同步加载1、Re…

Auto-Editor

文章目录 一、关于 Auto-Editor安装系统兼容性版权 二、切割自动切割的方法看看自动编辑器删掉了什么 三、导出到编辑器命名时间线按 Clip 分割 四、手工编辑五、更多的选择 一、关于 Auto-Editor github : https://github.com/WyattBlue/auto-editor (2.8k star – 2408)主页…

ubuntu 20.04系统安装pytorch

1.1 安装gcc 安装cuda之前,首先应该安装gcc,安装cuda需要用到gcc,否则报错。可以先使用下方指令在终端查看是否已经安装gcc。 gcc --version 如果终端打印如下则说明已经安装。 如果显示“找不到命令 “gcc”......”使用下方指令安装 su…

阅读笔记5:董超底层视觉之美|时空的交错与融合——论视频超分辨率

原文链接:https://mp.weixin.qq.com/s/pmJ56Y0-dbIlYbHbJyrfAA 1. 多帧超分和时空超分 视频超分的本质就是多帧超分,多帧超分的历史远早于视频超分。 在早期,Super Resolution专指多帧超分,因为只有多帧超分才能补充进入真实的信…

Golang | Leetcode Golang题解之第368题最大整除子集

题目: 题解: func largestDivisibleSubset(nums []int) (res []int) {sort.Ints(nums)// 第 1 步:动态规划找出最大子集的个数、最大子集中的最大整数n : len(nums)dp : make([]int, n)for i : range dp {dp[i] 1}maxSize, maxVal : 1, 1fo…

对讲模块升级的重要性-OTA空中升级与串口升级

在现代通信设备的设计中,灵活的升级能力已成为评估模块性能的重要标准。无论是在开发过程中,还是在产品的生命周期内,支持OTA和串口升级的模块可以极大地提高设备的可维护性和适应性。 SA618F30,作为一款高性价比、高集成度的大功…

SSRF 302跳转攻击redis写入ssh公钥实现远程登录

目录 SSRF漏洞 SSRF攻击Redis 302跳转 漏洞复现: index.html: index.php: 攻击步骤: 1.生成ssh公钥数据: 2.用SSH公钥数据伪造Redis数据: 3.在自己的服务器上写302跳转: 4.最后尝试在.ssh目录下登录&#…

Golang | Leetcode Golang题解之第371题两整数之和

题目&#xff1a; 题解&#xff1a; func getSum(a, b int) int {for b ! 0 {carry : uint(a&b) << 1a ^ bb int(carry)}return a }

MySQL主从复制之GTID模式

目录 1 MySQL 主从复制 GTID 模式介绍 2 传统复制模式与GTID复制模式的区别 3 GTID模式核心参数 4 GTID 实现自动复制原理 4.1 GTID基本概念 4.2 GTID复制流程 5 GTID 实现自动定位 5.1 配置 my.cnf 5.2 配置 SLAVE 实现自动定位 5.3 测试 6 GTID 模式 故障转移的方法流程 6.1…

如何使用ssm实现宠物领养系统+vue

TOC ssm103宠物领养系统vue 课题背景 在当今的社会&#xff0c;可以说是信息技术的发展时代&#xff0c;在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述&#xff0c;是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加…

mysql数据库----简单认识库的操作

目录 1.区分概念 2.什么是数据库 3.数据库的创建和销毁 4.数据库编码初识 5.查询系统默认编码配置 6.两个查询编码表的指令 7.创建指定编码的数据库 8.不同编码的区别 第一个编码方式&#xff1a; 第二个编码方式&#xff1a; 查询结果说明&#xff1a; 9.数据库的增…

QT Quick QML 网络助手——TCP客户端

GitHub 源码: QmlLearningPro &#xff0c;选择子工程 Nettools.pro QML 其它文章请点击这里: QT QUICK QML 学习笔记 ● 运行效果&#xff1a; 左侧为常用的网络调试工具&#xff0c;右侧为本项目 UI 效果&#xff0c;前端使用 QML &#xff0c;后端使用C &#xff…