• 高可用集群 keepalived


    一、高可用集群:

    1、简介:

    高可用集群(High Availability Cluster,简称 HA Cluster),是一组相互连接的计算机或服务器,它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。

    MTTF:mean time to failure 平均无故障时间,度量系统的可靠性;

    MTTR:mean time to restoration 平均故障维修时间,度量系统的可维护性;HA=MTTF / (MTTF+MTTR)*100%

    2、自动切换 (Failover):

    自动切换是指当主要系统发生故障或不可用时,自动切换到备用或冗余系统的过程,帮助在面对意外中断时保持运营。

    3、自动侦测:

    (1) 概念:

    自动侦测是指在计算机集群或分布式系统中使用的一种机制,允许系统自动检测和识别集群中的节点或成员。

    (2) 心跳线:

    自动侦测的 "心跳线"(Heartbeat Line)是指在集群中使用的一种监控和检测机制。它涉及到周期性发送心跳消息或信号,以表示设备、节点或进程的活跃状态和可用性。

    接收方节点会定期监测心跳信息,并检查发送方节点是否活动。如果接收方节点在一定时间内未收到心跳信息,它可能会假定发送方节点已经失败,并采取相应措施。

    (3) 分裂脑:

    在高可用集群中,当联系2个节点的“心跳线”断开时,本来为一个整体、动作协调的 HA 系统失去通信,分裂成为2个独立的个体,每个个体都认为是对方出现了故障,都在独自操作。

    二、keepalived

    1、概念:

    Keepalived 是实现高可用性(High Availability)的开源软件,用于管理负载均衡和故障切换。它的主要工作是确保在出现故障的情况下,能够快速地切换到备用系统,以确保连续可用性。

    2、工作原理:

    Keepalived 使用虚拟路由冗余协议(Virtual Router Redundancy Protocol,VRRP)来协调主备切换。VRRP 允许多个服务器一起工作,但只有一个服务器被选为主服务器,其余服务器处于备用状态。主服务器接收 VIP,而备用服务器等待切换。

    3、keepalived 三个主要模块:

    ● Core 模块:Core 模块是 Keepalived 的核心组件,负责主进程的启动、维护以及全局配置文件的加载和解析;

    ● Check 模块:Check 模块是用于健康检查的组件,它负责监测服务器的可用性;

    ● VRRP 模块:VRRP 模块用于实现 VRRP 协议。

    4、keepalived 示例:

    (1) 环境:

    server1:192.168.198.130(VIP:192.168.198.140)

    server2:192.168.198.131(VIP:192.168.198.140)

    (2) 配置:

    配置 server1:

    ① 编辑 keepalived 配置文件:

    yum install -y keepalived

    vim /etc/keepalived/keepalived.conf

    1. !Configuration File for keepalived
    2. global_defs {
    3. router_id 1
    4. }
    5. #vrrp_script ck_apache {
    6. # script "/etc/keepalived/ck_apache.sh"
    7. # interval 2
    8. # weight -5
    9. # fall 3
    10. #}
    11. vrrp_instance VI_1 {
    12. state MASTER
    13. interface ens33
    14. mcast_src_ip 192.168.198.130
    15. virtual_router_id 55
    16. priority 100
    17. advert_int 1
    18. authentication {
    19. auth_type PASS
    20. auth_pass 123456
    21. }
    22. virtual_ipaddress {
    23. 192.168.198.140/24
    24. }
    25. # track_script {
    26. # ck_apache
    27. # }
    28. }

    ● !Configuration File for keepalived:注释行,指示这是 Keepalived 的配置文件

    ● global_defs { router_id 1 }

    定义全局参数 ;router_id 1:设备在 keepalived 组中的标识编号(实例路由编号)

    ● vrrp_instance VI_1 :设置虚拟路由器组名 (VI_1)

    ● state MASTER:设置主从状态

    ● interface ens33:设置监控网卡

    ● mcast_src_ip 192.168.198.130:心跳源 ip,用来标识 VRRP 协议消息的来源

    ● virtual_router_id 55:虚拟路由器编号55(130、131共同维护的虚拟设备名为VI_1,编号为55)

    ● priority 100:设置服务器优先级(0-255)

    ● advert_int 1:心跳间隔,表示 VRRP 实例每隔 1 秒发送一次消息,以通知其他路由器它的状态

    配置身份验证参数,集群中的成员使用密码进行身份验证

    配置虚拟 ip:192.168.198.140

    ② 拷贝配置文件到 131

    scp -r /etc/keepalived/keepalived.conf 192.168.198.131:/etc/keepalived/

    (131 需要先安装 keepalived)

    ③ 启动 keepalived

    systemctl start keepalived

    systemctl enable keepalived

    ④ 配置 apache:

    yum install -y httpd

    echo bean1 > /var/www/html/index.html

    systemctl restart httpd
    配置 server2:

    ① 修改 keepalived 配置文件:

    router_id 2

    state BACKUP

    mcast_src_ip 192.168.198.131

    priority 99

    ② 配置 apache:

    echo bean2 > /var/www/html/index.html

    systemctl restart httpd

    (3) 客户机测试:

    客户机访问虚拟 ip(192.168.198.140)

    断开主服务器的网卡连接,再访问:

    (4) keepalived 应对 apache 状态变更:

    当 apache 状态为关闭时,客户机访问虚拟 ip 不会跳转到备用机。

    ① 编辑 apache 状态监控脚本(130):

    vim /etc/keepalived/ck_apache.sh

    1. #!/bin/bash
    2. counter=$(ps -C httpd --no-heading|wc -l)
    3. if [ "${counter}" = "0" ]; then
    4. #尝试启动apache,停止5秒后再次检测
    5. systemctl start httpd
    6. sleep 5
    7. counter=$(ps -C httpd --no-heading|wc -l)
    8. if [ "${counter}" = "0" ];
    9. then
    10. #如果启动没成功,就杀掉keepalive触发主备切换
    11. systemctl stop keepalived
    12. fi
    13. fi

    添加脚本权限:chmod +x /etc/keepalived/ck_apache.sh

    130 将脚本拷给 131,在 131 下给脚本授权:

    scp /etc/keepalived/ck_apache.sh 192.168.198.131:/etc/keepalived/

    ② 在 keepalived 配置文件中启动监控脚本:

    监控的脚本名:

    启动脚本:每隔两秒钟执行脚本,如果重复三次后 apache 依然无法启动,本机权重减五

    ③ 查看脚本执行效果:

    systemctl restart keepalived

    停止 apache 后,查看状态:

    5、keepalived + lvs

    (1) 环境:

    负载均衡器(主):192.168.198.130(VIP:192.168.198.140)

    负载均衡器(备):192.168.198.131(VIP:192.168.198.140)

    web 服务器1:192.168.198.132

    web 服务器2:192.168.198.133

    (2) 主负载均衡器配置(130):

    yum install -y keepalived ipvsadm

    修改 keepalived 配置文件:

    1. !Configuration File for keepalived
    2. global_defs {
    3. router_id Director1
    4. }
    5. vrrp_instance VI_1 {
    6. state MASTER
    7. interface ens33
    8. virtual_router_id 51
    9. priority 150
    10. advert_int 1
    11. authentication {
    12. auth_type PASS
    13. auth_pass 123456
    14. }
    15. virtual_ipaddress {
    16. 192.168.198.140/24 dev ens33
    17. }
    18. }
    19. virtual_server 192.168.198.140 80 {
    20. lb_algo rr
    21. lb_kind DR
    22. protocol TCP
    23. real_server 192.168.198.132 80 {
    24. weight 1
    25. TCP_CHECK {
    26. connect_timeout 3
    27. }
    28. }
    29. real_server 192.168.198.133 80 {
    30. weight 1
    31. TCP_CHECK {
    32. connect_timeout 3
    33. }
    34. }
    35. }

    LVS 配置:

    ● virtual_server 192.168.198.140 80

    负载均衡器监听的 ip 地址和端口

    ● lb_algo rr ;lb_kind DR ;protocol TCP

    调度算法为 rr ;集群模式为 DR ;协议为 tcp

    ● real_server 192.168.198.133 80 { weight 1

    定义真实服务器的 ip 地址、端口和权重比例

    ● TCP_CHECK { connect_timeout 3 }

    指定了连接超时时间为3秒,用于检查真实服务器健康状态的设置。

    (3) 备用负载均衡器配置(131):

    yum install -y keepalived ipvsadm

    ● 将主负载均衡器的配置文件拷到备用负载上:

    scp 192.168.198.130:/etc/keepalived/keepalived.conf /etc/keepalived/

    ● 修改配置文件:

    router_id Director2

    state BACKUP

    priority 100

    ● 启动 master 和 backup 的服务:

    systemctl start keepalived

    systemctl enable keepailved

    reboot

    (4) web 配置(132、133):

    yum install -y httpd

    systemctl start httpd

    systemctl enable httpd

    ① 配置虚拟 ip:

    cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}

    vim /etc/sysconfig/network-scripts/ifcfg-lo:0

    DEVICE=lo

    IPADDR=192.168.198.140

    NETMASK=255.255.255.255

    ONBOOT=yes

    ② 配置路由:

    添加路由条目,192.168.198.140 这个 ip 只能通过 lo:0 口进行服务

    /sbin/route add -host 192.168.198.140 dev lo:0

    ③ 配置 ARP:

    vim /etc/sysctl.conf

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

    net.ipv4.conf.default.arp_ignore = 1

    net.ipv4.conf.default.arp_announce = 2

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    ④ 重启 web:reboot

    (5) 测试:

    ① 在 master 上查看路由条目和虚拟 ip:

    ② 客户机访问:

    master1 关闭 keepalived 后,客户机访问:

    web1 关闭站点服务后,客户机访问:

  • 相关阅读:
    基于Echarts实现可视化数据大屏董事会指标体系层级结构系统
    找不到msvcp140.dll的解决方法,以及msvcp140.dll丢失的原因
    PandaGPT部署演示
    Oracle-Dataguard-CDB指定PDB同步
    java中的阻塞队列
    jQuery的概念、基本使用、选择器、样式操作
    Go中的编程模式:Pipeline
    基于SSM框架的《超市订单管理系统》Web项目开发(第三天)用户管理,模糊查询,精准匹配,分页显示数据
    [iOS开发]离屏渲染优化方案
    LK光流法和LK金字塔光流法(含python和c++代码示例)
  • 原文地址:https://blog.csdn.net/weixin_61428407/article/details/134085779