IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Gre 隧道与 Keepalived

    zheng-ji发表于 2015-12-05 10:29:00
    love 0

    这一篇文章是做了不少功课的。

    • 什么是 Gre 隧道
    • 什么是 Vrrp
    • KeepAlived 是什么
    • 用Keepalived 怎么玩
    • 附录

    什么是 Gre 隧道

    GRE 隧道是一种 IP-2-IP 的隧道,是通用路由封装协议,可以对某些网路层协议的数据报进行封装,使这些被封装的数据报能够在 IPv4/IPv6 网络中传输。Tunnel 是一个虚拟的点对点的连接,提供了一条通路使封装的数据报文能够在这个通路上传输,并且在一个Tunnel 的两端分别对数据报进行封装及解封装。Linux 上创建 GRE 隧道,需要 ip_gre 内核模块,它是Pv4 隧道的驱动程序。

    假设我有2台服务器,想做这两台之间创建 GRE 隧道

    • $server_A_ip 表示服务器A的IP
    • $server_B_ip 服务器B 的内网IP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    # 在 A 机器上执行
    # 创建 GRE 协议的 虚拟网络设备, 指定本地和对端 IP
    sudo ip link add gretap1 type gretap local $server_a_ip remote $server_b_ip 
    sudo ip link set dev gretap1 up  # 启动该设备
    sudo ip addr add dev gretap1 10.1.1.2/24 # 给该设备一个虚拟网络地址
    
    # 在 B 机器上执行
    # 创建 GRE 协议的 虚拟网络设备, 指定本地和对端 IP
    sudo ip link add gretap1 type gretap local $server_b_ip remote $server_a_ip 
    sudo ip link set dev gretap1 up  # 启动该设备
    sudo ip addr add dev gretap1 10.1.1.3/24 # 给该设备一个虚拟网络地址

    如果想停止或者删除上述网卡

    1
    2
    
    ip link set gretap1 down
    ip tunnel del gretap1

    至此点到点得隧道建立。

    什么是 vrrp 协议

    VRRP(Virtual Router Redundancy Protocol), 即虚拟路由冗余协议。是实现路由器高可用的容错协议。

    即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个 master 和多个 backup, 但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip),占有这个IP 的 master 实际负责 ARP 相应和转发 IP 数据包, 组中的其它路由器作为备份的角色处于待命状态。 master 会发组播消息,当 backup 在超时时间内收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

    Keepalived 是什么

    Keepalived 是一个基于 VRRP 协议来实现的服务高可用方案,可以利用其来避免IP单点故障。

    • 一个经典的案例

    一个WEB服务至少会有2台服务器运行 Keepalived,一台为主服务器,一台为备份服务器, 但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

    怎么玩 Keepalived

    • 安装
    1
    
    sudo apt-get install keepalived

    之前提到的,我们在 A, B 两台服务器建立起了 GRE 隧道了。 现在我们有一个虚拟的内网IP, 姑且叫做 $virtual_third_ip 接着在 A 服务器上

    • 配置

    编辑服务器 A, B 的 /etc/keepalived/keepalived.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    
    global_defs {
        router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface gretap1 # 绑在建立起来的隧道上
        virtual_router_id 51
        # 优先级别,越高的设备会被弄成主设备, A,B 服务器要有所差别,其他都一样
        priority 100          advert_int 1      # 广播时间间隔
        authentication {  #  验证相关
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            $virtual_third_ip dev eth0
        }
    }

    我们将服务器 A 作为 Master, 服务器 B 当做 Backup, 当服务器 A 需要停机的时候,$virtual_third_ip 就会漂移到服务器 B 上面。 我们两台机器都有相同配置的 Nginx 服务,就可以保障机器出现故障的时候,Nginx 服务丝毫不受影响。

    附录

    • 鸟哥的网络知识
    • GRE tuneling
    • VRRP


沪ICP备19023445号-2号
友情链接