高可用 - 05 Keepalived配置(全局配置、VRRPD、LVS)

news2024/11/14 21:33:27

文章目录

  • Pre
  • Keepalived的全局配置
  • Keepalived的VRRPD配置
    • VRRP同步组配置
    • VRRP实例配置
  • Keepalived的LVS配置
    • TCP_CHECK
    • HTTP_GET & SSL_GET
    • MISC_CHECK

在这里插入图片描述


Pre

高可用 - 04 Keepalived编译安装

高可用 - 04 Keepalived编译安装安装Keepalived的过程中,指定了Keepalived配置文件的路径为/etc/Keepalived/Keepalived.conf .

在这里插入图片描述

由于Keepalived.conf文件中可配置的选项比较多,这里根据配置文件所实现的功能,将Keepalived配置分为三类,分别是:

  • 全局配置(Global Configuration)
  • VRRPD配置
  • LVS配置

接下来一起看看Keepalived配置文件中一些常用配置选项的含义和用法。


Keepalived的全局配置

Keepalived的配置文件都是以块(block)的形式组织的,每个块的内容都包含在{}中,以“#”和“!”开头的行都是注释。全局配置就是对整个Keepalived都生效的配置,基本内容如下。

在这里插入图片描述

全局配置以“global_defs”作为标识,在“global_defs”区域内的都是全局配置选项

  • notification_email用于设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的Sendmail服务。
  • notification_email_from用于设置邮件的发送地址。
  • smtp_server用于设置邮件的SMTP服务器地址。
  • smtp_connect_timeout用于设置连接SMTP服务器的超时时间。
  • router_id表示运行Keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息。

Keepalived的VRRPD配置

VRRPD配置是Keepalived所有配置的核心,主要用来实现Keepalived的高可用功能。从结构上来看,VRRPD配置又可分为VRRP同步组配置和VRRP实例配置。

VRRP同步组配置

同步组是相对于多个VRRP实例而言的,在多个VRRP实例的环境中,每个VRRP实例所对应的网络环境会有所不同,假设一个实例处于网段A,另一个实例处于网段B,而如果VRRPD只配置了A网段的检测,那么当B网段主机出现故障时,VRRPD会认为自身仍处于正常状态,进而不会进行主备节点的切换,这样问题就出现了。

同步组就是用来解决这个问题的,将所有VRRP实例都加入到同步组中,这样任何一个实例出现问题,都会导致Keepalived进行主备切换。

下面是两个同步组的配置示例。

vrrp_sync_group G1 {
 group {
  VI_1
  VI_2
  VI_5
 }
 notify_backup "/usr/local/bin/vrrp.back arg1 arg2"
 notify_master "/usr/local/bin/vrrp.mast arg1 arg2"
 notify_fault "/usr/local/bin/vrrp.fault arg1 arg2"
}

vrrp_sync_group G2 {
 group {
  VI_3
  VI_4
 }
}

其中,G1同步组包含VI_1、VI_2、VI_5三个VRRP实例,G2同步组包含VI_3、VI_4两个VRRP实例。这5个实例将在vrrp_instance段进行定义。

另外,在vrrp_sync_group段中还出现了notify_master、notify_backup、notify_faultnotify_stop 4个选项,这是Keepalived配置中的一个通知机制,也是Keepalived包含的4种状态。

  • notify_master:指定当Keepalived进入Master状态时要执行的脚本,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。Keepalived允许脚本传入参数,因此灵活性很强。
  • notify_backup:指定当Keepalived进入Backup状态时要执行的脚本,同理,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。
  • notify_fault:指定当Keepalived进入Fault状态时要执行的脚本,脚本功能与前两个类似。
  • notify_stop:指定当Keepalived程序终止时需要执行的脚本。

在这里插入图片描述


VRRP实例配置

接下来我们看下VRRP实例的配置,也就是配置Keepalived的高可用功能。

VRRP实例段主要用来配置节点角色(主或从)、实例绑定的网络接口、节点间验证机制、集群服务IP等。

下面是实例VI_1的一个配置示例。

vrrp_instance VI_1 {
  state MASTER    
  interface eth0    
  virtual_router_id 51  
  priority 100  
  advert_int 1   
  mcast_src_ip <IPADDR>
  garp_master_delay 10 

track_interface {
   eth0 
   eth1
   }
  authentication {
    auth_type PASS
    auth_pass qwaszx
  }
  virtual_ipaddress {    
   #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
    192.168.200.16
    192.168.200.17 dev eth1
    192.168.200.18 dev eth2
  }
  virtual_routes {
  #src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE>
    src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
    192.168.110.0/24 via 192.168.200.254 dev eth1
    192.168.111.0/24 dev eth2
    192.168.112.0/24 via 192.168.100.254
    192.168.113.0/24 via 192.168.100.252 or 192.168.100.253
  }
  nopreempt 
  preemtp_delay 300
}
  • vrrp_instance是VRRP实例开始的标识,后跟VRRP实例名称。

  • state用于指定Keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。

  • interface用于指定HA监测网络的接口。

  • virtual_router_id是虚拟路由器标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即在同一个vrrp_instance下,MASTER和BACKUP必须是一致的。

  • priority用于定义节点优先级,数字越大表示节点的优先级就越高。在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。

  • advert_int用于设定MASTER与BACKUP主机之间同步检查的时间间隔,单位是秒。

  • mcast_src_ip用于设置发送多播包的地址,如果不设置,将使用绑定的网卡所对应的IP地址。

  • garp_master_delay用于设定在切换到Master状态后延时进行Gratuitous arp请求的时间。

  • track_interface用于设置一些额外的网络监控接口,其中任何一个网络接口出现故障,Keepalived都会进入FAULT状态。

  • authentication用于设定节点间通信验证类型和密码,验证类型主要有PASS和AH两种,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。

  • virtual_ipaddress用于设置虚拟IP地址(VIP),又叫做漂移IP地址。可以设置多个虚拟IP地址,每行一个。之所以称为漂移IP地址,是因为Keepalived切换到Master状态时,这个IP地址会自动添加到系统中,而切换到BACKUP状态时,这些IP又会自动从系统中删除。Keepalived通过“ip address add”命令的形式将VIP添加进系统中。要查看系统中添加的VIP地址,可以通过“ip add”命令实现。“virtual_ipaddress”段中添加的IP形式可以多种多样,例如可以写成 “192.168.16.189/24 dev eth1” 这样的形式,而Keepalived会使用IP命令“ip addr add 192.168.16.189/24 dev eth1”将IP信息添加到系统中。因此,这里的配置规则和IP命令的使用规则是一致的。

  • virtual_routes和virtual_ipaddress段一样,用来设置在切换时添加或删除相关路由信息。使用方法和例子可以参考上面的示例。通过“ip route”命令可以查看路由信息是否添加成功。此外,也可以通过上面介绍的notify_master选项来代替virtual_routes实现相同的功能。

  • nopreempt设置的是高可用集群中的不抢占功能。在一个HA集群中,如果主节点死机了,备用节点会进行接管,主节点再次正常启动后一般会自动接管服务。对于实时性和稳定性要求不高的业务系统来说,这种来回切换的操作还是可以接受的。而对于稳定性和实时性要求很高的业务系统来说,不建议来回切换,毕竟服务的切换存在一定的风险和不稳定性,在这种情况下,就需要设置nopreempt这个选项。设置nopreempt可以实现主节点故障恢复后不再切回到主节点,让服务一直在备用节点下工作,直到备用节点出现故障才会进行切换。在使用不抢占功能时,只能在“state”状态为“BACKUP”的节点上设置,而且这个节点的优先级必须高于其他节点

  • preemtp_delay用于设置抢占的延时时间,单位是秒。有时候系统启动或重启之后网络需要经过一段时间才能正常工作,在这种情况下进行主备切换是没必要的,此选项就用来设置这种情况发生时的时间间隔。在此时间内发生的故障将不会进行切换,而如果超过“preemtp_delay”指定的时间,并且网络状态异常,那么才开始进行主备切换。


在这里插入图片描述


Keepalived的LVS配置

由于Keepalived属于LVS的扩展项目,因此,Keepalived可以与LVS无缝整合,轻松搭建一套高性能的负载均衡集群系统。

LVS段的配置以“virtual_server”作为开始标识,此段内容有两部分组成,分别是real_server段和健康检测段

下面是virtual_server段常用选项的一个配置示例。

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}


  • virtual_server:设置虚拟服务器的开始,后面跟虚拟IP地址和服务端口,IP与端口之间用空格隔开。

  • delay_loop:设置健康检查的时间间隔,单位是秒。

  • lb_algo:设置负载调度算法,可用的调度算法有rr、wrr、lc、wlc、lblc、sh、dh等,常用的算法有rr和wlc。

  • lb_kind:设置LVS实现负载均衡的机制,有NAT、TUN和DR三个模式可选。

  • persistence_timeout:会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的会话共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会一直分发到某个服务节点,直到超过这个会话的保持时间。需要注意的是,这个会话保持时间是最大无响应超时时间。也就是说,用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制。

  • persistence_granularity:此选项是配合persistence_timeout的,后面跟的值是子网掩码,表示持久连接的粒度。默认是255.255.255.255,也就是一个单独的客户端IP。如果将掩码修改为255.255.255.0,那么客户端IP所在的整个网段的请求都会分配到同一个real server上。

  • protocol:指定转发协议类型,有TCP和UDP两种可选。

  • ha_suspend:节点状态从Master到Backup切换时,暂不启用real server节点的健康检查。

  • virtualhost:在通过HTTP_GET/ SSL_GET做健康检查时,指定的Web服务器的虚拟主机地址。

  • sorry_server:相当于一个备用节点,在所有real server失效后,这个备用节点会启用。

real_server段的一个配置示例

 real_server 192.168.12.132 80 {
	weight 3
	inhibit_on_failure
	notify_up <STRING> | <QUOTED-STRING>
	notify_down <STRING> | <QUOTED-STRING>
}

  • real_server:是real_server段开始的标识,用来指定real server节点,后面跟的是real server的真实IP地址和端口,IP与端口之间用空格隔开。
  • weight:用来配置real server节点的权值。权值大小用数字表示,数字越大,权值越高。设置权值的大小可以为不同性能的服务器分配不同的负载,为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源。
  • inhibit_on_failure:表示在检测到real server节点失效后,把它的“weight”值设置为0,而不是从IPVS中删除。
  • notify_up:此选项与上面介绍过的notify_maser有相同的功能,后跟一个脚本,表示在检测到real server节点服务处于UP状态后执行的脚本。
  • notify_down:表示在检测到real server节点服务处于DOWN状态后执行的脚本。
    健康检测段允许多种检查方式,常见的有HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK

TCP_CHECK

首先看关于TCP_CHECK检测方式的示例。

TCP_CHECK {
       connect_port 80
       connect_timeout 3 
       nb_get_retry 3 
       delay_before_retry 3 
    }

下面介绍每个选项的含义。

  • connect_port:健康检查的端口,如果不指定,默认是real_server指定的端口。
  • connect_timeout:表示无响应超时时间,单位是秒,这里是3秒超时。
  • nb_get_retry:表示重试次数,这里是3次。
  • delay_before_retry:表示重试间隔,这里是间隔3秒。

在这里插入图片描述


HTTP_GET & SSL_GET

下面是关于HTTP_GET和SSL_GET检测方式的示例。

HTTP_GET |SSL_GET
{
  url {     
  path /index.html
  digest e6c271eb5f017f280cf97ec2f51b02d3
  status_code  200 
  }
	connect_port 80
	bindto 192.168.12.80  
	connect_timeout 3
	nb_get_retry 3 
	delay_before_retry 2 
}

下面介绍每个选项的含义。

  • url:用来指定HTTP/SSL检查的URL信息,可以指定多个URL。
  • path:后跟详细的URL路径。
  • digest:SSL检查后的摘要信息,这些摘要信息可以通过genhash命令工具获取。例如:- genhash -s 192.168.12.80 -p 80 -u /index.html
  • status_code:指定HTTP检查返回正常状态码的类型,一般是200。
  • bindto:表示通过此地址来发送请求对服务器进行健康检查。

在这里插入图片描述


MISC_CHECK

下面是关于MISC_CHECK检测方式的示例。

MISC_CHECK
{
	misc_path /usr/local/bin/script.sh
	misc_timeout 5
	! misc_dynamic
}

MISC健康检查方式可以通过执行一个外部程序来判断real server节点的服务状态,使用非常灵活。以下是常用的几个选项的含义。

  • misc_path:用来指定一个外部程序或者一个脚本路径。
  • misc_timeout:设定执行脚本的超时时间。
  • misc_dynamic:表示是否启用动态调整real server节点权重,“!misc_dynamic”表示不启用,相反则表示启用。在启用这功能后,Keepalived的healthchecker进程将通过退出状态码来动态调整real server节点的“weight”值,如果返回状态码为0,表示健康检查正常,real server节点权重保持不变;如果返回的状态码为1,表示健康检查失败,那么就将real server节点权重设置为0;如果返回的状态码为2~255之间的任意数值,表示健康检查正常,但real server节点的权重将被设置为返回状态码减2,例如返回的状态码为10,real server节点权重将被设置为8(10−2)。

在默认情况下,Keepalived在启动时会查找/etc/Keepalived/Keepalived.conf配置文件,如果配置文件放在其他路径下,通过“Keepalived -f”参数指定配置文件的路径即可。

在配置Keepalived.conf时,需要特别注意配置文件的语法格式,因为Keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,Keepalived也照样能够启动,所以一定要保证配置文件正确。

在这里插入图片描述

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

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

相关文章

Chrome访问新版bing(玄学,需要魔法)

文章目录前提1. 需要魔法2. 申请过使用新版bing&#xff0c;并且收到通过的邮件。没有的话先申请&#xff0c;加入waiting list&#xff08;不赘述&#xff0c;自行百度&#xff09;配置1. Chrome安装插件&#xff08;Header Editor&#xff09;2. Header Editor添加规则3. 允许…

PaddleOCR遇到 lanms-neo问题处理

在window环境中安装PaddleOCR依赖是真的蛋疼&#xff0c;关键官方论坛里也都没有具体的解决方案。吐槽。。。吐槽。。。 我在 “windows安装lanms-neo问题处理”文章中看到lanms-neo问题全过程解决。个人觉得文档说明不是很细致&#xff0c;导致我按步骤执行&#xff0c;还是安…

插上数据的翅膀,开启我升职加薪的梦想之旅

我是麦思思&#xff0c;大学毕业后就进入大厂工作并担任电子消费行业业务部门的数据分析师&#xff0c;对于一个数据分析师而言&#xff0c;Excel是必备技能&#xff0c;函数公式我能随手就来&#xff0c;几十M的文件处理那都是轻轻松松。但是&#xff0c;近几年随着企业业务发…

一种全新的图像变换理论的实验(五)——研究目的替代DCT和小波

一、前言 目前在大量的灰度图像测试下&#xff0c;基本确定变换系数ratio取值0-25之间时&#xff0c;逆变化后的图还能基本保障效果&#xff0c;而且越接近0效果越好。本文还是以lenna.bmp灰度图为例&#xff0c;实验不再逆变换&#xff0c;而是把变换后的数据直接输出为bmp的…

如何计算Bitmap的内存占用

日常我们提到图片大小的时候&#xff0c;一般都会把关注点放在图片的文件大小。因为一般来说&#xff0c;图片文件越小&#xff0c;内存占用也会越小。但是其实图片文件大小和内存占用大小没有什么直接的必然联系&#xff0c;我们可以通过查看 Android 的 Bitmap 的内存分配&am…

GitLab 专家分享|关于 DevSecOps ,你需要知道这几点

本文来源&#xff1a;about.gitlab.com 译者&#xff1a;极狐(GitLab) 市场部内容团队 ❔ 灵魂拷问&#xff1a; 你的安全测试&#xff0c;能否跟上现代软件开发模式的步伐&#xff1f; GitLab 预测到&#xff0c;2023 年企业会将更多的时间和资源投入到持续的安全左移上&…

Day08-网页布局实战表单和表格

文章目录网页布局实战一 表单案例1-表单前后端交互案例2-常用表单元素知识点input的属性总结&#xff1a;type属性的其他值(了解)&#xff1a;按钮label标签二 结构伪类选择器三 表单布局案例案例1贯穿案例-登录页面制作案例2贯穿案例-注册页面制作四 表格案例1-表格设计案例2-…

taobao.item.propimg.upload( 添加或修改属性图片 )

&#xffe5;开放平台基础API必须用户授权 添加一张商品属性图片到num_iid指定的商品中 传入的num_iid所对应的商品必须属于当前会话的用户 图片的属性必须要是颜色的属性&#xff0c;这个在前台显示的时候需要和sku进行关联的 商品属性图片只有享有服务的卖家&#xff08;如&a…

JVM对象实例化详解

1、对象创建方式你知道几种呢&#xff1f;new&#xff1a;最常见的方式、Xxx的静态方法&#xff0c;XxxBuilder/XxxFactory的静态方法Class的newInstance方法&#xff1a;反射的方式&#xff0c;只能调用空参的构造器&#xff0c;权限必须是publicConstructor的newInstance(XXX…

maven 私服nexus安装与使用

一、下载nexus Sonatype公司的一款maven私服产品 1、官网下载地址&#xff1a;https://help.sonatype.com/repomanager3/product-information/download 2、csdn下载地址&#xff1a;https://download.csdn.net/download/u010197591/87522994 二、安装与配置 1、下载后解压如…

【Rust日报】2023-02-28 Rust 和 WASM 如何驱动 1.1.1.1

为什么用 Rust 构建原生 UI 程序这么困难Rust 正被用于构建 Linux 内核和 Android 操作系统&#xff0c;也被 AWS 用于关键基础设施&#xff0c;以及用于 ChromeOS 和Firefox。尽管 Rust 很有前景&#xff0c;但它在 GUI 原生开发领域还有所欠缺。在 2019 年&#xff0c;GUI 是…

【Springboot】Springboot集成 Druid

Springboot集成 Druid 对于数据访问层&#xff0c;无论是Sql还是NoSql&#xff0c;SpringBoot默认采用整合SpringData的方式进行统一管理&#xff0c;添加大量的自动配置&#xff0c;屏蔽了很多设置。引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层的操作。 Sp…

FCT: The Fully Convolutional Transformer for Medical Image Segmentation 论文解读

The Fully Convolutional Transformer for Medical Image Segmentation 论文&#xff1a;The Fully Convolutional Transformer for Medical Image Segmentation (thecvf.com) 代码&#xff1a;Thanos-DB/FullyConvolutionalTransformer (github.com) 期刊/会议&#xff1a;W…

性能调优,看过的都说会了...

在展开今天的内容之前&#xff0c;我们先来看一下&#xff0c;是不是任何一个测试都可以学习性能测试。 如果说需求、开发、DB、运维、测试是单一一门学科&#xff0c;那么性能就是综合学科&#xff0c;它包含了需求分析、DB、开发、测试、运维的所有学科。 所以说&#xff0…

深度学习在耐火砖项目的一些思考

1.项目概述 年前&#xff0c;产品经理找到我&#xff0c;让我去测试3D视觉耐火砖拆垛项目。大概就是这种转 2. 实际情况 去了现场&#xff0c;采集图像&#xff0c;标定相机和机器人。发现客户不是要顶点的中心点坐标&#xff0c;而是要侧面中心点坐标。因为他们是从侧面抓…

Spring中Emable和Import相关操作

05-SpringBoot自动配置-Enable注解原理 SpringBoot不能直接获取在其他工程中定义的Bean 演示代码&#xff1a; springboot-enable工程 /*** ComponentScan 扫描范围&#xff1a;当前引导类所在包及其子包** com.itheima.springbootenable* com.itheima.config* //1.使用Compo…

mysql数据库之sql优化

一、插入数据时的优化。 1、批量插入。 insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); 2、手动提交事务。 start transaction; insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); insert into tb_test values(4,Tom),(5,Cat),(6,Jerry); insert into tb_test…

【Web服务部署】使用gunicorn部署django程序并一键更新

Web服务部署 【Linux防火墙】网络ip和端口管理 Windows云服务器使用IIS搭建PythonDjangoMysql网站&#xff0c;以及如何部署多个网站 WindowsIIS部署多个Django网站 文章目录Web服务部署前言一、Gunicorn是什么&#xff1f;二、Gunicorn基本使用1.引入库2.常用命令3.gunicorn快…

【Servlet篇2】Servlet的工作过程,Servlet的api——HttpServletRequest

一、Servlet的工作过程 二、Tomcat的初始化 步骤1&#xff1a;寻找到当前目录下面所有需要加载的Servlet(也就是类) 步骤2&#xff1a;根据类加载的结果创建实例(通过反射)&#xff0c;并且放入集合当中 步骤3&#xff1a;实例创建好之后&#xff0c;调用Servlet的init()方…

SpringBoot接口+Redis解决用户重复提交问题

前言 1. 为什么会出现用户重复提交 网络延迟的情况下用户多次点击submit按钮导致表单重复提交&#xff1b;用户提交表单后&#xff0c;点击【刷新】按钮导致表单重复提交&#xff08;点击浏览器的刷新按钮&#xff0c;就是把浏览器上次做的事情再做一次&#xff0c;因为这样也…