Keepalived 是一个用于高可用性的开源软件,它可以在 Linux 系统上实现基于 VRRP(Virtual Router Redundancy Protocol)协议的故障转移和负载均衡。下面是 Keepalived 的配置文件示例以及相应的注释说明:
! Configuration File for Keepalived
! 全局配置
global_defs {
router_id LVS_DEVEL
}
! 主模块配置
vrrp_instance VI_1 {
state MASTER ! 指定实例的角色为主节点
interface eth0 ! 关联的网络接口
virtual_router_id 51 ! 虚拟路由器 ID
priority 100 ! 优先级
advert_int 1 ! 心跳间隔
authentication {
auth_type PASS ! 认证类型
auth_pass 1111 ! 认证密码
}
virtual_ipaddress {
192.168.1.1 ! 虚拟 IP 地址
}
}
! 备模块配置
vrrp_instance VI_2 {
state BACKUP ! 指定实例的角色为备份节点
interface eth0 ! 关联的网络接口
virtual_router_id 51 ! 虚拟路由器 ID
priority 50 ! 优先级低于主节点
advert_int 1 ! 心跳间隔
authentication {
auth_type PASS ! 认证类型
auth_pass 1111 ! 认证密码
}
virtual_ipaddress {
192.168.1.1 ! 虚拟 IP 地址
}
}
配置文件的注释说明如下:
-
全局配置部分(global_defs):该部分定义了全局属性,用于整个 Keepalived 实例。router_id 是一个唯一的标识符,用于在集群中识别节点。
-
主模块配置部分(vrrp_instance VI_1):该部分定义了主节点的配置。state 指定节点角色为 MASTER,interface 关联了节点使用的网络接口,virtual_router_id 是该虚拟路由器的 ID,priority 是节点的优先级,advert_int 是 VRRP 心跳间隔。authentication 部分定义了认证类型和密码,virtual_ipaddress 部分定义了虚拟 IP 地址。
-
备模块配置部分(vrrp_instance VI_2):该部分定义了备份节点的配置。state 指定节点角色为 BACKUP,其他配置项与主节点类似。
在什么时候以及如何配置 Keepalived 取决于你的需求和使用场景。以下是一些常见的配置示例:
-
故障转移:当您有多台服务器提供相同的服务,并且希望在其中一台服务器故障时自动将流量切换到另一台服务器时,可以使用 Keepalived 进行故障转移配置。将主节点配置为状态为 MASTER,优先级较高,将备份节点配置为状态为 BACKUP,优先级较低。当主节点故障时,备份节点会自动接管服务并成为主节点。
-
负载均衡:当您有多台服务器提供相同的服务,并希望均衡地分发流量到这些服务器时,可以使用 Keepalived 进行负载均衡配置。将多个主节点配置在同一个虚拟路由器 ID 下,它们共享相同的虚拟 IP 地址。这样,流量会被平均分配给各个主节点,实现负载均衡。
-
其他配置:Keepalived 还支持其他一些高级配置,例如健康检查、脚本执行、通知和自定义网络设置等。根据您的需求,您可以通过 Keepalived 的配置文件进行相应的调整和扩展。
一个实际的应用场景是在 Web 服务器集群中使用 Keepalived 实现故障转移和负载均衡。
假设有两台具有相同配置的 Web 服务器(Server A 和 Server B),它们都运行着相同的网站。为了确保高可用性和可靠性,我们希望当一台服务器发生故障时,流量能够自动切换到另一台服务器上,以保持网站的连续性。
在这种情况下,可以使用 Keepalived 配置如下:
! Configuration File for Keepalived
! 全局配置
global_defs {
router_id LVS_DEVEL
}
! 主模块配置
vrrp_instance VI_1 {
state MASTER ! Server A 主节点
interface eth0 ! 网络接口
virtual_router_id 51 ! 虚拟路由器 ID
priority 100 ! 优先级高于备份节点
advert_int 1 ! 心跳间隔
authentication {
auth_type PASS ! 认证类型
auth_pass 1111 ! 认证密码
}
virtual_ipaddress {
192.168.1.100 ! 虚拟 IP 地址
}
}
! 备模块配置
vrrp_instance VI_2 {
state BACKUP ! Server B 备份节点
interface eth0 ! 网络接口
virtual_router_id 51 ! 虚拟路由器 ID
priority 50 ! 优先级低于主节点
advert_int 1 ! 心跳间隔
authentication {
auth_type PASS ! 认证类型
auth_pass 1111 ! 认证密码
}
virtual_ipaddress {
192.168.1.100 ! 虚拟 IP 地址
}
}
在这个例子中,Server A 被配置为主节点(MASTER),它的优先级设置为 100,而 Server B 被配置为备份节点(BACKUP),优先级设置为 50。这样,在正常情况下,Server A 将处理所有的流量并使用虚拟 IP 地址 192.168.1.100 提供服务。同时,Server B 作为备份节点,等待主节点发生故障时接管虚拟 IP 地址并提供服务。
当 Server A 发生故障或失去与网络的连接时,Keepalived 的 VRRP 协议将检测到这个状态变化,并自动将 Server B 的状态更改为主节点。由于 Server B 在配置文件中的优先级较低,只有在主节点不可用时才会接管虚拟 IP 地址。这样一来,服务器集群仍然能够提供连续的访问,并实现了故障转移。
这样的配置还可以实现负载均衡。当两台服务器都正常运行时,它们将共享虚拟 IP 地址,并按照其配置的优先级处理流量。这样可以有效地将流量均衡分配给两台服务器,提高系统的吞吐量和性能。
需要注意的是,以上只是一个简单的示例配置,实际的配置取决于具体的环境需求和架构设计。在实际应用中,可能还需要进行更多的配置调整,例如健康检查、脚本执行等,以确保高可用性和负载均衡的要求得到满足
以下是一个加入了健康检查和脚本执行的配置示例,可以确保高可用性和负载均衡的要求得到满足:
! Configuration File for Keepalived
! 全局配置
global_defs {
router_id LVS_DEVEL
}
! 主模块配置
vrrp_instance VI_1 {
state MASTER ! Server A 主节点
interface eth0 ! 网络接口
virtual_router_id 51 ! 虚拟路由器 ID
priority 100 ! 优先级高于备份节点
advert_int 1 ! 心跳间隔
authentication {
auth_type PASS ! 认证类型
auth_pass 1111 ! 认证密码
}
virtual_ipaddress {
192.168.1.100 ! 虚拟 IP 地址
}
track_script {
chk_http ! 健康检查脚本名称
}
}
! 健康检查脚本
vrrp_script chk_http {
script "/path/to/health_check.sh" ! 健康检查脚本路径
interval 3 ! 检查间隔时间
weight 2 ! 检查权重
fall 2 ! 连续失败次数上限
rise 2 ! 连续成功次数上限
}
! 备模块配置
vrrp_instance VI_2 {
state BACKUP ! Server B 备份节点
interface eth0 ! 网络接口
virtual_router_id 51 ! 虚拟路由器 ID
priority 50 ! 优先级低于主节点
advert_int 1 ! 心跳间隔
authentication {
auth_type PASS ! 认证类型
auth_pass 1111 ! 认证密码
}
virtual_ipaddress {
192.168.1.100 ! 虚拟 IP 地址
}
track_script {
chk_http ! 健康检查脚本名称
}
}
在这个配置示例中,我们添加了一个健康检查脚本来检测服务器的可用性。健康检查脚本的路径是 /path/to/health_check.sh
,并且配置了每隔 3 秒运行一次。脚本的返回状态将决定服务器的可用性,如果连续失败次数超过 2 次,则认为服务器不可用。
健康检查脚本的运行结果将影响服务器的权重。在这里,我们将权重设置为 2,这意味着如果服务器通过了健康检查,那么它将比权重为 1 的服务器处理更多的流量。
另外,我们还设置了 fall
和 rise
参数来控制连续失败和成功的次数上限。当连续失败次数超过 fall
的设定值时,备份节点将自动接管虚拟 IP 地址。当连续成功次数超过 rise
的设定值时,主节点将重新接管虚拟 IP 地址。
通过添加健康检查脚本和调整权重、连续失败和成功次数的上限,我们可以更好地确保服务器的可用性和负载均衡。例如,在一个实际应用场景中,假设有两台 Web 服务器同时提供相同的网站服务。通过使用 Keepalived 进行故障转移和负载均衡,可以实现以下优点:
- 高可用性:如果其中一台服务器发生故障或不可用,Keepalived 将自动将流量切换到另一台可用的服务器上,确保网站的连续访问性。
- 负载均衡:当两台服务器都正常运行时,Keepalived 将根据权重和健康检查结果来分配流量,平衡地将请求分发给各个服务器,提高整体系统的性能和响应速度。
通过对健康检查脚本和相关参数进行合理配置,可以根据具体的业务需求和服务器状态来灵活调整权重、失败次数等参数,以满足实际场景下的高可用性和负载均衡要求。