keepalived介绍及配置文件详解

版权声明:未经本人允许严禁转载 https://blog.csdn.net/WanJiaBaoBao/article/details/83622621

keepalived介绍

  • Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
  • Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

keepalived服务的三个重要功能

  • 管理LVS负载均衡软件
  • 实现LVS集群节点的健康检查中
  • 作为系统网络服务的高可用性(failover)

keepalived高可用故障切换转移原理

  • 在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

keepalived服务的工作原理

  • keepalived高可用是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
  • 在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP组播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的组播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

keepalived配置文件详解

! Configuration File for keepalived

global_defs {		##全局配置
   notification_email {		##定义报警收件人邮件
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]		##定义报警发件人邮箱
   smtp_server 192.168.200.1		##邮箱服务器的地址
   smtp_connect_timeout 30			##定义邮箱超时时间
   router_id LVS_DEVEL				##定义路由标识信息,同局域网内唯一
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {			##定义示例
    state MASTER				##指定keepalived节点的初始状态,可选值为master|backup
    interface eth0				##VRRP实例绑定的网卡接口,用户发送VRRP包
    virtual_router_id 51		##虚拟路由的ID,同一集群要一致
    priority 100				##定义优先级,按优先级来决定主备角色,优先级越大越优先
    nopreempt					##设置不抢占
    advert_int 1				##主备通讯时间间隔
    authentication {			##配置认证
        auth_type PASS			##认证方式,此处为密码
        auth_pass 1111			##同一集群中的keepalived配置里的此处必须一致,推荐使用8位随机数
    }
    virtual_ipaddress {			##配置要使用的VIP地址
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

virtual_server 192.168.200.100 443 {		##配置虚拟服务器
    delay_loop 6				##健康检查的时间间隔
    lb_algo rr					##LVS调度算法
    lb_kind NAT					##LVS模式,模式有三种NAT、TUN、DR
    persistence_timeout 50		##持久化超时时间,单位是秒
    protocol TCP				##第4层协议

    real_server 192.168.201.100 443 {			##定义真实处理请求服务器
        weight 1			##给服务器指定权重,默认为1
        SSL_GET {
            url {
              path /		##指定要检查的URL路径
              digest ff20ad2481f97b1754ef3e12ecd3a9cc		##摘要信息
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3		##连接的超时时间
            nb_get_retry 3			##get尝试次数
            delay_before_retry 3	##在尝试之前延迟多长时间
        }
    }
}

配置文件中配置段详解

  • vrrp_instance段配置

nopreempt :设置为不抢占。默认抢占,当高优先级的机器恢复后,会抢占低优先级的机器成为MASTER,而不抢占,则允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则“state”(初始化)状态必须为BACKUP。
preempt_delay :设置抢占延迟,单位是秒,范围0-1000,默认为0。发现低优先级的MASTER后多少秒开始抢占。

  • vrrp_script段配置

作用:添加一个周期性执行的脚本。脚本的退出状态码会被调用它所有的VRRP Instance记录。
注意:至少有一个VRRP实例调用它并且优先级不能为0,优先级范围是1-254。
vrrp_script < SCRIPT_NAME > {

}
选项说明:
script “/path/to/somewhere”——指定要执行的脚本的路径。
interval < INTEGER >——指定脚本执行的间隔
timeout < INTEGER>——指定在多少秒后,脚本被认为执行失败
weight < -254~254 >——调整优先级,默认为2
rise < INTEGER >——执行成功多少次才认为是成功
fall < INTEGER >——执行失败多少次才认为失败
user < USERNAME> [GROUPNAME]——运行脚本的用户和组
init_fail——假设脚本初始状态是失败状态
//weight说明:
1)如果脚本执行成功(退出状态码为0),weight大于0,则priority增加
2)如果脚本执行失败(退出状态码为非0),weight小于0,则priority减小
其他情况,priority不变。

  • real_server段配置

weight < INT >——给服务器指定权重,默认为1
inhibit_on_failure——当服务器健康检查失败时,将其weight设置为0,而不是重Virtual Server中移除
notify_up < STRING >——当服务器健康检查成功时,执行的脚本
notify_down < STRING >——当服务器健康检查失败时,执行的脚本
uthreshold < INT >——到这台服务器的最大连接数
lthreshold < INT >——到这台服务器的最小连接数

  • tcp_check段配置

connect_ip < IP ADDRESS >——连接的IP地址。默认是“real_server”的ip地址
connect_port < PORT>——连接端口。默认是"real_server"的端口
bindto < IP ADDRESS >——发起连接的接口地址
bind_port < PORT >——发起连接的源端口
connect_timeout < INT >——连接超时时间。默认是5s
fwmark < INTEGER >——使用fwmark对所有出去的检查数据包进行标记
warmup < INT >——指定一个随机延迟,最大为N秒。可防止网络阻塞,如果为0,则关闭该功能
retry < INIT >——重试次数。默认是1次
delay_before_retry < INT >——默认是1秒。在重试之前延迟多少秒

猜你喜欢

转载自blog.csdn.net/WanJiaBaoBao/article/details/83622621