高可用集群 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 关闭站点服务后,客户机访问:

相关推荐
王ASC39 分钟前
SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping
java·mvc·springboot·web
永卿0013 小时前
nginx学习总结(不包含安装过程)
运维·nginx·负载均衡
人类群星闪耀时4 小时前
大模型技术优化负载均衡:AI驱动的智能化运维
运维·人工智能·负载均衡
ZVAyIVqt0UFji15 小时前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
BUG研究员_19 小时前
LoadBalancer负载均衡和Nginx负载均衡区别理解
nginx·rpc·负载均衡
2401_878961721 天前
lvs介绍 模式
服务器·数据库·lvs
2401_850410831 天前
LVS简介
运维·nginx·tomcat·lvs
云计算运维丁丁1 天前
负载均衡+LNMP+rsync+NFS+lsync部署流程
linux·运维·负载均衡·kylin
弗罗里达老大爷1 天前
负载均衡-lvs
运维·负载均衡·lvs
非凡的世界2 天前
5个用于构建Web应用程序的Go Web框架
golang·go·框架·web