Keepalived 安装和配置详解

文章目录

  • Keepalived的安装和配置详解
    • 1. 简介
    • 2. 安装
    • 3. 配置⽂件
      • 3.1 全局配置
      • 3.2 VRRPD 配置
      • 3.3 LVS 配置
      • 3.4 健康检测
        • 3.4.1 TCP_CHECK检测方式
        • 3.4.2 HTTP_GET 和 SSL_GET 检测方式
        • 3.4.3 MISC_CHECK检测方式
      • 3.5 总结
    • 4. 简单案例参考

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 { 

        [email protected] 

        [email protected] 

    }

    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_instance VRRP 实例开始的标识,后跟 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_server real_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 路径
digest SSL 检查后的摘要信息,这些摘要信息可以通过 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

你可能感兴趣的:(Linux,keepalived)