keepalived配置文件详解
在使用 keepalived 进行高可用性服务搭建时,配置文件是关键的一环。本文将对 keepalived 配置文件进行详细解析,并给出一些实用的配置例子。
配置文件格式
keepalived 配置文件采用 YAML 格式,包含三个根级别的关键字:global_defs、vrrp_instance 和 vrrp_sync_group。
global_defs
global_defs 关键字用于定义全局选项,包括运行 keepalived 的主机名、脚本路径、SMTP 服务器等等。以下是一个简单的例子:
global_defs {
notification_email {
example@example.com
}
notification_email_from example@example.com
smtp_server localhost
smtp_connect_timeout 30
router_id web01
}
上述配置定义了一个邮件通知选项,当 VRRP 切换时会自动发送邮件通知,主机名为 web01。
vrrp_instance
vrrp_instance 关键字定义了一个 VRRP 实例,通常需要指定服务名称和虚拟 IP 地址。以下是一个例子:
vrrp_instance HTTP {
interface eth0
lvs_sync_daemon_interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.100
}
track_interface {
eth0
}
}
上述配置定义了一个 VRRP 实例,服务名称为 HTTP,虚拟 IP 地址为 192.168.1.100。如果 eth0 接口失效,则切换到备用服务器。
vrrp_sync_group
vrrp_sync_group 关键字用于定义同步组,将多个 VRRP 实例组合在一起,以便在 VRRP 实例之间同步配置信息。以下是一个例子:
vrrp_sync_group SYNC {
group {
HTTP
HTTPS
}
}
上述配置定义了一个同步组 SYNC,包含两个 VRRP 实例:HTTP 和 HTTPS。
实用配置例子
双主机高可用性服务
下面是一个配置例子,用于实现一个双主机高可用性服务,包括 Web 服务和 MySQL 服务。
global_defs {
notification_email_from example@example.com
router_id web01
}
vrrp_script chk_web {
script "/usr/local/sbin/chk_web.sh"
interval 2
weight 2
}
vrrp_script chk_mysql {
script "/usr/local/sbin/chk_mysql.sh"
interval 2
weight 2
}
vrrp_instance HTTP {
interface eth0
lvs_sync_daemon_interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.100
}
track_script {
chk_web
}
}
vrrp_instance MySQL {
interface eth0
lvs_sync_daemon_interface eth1
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.200
}
track_script {
chk_mysql
}
}
vrrp_sync_group SYNC {
group {
HTTP
MySQL
}
}
上述配置中,chk_web.sh 和 chk_mysql.sh 是两个自定义的脚本文件,用于检查 Web 服务和 MySQL 服务的健康状态。如果某个服务异常,则主机的优先级会降低,切换到备用服务器。
多实例同步
下面是一个配置例子,用于实现 MySQL 主从同步、VIP 绑定和 Nginx 负载均衡。
global_defs {
notification_email_from example@example.com
router_id db01
}
vrrp_script chk_mysql {
script "/usr/local/sbin/chk_mysql.sh"
interval 2
weight 2
}
vrrp_instance MySQL_master {
interface eth0
lvs_sync_daemon_interface eth1
virtual_router_id 53
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.220/24 dev eth0
}
track_script {
chk_mysql
}
}
vrrp_instance MySQL_slave {
interface eth0
lvs_sync_daemon_interface eth1
virtual_router_id 54
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.221/24 dev eth0
}
track_interface {
eth0
}
}
vrrp_instance Nginx {
interface eth0
lvs_sync_daemon_interface eth1
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.200/24 dev eth0
}
}
vrrp_sync_group SYNC {
group {
MySQL_master
MySQL_slave
Nginx
}
}
上述配置中,MySQL_master 实例是 MySQL 主库,MySQL_slave 实例是 MySQL 从库,Nginx 实例是负责负载均衡的服务器。在同一个同步组中,通过配置文件同步实现主从同步、虚拟 IP 地址绑定和状态同步。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:keepalived配置文件详解 - Python技术站