高可用_keepalived + haproxy

准备:

  • 登录腾讯云申请HAVIP 私有网络 高可用虚拟 IP 概述 - 操作指南 - 文档中心 - 腾讯云 

  • 申请通过后,刷新页面,选择 云产品 -> 网络 -> 私有网络 -> IP与网卡 -> 高可用虚拟IP
    新建vip,选择自己的私有网络。此时通过自己的vpc无法访问vip(vip未绑定到自己的vpc上),
    通过keepalive配置好vip后其它vpc才能ping 通vip。
  • 注意vip申请后如果不绑定eip会默认绑定到一台服务器上,并且会扣费的,购买一个eip然后绑定到vip上就可以通过外网访问高可用环境了。

1. 主机规划

节点主机名内网ip
主节点1k8s-master01172.17.0.8
主节点2k8s-master02172.17.0.9
HAVIPwww.k8s.com172.17.0.250(腾讯云申请-免费)
EIPwww.k8s.com110.xx.xxx.2x9 (腾讯云公网ip-购买)

 

主节点1和主节点2都需要部署keepalived和haproxy。下面配置为主节点1的配置。
主节点2的keepalived配置基本同主节点1,需要修改的地方参考配置中的注释。主节点2的haproxy配置同主节点1的配置

2. 部署keepalived

  • 安装keepalived
    yum install -y keepalived

  • 配置keepalived
    vim /etc/keepalived/keepalived.conf 内容如下:
    
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         wangfenlei@sina.cn
       }
       notification_email_from keepalived@ptmind.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id k8s-master01 # 主节点2改为 k8s-master02
    }
    
    vrrp_script check_apiserver {
       # script "/cron-sh.d/check_apiserver.sh" # script可以指定要执行的shell脚本。
       script "killall -0 haproxy" # 检测ha是否存在。
       interval 5
       weight -20
       fall 3
       rise 1
    }
    
    vrrp_instance VI_1 {
        state MASTER       # 主节点2改为 BACKUP
        interface eth0
        virtual_router_id 1
        priority 101 # 主节点2改为 99
        advert_int 1
        unicast_src_ip 172.17.0.8 #当前节点的内网ip  主节点2改为 172.17.0.9
        unicast_peer {
            172.17.0.9 # 主节点2的内网ip  主节点2改为 172.17.0.8
            #x.x.x.x  主节点3的内网ip  如果有多个主节点可以继续添加
        }
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
            check_apiserver
        }
    
        virtual_ipaddress {
            172.17.0.250           # 腾讯云申请vip
        }
    }
    
    # 脚本demo. vrrp_script 中用
    vim /cron-sh.d/check_apiserver.sh 内容如下
    
    #!/bin/bash
    
    #exit 1
    
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
            systemctl start haproxy
    fi
    
    sleep 3
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
            systemctl stop keepalived
    fi

  • 配置keepalived日志输出路径
    # keepalived日志路径配置 (local0中的0 对应-S 后面的0)
    1. vim /etc/sysconfig/keepalived
        KEEPALIVED_OPTIONS="-D -d -S 0" (修改)
    
    2. vim /etc/rsyslog.conf
        local0.*                                      /var/log/keepalived.log (文件末添加)

3. 部署haproxy

  • 安装haproxy
    yum install -y haproxy

  • 配置haproxy
    vim /etc/haproxy/haproxy.cfg 内容如下:
    
    # Global settings
    global
        # 2) configure local2 events to go to the /var/log/haproxy.log
        #    local2.*                       /var/log/haproxy.log
        #
        log         127.0.0.1 local2
    
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000
        user        haproxy
        group       haproxy
        daemon
    
        spread-checks 3
        nbproc        1  # 默认是1,可以不配。
    
    
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
    
    # defaults setting 其他配置会继承默认配置,默认配置里的配置项也可以在其它配置里被重写
    defaults
        log                     global
        option                  dontlognull
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    # ui 这里bind用* 没问题(外网ip+端口可以直接访问监控页面)。用0.0.0.0页面访问不了
    listen stats
        bind      *:8444
        stats     enable
        mode      http
        maxconn   10
        stats     refresh 30s
        stats     uri /
        stats     hide-version
        stats     realm HAproxy
        stats     auth admin:admin
        stats     admin if TRUE
    
    #---------------------------------------------------------------------
    # kubernetes apiserver frontend which proxys to the backends
    #---------------------------------------------------------------------
    frontend kubernetes-apiserver
        mode                 tcp
        bind                 *:8443
        option               tcplog
        default_backend      kubernetes-apiserver
    
    #---------------------------------------------------------------------
    # round robin balancing between the various backends
    #---------------------------------------------------------------------
    backend kubernetes-apiserver
        mode        tcp
        balance     roundrobin
        server  k8s-master01 172.17.0.8:6443 check
        server  k8s-master02 172.17.0.9:6443 check
    
    # listen
    #listen ha-apache-server
    #    bind    *:81
    #    mode    tcp
    #    balance     roundrobin
    #    server k8s-master01 172.17.0.8:81 check port 81 inter 5000 rise 1 fall 3
    #    server k8s-master02 172.17.0.9:81 check port 81 inter 5000 rise 1 fall 3
    

  • 配置haproxy日志输出路径
    # haproxy日志路径配置 (local2中的2 与 /etc/haproxy/haproxy.cfg 中log配置的local2对应)
    1. vim /etc/rsyslog.conf 
        $ModLoad imudp       (修改)
        $UDPServerRun 514    (修改) 
        local2.*                                       /var/log/haproxy.log (文件末添加)

4. 排查网络问题相关命令
 

# 1. tcp 抓取vip数据包 keepalived 的vip绑在eth0网卡上的
tcpdump -i eth0 vrrp -n

# 2. 查看vip绑定
ip addr show dev eth0

# 3. 列举所有vip 
ipvsadm -ln

# 4. 列举所有vip连接
ipvsadm -Lnc

# 5. 查看所有的处于监听状态的tcp连接并且显示pid和对应应用名称
netstat -nltp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值