Keepalived-高可用集群

目录

一、Keepalived 

1.1 Keepalived 原理

1.2 主要功能

1.3 应用场景

二、VRRP协议

2.1 角色

2.2 选举机制

2.3 相关技术

2.4 工作方式

三、Keepalived 配置

3.1 keepalived配置文件

3.2 实验环境

3.2.1 keepalived虚拟路由管理 

3.2.2 开启通信功能及独立日志

3.2.3 独立子配置文件 

3.2.4 邮件通知

3.2.5 双主模式

3.2.6 Keepalived+HAProxy


一、Keepalived 

1.1 Keepalived 原理

Keepalived是一个基于VRRP协议的高可用性的工具,它可以在多个服务器之间实现负载均衡和故障转移。Keepalived通过VRRP协议实现了多个服务器之间的虚拟路由器,这些虚拟路由器共享一个虚拟IP地址,客户端通过这个虚拟IP地址来访问服务。当其中一个服务器出现故障时,其他服务器会自动接管服务,保证服务的高可用性。

1.2 主要功能

高可用服务:Keepalived通过VRRP(虚拟路由冗余协议)实现高可用服务。它允许多个服务器共享一个虚拟IP地址,当主服务器出现故障时,备用服务器能够自动接管虚拟IP,从而保持服务的连续性。 Keepalived会定期检测服务器的状态,如果发现某台服务器出现故障,会将其从系统中剔除,并使用其他服务器代替其工作。当故障服务器恢复正常后,Keepalived会自动将其重新加入到服务器群中。

负载均衡:Keepalived还可以通过配置不同的调度算法,Keepalived可以将流量分配到多个后端服务器,以提高系统的整体性能和可靠性。

健康检查:Keepalived支持多种健康检查方式,包括ICMP请求、TCP端口检查、HTTP请求等。这些检查方式可以帮助Keepalived实时监测服务器的健康状态,确保服务的稳定性和可靠性。

1.3 应用场景

Keepalived通常与LVS、HAProxy等负载均衡器结合使用,以确保服务的高可用性和负载均衡。

二、VRRP协议

Keepalived使用虚拟路由器冗余协议(VRRP)协议来实现高可用性。VRRP通过竞选机制选举Master和Backup,主节点通过发送心跳包保持服务状态,当主节点失效,Backup接管服务;为网络服务提供了高可用性和可靠性保障。

2.1 角色

MASTER:拥有虚拟路由器IP并处理相关网络功能的路由器,如ARP请求、ICMP和数据转发等。BACKUP:不拥有虚拟路由器IP,但处于待命状态,接收MASTER的VRRP状态通告信息,不执行对外的网络功能。当MASTER失效时,BACKUP将接管其网络功能。

2.2 选举机制

VRRP协议通过配置每个路由器的虚拟路由器ID(VRID)和优先权值来进行分组和选举。具有相同VRID值的路由器属于同一个组,通过优先权值来确定MASTER。优先权值大的路由器成为MASTER,如果优先权值相同,则比较路由器的实际IP地址,IP值较大的路由器优先成为MASTER。             

2.3 相关技术

心跳机制:VRRP通过心跳机制来检测Master设备的状态。Master设备会周期性地发送VRRP通告报文,Backup设备则通过监听这些报文来判断Master是否仍然在线。VRRP通告报文的发送间隔(即心跳间隔)可以配置,默认为1秒。这个间隔决定了Backup设备检测Master设备故障的速度。

VRRP通告报文:VRRP协议只有一种报文——VRRP通告报文。这种报文用于在VRRP备份组中的设备之间传递状态信息,包括Master的优先级、虚拟IP地址等。VRRP通告报文的目的地址是组播地址224.0.0.18,TTL(生存时间)是255,协议号是112。这确保了报文只会在同一局域网内传播,并且不会被路由到外部网络。

周期性工作:VRRP协议的工作是周期性的,主要体现在Master设备定期发送VRRP通告报文上。这种周期性工作确保了Backup设备能够实时了解Master的状态,并在必要时进行故障转移。

2.4 工作方式

抢占模式:在这种模式下,如果Backup设备的优先级高于当前的Master设备,它将立即抢占Master地位,并发送VRRP通告报文和免费ARP报文来通知网络。

非抢占模式:在这种模式下,即使Backup设备的优先级高于当前的Master设备,它也不会主动抢占Master地位,除非当前的Master设备失效。这有助于避免不必要的Master切换,从而减少网络波动。

三、Keepalived 配置

安装keepalived软件包:
yum install keepalived -y 

3.1 keepalived配置文件

Keepalived的配置文件位于: /etc/keepalived/keepalived.conf;keepalived.conf 由global_defs、vrrp_instance、virtual_server等块组成; 文件中包含了全局定义、VRRP实例和虚拟服务器设置等内容。
### 全局配置:global_defs                                                                             
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc  ##定义了当发生状态变化
     failover@firewall.loc  ##(如MASTER到BACKUP的故障转移)时
     sysadmin@firewall.loc  ##keepalived将发送通知邮件的电子邮件地址列表
   }
   notification_email_from Alexandre.Cassen@firewall.loc  ##指定了发送通知邮件时使用的“发件人”地址
   smtp_server 192.168.200.1  ##用于发送通知邮件的SMTP服务器的IP地址
   smtp_connect_timeout 30  ##SMTP服务器连接的超时时间(以秒为单位)。如果在这段时间内无法建立连接,则邮件发送将失败
   router_id LVS_DEVEL  ##当前keepalived实例的路由器ID。这个ID在日志文件和通知邮件中用于标识keepalived实例(在VRRP环境中,每个VRRP路由器都应该有一个唯一的标识符)
   vrrp_skip_check_adv_addr  ##指示keepalived在接收VRRP广告时跳过对源IP地址的检查
   vrrp_strict
   vrrp_garp_interval 0  ##不发送GARP消息
   vrrp_gna_interval 0  ##不发送GNA消息
}

 ### VRRP配置:vrrp_instance

vrrp_instance VI_1 {      ##VI_1是实例名字,可以根据需要命名
    state MASTER          ##实例的初始状态为MASTER
    interface eth0        ##VRRP实例绑定的物理网络接口
    virtual_router_id 51  ##虚拟路由器的ID
    priority 100          ##优先级
    advert_int 1          ##VRRP广告消息的发送间隔
    authentication {      ##VRRP认证
        auth_type PASS    ##密码认证方式
        auth_pass 1111    ##密码
    }
    virtual_ipaddress {   ##与该VRRP实例关联的虚拟IP地址
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

### LVS段的配置以“virtual_server”作为开始标识,此段内容有两部分组成,分别是real_server段和健康检测段。

3.2 实验环境

操作系统:所有虚拟机均基于红帽企业版Linux 7(RHEL 7)。

KA1:IP地址为172.25.254.10/24,负责在Keepalived集群中担任主节点或备份节点,具体角色取决于其优先级和选举结果。

KA2:IP地址为172.25.254.20/24,同样负责在Keepalived集群中担任主节点或备份节点,其角色会根据与KA1的优先级和通信状态来确定。

server1:IP地址为172.25.254.110/24,作为后端真实服务器之一。

server2:IP地址为172.25.254.120/24,同样作为后端真实服务器,是realserver1的负载均衡对象。

3.2.1 keepalived虚拟路由管理 

全局参数 :配置组播的IP地址     

KA1上的配置;定义了VIP地址:172.25.254.100/24

 

KA2上的配置:

使用tcpdump命令来捕获并显示经过以太网接口eth0的网络数据包信息:

使用 tcpdump 命令来捕获并显示经过以太网接口eth0的网络数据包信息:

KA1正常使用时候:在KA2上抓包看到的:

先把KA1的停了:systemctl stop keepalived.service 这时在KA2上就可以看到VIP,意味着当主节点(KA1)出现故障时,VIP自动切换到备份节点(KA2),以确保服务的连续性。

3.2.2 开启通信功能及独立日志

 要想VIP能通信:在配置文件中,同时设定或者删除 vrrp_strict 和 vrrp_iptables 这两个全局参数。

【实现独立日志】 

 1)vim /etc/sysconfig/keepalived

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# ll /var/log/keepalived.log

-rw-------. 1 root root 5426 Aug 12 13:20 /var/log/keepalived.log

3.2.3 独立子配置文件 

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d  #创建子配置文件目录

[root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf  #编辑子配置文件

[root@ka1 ~]# systemctl restart keepalived.service

把keepalived.conf里面的要实现独立的配置先注释掉;然后写到子配置文件中;

成功!!

3.2.4 邮件通知

1)通过QQ邮箱测试;先在QQ邮箱里生成授权码;

2)配置文件:/etc/mail.rc。将生成的授权码复制在下图 smtp-auth-password 后;                                                     

3)修改配置文件:/etc/keepalived/keepalived.conf。自定义。

 

4)测试:                                                             

3.2.5 双主模式

1)KA1

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
    track_script {
        check_haproxy
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 200
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
}

 2)KA2

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 200
    priority 100
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }
    track_script {
        check_haproxy
    }
}

对于172.25.254.100/24而言,KA1是主备,KA2是从备;对于172.25.254.200/24恰恰相反:

这两台设备任何一个出现问题,会有从备接替服务。比如我们关掉KA1上的keepalived: 

3.2.6 Keepalived+HAProxy

1)在KA1和KA2两台主机上下载haproxy软件包;

yum install haproxy -y

systemctl start --enable haproxy

2)修改内核参数;vim /etc/sysctl.connf

net.ipv4.ip_nonlocal_bind=1

sysctl -p     ##使之生效                                                                     

3)修改haproxy主配置文件 vim /etc/haproxy/haproxy.cfg

listen webcluster
        bind 172.25.254.100:80
        mode http
        server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
        server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

4)判断脚本;

vim /etc/keepalived/test.sh

        #!/bin/bash

        /usr/bin/killall -0 haproxy

chmod +x /etc/keepalived/test.sh

5)修改keepalived主配置文件                                                                                       

把KA2上的服务停止后:

当我们停掉KA1/KA2任何一台机子上的haproxy:systemctl stop haproxy.service ;仍然能够curl。

                            

  • 28
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值