igozhang

——

    keepalived_ins

    在6台ubuntu20.04机器上通过keepalive维护一个虚拟IP实现ingress服务高可用:
    IP: 10.201.81.54-59
    VIP: 10.201.81.6
    apt -y install keepalived

    直接安装

    主节点 54 配置

    vim /etc/keepalived/keepalived.conf
    
    ! 精简版 Keepalived 配置(仅维护 VIP)
    global_defs {
        router_id INGRESS_MASTER  # 节点标识,自定义即可,不参与算法,可随意
    }
    
    vrrp_instance VI_1 {
        state MASTER               # 主节点标识
        interface ens18             # 替换为你的实际网卡名(如 ens33)
        virtual_router_id 6       # 所有节点必须一致(1-255)
        priority 100               # 主节点优先级最高
        advert_int 1               # 心跳间隔 1 秒
        nopreempt                  # 非抢占模式(避免主节点恢复后抢占 VIP)
    
        # 认证配置(所有节点必须一致)
        authentication {
            auth_type PASS
            auth_pass 1111         # 自定义认证密码,建议修改
        }
    
        # 虚拟 IP 配置(VIP)
        virtual_ipaddress {
            10.201.81.6/24 dev ens18  # VIP + 子网掩码 + 网卡
        }
    }
    
    systemctl enable keepalived
    systemctl start keepalived
    

    其他节点配置

    global_defs {
        router_id INGRESS_BACKUP  # 备节点标识,自定义
    }
    
    vrrp_instance VI_1 {
        state BACKUP              # 备节点标识
        interface ens18            # 与主节点一致的网卡
        virtual_router_id 6      # 与主节点一致
        priority PRIORITY_PLACEHOLDER               # 备节点优先级(主节点100最高,其余节点随意降低)
        advert_int 1
        nopreempt
    
        authentication {
            auth_type PASS
            auth_pass 1111        # 与主节点一致
        }
    
        virtual_ipaddress {
            10.201.81.6/24 dev ens18  # 与主节点一致
        }
    }
    

    Ansible安装

    先装keepalived

    ansible uat_k8s --module-name apt --args "name=keepalived state=present update_cache=true cache_valid_time=3600" --limit "10.10.10.103,10.10.10.104,10.10.10.105" --become --become-method sudo --forks 3 --timeout 10
    
    ansible 10.10.10.103,10.10.10.104,10.10.10.105 -m shell -a 'apt -y install keepalived' -b -f3
    

    通过ansible 给23,24,25三台机器配个10的vip,在ens18往口上
    23=MASTER/100,24=BACKUP/90,25=BACKUP/80,只做vrrp,不做健康检查

    ansible 10.10.10.23,10.10.10.24,10.10.10.25 --become --forks 3 --timeout 12 --module-name shell --args 'set -eu
    case "{{ inventory_hostname }}" in
      10.10.10.23) STATE=MASTER; PRIORITY=100; RID=kv23 ;;
      10.10.10.24) STATE=BACKUP; PRIORITY=90; RID=kv24 ;;
      10.10.10.25) STATE=BACKUP; PRIORITY=80; RID=kv25 ;;
      *) echo "unexpected_host={{ inventory_hostname }}"; exit 1 ;;
    esac
    mkdir -p /etc/keepalived
    if [ -f /etc/keepalived/keepalived.conf ] && ! grep -q "managed-by-ansible-hc-pro" /etc/keepalived/keepalived.conf; then
      cp -a /etc/keepalived/keepalived.conf "/etc/keepalived/keepalived.conf.bak.$(date +%Y%m%d%H%M%S)"
    fi
    cat > /etc/keepalived/keepalived.conf <<EOF
    # managed-by-ansible-hc-pro
    global_defs {
      router_id ${RID}
    }
    vrrp_instance VI_HC_PRO {
      state ${STATE}
      interface ens18
      virtual_router_id 51
      priority ${PRIORITY}
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass Keepalive@2026
      }
      virtual_ipaddress {
        10.10.10.10/24
      }
    }
    EOF
    systemctl enable keepalived >/dev/null
    systemctl restart keepalived
    sleep 2
    echo "host={{ inventory_hostname }} state=${STATE} priority=${PRIORITY} active=$(systemctl is-active keepalived)"
    ip -4 -brief addr show ens18
    journalctl -u keepalived -n 20 --no-pager' && ansible 10.10.10.23,10.10.10.24,10.10.10.25 --become --forks 3 --timeout 8 --module-name shell --args 'echo "host={{ inventory_hostname }}"; ip -4 addr show ens18 | grep -E "inet |10.10.10.10" || true; ping -c 1 -W 1 10.10.10.10 >/dev/null && echo vip_ping=ok || echo vip_ping=fail'
    

    MP3