keepalived实现服务高可用

本文介绍了Keepalived如何通过VRRP协议实现Web服务的高可用性,包括配置步骤、LVS-DR模式部署以及故障转移原理。详细讲解了实例中如何配置Keepalived和LVS,以及如何测试其在节点故障时的服务接管。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本概念

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

三个重要功能:
管理LVS负载均衡软件
实现LVS集群节点的健康检查中
作为系统网络服务的高可用性(failover)

Keepalived高可用故障切换转移原理
Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。

在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

那么,什么是VRRP呢?
VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。

二、keepalived实例

1、keepalived高可用服务器(web服务示例)
(1)架构图
在这里插入图片描述

(2)环境说明
client:192.168.120.190
web1:192.168.120.191
web2:192.168.120.192

(3)部署步骤
步骤一、安装Keepalived软件(web主机)

# yum install -y keepalived 

步骤二、部署Keepalived服务
web1:

# vim /etc/keepalived/keepalived.conf 
global_defs { 
  notification_email { 
    admin@test.com.cn                //设置报警收件人邮箱 
  } 
  notification_email_from ka@localhost    //设置发件人 
  smtp_server 127.0.0.1                //定义邮件服务器 
  smtp_connect_timeout 30 
  router_id  web1                        //设置路由ID号(实验需要修改) 
} 
vrrp_instance VI_1 { 
  state MASTER                         //主服务器为MASTER(实验需要修改) 
  interface eth0                    //定义网络接口(实验需要修改) 
  virtual_router_id 50                //主辅VRID号必须一致(实验需要修改) 
  priority 100                     //服务器优先级,优先级高优先获取VIP(实验需要修改) 
  advert_int 1 
  authentication { 
    auth_type pass 
    auth_pass forlvs                       //主辅服务器密码必须一致 
  } 
  virtual_ipaddress { 192.168.120.10 }   //谁是主服务器谁获得该VIP(实验需要修改) 
} 

web2:

# vim /etc/keepalived/keepalived.conf 
global_defs { 
  notification_email { 
    admin@test.com.cn                //设置报警收件人邮箱 
  } 
  notification_email_from ka@localhost    //设置发件人 
  smtp_server 127.0.0.1                //定义邮件服务器 
  smtp_connect_timeout 30 
  router_id  web2                        //设置路由ID号(实验需要修改) 
} 
vrrp_instance VI_1 { 
  state BACKUP                             //从服务器为BACKUP(实验需要修改) 
  interface eth0                        //定义网络接口(实验需要修改) 
  virtual_router_id 50                    //主辅VRID号必须一致(实验需要修改) 
  priority 50                             //服务器优先级(实验需要修改) 
  advert_int 1 
  authentication { 
     auth_type pass 
     auth_pass forlvs                   //主辅服务器密码必须一致(实验需要修改) 
  } 
  virtual_ipaddress { 192.168.120.10 }    //谁是主服务器谁配置VIP(实验需要修改) 
} 

步骤三、启动服务(web主机)

# systemctl start keepalived 

步骤四、配置防火墙和SELinux
启动keepalived会自动添加一个drop的防火墙规则,需要清空!

# iptables -F 
# setenforce 0 

步骤五:测试
登录两台Web服务器查看VIP信息

# ip addr show 

客户端访问
客户端使用curl命令连接http://192.168.120.10,查看Web页面;关闭web1虚拟机,客户端再次访问http://192.168.120.10,验证是否可以正常访问服务

2、Keepalived+LVS服务器
(1)架构图
在这里插入图片描述
(2)部署步骤
步骤一:配置网络环境
1)设置Web1、Web2服务器的网络参数

# nmcli connection modify eth0 ipv4.method manual \ 
ipv4.addresses 192.168.4.100/24 connection.autoconnect yes 
# nmcli connection up eth0 

接下来给web1配置VIP地址
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样

# cd /etc/sysconfig/network-scripts/ 
# cp ifcfg-lo{,:0} 
# vim ifcfg-lo:0 
DEVICE=lo:0 
IPADDR=192.168.4.15 
NETMASK=255.255.255.255 
NETWORK=192.168.4.15 
BROADCAST=192.168.4.15 
ONBOOT=yes 
NAME=lo:0 

注意:这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突。
写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应

# vim /etc/sysctl.conf 
#手动写入如下4行内容 
net.ipv4.conf.all.arp_ignore = 1 
net.ipv4.conf.lo.arp_ignore = 1 
net.ipv4.conf.lo.arp_announce = 2 
net.ipv4.conf.all.arp_announce = 2 

#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15
重启网络服务,设置防火墙与SELinux

# systemctl restart network 
# sysctl -p 
# ifconfig 
# systemctl stop firewalld 
# setenforce 0 

配置proxy1、proxy2主机的网络参数(不配置VIP,由keepalvied自动配置)

步骤二:配置后台web服务
1)安装软件,自定义Web页面(web1和web2主机)

# yum -y install httpd 
# echo "192.168.4.100" > /var/www/html/index.html 
# yum -y install httpd 
# echo "192.168.4.200" > /var/www/html/index.html 

2)启动Web服务器软件(web1和web2主机)

# systemctl start httpd ; systemctl enable httpd 

步骤三:调度器安装Keepalived与ipvsadm软件
注意:两台LVS调度器执行相同的操作(如何已经安装软件,可用忽略此步骤)
安装软件

# yum install -y keepalived 
# systemctl enable keepalived 
# yum install -y ipvsadm 
# ipvsadm -C 

步骤四:部署Keepalived实现LVS-DR模式调度器的高可用
LVS1调度器设置Keepalived,并启动服务

# vim /etc/keepalived/keepalived.conf 
global_defs { 
  notification_email { 
    admin@test.com.cn                //设置报警收件人邮箱 
  } 
  notification_email_from ka@localhost    //设置发件人 
  smtp_server 127.0.0.1                //定义邮件服务器 
  smtp_connect_timeout 30 
  router_id  lvs1                        //设置路由ID号(实验需要修改) 
} 
vrrp_instance VI_1 { 
  state MASTER                             //主服务器为MASTER(实验需要修改) 
  interface eth0                        //定义网络接口(实验需要修改) 
  virtual_router_id 50                    //主辅VRID号必须一致(实验需要修改) 
  priority 100                         //服务器优先级(实验需要修改) 
  advert_int 1 
  authentication { 
    auth_type pass 
    auth_pass forlvs                     //主辅服务器密码必须一致(实验需要修改) 
  } 
  virtual_ipaddress {  192.168.4.15  }   //配置VIP(实验需要修改) 
} 
virtual_server 192.168.4.15 80 {       //设置ipvsadm的VIP规则(实验需要修改) 
  delay_loop 6 
  lb_algo wrr                          //设置LVS调度算法为WRR 
  lb_kind DR                               //设置LVS的模式为DR 
  #persistence_timeout 50 
#注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同服务器 
  protocol TCP 
  real_server 192.168.4.100 80 {     //设置后端web服务器真实IP(实验需要修改) 
    weight 1                             //设置权重为1 
    TCP_CHECK { 
    connect_timeout 3 
    nb_get_retry 3 
    delay_before_retry 3 
    } 
  } 
 real_server 192.168.4.200 80 {      //设置后端web服务器真实IP(实验需要修改) 
    weight 2                          //设置权重为2 
    TCP_CHECK { 
    connect_timeout 3 
    nb_get_retry 3 
    delay_before_retry 3 
    } 
  } 
} 
# systemctl start keepalived 
# iptables -F  
# ipvsadm -Ln                     #查看LVS规则 
# ip a  s                          #查看VIP配置 

LVS2调度器设置Keepalived
从proxy1传给proxy2

#scp /etc/keepalived/keepalived.conf 192.168.4.6:/etc/keepalived/ 
# vim /etc/keepalived/keepalived.conf 
router_id lvs2   
state BACKUP 
priority 50    
# systemctl start keepalived 
# iptables -F                       #每重启一次服务就要清空一下防火墙 
# ipvsadm -Ln                     #查看LVS规则 
# ip a  s                          #查看VIP配置 

步骤五:客户端测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值