zoukankan      html  css  js  c++  java
  • keepalived之单播----k8sHA准备

    一、概述

    keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

    Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控及故障隔离。接下来介绍下Keepalived对服务器运行状态监控和检测的工作原理。 Keepalived工作在TCP/IP参考模型的第三、第四和第五层,也就是网络层、传输层和应用层。根据TCP/IP参考模型各层所能实现的功能,Keepalived运行机制如下:

    1. 在网络层,运行着四个重要的协议:互连网协议IP、互连网控制报文协议ICMP、地址转换协议ARP以及反向地址转换协议RARP。Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的每个节点发送一个ICMP的数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么就认为此节点发生了故障,Keepalived将报告此节点失效,并从服务器集群中剔除故障节点。
    2. 在传输层,提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据传输服务,IP地址和端口,代表一个TCP连接的一个连接端。要获得TCP服务,须在发送机的一个端口上和接收机的一个端口上建立连接,而Keepalived在传输层就是利用TCP协议的端口连接和扫描技术来判断集群节点是否正常的。Keepalived一旦在传输层探测到端口没有响应数据返回,就认为端口发生异常,然后强制将此端口对应的节点从服务器集群组中移除。
    3. 在应用层,可以运行FTP、TELNET、SMTP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式,例如用户可以通过编写程序来运行Keepalived,而Keepalived将根据用户的设定检测各种程序或服务是否允许正常,如果Keepalived的检测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除

    二、部署

    准备:

    修改内核参数:

    开启IP转发功能 :
    net.ipv4.ip_forward = 1

    开启允许绑定非本机的IP:

    net.ipv4.ip_nonlocal_bind = 1

    如果使用LVS的DR或者TUN模式结合Keepalived需要在后端真实服务器上特别设置两个arp相关的参数:

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

    #sysctl -p

    keepalived默认使用组播,进行ARP广播,但是在云服务器上是禁止进行ARP广播的。容易造成ARP风暴。所以云服务器上部署或物理机部署采用单播的方式实现。

    下载源码包进行编译:

    https://github.com/acassen/keepalived/releases

    下载相应的版本进行编译。

    ubuntu:

    master&backup

    # tar xf   keepalived-2.0.6.tar.gz

    # cd  keepalived-2.0.6

    #./configure && make && make install

    # cd keepalived-2.0.6/keepalived ; cp keepalived.service  /etc/systemd/system/

    #vim   /etc/systemd/system/keepalived.service

    修改如下配置:

    ExecStart=/usr/local/sbin/keepalived $KEEPALIVED_OPTIONS -f /etc/keepalived/keepalived.conf

    #mkdir /etc/keepalived

    !!采用单播,单播必须要配置authentication:

    authentication {
    auth_type PASS
    auth_pass KShcKlwmXCZcXlwlaWNqZmplanhsCg
    }

    auth_type有两种方式PASS、AH,auth_pass,如果使用PASS模式,Password string (up to 8 characters),密码长度8位及以上。

    官网说明:https://github.com/acassen/keepalived/blob/master/doc/keepalived.conf.SYNOPSIS

    # Note: authentication was removed from the VRRPv2 specification by RFC3768 in 2004.
    # Use of this option is non-compliant and can cause problems; avoid using if possible,
    # except when using unicast, when it can be helpful.
    authentication { # Authentication block
    auth_type PASS|AH # Simple password or IPSEC AH
    auth_pass <STRING> # Password string (up to 8 characters)
    }

    创建配置文件:

    master:

      ! Configuration File for keepalived
        global_defs {
            notification_email {
                root@localhost      #发送邮箱
            }
            notification_email_from keepalived@localhost    #邮箱地址
            smtp_server 127.0.0.1   #邮件服务器地址
            smtp_connect_timeout 30
            router_id km12-01         #主机名,每个节点不同即可
        }
    
    vrrp_instance VI_1 {
        state MASTER        #在另一个节点上为BACKUP
        interface eth0      #IP地址漂移到的网卡
        virtual_router_id 6 #多个节点必须相同
        priority 100        #优先级,备用节点的值必须低于主节点的值
        advert_int 1        #通告间隔1秒
        authentication {
            auth_type PASS      #预共享密钥认证
            auth_pass 571f97b2  #密钥
        }
        unicast_src_ip 10.42.13.20
        unicast_peer {
          10.42.43.17
          10.42.150.22
        }
        virtual_ipaddress {
            10.42.79.10/16    #VIP地址
        }
    }

    backup:

     ! Configuration File for keepalived
        global_defs {
            notification_email {
                root@localhost      #发送邮箱
            }
            notification_email_from keepalived@localhost    #邮箱地址
            smtp_server 127.0.0.1   #邮件服务器地址
            smtp_connect_timeout 30
            router_id km12-02         #主机名,每个节点不同即可
        }
    
    vrrp_instance VI_1 {
        state BACKUP        #在另一个节点上为MASTER
        interface eth0      #IP地址漂移到的网卡
        virtual_router_id 6 #多个节点必须相同
        priority 80        #优先级,备用节点的值必须低于主节点的值
        advert_int 1        #通告间隔1秒
        authentication {
            auth_type PASS      #预共享密钥认证
            auth_pass 571f97b2  #密钥
        }
        unicast_src_ip 10.42.43.17
        unicast_peer {
          10.42.150.22
          10.42.13.20
        }
        virtual_ipaddress {
           10.42.79.20/16    #漂移过来的IP地址
        }
    }

    注意配置文件中的,单播配置方式:

     unicast_src_ip 10.42.43.17  #本机地址
        unicast_peer {
          10.42.150.22 目标地址
          10.42.13.20
        }

    三、启动服务

    service  keepalived start

  • 相关阅读:
    DRF中的序列化器
    Django REST framework的分页
    DRF的解析器和渲染器
    DRF 权限 频率
    Django ContentType组件
    CORS跨域请求
    RESTful API介绍
    module.exports 和 exports(转)
    vue全选反选demo
    wangEditor大图片上传问题
  • 原文地址:https://www.cnblogs.com/cuishuai/p/9448751.html
Copyright © 2011-2022 走看看