在MySQL和相关的高可用性解决方案中,“track script”通常与Keepalived等高可用软件一起使用,用于监控特定服务的状态。以下是对“track script”的详细解释:
一、定义与功能
- 定义:“track script”是Keepalived等高可用软件中用于定义跟踪监控脚本的配置项。
- 功能:通过指定一个脚本文件,Keepalived可以定期执行该脚本来检查某个服务的状态(如MySQL服务的运行状态)。如果脚本返回特定的状态码(通常表示服务不可用),Keepalived将触发相应的故障转移机制。
二、配置与使用
配置文件:在Keepalived的配置文件中,可以找到与“track script”相关的配置项。该文件通常位于系统的配置目录下,如
/etc/keepalived/keepalived.conf
。设置方法:
- 打开Keepalived的配置文件。
- 在配置文件中添加或修改与“track script”相关的配置项。
- 指定脚本文件的路径和名称,以及脚本执行时所需的参数(如果有)。
- 保存并关闭配置文件。
- 重启Keepalived服务以使设置生效。
示例:
vrrp_script chk_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight 2
}
在这个示例中,定义了一个名为chk_mysql
的跟踪脚本,该脚本位于/etc/keepalived/check_mysql.sh
。Keepalived将每隔2秒执行一次该脚本,并根据脚本的返回状态码来调整VRRP实例的优先级(通过weight
参数实现)。
- 脚本内容:跟踪脚本通常是一个Shell脚本,用于检查特定服务的状态。例如,一个检查MySQL服务状态的脚本可能包含以下内容:
#!/bin/bash
# 检查MySQL服务是否正在运行
if mysqladmin -u root -pPASSWORD ping &> /dev/null then
exit 0
else
exit 1
fi
在这个脚本中,使用mysqladmin
命令来检查MySQL服务是否响应ping请求。如果响应成功,则脚本返回状态码0(表示服务正常);否则返回状态码1(表示服务异常)。
三、注意事项
- 脚本权限:确保跟踪脚本具有可执行权限,否则Keepalived将无法执行该脚本。
- 脚本路径:在Keepalived的配置文件中指定脚本路径时,请确保路径正确且脚本文件存在。
- 状态码:跟踪脚本应返回有效的状态码(通常为0或1),以便Keepalived能够正确识别服务的状态。
- 故障转移:当跟踪脚本返回表示服务异常的状态码时,Keepalived将触发故障转移机制。因此,请确保已正确配置故障转移相关的参数和步骤。
四、应用场景
“track script”在以下场景中特别有用:
- 数据库高可用性:通过配置跟踪脚本来监控MySQL等数据库服务的状态,可以实现数据库的高可用性。当数据库服务出现异常时,Keepalived将触发故障转移机制,将服务切换到备用服务器上。
- 负载均衡与容错:在负载均衡场景中,可以使用跟踪脚本来监控后端服务器的状态。当某个后端服务器出现异常时,负载均衡器可以将请求转发到其他正常的服务器上,从而提高系统的容错能力。
综上所述,“track script”是Keepalived等高可用软件中用于定义跟踪监控脚本的配置项。通过合理配置和使用跟踪脚本,可以实现对特定服务的有效监控和故障转移。
非抢占模式
要将Keepalived设置为非抢占模式,你需要对Keepalived的配置文件进行相应的修改。以下是具体的步骤:
一、修改配置文件
定位配置文件:
- 通常,Keepalived的配置文件位于
/etc/keepalived/keepalived.conf
。
- 通常,Keepalived的配置文件位于
编辑配置文件:
- 使用文本编辑器(如
vi
、nano
等)打开配置文件。
- 使用文本编辑器(如
设置VRRP实例为非抢占模式:
- 在VRRP实例的配置部分,添加或修改
nopreempt
参数。这个参数会阻止高优先级的节点抢占已经由低优先级节点持有的虚拟IP。 - 同时,确保两个节点的状态(
state
)都设置为BACKUP
。这是官方建议的做法,因为非抢占模式下,节点的角色不再像抢占模式下那样明确区分主备。
- 在VRRP实例的配置部分,添加或修改
配置示例:
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 替换为你的网络接口名
virtual_router_id 51 # 虚拟路由器ID,主备节点需要一致
nopreempt # 添加此参数以设置为非抢占模式
priority 100 # 高优先级节点设置较高的优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 # 认证密码,主备节点需要一致
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP地址
}}
对于低优先级的节点,配置类似,但priority
值需要设置得比高优先级节点低,并且通常不需要再添加nopreempt
参数(但添加也无妨,因为该参数仅在高优先级节点上有效)。
二、重启Keepalived服务
保存配置文件:
- 在编辑器中保存对配置文件的修改。
重启服务:
- 使用
systemctl
或service
命令重启Keepalived服务,以使新的配置生效。
- 使用
sudo systemctl restart keepalived# 或者sudo service keepalived restart
三、验证配置
- 检查虚拟IP绑定:
- 在两个节点上分别使用
ip addr
或ifconfig
命令检查虚拟IP是否已正确绑定到某个节点上。
- 在两个节点上分别使用
- 模拟故障切换:
- 你可以通过停止高优先级节点的Keepalived服务来模拟故障,然后观察低优先级节点是否接管了虚拟IP。
- 当高优先级节点恢复后,由于设置了非抢占模式,它不会从低优先级节点抢回虚拟IP。
四、注意事项
- 在非抢占模式下,如果两个节点的硬件配置和性能差异较大,可能需要特别注意负载均衡和性能问题。
- 确保Keepalived的配置文件语法正确,以避免服务启动失败或行为异常。
- 定期检查和测试Keepalived的配置和切换功能,以确保系统的高可用性。
通过以上步骤,你可以将Keepalived设置为非抢占模式,并在主节点故障时实现平滑的故障切换。
主备模式
Keepalived的主备模式设置相对简单,主要涉及到两个节点(主节点和备节点)的配置。以下是详细的设置步骤:
一、准备阶段
环境准备:
- 准备两台服务器(或虚拟机),确保它们已经安装了Keepalived。
- 获取这两台设备的IP地址,并准备一个新的IP地址作为虚拟IP(VIP)。
配置文件位置:
- Keepalived的配置文件通常位于
/etc/keepalived/keepalived.conf
。
- Keepalived的配置文件通常位于
二、主节点配置
编辑配置文件:
- 使用文本编辑器(如vi或nano)打开主节点的Keepalived配置文件。
配置全局参数:
- 在配置文件中,设置全局参数,如
router_id
,用于标识运行Keepalived的机器。这个标识在多个节点中可以相同,也可以不同。
global_defs { router_id LVS_MASTER # 或者其他唯一标识}
- 在配置文件中,设置全局参数,如
配置VRRP实例:
- 在配置文件中,添加VRRP实例的配置。以下是一个示例配置:
vrrp_instance VI_1 { state MASTER # 指定当前节点为主节点 interface eth0 # 绑定虚拟IP的网络接口 virtual_router_id 51 # VRRP组名,两个节点的设置必须一样 priority 100 # 主节点的优先级,备用节点必须比主节点优先级低 advert_int 1 # 通告频率为1秒 authentication { auth_type PASS auth_pass 1111 # 设置验证信息,两个节点必须一致 } virtual_ipaddress { 192.168.1.100 # 指定虚拟IP,两个节点设置必须一样 }}
保存并退出:
- 保存配置文件的更改,并退出文本编辑器。
三、备节点配置
编辑配置文件:
- 使用文本编辑器打开备节点的Keepalived配置文件。
配置全局参数:
- 设置全局参数,如
router_id
,与主节点可以相同或不同。
- 设置全局参数,如
配置VRRP实例:
- 在配置文件中,添加VRRP实例的配置。与主节点类似,但需要注意以下几点不同:
state
应设置为BACKUP
。priority
应设置为比主节点低的值。- 其他参数(如
interface
、virtual_router_id
、authentication
和virtual_ipaddress
)应与主节点保持一致。
以下是一个示例配置:
- 在配置文件中,添加VRRP实例的配置。与主节点类似,但需要注意以下几点不同:
vrrp_instance VI_1 {
state BACKUP # 指定当前节点为备用节点
interface eth0 # 绑定虚拟IP的网络接口
virtual_router_id 51 # VRRP组名,与主节点一致
priority 99 # 备用节点的优先级
advert_int 1 # 通告频率为1秒
authentication {
auth_type PASS
auth_pass 1111 # 与主节点一致的验证信息
}
virtual_ipaddress {
192.168.1.100 # 与主节点一致的虚拟IP
}}
保存并退出:
- 保存配置文件的更改,并退出文本编辑器。
四、启动和测试
启动Keepalived服务:
- 在主节点和备节点上分别启动Keepalived服务。
systemctl start keepalived.service
检查虚拟IP:
- 在主节点上,使用
ip a
命令检查虚拟IP是否已经绑定到主节点的网络接口上。 - 在备节点上,同样使用
ip a
命令检查,此时备节点上应该没有绑定虚拟IP。
- 在主节点上,使用
测试故障切换:
- 关闭主节点的Keepalived服务或模拟主节点故障。
- 在备节点上,使用
ip a
命令检查虚拟IP是否已经切换到备节点的网络接口上。 - 如果测试成功,备节点将接管虚拟IP,并在主节点恢复后重新切换回主节点(如果主节点重新启动了Keepalived服务)。
通过以上步骤,你就可以成功设置Keepalived的主备模式,并实现高可用性。
双主机模式
Keepalived双主机模式,也称为双主热备模式,可以实现两台主机之间的故障转移和自动切换,从而提高系统的高可用性。以下是Keepalived双主机模式的设置步骤:
一、环境准备
- 硬件/虚拟机:准备两台具有相同配置的服务器或虚拟机。
- 操作系统:确保两台服务器或虚拟机上安装了相同的操作系统,例如CentOS。
- 网络配置:为两台服务器配置静态IP地址,并确保它们能够相互通信。
- Keepalived安装:在两台服务器上安装Keepalived。
二、配置Keepalived
1. 主服务器(Keepalived01)配置
编辑Keepalived配置文件:
- 使用文本编辑器(如vi或nano)打开Keepalived的配置文件,通常位于
/etc/keepalived/keepalived.conf
。
- 使用文本编辑器(如vi或nano)打开Keepalived的配置文件,通常位于
配置全局参数:
- 设置全局参数,如
router_id
,用于标识运行Keepalived的机器。
global_defs { notification_email { # 配置接收通知的邮箱地址 } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id Keepalived01 # 设置为当前主机的标识 }
- 设置全局参数,如
配置VRRP实例:
- 添加VRRP实例的配置,为不同的业务配置不同的VRRP实例。
vrrp_instance A1 { state MASTER # 当前实例为主状态 interface eth0 # 绑定虚拟IP的网络接口 virtual_router_id 51 # VRRP组名,与备服务器保持一致 priority 100 # 优先级,比备服务器高 advert_int 1 # 通告间隔 authentication { auth_type PASS auth_pass 1111 # 认证密码 } virtual_ipaddress { 192.168.3.33/24 # 虚拟IP地址 }} vrrp_instance B1 { state BACKUP # 当前实例为备状态 interface eth0 virtual_router_id 52 priority 99 # 优先级,比备服务器低(对于此实例) advert_int 1 authentication { auth_type PASS auth_pass 2222 # 另一个认证密码(可以与A1不同) } virtual_ipaddress { 192.168.3.133/24 # 另一个虚拟IP地址 }}
2. 备服务器(Keepalived02)配置
编辑Keepalived配置文件:
- 同样使用文本编辑器打开Keepalived的配置文件。
配置全局参数:
- 全局参数与主服务器类似,但
router_id
应设置为不同的值以区分。
global_defs { notification_email { # 配置接收通知的邮箱地址 } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id Keepalived02 # 设置为当前主机的标识 }
- 全局参数与主服务器类似,但
配置VRRP实例:
- 添加VRRP实例的配置,与主服务器相对应,但状态、优先级等参数需要调整。
vrrp_instance A2 { state BACKUP # 当前实例为备状态 interface eth0 virtual_router_id 51 priority 99 # 优先级,比主服务器低(对于此实例) advert_int 1 authentication { auth_type PASS auth_pass 1111 # 与主服务器相同的认证密码 } virtual_ipaddress { 192.168.3.33/24 # 与主服务器相同的虚拟IP地址 }} vrrp_instance B2 { state MASTER # 当前实例为主状态 interface eth0 virtual_router_id 52 priority 100 # 优先级,比主服务器高(对于此实例) advert_int 1 authentication { auth_type PASS auth_pass 2222 # 与主服务器相同的认证密码(对于此实例) } virtual_ipaddress { 192.168.3.133/24 # 与主服务器相同的虚拟IP地址(但在此实例中作为主) }}
三、启动和测试
启动Keepalived服务:
- 在两台服务器上分别启动Keepalived服务。
systemctl start keepalived.service
检查虚拟IP:
- 使用
ip a
命令检查两台服务器上的网络接口,确认虚拟IP是否正确绑定。
- 使用
测试故障切换:
- 停止主服务器上的Keepalived服务或模拟主服务器故障。
- 观察备服务器上的Keepalived日志和网络接口,确认虚拟IP是否成功切换到备服务器上。
- 当主服务器恢复后,观察是否会自动切换回主服务器。
通过以上步骤,你可以成功设置Keepalived的双主机模式,并实现两台主机之间的故障转移和自动切换。这种配置可以确保在系统出现故障时,另一台主机能够迅速接管服务,从而提高系统的高可用性。
抢占模式
在Keepalived中,抢占模式(preempt mode)是默认的配置模式。在这种模式下,当主节点(MASTER)发生故障后,备节点(BACKUP)会接管虚拟IP(VIP),而当主节点恢复后,它会重新抢占回VIP。以下是设置Keepalived抢占模式的步骤:
一、配置主节点
编辑Keepalived配置文件:
- 使用文本编辑器(如vi或nano)打开Keepalived的配置文件,通常位于
/etc/keepalived/keepalived.conf
。
- 使用文本编辑器(如vi或nano)打开Keepalived的配置文件,通常位于
设置全局参数:
- 配置全局参数,如
router_id
,用于标识运行Keepalived的机器。
global_defs { router_id MASTER_ROUTER_ID # 设置为当前主节点的标识 # 其他全局参数配置... }
- 配置全局参数,如
配置VRRP实例:
- 在VRRP实例中,将
state
设置为MASTER
,并配置其他相关参数,如interface
(绑定虚拟IP的网络接口)、virtual_router_id
(VRRP组名,与备节点保持一致)、priority
(优先级,比备节点高)、advert_int
(通告间隔)以及认证信息等。
vrrp_instance VI_1 { state MASTER interface eth0 # 或其他网络接口 virtual_router_id 51 priority 100 # 优先级设置为比备节点高 advert_int 1 authentication { auth_type PASS auth_pass YOUR_AUTH_PASS # 认证密码 } virtual_ipaddress { YOUR_VIRTUAL_IP/24 # 虚拟IP地址 }}
- 在VRRP实例中,将
二、配置备节点
编辑Keepalived配置文件:
- 同样使用文本编辑器打开Keepalived的配置文件。
设置全局参数:
- 全局参数与主节点类似,但
router_id
应设置为不同的值以区分。
global_defs { router_id BACKUP_ROUTER_ID # 设置为当前备节点的标识 # 其他全局参数配置... }
- 全局参数与主节点类似,但
配置VRRP实例:
- 在VRRP实例中,将
state
设置为BACKUP
,并配置其他相关参数,如interface
、virtual_router_id
(与主节点保持一致)、priority
(优先级,比主节点低)、advert_int
以及认证信息等。
vrrp_instance VI_1 { state BACKUP interface eth0 # 或其他网络接口 virtual_router_id 51 # 与主节点保持一致 priority 99 # 优先级设置为比主节点低 advert_int 1 authentication { auth_type PASS auth_pass YOUR_AUTH_PASS # 与主节点相同的认证密码 } virtual_ipaddress { YOUR_VIRTUAL_IP/24 # 与主节点相同的虚拟IP地址 }}
- 在VRRP实例中,将
三、启动Keepalived服务
在两台服务器上分别启动Keepalived服务:
systemctl start keepalived.service
检查Keepalived服务状态:
systemctl status keepalived.service
验证VIP绑定:
- 使用
ip a
命令检查主节点上的网络接口,确认虚拟IP是否正确绑定。 - 当主节点发生故障或停止Keepalived服务时,备节点应接管虚拟IP。
- 当主节点恢复后,它应重新抢占回虚拟IP。
- 使用
通过以上步骤,你可以成功设置Keepalived的抢占模式。在这种模式下,主节点和备节点能够自动进行故障转移和VIP抢占,从而提高系统的高可用性。
灵活模式
Keepalived的灵活模式(Flexible Mode)允许管理员根据脚本监听的结果来动态调整节点的优先级,从而触发主备切换。这种模式非常适用于需要根据应用状态来决定Keepalived行为的场景。以下是如何设置Keepalived灵活模式的步骤:
一、编写检测脚本
创建脚本文件:
在服务器上创建一个脚本文件,用于检测应用的运行状态。例如,可以创建一个名为check_app.sh
的脚本。编写脚本内容:
在脚本中编写逻辑来检测应用是否运行正常。如果应用运行正常,则脚本返回成功状态码(通常为0);如果应用运行异常,则脚本返回非成功状态码(非0)。#!/bin/bash# 检查应用是否运行正常的示例脚本 if ps aux | grep -v grep | grep 'your_application' > /dev/nullthen exit 0 # 应用运行正常,返回成功状态码 else exit 1 # 应用运行异常,返回非成功状态码 fi
注意:将
your_application
替换为实际要检测的应用名称。赋予脚本执行权限:
使用chmod
命令赋予脚本执行权限。chmod +x check_app.sh
二、配置Keepalived
编辑Keepalived配置文件:
使用文本编辑器打开Keepalived的配置文件,通常位于/etc/keepalived/keepalived.conf
。添加VRRP脚本配置:
在配置文件中添加vrrp_script
块,用于定义检测脚本及其权重调整规则。vrrp_script check_app { script "/path/to/check_app.sh" # 指定检测脚本的路径 interval 2 # 设置脚本执行间隔(秒) weight -20 # 如果脚本执行失败,则降低节点优先级(负数表示降低)}
注意:将
/path/to/check_app.sh
替换为实际脚本的路径。在VRRP实例中引用脚本:
在VRRP实例配置块中,使用track_script
指令引用前面定义的脚本。vrrp_instance VI_1 { state BACKUP # 可以设置为MASTER或BACKUP,具体取决于初始状态 interface eth0 # 绑定虚拟IP的网络接口 virtual_router_id 51 # VRRP组名 priority 100 # 初始优先级 advert_int 1 # 通告间隔(秒) authentication { auth_type PASS auth_pass YOUR_AUTH_PASS # 认证密码 } virtual_ipaddress { YOUR_VIRTUAL_IP/24 # 虚拟IP地址 } track_script { check_app # 引用前面定义的脚本 }}
三、启动Keepalived服务
启动Keepalived服务:
使用systemctl
命令启动Keepalived服务。systemctl start keepalived.service
检查Keepalived服务状态:
使用systemctl status
命令检查Keepalived服务的运行状态。systemctl status keepalived.service
四、验证配置
验证脚本执行:
手动执行检测脚本,确保它能够正确返回应用的状态。模拟应用故障:
停止应用或修改脚本以模拟应用故障,然后观察Keepalived是否根据配置进行了主备切换。检查VIP绑定:
使用ip a
命令检查网络接口上的VIP绑定情况,确保在应用故障时VIP能够正确切换到备节点。
通过以上步骤,你可以成功设置Keepalived的灵活模式,并根据应用状态动态调整节点的优先级。这将有助于提高系统的高可用性和稳定性。