阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Keepalived概述

152次阅读
没有评论

共计 4357 个字符,预计需要花费 11 分钟才能阅读完成。

keepalived
    Keepalived 是一个基于 VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来避免单点故障。一个 MySQL 或 lvs 或 nginx 服务会有 2 台服务器运行 Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟 IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。
    vrrp 协议完成地址流动;
    为 vip 地址所在的节点生成 ipvs 规则(在配置文件中预先定义);
    为 ipvs 集群的各 RS 做健康状态检测;
    基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;

HA Cluster 配置前提:
    (1) 各节点时间必须同步;
    ntp, chrony
    (2) 确保 iptables 及 selinux 不会成为阻碍;
    (3) 各节点之间可通过主机名互相通信(对 KA 并非必须);
        建议使用 /etc/hosts 文件实现;
    (4) 各节点之间的 root 用户可以基于密钥认证的 ssh 服务完成互相通信;(并非必须)

安装 keepalived
    CentOS 6.4 以后再 base 仓库中就已经提供了 keepalived 软件包,因此可直接使用 yum -y install keepalived 安装即可

程序环境:
    配置文件:/etc/keepalived/keepalived.conf
    主程序:/usr/sbin/keepalived

配置文件讲解
    keepalived 有三类配置区域, 注意不是三种配置文件,是一个配置文件里面三种不同类别的配置区域,全局配置(Global Configuration)、VRRPD 配置、LVS 配置

################### 全局配置 ###################

global_defs {
  notification_email {
        root@localhost    #指定 keepalived 在发生故障切换时需要发送的 Email 地址,可定义多个
  }
  notification_email_from keepalived@localhost    #指定故障切换时的发件人地址
  smtp_server 127.0.0.1                            #指定 smtp 服务器地址
  smtp_connect_timeout 30                          #指定 smtp 连接超时时间
  router_id LVS_DEVEL                            #运行 keepalived 机器的一个标识
  vrrp_mcast_group4 224.0.0.9                      #指定 ipv4 组播地址
}

 

###################VRRP 配置 ###################

vrrp_instance VI_1 {
    state MASTER                  #指定在当前 VRRP 示例的状态 MASTER|BACKUP,如果设置了 nopreempt 这个值不起作用,主备靠 priority 决定
    interface eth0                #设置实例绑定的网卡
    virtual_router_id 51              ##VRID 标记 , 路由 ID,可通过 #tcpdump vrrp 查看
    priority 100                  #优先级,高优先级竞选为 master
    advert_int 1                  #检查间隔,默认 1 秒
    nopreempt                    #非抢占(因为默认如果 master 挂的时候,backup 会顶上,当 master 再好的时候,会再切回去,这样就会造成两次
                            #断开,加上 nopreempt 的时候,及时 master 又好了,依旧不会切换,但是要注意两个 state 都要是 backup)
                                 
        preempt_delay 300          #抢占式模式下,节点上线后触发新选举操作的延迟时长;
    authentication {#设置认证         
        auth_type PASS            #认证方式                           
        auth_pass 1111            #认证密码
    }   
     
    virtual_ipaddress {#设置 vip
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }   
     
    track_interface {#配置要监控的接口,一旦出现故障则转为 FAULT 状态
        eth0
        eth1
        …
    }
    notify_master <STRING>|<QUOTED-STRING>    #当前节点成为主节点时触发的脚本;
    notify_backup <STRING>|<QUOTED-STRING>    #当前节点转为备节点时触发的脚本;
    notify_fault <STRING>|<QUOTED-STRING>      #当前节点转为“失败”状态时触发的脚本;
}

###################LVS 配置 ###################
virtual_server 192.168.200.100 443 {#VIP 端口
    delay_loop 6                              #健康检查时间间隔
    lb_algo rr                                #lvs 调度算法 lrr|wrr|lc|wlc|lblc|sh|dh
    lb_kind NAT                              #负载均衡转发规则 NAT|DR|TUN
    nat_mask 255.255.255.0                    #nat 掩码
    persistence_timeout 50                    #会话保持时间
    protocol TCP                              #使用的协议
     
    sorry_server <IPADDR> <PORT>              #备用服务器地址,所有 realserver 失效后启用
     
    real_server 192.168.201.100 443 {#RIP 地址,端口
        weight 1                            #权重,默认为 1,0 失效
        inhibit_on_failure                    ## 在服务器健康检查失效时,将其设为 0,而不是直接从 ipvs 中删除
        notify_up <STRING>|<QUOTED-STRING>    #在检测到 server up 后执行脚本
        notify_down <STRING>|<QUOTED-STRING>    #在检测到 server down 后执行脚本
         
        HTTP_GET|SSL_GET {
            url {
              path <URL_PATH>            #定义要监控的 URL
              status_code <INT>            #判断上述检测机制为健康状态的响应码
              digest <STRING>                    #判断上述检测机制为健康状态的响应的内容的校验码;
            }   
            connect_timeout <INTEGER>            #连接请求的超时时长
            nb_get_retry <INT>                    #重试次数
            delay_before_retry <INT>            #重试之前的延迟时长
            connect_ip <IP ADDRESS>            #向当前 RS 的哪个 IP 地址发起健康状态检测请求
            connect_port <PORT>                #向当前 RS 的哪个 PORT 发起健康状态检测请求
              bindto <IP ADDRESS>                #发出健康状态检测请求时使用的源地址
              bind_port <PORT>                    #发出健康状态检测请求时使用的源端口
        }   
         
        TCP_CHECK {
            connect_ip <IP ADDRESS>            #向当前 RS 的哪个 IP 地址发起健康状态检测请求
            connect_port <PORT>                #向当前 RS 的哪个 PORT 发起健康状态检测请求
            bindto <IP ADDRESS>                #发出健康状态检测请求时使用的源地址;
            bind_port <PORT>                    #发出健康状态检测请求时使用的源端口;
            connect_timeout <INTEGER>            #连接请求的超时时长;
        }
    }   
}

一些关于 Keepalived 相关教程集合

CentOS 7 下 Keepalived + HAProxy 搭建配置详解  http://www.linuxidc.com/Linux/2017-03/141593.htm

Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm

Nginx+Keepalived 实现站点高可用  http://www.linuxidc.com/Linux/2016-12/137883.htm

Nginx+Keepalived 实现站点高可用(负载均衡)  http://www.linuxidc.com/Linux/2016-12/138221.htm

构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm

CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm

Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm

Linux 下 Keepalived 服务安装文档  http://www.linuxidc.com/Linux/2017-03/141441.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142234.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计4357字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中