keepalived实现高可用

本文详细介绍了如何使用Keepalived实现高可用性和负载均衡,包括VRRP协议、VIP漂移、脑裂现象及其解决方法。通过配置两个中间件服务器,设置虚拟路由器ID和优先级,演示了在master故障时backup接管VIP的过程。
摘要由CSDN通过智能技术生成

keepalived实现高可用

high availability——为了防止单点故障,要有备份,有替补

可使用软件——keepalived(开源免费)、heartbeat、HAproxy

keepalived的使用

工作原理

Keepalived for Linux

​ Keepalived是一个用c编写的路由软件。这个项目的主要目标是为Linux系统和基于Linux的基础设施提供简单而健壮的负载平衡和高可用性设施。负载平衡框架依赖于众所周知的和广泛使用的Linux虚拟服务器(IPVS)内核模块提供第4层负载平衡。Keepalived实现了一组检查器,根据负载平衡服务器池的健康状况,动态、自适应地维护和管理负载平衡服务器池。另一方面,高可用性是通过以下方式实现的虚拟路由器冗余协议协议。VRRP是路由器故障转移的基础。此外,Keepalived实现了一组到VRRP有限状态机的挂钩,提供了低级和高速的协议交互。为了提供最快的网络故障检测,Keepalived实现了BFD协议。VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以单独使用,也可以一起使用,以提供弹性基础设施

有两个功能:

​ 1、负载均衡——》IPVS内核模块——》lvs

​ 2、高可用

​ VRRP协议(虚拟路由冗余协议)——》网络里的技术

​ 实现了高可用性,是路由器故障转移的基础
在这里插入图片描述
vrrp——网络层协议

虚拟IP地址——》漂移

​ vip: virtual ip 虚拟ip地址,这个地址是对外提供服务的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NPStBF81-1661007597934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220818222048582.png)]
VRID——virtual router id 虚拟路由器标识——》你是哪个虚拟路由器组的

脑裂:出现了2个或者多个vip

Priority——优先级

选举——是否vrid相同,优先级越高越有可能

Adver Interval——宣告信息的间隔时间 默认1s

​ vrrp协议报文使用固定的组播地址224.0.0.18(D类地址)进行发送

没有安装keepalived软件的机器是读不懂的,不参与选举

搭建

  • 准备工作:

    两台中间件服务器

    ​ master——mysql-slave2 192.168.175.131

    ​ backup——backup-mysqlrouter 192.168.175.137

    ​ 安装:mysqlrouter、keepalived

    ​ yum install keepalived -y

    两台数据库服务器

    ​ master——mysql 192.168.175.138

    ​ backup——mysql-salve1 193.168.175.130

  • 配置keepalived——vim /etc/keepalived/keepalived.conf
    master中间件配置:

    ! Configuration File for keepalived
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
    #   vrrp_strict 需要注释:因为会在iptables里添加一条规则,阻止网络通信,会导致脑裂
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    #定义一个vrrp协议的实例,名字叫VI_1,第一个vrrp实例
    vrrp_instance VI_1 {
        state MASTER	#做master角色
        interface ens33	#指定监听网络的接口,其实就是vip绑定到哪个网络接口上
        virtual_router_id 51 #虚拟路由器id——类比帮派 51是帮派的编号 1~255之间
        priority 100  #优先级	
        advert_int 1	#vip向外宣告消息的时间间隔	1s
        authentication {
            auth_type PASS	#密码认证
            auth_pass 1111	#具体密码
        }
        virtual_ipaddress { #VIP 虚拟ip地址
            192.168.175.188
        }
    }
    

backup中间件配置:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.175.188
    }
}
  • 分别重启两台中间件的keepalived服务

    service keepalived restart
    
  • 查看vip状态——此时master中间件占有vip

    • master中间件

      [root@mysql-slave2 keepalived]# ip add
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
          link/ether 00:0c:29:0b:4e:b7 brd ff:ff:ff:ff:ff:ff
          inet 192.168.175.131/24 brd 192.168.175.255 scope global noprefixroute dynamic ens33
             valid_lft 1596sec preferred_lft 1596sec
          inet 192.168.175.188/32 scope global ens33
             valid_lft forever preferred_lft forever
          inet6 fe80::4ab1:7a94:7274:c1ae/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      
    • backup中间件

      [root@backup-mysqlrouter keepalived]# ip add
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
          link/ether 00:0c:29:b3:32:01 brd ff:ff:ff:ff:ff:ff
          inet 192.168.175.137/24 brd 192.168.175.255 scope global noprefixroute ens33
             valid_lft forever preferred_lft forever
          inet6 fe80::fa07:4df1:e933:ca99/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      
  • 模拟master中间件服务器宕机——关闭keepalived服务

    [root@mysql-slave2 keepalived]# service keepalived stop
    Redirecting to /bin/systemctl stop keepalived.service
    
  • 再次查看vip状态——此时backup中间件占有vip

    • backup中间件

      [root@backup-mysqlrouter keepalived]# ip add
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
          inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
          inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
      2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
          link/ether 00:0c:29:b3:32:01 brd ff:ff:ff:ff:ff:ff
          inet 192.168.175.137/24 brd 192.168.175.255 scope global noprefixroute ens33
             valid_lft forever preferred_lft forever
          inet 192.168.175.188/32 scope global ens33
             valid_lft forever preferred_lft forever
          inet6 fe80::fa07:4df1:e933:ca99/64 scope link noprefixroute 
             valid_lft forever preferred_lft forever
      
  • 同理当重启master中间件的keepalived服务时,vip将会被master中间件从backup中间件中夺回,因为在配置keepalived配置文件时,在同一虚拟路由器id下master的优先级比backup的优先级高。

脑裂现象
定义:

​ 出现了2个或者多个vip

出现的原因:

​ 1、两台中间件在keepalived的配置文件中虚拟路由器id(vrid)不一样,且虚拟ip地址一致

​ 2、网络通信有问题:中间件之间有防火墙阻止了网络之间的选举过程,vrrp报文的通信

​ 3、两台中间件在keepalived的配置文件中认证密码不一样

扩展
脑裂是否有危害?

​ 没有影响,可以正常访问业务,还可以起到负载均衡的作用

​ 正常——》发生脑裂,以及脑裂过程中是没有影响的

​ 脑裂——》恢复正常,这个过程mysql这种有状态的服务肯会导致数据丢失,连接中断

单vip的情况,另外一台backup服务器是闲置的,如何利用起来?

​ 1、故意脑裂

​ 2、双VIP

双VIP:跟MySQL里的主主复制非常相似

​ 2个实例:

​ VI_1:

​ master:192.168.175.131 vip:192.168.175.188

​ backup:192.168.175.137

​ VI_2:

​ backup:192.168.175.131

​ master:192.168.175.137 vip:192.168.0.189

# master中间件——192.168.175.131
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.175.188
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.175.189
    }
}

# backup中间件——192.168.175.137
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.175.188
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.175.189
    }
}

分别重启两台中间件的keepalived服务

[root@mysql-slave2 keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:0b:4e:b7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.131/24 brd 192.168.175.255 scope global noprefixroute dynamic ens33
       valid_lft 1627sec preferred_lft 1627sec
    inet 192.168.175.188/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::4ab1:7a94:7274:c1ae/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@backup-mysqlrouter keepalived]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b3:32:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.175.137/24 brd 192.168.175.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.175.189/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::fa07:4df1:e933:ca99/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值