• keepalived高可用集群应用实践


    Keepalived高可用集群应用实践

    未分类


    • 为什么VIP要绑定到eth0而不能绑定到eth1上? 
      如果绑定到eth1上,会接收不到用户发送过来的数据。eth1是为了发送广播包的,那么数据就只会从主上往备上发
     

    一,keepalived

     

    1.1介绍

    keepalived是专门为Lvs负载均衡软件设计的(用在LVS上比用在其他软件上效果要好),用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Harpoxy,MySQL等)的高可用解决方案软件

     

    1.2三大功能(都是为LVS服务。对其他软件只能实现高可用功能)

    (1)管理LVS负载均衡软件 
    (2)实现对LVS集群节点健康检查功能(LVS本身不对后方节点进行检测) 
    (3)作为系统网络服务的高可用功能

     

    1.3keepalived高可用故障切换转移原理

    原理可分为两部分 
    (1)VRRP协议:虚拟路由冗余协议 
    (2)由VRRP协议实现的故障转移

     

    VRRP协议

    58.png-109kB
    假设master每隔两秒钟发一个广播包,如果其他备节点接受到广播包,备就认为master是好的,所有的备就不做任何事情。如果备在固定时间内检测不到广播包,那么就认为主坏了,这时,所有的备就开始抢VIP(所有的备都发送广播包,只不过发的时间有先有后),先发广播包的备发送广播包到其他备,其它备收到数据,就认为主又好了。或者都发送数据包,然后按照优先级来判定谁来拿这个VIP。 
    59.png-35.8kB

    keepalived就延用了这种机制 
    60.png-87.1kB

    • 脑裂现象(出现两个VIP) 
      如果不是主坏了,而是其它原因(网络原因,网线原因,交换机原因),那么备也会给自己增加VIP,这样用户发送的数据(通过ARP协议,获取MAC地址进行数据的发送,那么就会获取到两个MAC地址),就找不到目标。这就是keepalived的脑裂现象。
     

    keepalived在网络中是怎么连接的

    61.png-52.6kB

    • MySQL只有内网网卡
    • 心跳连接 
      keepalived高可用对之间是用真的线进行连接的,这种用线直连的方式就叫做心跳连接。发送的广播包,不叫广播包,而是叫心跳包
    • 冗余线 
      主备之间用真的线进行连接,那么如果线出了问题,那么就会出现脑裂现象,那么一般还要再在主备上再加一块网卡,然后再用线进行连接,这条线就叫做冗余线。
    • bond 
      把两块网卡进行绑定,这是对网卡进行高可用。linux也可以针对网卡做高可用。绑在一起就叫bond0,如果一块坏了,还可以通过另一块进行数据传输
     

    二.搭建

     

    2.1准备

    4台虚拟机: 
    1台做反向代理负载均衡 
    1台做备份 
    2台做web节点

     

    2.2增加网卡

    (1)给主和备新增加一块网卡,不能和另一块网卡同一网段,但是这两个网卡得是同一网段(设置成V1模式就不在同一网段)。目的是为了发送广播包 
    (2)在主和备上给新增的网卡配置网卡文件 
    cd /etc/sysconfig/network-scripts 
    cp ifcfg-eth0 ifcfg-eth1 
    62.png-37.3kB
    启动网卡 
    (3)给主备安装keepalived 
    yum -y install keepalived 
    (4)启动keepalived服务

    装完keepalived,它的启动脚本就在/etc/init.d下,配置文件在/etc/keepalived/keepalived.conf

    63.png-272.7kB
    64.png-105.2kB

     

    2.3修改配置文件

    虽然keepalived配置文件内容有很多,但是只能用它的高可用功能(前20行左右) 
    初始配置文件 
    66.png-226.3kB
    67.png-269.4kB

    • VIP要注意 :VIP是绑在eth0上的,因为用户的数据是从eth0上过来的

    (1)对主的配置文件进行修改 
    vim /etc/keepalived/keepalived.conf 
    69.png-163.8kB
    (2)对从的配置文件进行修改 
    70.png-157.3kB
    (3)在主上开启keepalived 
    /etc/init.d/keepalived start 
    ifconfig 
    71.png-386.1kB
    (4) 在从上开启keepalived,用ifconfig查看会发现没有 
    (没有说明正确,因为主还活着,所以从上不会出现)

    • 接下来在主上关闭keepalived服务,从上才会出现,如果主再开启那么VIP就又会从备上跳到主上

    下来启动主和节点的nginx服务,并且在浏览器上进行测试(如果主死了,访问是不受影响的)。 
    这就是VIP漂移(高可用)

     

    问题

    用户访问时通过VIP的,那么,如果主不坏,那么备份的永远在备份,什么事情也不做,这在工作中是一种浪费。

    可以通过双实例高可用来解决。(一个keepalived对起双实例,可以架设双网站) 
    72.png-16.4kB

    搭建双实例高可用

    主的配置文件 
    73.png-194.1kB
    74.png-164.6kB

    在主上启动keepalived服务,会发现有两个VIP 
    75.png-417.5kB

    修改第二个实例主的配置文件 
    76.png-165.3kB
    77.png-79kB

    之后启动keepalived服务,会发现eth0:2,会回到主上

     

     

    如果在master上打开防火墙,那么备的VIP会漂移过来。如果关闭防火墙,又会切回去

    79.png-34.1kB

     

    如果在工作中必须开防火墙那么怎么办?

    • tcpdump -n -i eth1 vrrp 
      80.png-127.4kB
      81.png-687.7kB

    因此防火墙必须开启了VRRP协议的组播地址,数据包才能发送过来,否则,它是过不来的

    • 打开防火墙其实也能发现网卡能收到数据包,只不过是防火墙给拒绝了。因为网卡在第一层,而防火墙在第四层。
    • VRRP协议的组播地址要么是224.0.0.19,要么是224.0.0.18,所以一般要把224.0.0.0的网段打开
    • 单开一块网卡出来是为了防止keepalived广播发送到多个keepalived对
    • 网卡问题不会造成keepalived对之间的切换(就是VIP的切换) 

      如:关闭eth1的网卡,VIP会发生漂移(但是如果关闭eth0,那么VIP不会发生漂移。前提是VIP是绑定在eth0上的)

    • keepalived具有网卡的自动检测功能,如果自身的物理网卡发生问题,它不会去抢VIP
    • 导致裂脑的主要原因: 
      (1)网线出现问题() 
      ------------如果网线出现问题,那么master会发送数据包,但是slave接受不到数据包,所以它就会去抢VIP,而master认为自己没有出现问题,所以就不会去掉自己的VIP,这样两端都会有VIP,导致裂脑 
      (2)防火墙的问题
     

    如何在一个网段防止keepalived对之间的冲突

    如果只有一个网段,也能解决它冲突的问题:每个keepalived对用不同的组播IP地址。

     

    怎么防备由于网线原因造成的裂脑问题?

    (1)建立多根冗余线

     

    如果master上的nginx服务掉线,那么VIP是不会发生漂移的,这种情况怎么解决?

    • keepalived解决的是物理服务器的问题,(如:服务器宕机,网卡出现问题)。但是keepalived解决不了服务的问题(如:nginx服务宕了)

    因此需要在master上写一个脚本,用来监听nginx服务,如果nginx服务宕了,那么也把keepalived服务给关闭,这样master上的VIP就会漂移到slave上 
    82.png-142.8kB

     

    当备上出现VIP是怎么最大可能防止裂脑问题

    当主上出现VIP时,肯定是master发生了问题。 
    (1)ping msater上的eth1网卡,如果能通说明网线没有问题,ping主的eth0网卡,如果也能ping通(物理服务器没有问题),那么可能是master上的keepalived服务掉线(也可能是nginx服务掉线,因为在主上有当nginx掉线,那么会去关闭keepalived服务的脚本,),这种情况应该不会发生裂脑。 
    (2)如果ping不通主机上的eth1,然后ping主上的eth0,如果能ping通(物理服务器没有问题),然后用tenet去扫一下80端口(nginx负载均衡监听的80),如果存在,说明nginx服务没有掉线。当出现这种情况时,最大的可能是出现了裂脑。 
    22.png-181.2kB

  • 相关阅读:
    基元线程同步构造之用户模式易变构造volatile
    C# 基元线程同步构造
    idea 的Low Memory问题
    python工具——xmind
    VSCODE 远程开发树莓派
    firefox临时文件位置及修改方法
    Veeam Backup & Replication 9.5 备份方式详解
    Windows下登录凭证密码获取工具
    VMProtect虚拟机保护分析入门
    Applescrip
  • 原文地址:https://www.cnblogs.com/zhangtao11/p/9996103.html
Copyright © 2020-2023  润新知