keepalived 是一款基于 VRRP 协议实现服务器主备冗余双活和负载均衡功能的软件。它可以保证服务器在网络故障或者服务器宕机的情况下,服务能够自动切换到备用服务器上,从而保证服务的可用性。
keepalived 支持主备模式和多主模式。主备模式中,一个服务器作为主服务器提供服务,另一个服务器作为备份,当主服务器发生故障时,备份服务器会自动接管服务。多主模式下,多个服务器同时提供相同的服务,当其中一个服务器遇到故障时,其他服务器会接管该服务器的服务。
keepalived 还支持在负载均衡环境下使用。通过配置多个真实服务器和虚拟 IP 地址,keepalived 将请求分发到真实服务器上,从而实现负载均衡效果。同时,也支持检测真实服务器的健康状态,并根据配置的算法来选择合适的服务器来处理请求。
- 安装 keepalived
可以通过以下命令来安装 keepalived:
sudo yum install -y keepalived
- 配置 keepalived
创建配置文件 /etc/keepalived/keepalived.conf,文件内容如下所示:
global_defs {
router_id keepalived
}
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass mypassword
}
virtual_ipaddress {
192.168.0.100
}
track_script {
check_haproxy
}
}
virtual_server 192.168.0.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.0.10 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.0.20 80 {
weight 1
HTTP_GET {
url {
path "/"
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
上述配置文件中,配置了以下内容:
- global_defs:定义全局变量,使用 router_id 设置路由器 ID。
- vrrp_script:定义检查 haproxy 进程脚本,并将权重设置为 2。
- vrrp_instance:定义 VRRP 实例,使用 interface 指定网卡接口,virtual_router_id 指定虚拟路由 ID,priority 指定优先级,advert_int 指定通告间隔,authentication 指定认证类型和密码,virtual_ipaddress 指定虚拟 IP 地址。
- track_script:定义跟踪脚本,用于检测 haproxy 进程是否正常运行。
- virtual_server:定义虚拟服务器,指定虚拟 IP 地址和端口号,延迟时间、负载均衡算法、负载均衡种类、持久化超时时间等信息,以及两个真实服务器的 IP 地址和端口号,权重、TCP 连接检查或 HTTP 检查等详细信息。
- 启动 keepalived
启动 keepalived 服务:
sudo systemctl start keepalived
- 验证配置
验证虚拟 IP 地址是否已经绑定到主服务器上,使用 ip addr 命令:
ip addr show | grep -w inet
同时,也可以测试负载均衡的效果,访问虚拟 IP 地址,请求会被分发到多个真实服务器上进行处理。
注意事项:
- 确认 keepalived 版本:不同版本的 keepalived 支持的功能可能有所不同,需要根据具体需求选择适合的版本。
- 确认操作系统内核和网络设备支持:keepalived 使用 Linux 内核模块实现 VRRP 协议的相关功能,需要确认操作系统内核版本是否支持。同时,还需要确认网络设备是否支持 ARP 技术。
- 配置文件格式和语法:配置文件格式和语法必须正确,否则 keepalived 服务将无法启动,需要认真检查配置文件中的各项参数。
- 配置多组 VRRP 实例时需要避免冲突:在配置多组 VRRP 实例时,不同实例的 virtual_router_id 参数必须保证唯一,否则会出现冲突,导致服务不可用。
- 设置优先级:在配置主备模式时,需要设置各个服务器的优先级参数(priority),确保主服务器的优先级最高,备份服务器的优先级次之。
- 检测真实服务器状态:在配置负载均衡时,需要配置相关的检测脚本,确保 keepalived 能够监测到真实服务器的健康状态。
- 增加日志记录:为了更好地排查故障和调试问题,建议在配置文件中增加日志记录相关的配置项。
整理不易,欢迎点赞转发,关注我每天分享运维小知识。