高可用集群 keepalived

一、高可用集群:

1、简介:

高可用集群(High Availability Cluster,简称 HA Cluster),是一组相互连接的计算机或服务器,它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。

MTTF:mean time to failure 平均无故障时间,度量系统的可靠性;

MTTR:mean time to restoration 平均故障维修时间,度量系统的可维护性;HA=MTTF / (MTTF+MTTR)*100%

2、自动切换 (Failover):

自动切换是指当主要系统发生故障或不可用时,自动切换到备用或冗余系统的过程,帮助在面对意外中断时保持运营。

3、自动侦测:

(1) 概念:

自动侦测是指在计算机集群或分布式系统中使用的一种机制,允许系统自动检测和识别集群中的节点或成员。

(2) 心跳线:

自动侦测的 "心跳线"(Heartbeat Line)是指在集群中使用的一种监控和检测机制。它涉及到周期性发送心跳消息或信号,以表示设备、节点或进程的活跃状态和可用性。

接收方节点会定期监测心跳信息,并检查发送方节点是否活动。如果接收方节点在一定时间内未收到心跳信息,它可能会假定发送方节点已经失败,并采取相应措施。

(3) 分裂脑:

在高可用集群中,当联系2个节点的"心跳线"断开时,本来为一个整体、动作协调的 HA 系统失去通信,分裂成为2个独立的个体,每个个体都认为是对方出现了故障,都在独自操作。

二、keepalived

1、概念:

Keepalived 是实现高可用性(High Availability)的开源软件,用于管理负载均衡和故障切换。它的主要工作是确保在出现故障的情况下,能够快速地切换到备用系统,以确保连续可用性。

2、工作原理:

Keepalived 使用虚拟路由冗余协议(Virtual Router Redundancy Protocol,VRRP)来协调主备切换。VRRP 允许多个服务器一起工作,但只有一个服务器被选为主服务器,其余服务器处于备用状态。主服务器接收 VIP,而备用服务器等待切换。

3、keepalived 三个主要模块:

● Core 模块:Core 模块是 Keepalived 的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;

● Check 模块:Check 模块是用于健康检查的组件,它负责监测服务器的可用性;

● VRRP 模块:VRRP 模块用于实现 VRRP 协议。

4、keepalived 示例:

(1) 环境:

server1:192.168.198.130(VIP:192.168.198.140)

server2:192.168.198.131(VIP:192.168.198.140)

(2) 配置:

配置 server1:

① 编辑 keepalived 配置文件:

yum install -y keepalived

vim /etc/keepalived/keepalived.conf

bash 复制代码
!Configuration File for keepalived 
  global_defs { 
  router_id 1
}

#vrrp_script ck_apache { 
# script "/etc/keepalived/ck_apache.sh"
# interval 2 
# weight -5 
# fall 3 
#}

vrrp_instance VI_1 { 
 state MASTER 
 interface ens33
 mcast_src_ip 192.168.198.130
 virtual_router_id 55 
 priority 100 
 advert_int 1

 authentication { 
  auth_type PASS 
  auth_pass 123456 
 }
 virtual_ipaddress { 
  192.168.198.140/24 
 }

# track_script { 
# ck_apache
# }

}

● !Configuration File for keepalived:注释行,指示这是 Keepalived 的配置文件

● global_defs { router_id 1 }

定义全局参数 ;router_id 1:设备在 keepalived 组中的标识编号(实例路由编号)

● vrrp_instance VI_1 :设置虚拟路由器组名 (VI_1)

● state MASTER:设置主从状态

● interface ens33:设置监控网卡

● mcast_src_ip 192.168.198.130:心跳源 ip,用来标识 VRRP 协议消息的来源

● virtual_router_id 55:虚拟路由器编号55(130、131共同维护的虚拟设备名为VI_1,编号为55)

● priority 100:设置服务器优先级(0-255)

● advert_int 1:心跳间隔,表示 VRRP 实例每隔 1 秒发送一次消息,以通知其他路由器它的状态

配置身份验证参数,集群中的成员使用密码进行身份验证

配置虚拟 ip:192.168.198.140

② 拷贝配置文件到 131

scp -r /etc/keepalived/keepalived.conf 192.168.198.131:/etc/keepalived/

(131 需要先安装 keepalived)

③ 启动 keepalived

systemctl start keepalived

systemctl enable keepalived

④ 配置 apache:

yum install -y httpd

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

systemctl restart httpd
配置 server2:

① 修改 keepalived 配置文件:

router_id 2

state BACKUP

mcast_src_ip 192.168.198.131

priority 99

② 配置 apache:

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

systemctl restart httpd

(3) 客户机测试:

客户机访问虚拟 ip(192.168.198.140)

断开主服务器的网卡连接,再访问:

(4) keepalived 应对 apache 状态变更:

当 apache 状态为关闭时,客户机访问虚拟 ip 不会跳转到备用机。

① 编辑 apache 状态监控脚本(130):

vim /etc/keepalived/ck_apache.sh

bash 复制代码
#!/bin/bash
counter=$(ps -C httpd --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
  #尝试启动apache,停止5秒后再次检测
  systemctl start httpd
  sleep 5
  counter=$(ps -C httpd --no-heading|wc -l)

  if [ "${counter}" = "0" ];
    then
    #如果启动没成功,就杀掉keepalive触发主备切换
    systemctl stop keepalived
  fi
fi

添加脚本权限:chmod +x /etc/keepalived/ck_apache.sh

130 将脚本拷给 131,在 131 下给脚本授权:

scp /etc/keepalived/ck_apache.sh 192.168.198.131:/etc/keepalived/

② 在 keepalived 配置文件中启动监控脚本:

监控的脚本名:

启动脚本:每隔两秒钟执行脚本,如果重复三次后 apache 依然无法启动,本机权重减五

③ 查看脚本执行效果:

systemctl restart keepalived

停止 apache 后,查看状态:

5、keepalived + lvs

(1) 环境:

负载均衡器(主):192.168.198.130(VIP:192.168.198.140)

负载均衡器(备):192.168.198.131(VIP:192.168.198.140)

web 服务器1:192.168.198.132

web 服务器2:192.168.198.133

(2) 主负载均衡器配置(130):

yum install -y keepalived ipvsadm

修改 keepalived 配置文件:

bash 复制代码
!Configuration File for keepalived
global_defs {
  router_id Director1
}

vrrp_instance VI_1 {
  state MASTER
  interface ens33
  virtual_router_id 51
  priority 150
  advert_int 1

  authentication {
    auth_type PASS
    auth_pass 123456

  }

  virtual_ipaddress {
    192.168.198.140/24 dev ens33
  }
}

virtual_server 192.168.198.140 80 {
  lb_algo rr
  lb_kind DR
  protocol TCP

  real_server 192.168.198.132 80 {
   weight 1
   TCP_CHECK {
     connect_timeout 3
   }
 }

  real_server 192.168.198.133 80 {
   weight 1
   TCP_CHECK {
     connect_timeout 3
   }
 }
}

LVS 配置:

● virtual_server 192.168.198.140 80

负载均衡器监听的 ip 地址和端口

● lb_algo rr ;lb_kind DR ;protocol TCP

调度算法为 rr ;集群模式为 DR ;协议为 tcp

● real_server 192.168.198.133 80 { weight 1

定义真实服务器的 ip 地址、端口和权重比例

● TCP_CHECK { connect_timeout 3 }

指定了连接超时时间为3秒,用于检查真实服务器健康状态的设置。

(3) 备用负载均衡器配置(131):

yum install -y keepalived ipvsadm

● 将主负载均衡器的配置文件拷到备用负载上:

scp 192.168.198.130:/etc/keepalived/keepalived.conf /etc/keepalived/

● 修改配置文件:

router_id Director2

state BACKUP

priority 100

● 启动 master 和 backup 的服务:

systemctl start keepalived

systemctl enable keepailved

reboot

(4) web 配置(132、133):

yum install -y httpd

systemctl start httpd

systemctl enable httpd

① 配置虚拟 ip:

cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}

vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo

IPADDR=192.168.198.140

NETMASK=255.255.255.255

ONBOOT=yes

② 配置路由:

添加路由条目,192.168.198.140 这个 ip 只能通过 lo:0 口进行服务

/sbin/route add -host 192.168.198.140 dev lo:0

③ 配置 ARP:

vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

④ 重启 web:reboot

(5) 测试:

① 在 master 上查看路由条目和虚拟 ip:

② 客户机访问:

master1 关闭 keepalived 后,客户机访问:

web1 关闭站点服务后,客户机访问:

相关推荐
ZZHow102420 小时前
JavaWeb开发_Day05
java·笔记·web
白仑色2 天前
Redis 如何保证数据安全?
数据库·redis·缓存·集群·主从复制·哨兵·redis 管理工具
扶风呀3 天前
具有熔断能力和活性探测的服务负载均衡解决方案
运维·负载均衡
Hello World呀3 天前
springcloud负载均衡测试类
spring·spring cloud·负载均衡
菜菜子爱学习3 天前
Nginx学习笔记(七)——Nginx负载均衡
笔记·学习·nginx·负载均衡·运维开发
扶风呀3 天前
负载均衡详解
运维·后端·微服务·面试·负载均衡
PXM的算法星球4 天前
spring gateway配合nacos实现负载均衡
spring·gateway·负载均衡
OEC小胖胖5 天前
【CSS 布局】告别繁琐计算:CSS 现代布局技巧(gap, aspect-ratio, minmax)
前端·css·web
抛物线.6 天前
Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)
mongodb·docker·负载均衡
ZNineSun7 天前
什么是负载均衡,有哪些常见算法?
负载均衡·osi·七层网络模型