Linux入门攻坚——43、keepalived入门-1

news/2025/1/8 22:30:50/

Linux Cluster(Linux集群的类型):LB、HA、HPC,分别是负载均衡集群、高可用性集群、高性能集群。
LB:lvs,nginx
HA:keepalived,heartbeat,corosync,cman
HP:超算集群,大规模并行系统:
  分布式存储:HDFS(Hadoop分布式文件系统)
  分布式计算:YARN(Yet Another Resource Negotiator,另一种资源协调者)
     batch(基于批处理):MapReduce(用于大规模数据集(大于1TB)的并行运算,是面向大数据并行处理的计算模型、框架和平台。Map(映射),Reduce(归约))。1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure);2)MapReduce是一个并行计算与运行软件框架(Software Framework);3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。
     in-memory(基于内存的处理系统):spark(专为大规模数据处理而设计的快速通用的计算引擎)
     stream(流式计算):storm

keepalived:高可用服务集群实现。(高可用,主要是主备模式,主设备出现故障,备用设备马上启用,保证服务不中断。也就是说,多个节点上,提供同一个入口,相同的服务。)
  Active/Passive两种节点  
  HA Service:resources(高可用资源),高可用服务需要多个高可用资源
  resources:高可用资源,对于lvs来说,就是vip和ipvs规则,对于nginx,就是vip和nginx服务

以lvs为例,两台设备上都配备了ipvs和相同的规则,现在就是提供相同入口的问题,即配置vip,我们知道,两台主机不能同时配置相同的一个ip,这就要求,工作中的设备(主设备)一开始拥有vip,作为服务的入口,当主设备出现故障,vip能够转移至备用设备上,以相同的入口,继续提供服务。这里的关键问题:一是备用设备怎么知道主设备故障;二是这个ip怎么转移。

支持并发的系统(如数据库系统,可以同时多个系统连接到数据库,数据库本身提供对访问同一资源的控制,如同时的读写);不支持并发的系统(如共享存储,磁盘共享,一块磁盘同时挂载到多个系统中,各系统对这个磁盘的访问控制不同,磁盘本身没有提供并发访问控制机制);支持并发的存储系统(如nfs,分布式存储系统,samba等)。

主备设备的保持,需要主设备不停通告自己的状态,备用设备接收到,就不去抢占IP,因为备用设备可能有多个,所以这个通告一般是组播,广播的话太耗费网络资源;通告报文的判断,如果备用设备收到的报文是3分钟以前的,如何处理?到底是不是3分钟以前的报文呢,这里就涉及一个时间同步的问题,需要主备设备使用同一个时间标准(手表定律,你拥有一块手表,查看时间时可以很准确的说出时间,但有两块手表时,如果时间不一致,你就无法判断时间)。主备设备之间只要时间严格同步就可以,可以使用ntp协议(网络时间协议,network time protocol)。
时间同步,对于操作系统来说,一般不能直接调时间,否则会导致有一段时间断档,一般是在一段时间内加快或减慢时间流速,时间还是连续的,最后趋于一致。

ntpdate timeserver_ip,客户端同步ntp时间服务器时间

主设备发送通告报文,这个就是心跳,heartbeat,心跳的前提就是时间要同步(time sync)。

keepalived保持主备设备对统一入口IP的维护,使用的是vrrp协议,是vrrp协议在linux上的实现。

vrrp(Virtual Route Redundancy Protocol),虚拟路由冗余协议,这个可以参考前面路由网络文章中的“可靠性配置与管理——VRRP配置与管理”系列文章。

VRRP(虚拟路由冗余协议)指将多个路由设备(可以是路由器,也可以是三层交换机)组成一台虚拟路由设备,并指定其中一台成员路由设备作为主用(Master)设备,其他成员设备作为备用(Backup)设备,然后为这台虚拟路由器分配一个IP地址,作为下游设备的默认网关,可防止单点故障,实现路由设备容错。

keepalived是将主备设备组成一个虚拟设备,为这个虚拟设备分配一个IP地址,就是统一入口地址,这个地址可以根据设备状态在主设备和备用设备间流动,主备设备相互转换,实现设备容错,保证高可用。

对于lvs,使用nat模型,则内网ip也需要流动。

keepalived:就是vrrp协议在Linux主机上以守护进程方式的实现;能够根据配置文件自动生成ipvs规则;对各RS做健康状态检测。

keepalived组件:
  vrrp stack
  checkers
  ipvs wrapper --> ipvs

        vrrp stack:VIP消息通告
        checkers:监测 Real Server
        system call:实现 vrrp 协议状态转换时调用脚本的功能
        SMTP:邮件组件 IPVS wrapper:生成
        IPVS 规则 Netlink Reflector:网络接口
        WatchDog:监控进程

keepalived的安装:keepalived已经集成到发行版中,可以直接安装
yum install keepalived


keepalived的配置文件的组成部分(/etc/keepalived/keepalived.conf):
    GLOBAL CONFIGURATION
    VRRPD CONFIGURATION
        vrrp instance
        vrrp ​synchronization group
    LVS CONFIGURATION​

HA Cluster配置前提
1、本机的主机名与hosts中定义的主机名保持一致,要与hostname(uname -n)获得的名称保持一致;
    CentOS6:/etc/sysconfig/network
    CentOS7:hostnamectl set-hostname  HOSTNAME
    各节点要能互相解析主机名;一般建议通过hosts文件进行解析;
2、各节点时间同步;
3、确保iptables及selinux不会成为服务阻碍;
keepalived.conf:

GLOBAL配置中,还可以配置组播地址:
vrrp_mcast_group4 224.0.0.18

VRRP配置中,虚拟地址的配置
virtual_ipaddress {
               <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
               192.168.200.17/24 dev eth1
               192.168.200.18/24 dev eth2 label eth2:1
           }
 use_vmac [<VMAC_INTERFACE>]  ,配置自己的VMAC。
nopreempt:非抢占模式,默认为抢占模式。

实操测试
1、时间同步:
ntpdate 192.168.61.128
2、配置两台主机:

3、配置vrrp的配置:


一组vrrp中,主节点(MASTER)一个,备用节点(BACKUP)可以是多个

4、启动keepalived
systemctl start keepalived.service ;ssh node2 'systemctl start keepalived.service'

可以看到在node1的ens33接口上,配置了vip地址。
将vrrp配置中的virtual_ipaddress修改为192.168.61.200/24:

将node1的keepalived停止:systemctl stop keepalived.service

vip被配置到node2上了。

5、关于keepalived的日志
启动keepalived后发现没有记录日志,查看keepalived的服务管理文件:/usr/lib/systemd/system/keepalived.service

启动ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS,带了参数,参数在环境文件:
EnvironmentFile中定义,即/etc/sysconfig/keepalived

查看keepalived的帮助:

keepalived守护进程可以到-D和-S参数,-D参数是记录详细日志,-S指定日志的facility,默认是LOG_DAEMON。
查看日志文件配置:/etc/rsyslog.conf

没有daemon的配置,将keepalived的启动配置成 -D -S 3,修改环境文件/etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 3"
修改日志配置文件/etc/rsyslog.conf,增加rules:
local3.*    /var/log/keepalived.log
重新启动rsyslog和keepalived
查看日志:

手动管理:手动将主节点降级为备用节点,方法是降低主节点的优先级
在配置文件中定义一个vrrp_script,用于节点优先级修改,在实例之外定义:

vrrp_script chk_schedown {script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"interval 2weight -2
}

测试一直不成功。

[[ -f /etc/keepalived/down ]] && exit 1 || exit 0
如果down文件存在,[[]]返回值是0,即没有错误,整个结果是真,&&后命令执行,即exit 1,脚本整体返回为假,否则exit 0,脚本整体返回为真。对于返回结果为1,说明返回为假,说明不正常,就要执行weight,即instance的优先级priority与weight的和,即100-2,原先是100,减为98,小于备用节点的99,备用节点将成为主节点。

关键是script语句执行的结果为假,即不为0,就要执行weight语句调整优先级,从而切换主备节点。但是为什么这里测试一直不成功呢?说明主节点的优先级一直没有改变,不知道问题出在哪里?

做了一下改变:

/etc/keepalived/test.sh  ,赋予执行权限:chmod a+x test.sh

然后就成功了。

配置vrrp同步组,VRRP synchronization group

主要用于外网和内网需要同步切换的环境。主节点的外网IP出现问题,进行了切换,那么内网IP不管是否出现问题,都要跟着切换。同理,如果内网IP出现故障进行了切换,外网IP也同步切换而不管是否发生故障。一般是lvs-nat模型才会用到这种配置。因为realserver网关需要指向DIP,即内网IP。

配置两个(多个)vrrp,实现高可用的同时,又实现负载均衡,充分发挥每个设备的性能。

正常运行后:

当node1宕机时:


VIP地址全部切换到了node2上。

负载均衡一般可以通过DNS中增加两个A记录,来达到负载均衡,即轮流访问不通的IP。

配置多个vrrp时,GLOBAL中的组播地址采用自动分配,不要手动配置。


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

相关文章

Opencv实现Sobel算子、Scharr算子、Laplacian算子、Canny检测图像边缘

图像边缘检测 目录 图像边缘检测1 Sobel算子1.1概念1.2 两个卷积矩阵1.3 函数及参数理解1.4 灰度图实际测试1.5 BGR图测试 2 Scharr算子2.1概念2.2 实际测试 3 Laplacian算子3.1概念3.2 函数3.3 实际测试 4 Canny边缘检测4.1 概念4.2 步骤4.3 优点4.4 函数及参数理解4.5 实际测…

C# 中的命名空间与Java和Python中的导入

在 C#、Java 和 Python 这三种语言中&#xff0c;命名空间和导入机制都是用来组织和管理代码及其依赖的工具&#xff0c;但它们在具体实现和使用方式上存在一些差异。 1、问题背景 在 Java 和 Python 世界中&#xff0c;我们可以通过查看源文件来了解所有导入的来源&#xff0…

OpenCV 4.5至4.10版本更新概述

OpenCV 4.5至4.10版本更新概述 OpenCV 从 4.5 到 4.10 版本的更迭中&#xff0c;每个版本都引入了新功能、优化和修复。以下是主要版本的更新内容概述&#xff1a; OpenCV 4.5.x 系列 4.5.0 (2020年10月) 新增对 YOLOv4 的支持。引入 DNN 模块的改进&#xff0c;包括对 ONNX …

Ruby语言的编程范式

Ruby语言的编程范式 引言 Ruby是一种动态、开源、面向对象的编程语言&#xff0c;最早由日本计算机科学家Matz&#xff08;松本行弘&#xff09;于1995年开发。Ruby以其简洁的语法和强大的功能而广受欢迎&#xff0c;特别是在Web开发领域。Ruby对开发者的友好性以及其设计哲学…

拥有23种PDF/图片转换 数据提取 - 免费在线工具

All ComPDFKit Online PDF Tools | ComPDFKit 1. 数据提取 • 提取全部: 从PDF和图片中提取所有文本、表格和图片&#xff0c;并保存为JSON格式。 • 仅提取文本: 仅从PDF和图片中提取所有文本&#xff0c;并保存为TXT和JSON格式。 • 仅提取表格: 仅从PDF和图片中提取表格&am…

主成分分析(PCA)算法

主成分分析&#xff08;PCA&#xff09;算法 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的无监督降维算法&#xff0c;主要用于数据的特征提取和维度压缩。其目标是将高维数据映射到低维空间&#xff0c;同时尽可能保留数据的主要信息。…

HTML5语义化编程

常见的 HTML5 语义化标签 <header>&#xff1a;定义文档或节的头部区域&#xff0c;通常包含标题、logo、导航链接等。<nav>&#xff1a;表示导航链接的部分&#xff0c;适合用来包裹主要的导航菜单。<main>&#xff1a;标识文档的主要内容&#xff0c;每个…

Linux初识——基本指令

我们在linux下输入各种指令&#xff0c;其实就相当于在windows中的相关操作&#xff0c;比如双击&#xff0c;新建文件夹等。 以下是相关基本指令基本用法 一.ls&#xff08;显示当前目录下的所有文件和目录&#xff09; 那如何显示当前目录&#xff08;我们所在的位置&…