Keepalived基础

keepalived 简介

keepalived是vrrp协议的软件实现,原生设计目的是为了高可用ipvs服务。
vrrp:静态网关虚拟协议,在两个路由器之间虚拟出一个IP地址,当一个路由器损坏时,自动将虚拟出的IP地址移动到另外一台路由器上

Keepalived 组件

Keepalived基础_第1张图片
用户空间核心组件
vrrp stack 消息通告组件,用来广播虚拟的ip地址在自己这里
checkers 监测组件,监测后端服务器的存活状态
system call 标记realserver权重
SMTP 邮件组件,vip发生迁移时可以通过邮件进行通知。
ipvs wrapper 生成ipvs规则,在内核级别生成。
Netlink Reflector 网络接口
WatchDog 监控进程,并记录日志。

keepalived 相关术语

虚拟路由器: Virtual Router
虚拟路由器标识: VRID(0-255),用于唯一标识虚拟路由器
物理路由器:物理路由器分为master(主设备),backup(备用设备),其中主备之间还存在一个priority(优先级),当两台物理路由器设备都为备时,就看谁的优先级高,优先级高的则成为主
虚拟IP: VIP (Virtual IP)
虚拟MAC地址: VMC (Virtual MAC)
通告: 用来周期性的通告自己的优先级以及自己的心跳信息,证明自己存活
工作方式: 抢占式和非抢占式
当master设备发生故障时,vip将漂移值backup上,master修复后是否将vip进行夺回,如果夺回则为抢占式,不夺回则为非抢占式。
工作模式:有主备和主主模式
主备: 为单虚拟路由器,两台服务器只有一台工作,另一台只有当主的故障时才启用
主主: 两台服务器互为主备,即一台为主备,另一台为备主,让两台服务器并行运行。

keepalived 安装

使用yum安装

[root@localhost ~]# yum install keepalived -y

keepalived安装的相关文件

[root@localhost ~]# rpm -ql keepalived
/etc/keepalived/keepalived.conf     #keepalived主配置文件
/etc/sysconfig/keepalived               #unit file环境配置文件
/usr/lib/systemd/system/keepalived.service      #unit file
/usr/sbin/keepalived        #主程序文件

keepalived配置文件详解

   notification_email {             #邮件通知机制,当keepalived发生故障时,进行发邮件通知
    [email protected]             #可以将其修改也可以将其改为本机
   }
   notification_email_from [email protected]  #邮件从哪里发出去
   smtp_server 127.0.0.1            #本机的smtp服务器地址
   smtp_connect_timeout 30          #smtp的连接超时时长
   router_id n1.mylinuxops.com      #虚拟路由的表示符一般写本机,确保每个节点都不相同
   vrrp_skip_check_adv_addr         #跳过检查数据报文,默认会检查。
   vrrp_strict                      #严格遵循vrrp协议,没有vip,单播地址,ipv6地址将无法启动
   vrrp_iptables                    #不生成iptables规则
   vrrp_mcast_group4 224.0.0.18     #组播,默认情况下向224.0.0.18发送组播消息
   vrrp_garp_interval 0             #arp报文发送延迟
   vrrp_gna_interval 0              #消息发送延迟

}

vrrp_instance VI_1 {        #配置实例的名称
    state BACKUP            #服务器角色
    nopreempt               #关闭VIP的抢占,state都为BACKUP时生效。
    interface ens33         #默认的接口
    virtual_router_id 27    #虚拟路由ID
    priority 80             #优先级
    advert_int 2            #探测时间
    authentication {        #认证方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {     #虚拟的IP地址,将地址绑定在哪个网卡上,子接口是哪个
        172.20.27.100 dev ens33 label ens33:0
    }
}