Keepalived超长详细版!!带你玩转 不再怕!!

目录

高可用集群KEEPALIVED

1.目的

2.功能

3.集群类型

4.系统故障

5.VRRP协议软件的实现

1)虚拟路由器:Virtual Router

2)虚拟路由器标识

3)VIP:Virtual IP

作用

举例

4)VMAC

5)物理路由器

6)工作方式--抢占、非抢占、延迟抢占

抢占优先级:master和backup

非抢占优先级:nopreemp--两个backup

延迟抢占优先级:抢占优先级的记时版

7)主备机类型

主--主

主--备

8)keepalived相关文件

 6.主配置文件常用配置说明

7.keepalived实验项目:--默认设置为抢占优先级

8.使vip100可通行

9.独立keepalived的日志--日志分离

10.独立子配置文件

11.单播设置

12.邮件通知

1.让linux可以发送文件 ka1.2同

2.脚本通知形式

13.实现 master/master 的 Keepalived 双主架构

14.实现IPVS的高可用性=LVS负载均衡+Keepalived高可用

15.VRRP Script 配置

定义VRRP script

实例:vrrp脚本控制vip

实例:实现Haproxy的高可用=Haproxy+Keepalived


高可用集群KEEPALIVED

Keepalived是一个轻量级的高可用解决方案,它主要用于防止单点故障的发生,确保集群中的服务或网络能够持续稳定地运行。用白话来说,Keepalived就像是集群中的“守护者”,它时刻关注着集群中各个节点的状态,一旦发现有节点出现问题,就会立即采取行动,确保集群的整体服务不受影响。

总的来说,Keepalived通过其强大的故障检测和自动恢复功能,为集群提供了高可用性的保障。它使得集群在面对单点故障时能够迅速恢复服务,确保业务的连续性和稳定性。

1.目的

为了处理当lvs中vip废掉之后 整个集群都会瘫痪的情况 设置多台主机可用 让它继续稳定执行

!!前端web服务(apache)或者nginx

!!中间lvs负载均衡或者haproxy

!!后端keepalived高可用(主备机 双主机)对vip进行检测

2.功能

1)基于vrrp协议完成地址流动(就是可以几台主机之间来回切换)

2)为vip地址所在的节点生成ipvs规则 (就是在keepalived配置文件中编写可以实现vip节点相关信息的生成 类似脚本编辑自动生成)

3)为集群的各rs进行健康检测(观测服务器是否有问题 )

4)基于脚本调用接口完成脚本中定义的功能(比如在配置文件中定义接口脚本 可以实现响应的功能)

3.集群类型

LB 负载均衡--LVS/HAProxy/

HA 高可用集群--数据库

SPoF 解决单点故障

HPC 高性能集群

4.系统故障

1)出故障的时间:出故障时间×(分钟×一天24小时×一个月时间)×不出故障时间

99.95%:(60*24*30)*(1-0.9995)=21.6分钟 #一般按一个月停机时间统计

2)硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素

3)软件故障:设计缺陷 bug

5.VRRP协议软件的实现

vrrp:虚拟路由冗余协议,解决静态网关单点风险

流程线图:

1)虚拟路由器:Virtual Router
2)虚拟路由器标识

VRID(0-255),唯一标识虚拟路由器

3)VIP:Virtual IP
作用

VIP是VRRP协议中虚拟出来的一个IP地址,它充当了局域网中的默认网关。在配置了VRRP的网络环境中,通常会有多台路由器参与到一个VRRP组中,这些路由器通过协商确定一台作为主路由器(Master),负责处理网络流量和ARP(地址解析协议)请求,而其他路由器则作为备份路由器(Backup),处于待命状态。VIP就是分配给这个VRRP组的虚拟IP地址,它对外表现为这个VRRP组的网关地址。

举例

假设你家里有一个Wi-Fi路由器,这个路由器负责将你的设备连接到互联网。但是,如果你担心这个路由器突然坏了,家里就没有网络了,怎么办呢?

这时,你可以考虑使用VRRP协议,并引入一个备用的路由器。你不需要为每台设备设置两个网关地址(一个主网关,一个备用网关),而是使用VRRP协议来虚拟一个IP地址作为网关(即VIP)。

  • 主路由器:就像你家里正在工作的那个Wi-Fi路由器,它负责处理所有的网络请求,并将VIP作为它的网关地址对外公布。
  • 备用路由器:就像你放在柜子里备用的那个路由器,它平时不工作,只是静静地等待。但是,一旦主路由器出现故障,备用路由器就会立即接管工作,并继续使用VIP作为网关地址,确保你的设备仍然可以连接到互联网。
4)VMAC

Virutal MAC (00-00-5e-00-01-VRID)

5)物理路由器

master:主设备(在主备关系中 属于主要支配路由器 具体在施行工作的机器)

backup:备用设备(在主备关系中 属于闲置路由器 随时待命)

priority:优先级(可以决定那台机器先抢占到 先工作 也是一种区分的效果 优先级不同 避免产生冲突)

6)工作方式--抢占、非抢占、延迟抢占
抢占优先级:master和backup

优先级高的掌管vip 但是当优先级高的down之后 vip会自动被优先级低的接管 但是当优先级高的主机恢复之后 vip又会回到优先级高的主机上

非抢占优先级:nopreemp--两个backup

注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP

restart 重启之后就说明此时就已经在挂了 启动起来 所以另外一个主机就会掌管vip 而不是看哪个优先级高就去哪里 当掌管的那个主机down之后 vip会自动被另外一个接管 但是之前的主机恢复正常之后 不会回到该主机上 只有当现在掌管的那个主机也down之后才会返回

延迟抢占优先级:抢占优先级的记时版

注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict

跟抢占优先级一个道理 只不过就是抢占回来需要延迟5秒

7)主备机类型
主--主

主机进行vip数据的传输 此时备份机没有使用 闲置状态 会造成资源浪费 当主机挂掉之后 vip会转移到备份机上 避免集群瘫痪的情况

主--备

两台都是主机配置 但是vip不同 因为对应的服务不同 互为主备机 当主机vip1挂掉之后 vip1将到另外一台主机vip2上 继续服务 避免资源浪费

8)keepalived相关文件

软件包名:keepalived

主程序文件:/usr/sbin/keepalived

主配置文件:/etc/keepalived/keepalived.conf

配置文件示例:/usr/share/doc/keepalived/ Unit File:/lib/systemd/system/keepalived.service

Unit File的环境配置文件:/etc/sysconfig/keepalived

我们实验利用rhel9
如果采用的rhel7的版本:
注意:
systemctl restart keepalived #新配置可能无法生效
systemctl stop keepalived;systemctl start keepalived #无法停止进程,需要 kill 停
止

 6.主配置文件常用配置说明

  • global_defs :全局配置
  • vrrp_instance :虚拟路由配置
  • virtual_server :虚拟IP与后端真实服务IP的对应关系配置
# 全局配置
global_defs {
   notification_email {
  (可以填写自己qq邮箱)1285657946@qq.com # keepalived 发生故障切换时发送邮件的目标邮箱
   }
   notification_email_from keepalived@csy.org	# 发邮件的地址
   smtp_server 127.0.0.1        # SMTP邮件服务器地址
   smtp_connect_timeout 30      # 邮件服务器超时时间
   router_id ka1.csy.org        # keepalived 主机唯一标识,建议使用当前主机名
   vrrp_skip_check_adv_addr     # 如果收到的通告报文和上一个报文是同一个路由,则跳过检查,默认为检查所有报文
   #vrrp_strict                 # 开启vrrp严格模式,一般不建议使用
   vrrp_garp_interval 0         # gratuitous ARP messages 报文发送延迟,0表示不延迟
   vrrp_gna_interval 0          # unsolicited NA messages (不请自来)消息发送延迟
   vrrp_mcast_group4 224.0.0.18 # 指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18
}
# VIP 虚拟路由实例配置
vrrp_instance VI_1 {
  state MASTER                # 当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
  interface ens33(根据自己的网卡)# 绑定当前虚拟路由器使用的物理接口,可以不和VIP在同一个网卡
  virtual_router_id 100        # 每个虚拟路由器惟一标识,范围:0-255,同属一个虚拟路由器的多个 keepalived 节点此值必须相同
  priority 100                # 当前物理节点在此虚拟路由器的优先级,范围:1-254
  advert_int 1		# vrrp通告的时间间隔,默认1s
  #nopreempt			# 非抢占式   默认是抢占式
  authentication {            # 认证机制
      auth_type PASS          # 认证类型,可以是AH或PASS,AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
      auth_pass 1111        # 预共享密钥,即相互认证密码
  }
  virtual_ipaddress {         	          # 虚拟路由IP
      #172.16.200.251          	          # 指定VIP,不指定网卡,默认eth0,注意:不指定/prefix,默认为32
      #172.16.200.252/24 dev eth1 	          # 指定VIP的MASK和网卡
      172.25.254.100/24 dev ens33 label ens33:1  # 指定VIP的label
  }
  
}
 # 后端真实服务器配置
virtual_server 172.25.254.100 80 {    # VIP的IP和PORT
   delay_loop 6
   lb_algo wrr            #静态调度算法方式
   lb_kind DR             #动态调度算法方式
   protocol TCP           #运行模式

   real_server 172.25.254.110 80 {	# RS的IP和PORT
    weight 1			# 调度权重
     SSL_GET {
       url {
       path /       	    # 定义要监控的URL
       status_code 200	    # 判断上述检测机制为健康状态的响应码,一般为 200
       }
    connect_timeout 3	            # 客户端请求的超时时长, 相当于haproxy的timeout server
    nb_get_retry 2        	        # 重试次数
    delay_before_retry 2           # 重试之前的延迟时长
   
      }
   real_server 172.25.254.120 80 {	# RS的IP和PORT
    weight 1			# 调度权重
     SSL_GET {
       url {
       path /       	    # 定义要监控的URL
       status_code 200	    # 判断上述检测机制为健康状态的响应码,一般为 200
       }
    connect_timeout 3 	            # 客户端请求的超时时长, 相当于haproxy的timeout server
    nb_get_retry 2       	        # 重试次数
    delay_before_retry 2            # 重试之前的延迟时长
    }
     TCP_CHECK {
      connect_ip <IP ADDRESS>        #向当前RS的哪个IP地址发起健康状态检测请求
      connect_port <PORT>            #当前RS的哪个PORT发起健康状态检测请求
      bindto <IP ADDRESS>            #发出健康状态检测请求时使用的源地址
      bind_port <PORT>               #发出健康状态检测请求时使用的源端口
      connect_timeout <INTEGER>      #客户端请求的超时时长
}
 
}

7.keepalived实验项目:--默认设置为抢占优先级

##基本配置

##所有ip(包括rs1、rs2、ka1、ka2)和getenfoce firewalld
设置脚本进行执行
mkdir /bin/vmset.sh
内部:#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1

[ipv4]
address1=$2/24,172.25.254.2
method=manual
dns=114.114.114.114;
EOF

chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1

hostnamectl set-hostname $3

外部:
chmod +x /bin/vmset.sh
vmset.sh ens33(根据自己的网卡信息) 172.25.254.100(根据要求的ip信息) rs1.csy.org(根据设备名称自己命名  好认即可)
route -n  --查看路由 
ifconfig  --查看IP 网关等信息


##realserver1.2

yum install httpd -y

echo 172.25.254.110 > /var/www/html/index.html

echo 172.25.254.120 > /var/www/html/index.html

systemctl enable --now httpd

##ka1.2

yum install keepalived -y

man 5 keepalived.conf

##主配置文件vim /etc/keepalived/keepalived.conf

##备份机ka2配置

##可以将ka1中的相同的文件里面的内容覆盖到另外一台ka2的主机上去 就会显示相同的内容 再进行修改 减少修改量

##抓包查看优先级 并关掉某个的服务器 观察优先级转换

8.使vip100可通行

由此可以看出  此时的vip100与任何一台机子都不可通 是由于现在状态DROP不可用 ping不通

这里我们采取对配置文件进行命令修改来让状态改变

①ka1..2配置进行修改

②查看状态

③再次ping

9.独立keepalived的日志--日志分离

将keepalived中的log日志文件单独出来 进行编写 避免主配置文件中内容过多 更便于操作

①修改日志local

②指定采集方法

10.独立子配置文件

①指定路径

②创建子配置文件进行编写

11.单播设置

单播:一对一

组播:一对多(一组)

广播:一对多(所有)

默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

注意:启用 vrrp_strict 时,不能启用单播

当我down掉ka1主机时 vip会来到ka2主机上 所以这个时候再去看ka2就可以显示

抓包查看单播效果

12.邮件通知

1.让linux可以发送文件 ka1.2同

下载邮件软件包

编辑邮箱客户端配置文件 使得查邮箱的文件信息明确(前提这个客户机能够上网 才能进行传输)

##这里这个码的生成--点开qq邮箱--账号与安全(顶栏)--选择安全设置--生成授权码即可

这下全部都配置成功 去到邮箱信息也明确 直接传输到该到的邮箱内 才可以进行邮件通知 再进行查询 看是否可以到达 echo一下内容

将test内容输出在邮件通知中 mail -s +邮件标题

2.脚本通知形式

进行调用:vim /etc/keepalived/keepalived.conf

直接不启动服务的时候 需要手动进行设定

启动服务观察ka1.2的变化

没有启动ka1 启动ka2(firewalld和selinux需要关闭!!)

启动ka1

13.实现 master/master 的 Keepalived 双主架构

同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用master/master的双主架构

即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高服务器资源利用率

14.实现IPVS的高可用性=LVS负载均衡+Keepalived高可用

1)实现单主的lvs-DR模式:准备web服务器并使用脚本绑定VIP至web服务器lo网卡

如果在rhel7中要修改网卡或者ip 网关等信息 保存命令用systemctl restart network

将同样文件配置复制传输过去

2)用策略命令观察

3)配置策略

实现高可用结合负载均衡

4)测试结果

5)当rs任何一台机子故障时 该对应的策略会消失 以及会定向汇编到另外一台机子上去 或者两台机子都故障的话 都会消失 启动sorry server

但是当ka1或者ka2的其中一台机子出问题 会将vip过渡到另外一个机子上去 所以不会造成信息缺失

15.VRRP Script 配置

定义脚本 vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定 义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。 通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至 低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

定义VRRP script
 vrrp_script <SCRIPT_NAME> {             #定义一个检测脚本,在global_defs 之外配置
     script <STRING>|<QUOTED-STRING>    #shell命令或脚本路径
     interval <INTEGER>                 #间隔时间,单位为秒,默认1秒
     timeout <INTEGER>                  #超时时间
     weight <INTEGER:-254..254>         #默认为0,如果设置此值为负数,
                                        #当上面脚本返回值为非0时
                                        #会将此值与本节点权重相加可以降低本节点权重,     
#即表示fall. 
                                        #如果是正数,当脚本返回值为0,
                                        #会将此值与本节点权重相加可以提高本节点权重
                                        #即表示 rise.通常使用负值
     
     fall <INTEGER>             #执行脚本连续几次都失败,则转换为失败,建议设为2以上
     rise <INTEGER>             #执行脚本连续几次都成功,把服务器从失败标记为成功
     user USERNAME [GROUPNAME]  #执行监测脚本的用户或组
     init_fail                  #设置默认标记为失败状态,监测成功之后再转换为成功状态
}
实例:vrrp脚本控制vip

判断脚本文件内容存在或不存在

#默认为0,如果设置此值为负数, ​ #当上面脚本返回值为非0时 ​ #会将此值与本节点权重相加可以降低本节点权重#即表示fall. ​ #如果是正数,当脚本返回值为0, ​ #会将此值与本节点权重相加可以提高本节点权重 ​ #即表示 rise.通常使用负值

1)编写脚本

2)编辑keepalived配置文件

3)原本两台主主的机子属于 一个有一个的master的vip存在

但是如果在ka1上面设定脚本来判定是否存在相关文件时

若存在有相关内容文件 就会施行keepalived的vip配置文件 会降低优先级 在此处会变成比ka2的优先级小 所以会被ka2抢占 成为ka2的vip

若不存在 就会保持优先级 不会被抢占vip

实例:实现Haproxy的高可用=Haproxy+Keepalived

1)软件包安装:ka1.2上进行--yum install haproxy -y

2)在两个ka1和ka2先实现haproxy的配置--vim /etc/haproxy/haproxy.cfg

3)在两个ka1和ka2两个节点启用内核参数 --vim /etc/sysctl.conf

4)会有冲突 所以需要把realserver上的所有的lo的vip删掉 并且将arp换成0 将ka1.2中的virtual server部分注释掉

vip:

arp:

vim /etc/keepalived/keepalived.cfg

5)在ka1 ka2上编写检测脚本

6)检测

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值