参考链接:Keepalived高可用集群

一、VRRP简介

1.1 什么是VRRP?

  VRRP(Virtual Router Redundancy Protocol)是虚拟路由器冗余协议,用于实现网络设备的冗余备份和负载均衡,以提高网络的可靠性和稳定性。
  在VRRP中,一组路由器形成一个虚拟路由器,虚拟路由器的IP地址是由虚拟路由器中的一个路由器的物理接口IP地址和虚拟IP地址组成的。当虚拟路由器的物理接口IP地址失效时,其他路由器将接管该虚拟路由器的IP地址,并继续提供路由服务。
  VRRP的主要目的是在一个网络中提供冗余的路由。当一个三层网络设备或服务器出现故障时,VRRP可以确保网络仍能正常工作。VRRP通过在这些设备之间使用IP组播或单播通信来实现冗余。它可以确保在网络中有多个物理节点时,且在某些节点发生故障时仍能保持服务。
  主要优点是提高了网络的可靠性,因为当主路由器出现故障时,备份路由器可以迅速接管网络服务,避免了网络中断。此外,VRRP还可以实现负载均衡,将数据流量分配到多个路由器上,提高了网络的性能。
  需要注意的是,VRRP需要在路由器上配置相应的参数和规则,以确保其正常工作。同时,在配置VRRP时,需要考虑网络拓扑、设备性能等因素,以确保网络的稳定性和可靠性。

回到目录

1.2 keepalived是什么?

  Keepalivedkeepalived是集群管理中保证集群高可用的一个服务软件,它的作用是检测web服务器的状态。它是Linux内核中的一个组件,用于实现虚拟路由冗余协议(VRRP)
  Keepalived负责监控和维护一个VRRP集群,以确保所有VRRP实例都在线并能相互通信。如果有一台服务器死机,或工作出现故障,keepalived将检测到,并将有故障的服务器从系统中剔除,当web服务器工作正常后,自动将web服务器加入到服务器集群中。解决了静态路由的单点故障问题。

回到目录

1.3 keepalived工作原理

  N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip,master不断向backup发送心跳信息,告诉backup自己还活着,当backup收不到心跳的时候就认为master已经宕机,就需要根据VRRP的优先级来选举一个backup当master,从而保证高可用。
keepalived主要有三个模块:

  • core模块:为keepalived的核心,负责进程的启动,维护,以及全局配置文件的加载和解析。
  • check模块:负责健康检查,包括常见的各种检查方式。
  • vrrp模块:是实现VRRP协议的。

回到目录

二、实操配置过程

2.1 试验模型

1
说明:通过Keepalived监控和维护一个VRRP集群,包含虚拟机1(11.11.1.111)和虚拟机2(11.11.1.113)这两台独立主机,设置其虚拟化IP地址为11.11.1.117,其中虚拟机1(11.11.1.111)为master实例,如果master实例出现故障,将由另一个backup健康实例来接管故障实例的工作。

回到目录

2.2. Keepalived监控和维护VRRP集群的步骤

2.2.1 安装keepalived

   master和backup均需要安装keepalived,执行命令:

# 如果服务器操作系统是debian系统,执行下面命令
apt install keepalived -y
# 如果服务器操作系统是其他linux系统,执行下面命令
yum -y install keepalived 

1

2.2.2 配置keepalived.conf文件

   进入系统的/etc/keepalived目录下修改keepalived.conf文件:更多配置文件说明,点击跳转
配置详解:

! Configuration File for keepalived //标记
global_defs { //global配置模块
	router_id director1 //master为director1,辅助backup修改为director2 
}
vrrp_instance VI_1 {
	state BACKUP //禁止抢占
	nopreempt
	interface ens33 //VIP绑定的网络接口
	virtual_router_id 80 //master和backup一致
	priority 100 //优先级,可以决定哪个是master,辅助按顺序递减改为50
	advert_int 1
	authentication {
		auth_type PASS //关于安全的配置,只有type和pass相同,才在一个组里 ​ 
		auth_pass 1111 ​
	 }
		virtual_ipaddress{ //指虚拟ip
			11.11.1.117
		}
	}

这里的interface(IP版本的网络接口),可以通过命令:ip addr show来查看,该命令将显示系统中所有网络接口的详细信息,包括物理接口的IP地址、MAC地址等。物理接口通常以类似于 eth0、wlan0、ens 等名称标识。
1

2.2.2.1 master配置

master配置内容:vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   router_id director1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens192
    virtual_router_id 80
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        11.11.1.117
    }
}

1

2.2.2.2 backup配置

backup配置内容:vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   router_id director1
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 80
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        11.11.1.117
    }
}

2

回到目录

2.2.3 启动keepalived

  配置完毕后,检查haproxy的负载均衡是否启动正常,一切准备就绪后,启动keepalived

  • master机(11.11.1.111):
    1. 启动keepalived,执行命令:systemctl start keepalived
    2. 查看keepalived状态,执行命令:systemctl status keepalived
      2
    3. 在master启动keepalived后,需要查看ip,执行命令:ip a
      在ens192接口会出现111.11.1.117的虚拟IP(在backup并没有新增的ip出现)
      3
  • backup机(11.11.1.113):
    1. 启动keepalived,执行命令:systemctl start keepalived
    2. 查看keepalived状态,执行命令:systemctl status keepalived
    3. 在master启动keepalived后,需要查看ip,执行命令:ip a
      在ens192接口并没有新增的ip出现(master机会出现111.11.1.117的虚拟IP)
      4
  • master服务器宕机测试
    1. 停止master上的keepalived服务,执行命令:systemctl stop keepalived
    2. 然后查看ip(执行命令:ip a),发现虚拟ip不存在了。
      1
    3. 此时查看backup机的ip,执行命令:ip a,此时可以发现虚拟ip:11.11.1.117
      1

回到目录

三、keepalived配置文件说明

keepalived配置文件:keepalived.conf。里面主要包括以下几个配置区域,分别是:

  • global_defs 全局配置
  • static_ipaddress 静态路由配置
  • vrrp_script 检测脚本
  • vrrp_instance 定义高可用相关的配置
  • virtual_server 定义配置服务器

3.1 global_defs 全局配置

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
  • notification_email:故障发生时给谁发邮件通知
  • notification_email_from:通知邮件从哪个地址发出
  • smtp_server:通知邮件的smtp地址
  • smtp_connect_timeout:连接smtp服务器的超时时间
  • enable_traps:开启SNMP陷阱
  • router_id:标志本节点的字符串,通常为ip地址,故障发生时邮件会通知到

回到目录

3.2 vrrp_script区域

  用来做健康检查的,当检查失败时会将vrrp_instance的priority减少相应的值。

vrrp_script check_haproxy {
        script "/etc/keepalived/check_haproxy_status.sh"
        interval 5
        weight  -20
}
  • script:自己写的的监测脚本
  • interval 5:每5s监测一次
  • weight -20:监测失败,则相应的vrrp_instance的优先级会减少20个点

回到目录

3.3 vrrp_instance区域

  定义当前服务器的内容​

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
    }
     track_script {
        check_haproxy
        }
}
  • state:只有MASTER和BACKUP。MASTER为工作状态,BACKUP是备用状态。
  • interface:网卡接口,可通过ip addr查看自己的网卡接口。
  • virtual_router_id :虚拟路由标志,同组的virtual_router_id 应保持一致,它决定多播的mac地址
  • priority:设置本节点的优先级,优先级高的为master
  • advert_int:MASTER和BACKUP同步检查的时间间隔
  • virtual_ipaddress:虚拟ip

回到目录

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐