当前位置: 首页 > 工具软件 > Keepalived > 使用案例 >

Keepalived 安装和配置详解

慕光赫
2023-12-01

Keepalived的安装和配置详解

原文地址:B站传送门

1. 简介

Keepalived是Linux下一个轻量级的高可用解决方案

2. 安装

官网地址:https://www.keepalived.org/

yum install -y gcc gcc-c++ wget popt-devel openssl openssl-devel 

yum install -y libnl libnl-devel libnl3 libnl3-devel 

yum install -y libnfnetlink-devel 

./configure --sysconf=/etc 

make 

make install

3. 配置⽂件

配置文件主要分为三大部分

  • 全局配置(Global Configuration)
  • VRRPD配置
  • LVS配置

3.1 全局配置

! Configuration File for keepalived 

global_defs { 

    notification_email { 

        dba.gao@gmail.com 

        ixdba@163.com 

    }

    notification_email_from Keepalived@localhost 

    smtp_server 192.168.200.1 

    smtp_connect_timeout 30 

    router_id LVS_DEVEL 

}

全局配置以 global_defs 作为标识,在 global_defs 区域内的都是全局配置选项,其中:

参数说明
notification_email用于设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的 Sendmail 服务。
notification_email_from用于设置邮件的发送地址。
smtp_server用于设置邮件的 smtp server 地址。
smtp_connect_timeout用于设置连接 smtp server 的超时时间。
router_id表示运行 Keepalived 服务器的一个标识,是发邮件时显示在邮件主题中的信息。

3.2 VRRPD 配置

vrrp_instance VI_1 { 

state MASTER 

interface eth0 

virtual_router_id 151 

priority 100 

advert_int 1 

track_interface { 

eth0 

eth1 

} 

authentication { 

auth_type PASS 

auth_pass qwaszx 

}

virtual_ipaddress { 

192.168.200.16 

192.168.200.17 dev eth1 

192.168.200.18 dev eth2 

} 

nopreempt 

preemtp_delay 300 

notify_master "/etc/keepalived/master.sh " 

notify_backup "/etc/keepalived/backup.sh" 

notify_fault "/etc/keepalived/fault.sh" 

}

参数说明
vrrp_instanceVRRP 实例开始的标识,后跟 VRRP 实例名称。
state用于指定 Keepalived 的角色,MASTER 表示此主机是主服务器,BACKUP 表示此主机是备用服务器。
interface用于指定 HA 监测网络的接口。
virtual_router_id是虚拟路由标识,这个标识是一个数字,同一个 vrrp 实例使用唯一的标识,即在同一个 vrrp_instance 下,MASTERBACKUP 必须是一致的。
priority用于定义节点优先级,数字越大表示节点的优先级就越高。在一个 vrrp_instance 下,MASTER的优先级必须大于 BACKUP 的优先级。
advert_int用于设定 MASTERBACKUP 主机之间同步检查的时间间隔,单位是秒。
track_interface用于设置一些额外的网络监控接口,其中任何一个网络接口出现故障,Keepalived 都会进入 FAULT 状态。
authentication用于设定节点间通信验证类型和密码,验证类型主要有 PASSAH 两种,在一个 vrrp_instance 下,MASTERBACKUP 必须使用相同的密码才能正常通信。
virtual_ipaddress用于设置虚拟 IP 地址(VIP),又叫做漂移 IP 地址。可以设置多个虚拟 IP 地址,每行一个。之所以称为漂移 IP 地址,是因为Keepalived 切换到 Master 状态时,这个 IP 地址会自动添加到系统中,而切换到 BACKUP 状态时,这些 IP 又会自动从系统中删除。Keepalived 通过 ip address add 命令的形式将 VIP 添加进系统中。要查看系统中添加的 VIP 地址,可以通过 ip add 命令实现。virtual_ipaddress 段中添加的 IP 形式可以多种多样,例如可以写成 192.168.16.189/24 dev eth1” 这样的形式,而 Keepalived 会使用IP命令 ip addr add 192.168.16.189/24 dev eth1IP 信息添加到系统中。因此,这里的配置规则和 IP 命令的使用规则是一致的。
nopreempt设置的是高可用集群中的不抢占功能。在一个 HA Cluster 中,如果主节点死机了,备用节点会进行接管,主节点再次正常启动后一般会自动接管服务。这种来回切换的操作,对于实时性和稳定性要求不高的业务系统来说,还是可以接受的,而对于稳定性和实时性要求很高的业务系统来说,不建议来回切换,毕竟服务的切换存在一定的风险和不稳定性,在这种情况下,就需要设置 nopreempt 这个选项了。设置 nopreempt 可以实现主节点故障恢复后不再切回到主节点,让服务一直在备用节点工作,直到备用节点出现故障才会进行切换。在使用不抢占时,只能在 state 状态为 BACKUP 的节点上设置,而且这个节点的优先级必须高于其他节点。
preemtp_delay用于设置切换的延时时间,单位是秒。有时候系统启动或重启之后网络需要经过一段时间才能正常工作,在这种情况下进行发生主备切换是没必要的,此选项就是用来设置这种情况发生的时间间隔。在此时间内发生的故障将不会进行切换,而如果超过 preemtp_delay指定的时间,并且网络状态异常,那么才开始进行主备切换。
notify_master指定当 Keepalived 进入 Master 状态时要执行的脚本,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。Keepalived 允许脚本传入参数,因此灵活性很强。
notify_backup指定当 Keepalived 进入 Backup 状态时要执行的脚本,同理,这个脚本可以是一个状态报警脚本,也可以是一个服务管理脚本。
notify_fault指定当 Keepalived 进入 Fault 状态时要执行的脚本,脚本功能与前两个类似。
notify_stop指定当 Keepalived 程序终止时需要执行的脚本。

3.3 LVS 配置

virtual_server 192.168.12.200 80 { 

    delay_loop 6 

    lb_algo rr 

    lb_kind DR 

    persistence_timeout 50 

    persistence_granularity <NETMASK> 

    protocol TCP 

    sorry_server <IPADDR> <PORT>
}
参数说明
virtual_server设置虚拟服务器的开始,后面跟虚拟 IP 地址和服务端口,IP 与端口之间用空格隔开。
delay_loop设置健康检查的时间间隔,单位是秒。
lb_algo设置负载调度算法,可用的调度算法有 rr、wrr、lc、wlc、lblc、sh、dh 等,常用的算法有 rrwlc
lb_kind设置 LVS 实现负载均衡的机制,有 NATTUN DR 三个模式可选。
persistence_timeout会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会一直分发到某个服务节点,直到超过这个会话的保持时间。需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制。
persistence_granularity此选项是配合 persistence_timeout 的,后面跟的值是子网掩码,表示持久连接的粒度。默认是 255.255.255.255,也就是一个单独的客户端 IP。如果将掩码修改为 255.255.255.0,那么客户端 IP 所在的整个网段的请求都会分配到同一个 real server上。
protocol指定转发协议类型,有 TCPUDP 两种可选。
ha_suspend节点状态从 MasterBackup 切换时,暂不启用 real server 节点的健康检查。
sorry_server相当于一个备用节点,在所有 real server 失效后,这个备用节点会启用。
real_server 192.168.12.132 80 { 

    weight 3 

    inhibit_on_failure 

    notify_up <STRING> | <QUOTED-STRING> 

    notify_down <STRING> | <QUOTED-STRING> 

}
参数说明
real_serverreal_server 段开始的标识,用来指定 real server 节点,后面跟的是 real server 的真实 IP 地址和端口,IP 与端口之间用空格隔开。
weight用来配置 real server 节点的权值。权值大小用数字表示,数字越大,权值越高。设置权值的大小可以为不同性能的服务器分配不同的负载,为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配了系统资源。
inhibit_on_failure表示在检测到 real server 节点失效后,把它的 weight 值设置为 0,而不是从 IPVS 中删除。
notify_up此选项与上面介绍过的 notify_maser 有相同的功能,后跟一个脚本,表示在检测到 real server 节点服务处于 UP 状态后执行的脚本。
notify_down表示在检测到 real server 节点服务处于 DOWN 状态后执行的脚本。

3.4 健康检测

健康检测段允许多种检查方式,常见的有 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK

3.4.1 TCP_CHECK检测方式

示例:

TCP_CHECK { 

    connect_port 80 

    connect_timeout 3 

    nb_get_retry 3 

    delay_before_retry 3 

} 
参数说明
connect_port健康检查的端口,如果无指定,默认是 real_server 指定的端口。
connect_timeout表示无响应超时时间,单位是秒,这里是3秒超时。
nb_get_retry表示重试次数,这里是3次。
delay_before_retry表示重试间隔,这里是间隔3秒。

3.4.2 HTTP_GET 和 SSL_GET 检测方式

示例:

HTTP_GET |SSL_GET {

    url { 

        path /index.html 

        digest e6c271eb5f017f280cf97ec2f51b02d3 

        status_code 200 

    }

    connect_port 80 

    bindto 192.168.12.80 

    connect_timeout 3 

    nb_get_retry 3 

    delay_before_retry 2 

}
参数说明
url用来指定 HTTP/SSL 检查的URL信息,可以指定多个 URL
path后跟详细的 URL 路径
digestSSL 检查后的摘要信息,这些摘要信息可以通过 genhash 命令工具获取。例如:genhash -s 192.168.12.80 -p 80 -u /index.html
status_code指定HTTP检查返回正常状态码的类型,一般是200。
bindto表示通过此地址来发送请求对服务器进行健康检查。

3.4.3 MISC_CHECK检测方式

示例:

MISC_CHECK 

{

    misc_path /usr/local/bin/script.sh 

    misc_timeout 5 

    ! misc_dynamic 

}

MISC 健康检查方式可以通过执行一个外部程序来判断 real server 节点的服务状态,使用非常灵活。以下是常用的几个选项的含义。

参数说明
misc_path用来指定一个外部程序或者一个脚本路径。
misc_timeout设定执行脚本的超时时间。
misc_dynamic表示是否启用动态调整 real server 节点权重,!misc_dynamic 表示不启用,相反则表示启用。在启用这功能后,Keepalivedhealthchecker 进程将通过退出状态码来动态调整 real server 节点的 weight 值,如果返回状态码为 0 ,表示健康检查正常,real server 节点权重保持不变;如果返回状态码为 1 ,表示健康检查失败,那么就将 real server 节点权重设置为 0 ;如果返回状态码为2~255 之间任意数值,表示健康检查正常,但 real server 节点的权重将被设置为返回状态码减 2 ,例如返回状态码为10real server 节点权重将被设置为 8(10-2)

3.5 总结

在默认情况下,Keepalived 在启动时会查找 /etc/Keepalived/Keepalived.conf 配置文件,如果配置文件放在其他路径下,通过 Keepalived -f 参数指定配置文件的路径即可。在配置 Keepalived.conf 时,需要特别注意配置文件的语法格式,因为 Keepalived 在启动时并不检测配置文件的正确性,即使没有配置文件,Keepalived 也照样能够启动,所以一定要保证配置文件正确。

4. 简单案例参考

链接地址:
keepalived + HAProxy + mysql
keepalived + nginx
keepalived + zabbix

 类似资料: