一,Keepalived 双击热备基础知识
Keepalived 是一款用于提高服务器高可用性的软件,最初是为 LVS(Linux Virtual Server)设计的,用于管理和监控 LVS 集群中的各个服务节点的状态。随着发展,Keepalived 加入了 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的功能,使其能够实现高可用性集群,并且可以应用于多种场景,而不仅仅局限于 LVS。
1:Keepalived概述及安装
Keepalived 支持多种热备方式,其中最常见的是使用 VRRP 协议来实现双机热备。在双机热备中,两个或多个服务器共享一个虚拟 IP 地址,其中一个服务器作为主服务器(Master),负责处理客户端请求,其他服务器则处于备份状态(Backup)。如果主服务器发生故障,备份服务器会自动接管虚拟 IP 地址,从而保证服务的连续性。
1.1:Keepalived的热备方式
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol, 虚拟路由冗余协议)的高可用性解决方案。它主要用于在 Linux 系统中实现服务器和服务的高可用性。Keepalived 支持多种热备方式,包括:
- VRRP 实例:用于实现 IP 地址的高可用性。在一组服务器中选举出一个主服务器来处理流量,当主服务器故障时,其他服务器可以接管这个 IP 并继续提供服务。
- 健康检查:通过发送 ICMP 或者 TCP 数据包到特定端口来检测后端服务器的健康状况,确保流量只被转发到健康的服务器上。
- 负载均衡:虽然 Keepalived 主要不是为了负载均衡而设计的,但它可以结合 LVS (Linux Virtual Server) 实现简单的负载均衡功能。
1.2:Keepalived的安装与服务控制
(1):安装Keepalived
在 CentOS/RHEL 系统中,可以通过以下命令安装 Keepalived:
sudo yum install keepalived
在 Debian/Ubuntu 系统中,则可以使用以下命令:
sudo apt-get update
sudo apt-get install keepalived
(2):控制Keepalived服务
安装完成后,你可以使用系统的服务管理工具来启动、停止和监控 Keepalived 服务。
启动 Keepalived:
sudo systemctl start keepalived
查看 Keepalived 服务状态:
sudo systemctl status keepalived
设置 Keepalived 在系统启动时自动启动:
sudo systemctl enable keepalived
停止 Keepalived:
sudo systemctl stop keepalived
2:使用Keepalived实现双机热备
要使用 Keepalived 实现双机热备,你需要在两台服务器上进行配置。一台作为主服务器(Master),另一台作为备用服务器(Backup)。当主服务器发生故障时,备用服务器将自动接管虚拟 IP 地址并开始提供服务。
1:主服务器的配置
假设主服务器的 IP 地址为 192.168.1.10
,备用服务器的 IP 地址为 192.168.1.11
,并且你希望使用的虚拟 IP 地址为 192.168.1.100
。
Keepalived 配置文件 (/etc/keepalived/keepalived.conf
):
global_defs {
router_id LVS_DEVEL
}
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.1.100
}
}
在这个配置中:
state MASTER
表示这台服务器作为主服务器运行。interface eth0
指定网络接口。virtual_router_id 51
定义了一个 VRRP 实例的标识符。priority 100
设置了优先级,数值越高优先级越高。advert_int 1
设置了 VRRP 广播间隔为 1 秒。authentication
块定义了认证信息。virtual_ipaddress
列出了虚拟 IP 地址。
2:备用服务器的配置
Keepalived 配置文件 (/etc/keepalived/keepalived.conf
):
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
在这个配置中:
state BACKUP
表示这台服务器作为备用服务器运行。priority 90
设置了较低的优先级,以便在主服务器正常工作时保持备用状态。- 其他配置项与主服务器相同。
3:测试双机热备功能
完成配置后,你需要确保两台服务器都已正确安装 Keepalived,并且配置文件正确无误。
-
启动 Keepalived 服务:
sudo systemctl start keepalived
对于每台服务器都要执行此命令。
-
检查 Keepalived 服务状态:
sudo systemctl status keepalived
这将显示 Keepalived 是否正在运行以及任何相关的错误信息。
-
验证虚拟 IP 地址是否被主服务器获取: 在主服务器上运行:
ip addr show | grep 192.168.1.100
如果一切正常,你应该能看到虚拟 IP 地址
192.168.1.100
已经绑定到了主服务器的接口上。 -
模拟主服务器故障: 在主服务器上暂时关闭 Keepalived 服务:
sudo systemctl stop keepalived
然后,在备用服务器上运行:
ip addr show | grep 192.168.1.100
应该可以看到虚拟 IP 地址已经被备用服务器获取。
-
恢复主服务器: 在主服务器上重新启动 Keepalived 服务:
sudo systemctl start keepalived
并检查虚拟 IP 地址是否重新回到主服务器。
二,LVS+Keepalived高可用群集
要构建一个 LVS + Keepalived 高可用集群,你需要在多个服务器上进行配置。这里我们将详细讨论如何配置主调度器、从调度器以及 web 服务器节点。
1:配置主调度器
假设主调度器的 IP 地址为 192.168.1.10
,从调度器的 IP 地址为 192.168.1.11
,并且你希望使用的虚拟 IP 地址为 192.168.1.100
。
(1):全职配置,热备配置
Keepalived 配置文件 (/etc/keepalived/keepalived.conf
):
global_defs {
router_id LVS_DEVEL
}
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.1.100
}
}
# 定义 LVS 负载均衡规则
vserver 192.168.1.100 http {
lb_algo rr
lb_kind NAT
protocol TCP
real_server 192.168.1.20 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.21 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在这个配置中:
state MASTER
表示这台服务器作为主调度器运行。interface eth0
指定网络接口。virtual_router_id 51
定义了一个 VRRP 实例的标识符。priority 100
设置了优先级,数值越高优先级越高。advert_int 1
设置了 VRRP 广播间隔为 1 秒。authentication
块定义了认证信息。virtual_ipaddress
列出了虚拟 IP 地址。vserver
定义了 LVS 的虚拟服务器配置,包括负载均衡算法、类型、协议等。real_server
定义了实际服务器及其健康检查配置。
(2):web服务器池配置
在主调度器上配置 LVS 规则以分发流量到 web 服务器池。上面的配置已经包含了两个 web 服务器节点的信息。
(3):重新启动Keepalived服务
sudo systemctl restart keepalived
2:配置从调度器
Keepalived 配置文件 (/etc/keepalived/keepalived.conf
):
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
# 定义 LVS 负载均衡规则
vserver 192.168.1.100 http {
lb_algo rr
lb_kind NAT
protocol TCP
real_server 192.168.1.20 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.21 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在这个配置中:
state BACKUP
表示这台服务器作为从调度器运行。priority 90
设置了较低的优先级,以便在主调度器正常工作时保持备用状态。- 其他配置项与主调度器相同。
3:配置web节点服务器
每个 web 服务器节点都需要安装 web 服务器软件(例如 Apache 或 Nginx)并配置好相应的网站内容。确保每个 web 服务器节点都在监听端口 80 上运行。
例如,对于 Apache,可以在 /etc/httpd/conf/httpd.conf
文件中进行配置,并重启 Apache 服务:
sudo systemctl restart httpd
4:测试LAS+Keepalived高可用群集
-
确认虚拟 IP 地址已被主调度器获取: 在主调度器上运行:
ip addr show | grep 192.168.1.100
-
模拟主调度器故障: 在主调度器上暂时关闭 Keepalived 服务:
sudo systemctl stop keepalived
然后,在从调度器上运行:
ip addr show | grep 192.168.1.100
应该可以看到虚拟 IP 地址已经被从调度器获取。
-
测试负载均衡: 使用虚拟 IP 地址访问 web 服务器池。你可以通过轮询的方式多次访问虚拟 IP 地址,观察是否能够轮换到不同的 web 服务器节点。
-
恢复主调度器: 在主调度器上重新启动 Keepalived 服务:
sudo systemctl start keepalived
并检查虚拟 IP 地址是否重新回到主调度器。