zoukankan      html  css  js  c++  java
  • 搭建高可用Kubernetes集群之Nginx+Keepalived集群搭建(二)

    Keepalived简介

    说到Keepalived,首先介绍一下什么是VRRP(Virtual Router Redundancy Protocol)协议,即虚拟器路由冗余协议,是为了解决局域网内默认网关单点失效的问题。

    VRRP 将局域网内的一组路由器组成一个虚拟路由器组,每个路由器都有自己的局域网地址, 根据设置的优先级最高决定那个是master路由器。然后网关地址赋给该主路由器, 该主路由器定时发送VRRP报文向虚拟路由器组公布健康状况, 备份的路由器根据波纹判断Master路由器是否工作正常,从而决定是否要接替它. VRRP说白了就是实现IP地址漂移的,是一种容错协议。在下图中,Router A(10.100.10.1)、Router B(10.100.10.2)和Router C(10.100.10.3) 组成一个虚拟路由器。各虚拟路由器都有自己的IP地址。局域网内的主机将虚拟路由器设置为缺省网关。 Router A、Router B和Router C中优先级最高的那台路由器作为Master路由器,比如A,承担网关的功能。局域网内的服务 只知道这台主master路由器A的存在,将自己缺省路由下一跳地址设置为该路由的ip地址10.100.10.1, 其余两台路由器作为Backup路由器。当master路由器出故障后, backup路由器会根据优先级重新选举出新的master路由器承担网关功能。Master路由器周期性地发送VRRP报文, 在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作工常。


     
     

    Keepalived是基于vrrp协议的一款高可用软件,它是作用在主机上,而不是路由器上。Keepailived把多台主机虚拟在一起,提供一个虚拟IP对外提供服务,它拥有一台master服务器和多台backup服务器,当主服务器出现故障时,虚拟IP地址会自动漂移到备份服务器,实现故障转移的高可用可能,即双机热备。注意:服务器的时间一定要一致。

    Haproxy简介

    HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是开源、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理(和Nginx比较有优势的地方)。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整 合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。

    它在kubernetes高可用集群中的作用如下图,负责接收各节点发送给API Server的消息,然后负载均衡到任一个主节点,保证了数据的一致性:

     

    思路大致就是lb这个集群中vip地址所在的节点负责监听kubernetes集群的各组件发送给api的消息,然后haproxy利用负载均衡实现消息分发到各个kubernetes的master节点,keepalived则保证这个接收请求的“大门“保持敞开。

    备注:一般推荐使用Haproxy+Keepalived来实现LB集群,不过本人对Nginx比较熟悉,所以我选择Nginx+Keepalived来实现LB集群。

    环境规划

    LB(Master)  192.168.248.202 Nginx Keepalived 
    LB(Backup)  192.168.248.206 Nginx Keepalived nfs-server
    VIP:192.168.248.209

    安装Keepalived

    192.168.248.202服务器:

    yum install -y keepalived
    
    vi /etc/keepalived/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 127.0.0.1 #邮箱服务器
       smtp_connect_timeout 30
       router_id 192.168.248.202  #主机名,每个节点不同
       vrrp_skip_check_adv_addr
       # vrrp_strict  注释,不然严格遵守vvrp,访问不了vip
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    #nginx配置 vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" } vrrp_instance VI_1 { state MASTER #主服务器 interface ens32 #VIP 漂移到的网卡 virtual_router_id 51 #多个节点必须相同 priority 100 #优先级,备服务器比这个低 advert_int 1 #指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.248.209/26 #vip } }

    192.168.248.206服务器:

    yum install -y keepalived
    
    vi /etc/keepalived/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 127.0.0.1
       smtp_connect_timeout 30
       router_id linsrv2
    }
    
    #nginx配置
    vrrp_script check_nginx {
        script "/etc/keepalived/check_nginx.sh"
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface em1
        virtual_router_id 51
        priority 90  #优先级,备份服务器比这个低
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.248.209/26
        }
    }

    然后在192.168.248.202、192.168.248.206节点执行下列命令启动Keepalived

    systemctl start keepalived
    systemctl enable keepalived

    现在你可以尝试关闭主节点,看看vip是否漂移到其他节点去了,然后再打开主节点,vip又重新绑定到主节点的网卡上。

    安装Nginx

    192.168.248.202、192.168.248.206服务器:

    rpm -vih http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm
    
    vim /etc/nginx/nginx.conf
    #配置文件最后一行追加如下内容
    stream {
    
        log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    
        access_log  /var/log/nginx/k8s-access.log  main;
    
        upstream k8s-apiserver {
                    server 192.168.248.161:6443; 
                    server 192.168.248.162:6443;
                }
    
        server {
           listen 6443;
           proxy_pass k8s-apiserver;
        }
    }

    启动nginx

    systemctl start nginx
    systemctl enable nginx
    

    Nginx+keepalived高可用配置 

    cat /etc/keepalived/check_nginx.sh 

    #!/bin/bash
    count=$(ps -ef |grep nginx |egrep -cv "grep|$$")
    
    if [ "$count" -eq 0 ];then
        exit 1
    else
        exit 0
    fi

     并将此脚本加入到keepalived配置文件中(上面keepalived配置文件已加入)

    vrrp_script check_nginx {
        script "/etc/keepalived/check_nginx.sh"
    } 

    至此Nginx+Keepalived搭建完毕。

    参考:https://www.jianshu.com/p/7a41f0294f32

  • 相关阅读:
    iOS-微信分享多张图片(UIActivityViewController多图分享和多图分享失败)
    java jvm设置http代理参数
    TCP加速锐速SS(ServerSpeeder)破解版一键安装
    Rectified/无限流量/KVM/1G内存/亚洲优化/月付3.99刀起/商家首次续费优惠/91yun第600篇博文
    在Centos7上安装配置ss-libev Proxifier
    需要序列化的类中没有写serialVersionUID的解决办法
    湖南卫视直播
    修改postfix smtp端口,防止公网扫描浪费你的服务器流量
    亚马逊aws 一个实例双网卡-两个弹性ip设置
    智读App-免费下载付费知识节目攻略
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/13646907.html
Copyright © 2011-2022 走看看