keepalived搭建HA集群

一、集群服务简述

  • 有2个电脑及以上完成的任务

1、集群分类

1、LB集群

  • 负载均衡

2、HA集群(高可用)

  • 不间断的提供服务,主备模式

  • 出现问题,能自动快速切换到另一个节点

  • 为了解决单点故障问题

3、HPC集群(高性能集群)

  • 软硬件协同工作的系统

  • 航天工作,气象局等等

二、构建HA集群

1、部署HA集群的软件

  • keepalived,轻量级高可用部署软件,最初是为LVS设计的,随后加入VRRP功能

  • heartbeat

  • pacemaker

2、术语

1、vip

  • 虚拟ip,不是固定的,可以切换的

  • vip地址在a主机上,a主机坏了的话,vip地址转移到b主机上

2、地址漂移

  • vip从一台主机迁移到另一个主机上

3、心跳

  • 主备角色,监控对方的状态。以决定哪台主机提供服务

  • 判断是否存活等状态

4、脑裂

  • 网络,数据延迟等问题,在做心跳检查时,双方都检查失败,都认为对方是坏的,那么就都要去抢ip地址,强主角色

  • 解决方法

    • 仲裁,自己配置第三方程序,在发生这种情况的时候,决定哪一个主机关机(类似这种说法),决定哪一个主机充当master

三、实验

1、实验规划

  • 实现7*24小时不断为用户提供网站服务
# 主机1  httpd-61 192.168.200.61

# 主机2 httpd-62 192.168.200.62

# 都装上httpd,不同的网站页面

# 思路就是61能提供服务,突然61不提供服务,62提供服务

vip存放在61上面,61坏掉的话,飘移到62上面

vip的地址为192.168.200.201

2、部署HA高可用集群

img

  • 高可用,一个坏了,另一个可以接管,服务正常运行

1、2台机器安装keepalived

  • 哪几台机器要配置高可用,就要在几台机器上面安装即可
[root@httpd-61 /]# yum -y install keepalived

[root@httpd-62 /]# yum -y install keepalived

2、备份,删除一些不用的行

  • 备份keepalived配置文件
[root@httpd-61 keepalived]# cp keepalived.conf keepalived.conf.bak

# 36行之后的配置没有用,删除掉

[root@httpd-61 keepalived]# sed -i '36,$d' keepalived.conf
[root@httpd-61 keepalived]# wc -l keepalived.conf
35 keepalived.conf

3、配置参数

! 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  # 邮件服务器的ip
   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(vi_1是起的集群名字,可以修改的) { # 调用的是vrrp协议
    state MASTER  # 状态 master
    interface eth0  # 当前的机器的网卡名,vip地址要配置在哪个网卡上面
    virtual_router_id 51
    priority 100  # 优先级,必须比备用的高
    advert_int 1 
    authentication { # 心跳检查的时候
        auth_type PASS  # 通过密码类型来检查
        auth_pass 1111  # 密码可以修改,2台机器的类型和密码必须是相同的
    }       
    virtual_ipaddress { # 分配的vip地址(公网的ip)
        192.168.200.16 # 可以写域名,dns服务写一个A记录绑定即可
        192.168.200.17
        192.168.200.18
    }       
}

  • master修改完的配置
[root@httpd-61 keepalived]# cat keepalived.conf
! 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 web-group {
    state MASTER  # 角色
    interface ens33 # 网卡名
    virtual_router_id 51
    priority 150 # 优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.201 # vip地址
    }
}

# 重启keepalived服务,就会获取到vip地址
[root@httpd-61 keepalived]# systemctl restart keepalived.service 


# 就会发现vip地址配置在ens33上面了
# ip a显示所有的ip地址
[root@httpd-61 keepalived]# ip a | grep 192
    inet 192.168.200.61/24 brd 192.168.200.255 scope global noprefixroute ens33
    inet 192.168.200.201/32 scope global ens33


  • 备用配置
[root@httpd-62 keepalived]# cat keepalived.conf
! 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 web-group {
    state BACKUP  # 角色
    interface ens33  # 网卡名
    virtual_router_id 51
    priority 100  # 优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.201
    }
}


  • 优先级高的获取了vip地址

4、测试一下(vip地址漂移)

  • 停下master的keepalived服务

  • bakcup就会获取到vip地址

[root@httpd-61 keepalived]# systemctl stop keepalived.service 

[root@httpd-62 keepalived]# ip a | grep 192
    inet 192.168.200.62/24 brd 192.168.200.255 scope global noprefixroute ens33
    inet 192.168.200.201/32 scope global ens33


  • 开启原master的keepalived服务,发现vip又获取到了

  • 通过优先级来获取到的vip地址

[root@httpd-61 keepalived]# systemctl start keepalived.service 
[root@httpd-61 keepalived]# ip a |grep 192
    inet 192.168.200.61/24 brd 192.168.200.255 scope global noprefixroute ens33
    inet 192.168.200.201/32 scope global ens33

5、发现访问不了vip地址,解决措施(要先做这个)

  • 在新版本的中,要添加2个参数
  #vrrp_strict  # 默认禁止不能接收arp请求,所以访问不了vip地址,作用,接收arp协议
   vrrp_iptables  # master机器故障后,vip地址会释放,能够迁移到备用机器上 作用,允许vip漂移

# 就能访问vip地址

[root@httpd-61 keepalived]# ping 192.168.200.201
PING 192.168.200.201 (192.168.200.201) 56(84) bytes of data.
64 bytes from 192.168.200.201: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 192.168.200.201: icmp_seq=2 ttl=64 time=0.058 ms

6、访问网站服务

  • 在生成环境中,网页内容是一样的,这样才能保持高可用
[root@httpd-61 /]# curl 192.168.200.201
192.168.200.61
# 停止keepalived服务
[root@httpd-61 /]# systemctl stop keepalived.service 
[root@httpd-61 /]# curl 192.168.200.201
192.168.200.62
[root@httpd-61 /]# systemctl start keepalived.service 

# 重新启动后,vip地址获取到了
[root@httpd-61 /]# curl 192.168.200.201
192.168.200.61

7、认证流程和整个过程

  • 正常运行的状态

    • master机器持有vip,并定义发送心跳包

    • backup机器,监听master机器心跳包,不持有vip

  • 心跳包检查

    • 心跳包发送,master定期发送心跳包,包含认证类型和密码

    • 心跳包接收,验证其中的认证信息是否与自己的配置一样

  • 认证的过程

    • Backup机器在一定时间内未收到心跳包,认为Master机器不可用

    • 认证信息验证,backup在尝试接管vip之前,Backup机器验证自己的认证信息,确认一致

    • 认证都通接管vip,切换为master

  • 整个过程

    • 首先master发送自己的心跳包给backup,然后检测认证信息是否正确

    • 当master故障了,backup在一定时间内没有收到心跳包,就会自己校验自己的认证信息是否正确,从而获取到了vip地址,成为了master,然后发送心跳包给其他backup

    • 当之前的master恢复后,如果优先级大于backup的话,会重新获取到vip地址,成为master,之前的master会切换为backup

    • 发送给其他的backup

  • VRRP的工作过程是这样的:

    • 虚拟路由器中的路由器根据优先级选举出Master,Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通告给与它连接的设备。

    • Master路由器周期性发送VRRP报文,以公布自己的配置信息(优先级等)和工作状态

    • 如果Master故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master

    • 虚拟路由器状态切换时,Master路由器由一台设备切换会另外一台设备,新的Master路由器只是简单的发送一个携带虚拟MAC地址和虚拟IP的免费ARP报文,这样就可以更新其他设备中缓存的ARP信息

    • Backup路由器的优先级高于Master时,由Backup的工作方式(抢占式或者非抢占式)决定是否重新选举Master。

8、为什么访问vip地址会显示网页了

# vip地址一般是公网ip地址

# 访问vip地址到达了master机器上面后

# httpd就要处理这个请求了,因为httpd监听80或者443端口

# 但是httpd不知道这个请求是通过vip地址到达的master上面的

# vip地址绑定在master网络接口上面在

# master机器的ip用于内部通信

四、keepalived理论知识

1、核心组件

  • watchdog 用于进程监控

  • checkers 对rs进行监看检查

  • vrrp vip消息通告,通过这个协议处理负载均衡集群的故障切换

img

五、问题

  • master上面的keepalived服务是开启的,但是网站服务停止了,backup上面都是正常的运行的,那么vip是否会漂移呢?
# 不会进行漂移,keepalvied服务不会检查对方的80端口是否存活的,只有keepalived服务停止了,心跳检查,vip地址才会漂移

# 那么解决方法就是
# keepalived健康检查,监测本机的网站服务是否正常,或者其他的服务

# 监测到本机的网址服务停掉了,那么就把master上面的keepalvied停掉,vip地址就会转换了


img

posted @ 2025-06-10 22:37  乔的港口  阅读(19)  评论(0)    收藏  举报