Linux-Keepalived(VRRP协议)高可用集群搭建
- 一、VRRP简介
- 1.1 什么是VRRP?
- 1.2 keepalived是什么?
- 1.3 keepalived工作原理
- 二、实操配置过程
- 2.1 试验模型
- 2.2. Keepalived监控和维护VRRP集群的步骤
- 2.2.1 安装keepalived
- 2.2.2 配置`keepalived.conf`文件
- 2.2.2.1 master配置
- 2.2.2.2 backup配置
- 2.2.3 启动keepalived
- 三、keepalived配置文件说明
- 3.1 global_defs 全局配置
- 3.2 vrrp_script区域
- 3.3 vrrp_instance区域
参考链接: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 试验模型
说明:通过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
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
等名称标识。
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
}
}
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.3 启动keepalived
配置完毕后,检查haproxy的负载均衡是否启动正常,一切准备就绪后,启动keepalived
- master机(11.11.1.111):
- 启动keepalived,执行命令:
systemctl start keepalived
- 查看keepalived状态,执行命令:
systemctl status keepalived
- 在master启动keepalived后,需要查看ip,执行命令:
ip a
在ens192接口会出现111.11.1.117的虚拟IP(在backup并没有新增的ip出现)
- 启动keepalived,执行命令:
- backup机(11.11.1.113):
- 启动keepalived,执行命令:
systemctl start keepalived
- 查看keepalived状态,执行命令:
systemctl status keepalived
- 在master启动keepalived后,需要查看ip,执行命令:
ip a
在ens192接口并没有新增的ip出现(master机会出现111.11.1.117的虚拟IP)
- 启动keepalived,执行命令:
- master服务器宕机测试
- 停止master上的keepalived服务,执行命令:
systemctl stop keepalived
- 然后查看ip(执行命令:
ip a
),发现虚拟ip不存在了。
- 此时查看backup机的ip,执行命令:
ip a
,此时可以发现虚拟ip:11.11.1.117
- 停止master上的keepalived服务,执行命令:
回到目录
三、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
回到目录