Keepalive基础和配置


一、vrrp

1.1 vrrp相关术语

虚拟路由器:Virtual Router

  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIP:Virtual IP
  • VMAC:Virutal MAC (00-00-5e-00-01-VRID)

物理路由器:

  • master:主设备
  • backup:备用设备
  • priority:优先级

虚拟路由器的主备不是通过master和backup决定的,而是通过priority优先级决定的

1.2 VRRP相关技术

通告:心跳,优先级等;周期性

通告:是不停的向外发送信息,宣告自己的主权,让其他路由器不要妄想抢班夺权

工作方式:抢占式,非抢占式,延迟抢占模式

抢占式:
主服务器宕机,过了一段时间修好了,再把主权抢过来
非抢占式:
主服务器宕机,过了一段时间修好了,原来的主就作为备了

安全认证:

  • 无认证
  • 简单字符认证:预共享密钥
  • MD5

工作模式:

  • 主/备:单虚拟路径器
  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)

主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
环境:
有两台服务器
虚拟出两台虚拟路由器
第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1
第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2
优点:
提高了资源利用率:
这样主,备服务器同时干活,可以同时运行两个项目
同样有备份功能:
如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2
缺点:
虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险

二、Keepalive

2.1 keepalived介绍

功能:

  • 基于vrrp协议完成地址流动
  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • 为ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

2.2 Keepalived 架构

用户空间核心组件:

  1. vrrp stack:VIP消息通告

  2. checkers:监测real server(简单来说 就是监控后端真实服务器的服务)

  3. system call:实现 vrrp 协议状态转换时调用脚本的功能

  4. SMTP:邮件组件(报警邮件)

  5. IPVS wrapper:生成IPVS规则(直接生成ipvsadm)

  6. Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

  7. WatchDog:监控进程(整个架构是否有问题)

控制组件:
提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:
针对网络目的而优化的自己的线程抽象

内存管理组件:
为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

2.3 Keepalived 相关文件

  • 软件包名:keepalived
  • 主程序文件:/usr/sbin/keepalived
  • 主配置文件:/etc/keepalived/keepalived.conf
  • 配置文件示例:/usr/share/doc/keepalived/
  • Unit File:/lib/systemd/system/keepalived.service
  • Unit File的环境配置文件:
  • /etc/sysconfig/keepalived CentOS

/etc/keepalived/keepalived.conf 配置组成:

GLOBAL CONFIGURATION
Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,多播地址等

VRRP CONFIGURATION
VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息

LVS CONFIGURATION(lvs调度服务器的规则设置)
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS

三、实际操作

3.1 抢占模式

环境

主keepalived:192.168.47.100
备keepalived:192.168.47.102
web1:192.168.47.103
web2:192.168.47.104
vip:192.168.47.11

主/备keepalived

关闭防火墙

[root@localhost ~]#systemctl stop firewalld.service 
[root@localhost ~]#setenforce 0

安装服务

[root@localhost ~]#yum install ipvsadm keepalived -y
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

备份配置文件

[root@localhost keepalived]# cd /etc/keepalived/
[root@localhost keepalived]#cp keepalived.conf keepalived.conf.bak

修改Keepalive配置文件

[root@localhost keepalived]#vim keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id R1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.47.11
    }
}
virtual_server 192.168.47.11 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    #为显示效果设为0
    persistence_timeout 0
    protocol TCP

    real_server 192.168.47.103 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.47.104 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

备份服务器与主服务器配置大致相同,只需要修改state为BACKUP,priority优先级设为一百以下,最好设为90或以下,router_id改为R2。

节点配置

节点服务器一
安装httpd服务

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

编写站点文件并启动服务

[root@localhost ~]#vim /var/www/html/index/html
this is 103
[root@localhost ~]#systemctl start httpd

添加lo:0,让他承载192.168.47.11网址

[root@localhost html]#ifconfig lo:0 192.168.47.11 netmask 255.255.255.255

添加一条路由

[root@localhost network-scripts]#route add -host 192.168.47.11 dev lo:0

节点服务器二只需在一的基础上将站点文件该为this is 104,就可以看到效果。

客户机访问

在这里插入图片描述
在这里插入图片描述

3.2 非抢占模式

修改配置文件,两个服务器都要把state改为BACKUP,并在其中添加nopreempt。

[root@localhost keepalived]#vim keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    nopreempt
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.47.11
    }
}

3.2 延迟抢占模式

preempt_delay后跟秒数,默认是300秒

[root@localhost keepalived]#vim keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    preempt_delay 30
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.47.11
    }
}

3.4 单播多播地址

修改多播

在global_defs模块中添加vrrp_mcast_group4

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_R1
   vrrp_mcast_group4 234.6.6.6
   #添加此行
}

修改单播

添加unicast_src_ip

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 192.168.47.100
    virtual_ipaddress {
        192.168.47.11
    }
}

版权声明:本文为weixin_51013503原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。