代码编织梦想

keepalived + haproxy 安装

yum install -y haproxy keepalived

keepalived

master 配置

vim 编辑 /etc/keepalived/keepalived.conf


! Configuration File for keepalived

global_defs {
   notification_email {
        zhanglu90@126.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_1
   vrrp_skip_check_adv_addr
#  vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI-kube-master {
    state MASTER #需要将状态设置为(MASTER)
    interface eno1  #这个地方需要特别注意,一个服务器有很多虚拟网卡,而这个网卡是真实网卡,可以通过ifconfig 命令查看你服务器中的名字,我的服务器中ip地址对应的网卡名称就是eno1  ,这个不能写错
    virtual_router_id 51 #这个id可以是其他数字,但是该数字必须在master和node中要保持一致,也可以照我这个写,不需要修改的
    priority 100  #权重设置,数值大的选为master 节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.41.39.206  # vip  #这个就是虚拟出来的ip了,简称VIP,需要确保集群环境中不能有ip与这个vip冲突,其次需要确定该vip能和集群中所有节点ping的通
    }
}

node 配置

vim 编辑 /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
        zhanglu90@126.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_1
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI-kube-master {
    state BACKUP #此处需要设置为备份状态(BACKUP)
    interface eno1 #这个地方需要特别注意,一个服务器有很多虚拟网卡,而这个网卡是真实网卡,可以通过ifconfig 命令查看你服务器中的名字,我的服务器中ip地址对应的网卡名称就是eno1  ,这个不能写错
    virtual_router_id 51  #这个id可以是其他数字,但是该数字必须在master和node中要保持一致,也可以照我这个写,不需要修改的
    priority 80 #权重设置,数值大的选为master 节点 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.41.39.206 # vip  #这个就是虚拟出来的ip了,简称VIP,需要确保集群环境中不能有ip与这个vip冲突,其次需要确定该vip能和集群中所有节点ping的通
    }
}

启动keepalived并设置开机自启


#启动
systemctl start keepalived
 
#查看状态
systemctl status keepalived
 
#设置开机自启
systemctl enable keepalived

haproxy

「HAProxy」- 在 TCP Mode 下,从 Haproxy 向 Nginx 传递客户端真实网络地址

在这里插入图片描述

修改haproxy的配置文件

因为要使用PROXY协议,需要在server中追加send-proxy-v2-ssl-cn配置:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /var/run/haproxy-admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    nbproc 1

defaults
    log     global
    timeout connect 5000
    timeout client  10m
    timeout server  10m

listen  admin_stats
    bind 0.0.0.0:16688  #这里需要设置一个不和其他程序冲突的端口,查看端口是否占用:netstat -anp| grep 10080
    mode http
    log 127.0.0.1 local0 err
    stats refresh 30s
    stats uri /status
    stats realm welcome login\ Haproxy
    stats auth admin:123456
    stats hide-version
    stats admin if TRUE
# 业务下游 nginx 转发配置 ,nginx 部署在 k8s 中 

listen sase-service-nginx
    mode tcp
    bind *:9443 #这里需要设置一个不和其他程序冲突的端口,查看端口是否占用:netstat -anp| grep 9443
    balance roundrobin
    # 下游nginx 地址并开启 proxy protocol 代理协议 send-proxy-v2-ssl-cn  
    server nginx-01 10.41.39.195:31498 send-proxy-v2-ssl-cn weight 1 maxconn 10000 check inter 10s

    server nginx-01 10.41.39.196:31498 send-proxy-v2-ssl-cn weight 1 maxconn 10000 check inter 10s

    server nginx-01 10.41.39.197:31498 send-proxy-v2-ssl-cn weight 1 maxconn 10000 check inter 10s

listen sase-customer-nginx
    mode tcp
    bind *:7443  #这里需要设置一个不和其他程序冲突的端口,查看端口是否占用:netstat -anp| grep 7443
    balance roundrobin

	# 下游nginx 地址并开启 proxy protocol 代理协议 send-proxy-v2-ssl-cn 
    server nginx-01 10.41.39.195:31134 send-proxy-v2-ssl-cn weight 1 maxconn 10000 check inter 10s

    server nginx-01 10.41.39.196:31134 send-proxy-v2-ssl-cn weight 1 maxconn 10000 check inter 10s

    server nginx-01 10.41.39.197:31134 send-proxy-v2-ssl-cn weight 1 maxconn 10000 check inter 10s

注意,「PROXY协议」由两个版本,对应的HAProxy中的配置为send-proxy与send-proxy-v2指令,这是用于HTTP协议的。如果是HTTPS协议要使用send-proxy-v2-ssl或者send-proxy-v2-ssl-cn指令。我们用的https 协议,所以配置为send-proxy-v2-ssl-cn。

通过「PROXY协议」传递给Nginx的信息是客户端IP地址、代理服务器IP地址、两个端口号。接下来就是配置Nginx服务接受PROXY协议。

启动HAProxy并设置开机自启

#启动
systemctl start haproxy
 
#查看状态
systemctl status haproxy
 
#设置开机自启
systemctl enable haproxy

Nginx proxy protocol 配置

目前,HAProxy已经将客户端的IP地址通过PROXY协议发送给Nginx服务了。接下来就是在Nginx中获取客户端的IP地址,有两种办法:

1.在Nginx中,使用’‘ p r o x y p r o t o c o l a d d r ′ ′ 和 ′ ′ proxy_protocol_addr''和'' proxyprotocoladdrproxy_protocol_port’‘变量捕获原始客户端IP地址和端口。’‘ r e m o t e a d d r ′ ′ 和 ′ ′ remote_addr''和'' remoteaddrremote_port’‘变量捕获HAProxy的IP地址和端口。
2. 在Nginx中,启用RealIP模块。启用RealIP模块后:Nginx会重写’‘ r e m o t e a d d r ′ ′ 和 ′ ′ remote_addr''和'' remoteaddrremote_port’‘变量的值,用客户端IP地址和端口替换负载均衡的IP地址和端口;而’‘ r e a l i p r e m o t e a d d r ′ ′ 和 ′ ′ realip_remote_addr''和'' realipremoteaddrrealip_remote_port’‘变量保留负载均衡的IP地址和端口;’‘ p r o x y p r o t o c o l a d d r ′ ′ 和 ′ ′ proxy_protocol_addr''和'' proxyprotocoladdrproxy_protocol_port’'变量保留原始客户端IP地址和端口。

这对Nginx也有所要求:

  • 接受PROXY协议v2,需要NGINX 1.13.11及更高版本,或NGINX Plus R16及更高版本;
    * 接受HTTP的PROXY协议,需要NGINX 1.5.12及更高版本,或NGINX Plus R3及更高版本;(在nginx-1.5.12的http中,指令listen首次支持proxy_protocol)
    * 接受TCP的PROXY协议,需要NGINX 1.11.4及更高版本,或NGINX Plus R11及更高版本;(在nginx-1.11.4的stream中,指令listen首次支持proxy_protocol)
    * 对于TCP客户端PROXY协议支持,需要NGINX 1.9.3及更高版本,或NGINX Plus R7及更高版本;(在nginx-1.9.2中,加入了proxy_protocol指令,用于请求PROXY服务)
    * 如果使用RealIP模块,则需要进行安装,默认没有安装该模块。

在Nginx中进行如下配置:

server {
    charset utf-8;
    listen [::]:443 default_server ssl ipv6only=on proxy_protocol; # proxy_protocol 
    listen 0.0.0.0:443 default_server ssl proxy_protocol;
    location ^~ /v1/ {
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://backend/v1/;
    }
}

有一点需要说明,指令set_real_ip_from的参数为负载均衡的IP地址或网段。该参数标记出负载均衡的网段,然后Nginx会进行递归排除,递归排除之后剩下的IP地址就是客户端的IP地址。这个地方不要配置错了。

参考:
使用haproxy+keepalived实现k8s集群访问总代理
「HAProxy」- 在 TCP Mode 下,从 Haproxy 向 Nginx 传递客户端真实网络地址

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhanglu0302/article/details/128066710

搭建高可用负载均衡器: haproxy+keepalived_ducode的博客-爱代码爱编程

企业业务量比较小的时候,单台服务器就可以满足业务需要了。但是随着业务发展,单服务器的问题就凸显出来了: 当服务器挂掉时,业务就会中断当业务量增加,单台服务器性能变差,如何透明的扩展服务器和带宽,增加服务器吞吐量 负载均衡器可以解决以上问题 1 负载均衡器拓扑图 本文会根据拓扑图,用haproxy和keepalived搭建一个负载均

k8s+harbor+gluster+haproxy 实践加坑-爱代码爱编程

K8S+Harbor+gluster+haproxy 实践加坑 ​ —阿特&Max Shen 半年未有blog,今日归来玩开源。莫问英雄归路,青山绿水总相逢。 一切缘起都是因为devops, 容器化已经很流行了

centos7.5部署高可用k8s(一) ---- 部署LB负载均衡haproxy+keepalived-爱代码爱编程

在centos7.5系统部署一个k8s高可用集群。k8s版本采用v1.15.2。docker版本18.09 根据官方的文档,部署集群前首先要部署负载均衡器,这里简要记录下LB负载均衡器的部署过程。 环境说明 节点IP备注haproxy-1、keepalived-110.0.0.21代理节点1haproxy-2、keepalived-210.0.0.2

Keepalived+LVS集群+HAProxy集群-爱代码爱编程

Keepalived概述 调度器出现单点故障,如何解决?Keeplived实现了高可用集群Keepalived最初是为了LVS设计的,专门监控各服务器节点的状态Keepalived后来加入了VRRP功能,防止单点故障Keepalived运行原理 Keepalived检测每个服务器节点状态服务器节点异常或工作出现故障,Keepalived将故障节点从集群

k8s高可用集群多个主节点_高可用的K8S集群部署方案-阿里云开发者社区-爱代码爱编程

涉及到的内容 LVS HAProxy Harbor etcd Kubernetes (Master Worker) 整体拓补图 以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少) 按功能组划分 SLB LVS HAProxy etcd K8S Node (Master / Worker) SLB L

HAproxy + keepalive + Kubeadm部署kubernetes(k8s)HD高可用集群(1.7)-爱代码爱编程

简单描述一下HAproxy + keepalive的作用 keepalive的作用是虚拟IP,让多个master节点公用一个虚拟IP,当主节点挂掉之后,虚拟IP通过选举飘逸到剩下二个节点其中一个 Kubeadm的init操作就会init这个IP节点,当IP节点可以多用时,自然实现了高可用 HAproxy 的作用在于实现apiserve的负载均

haproxy+keepalived搭建高可用k8s集群-爱代码爱编程

  高可用集群技术细节 高可用集群技术细节如下所示: keepalived:配置虚拟ip,检查节点的状态haproxy:负载均衡服务【类似于nginx】apiserver:controller:manager:scheduler:高可用集群步骤 我们采用2个master节点,一个node节点来搭建高可用集群(机器资源有限) | 角色     

@kubernetes(k8s)使用adm安装实现keepalived高可用-爱代码爱编程

文章目录 adm-keepalived一、环境准备(全部执行)1、服务器的环境准备2、本地机器准备3、设置主机解析4、关闭防火墙--关闭selinux5、关闭swap6、配置镜像源7、安装常用软件工具包8、时间同步9、系统内核更新(建议奈何为4.4之上)10、增加命令提示安装11、ipvs安装二、docker安装三、安装kubelet四、安装hap

K8S高可用集群架构部署 dashborad插件部署 Nginx实现动静分离 K8S在线升级-爱代码爱编程

K8S官方文档 注意:该集群每个master节点都默认由kubeadm生成了etcd容器,组成etcd集群。正常使用集群,etcd的集群不能超过一半为down状态。 docker的namespace:是利用宿主机内核的namespace功能实现容器的资源隔离 k8s的namespace:是基于名称实现项目容器的隔离,叫命名空间

用 Keepalived+HAProxy 实现高可用负载均衡的配置方法-爱代码爱编程

    “ 负载均衡是分布式系统中不可或缺的重要环节,通过负载均衡按照指定的调度算法将请求分发至网络中多个节点进行处理。本文将介绍基于开源软件HAProxy实现负载均衡并且通过Keepalived实现高可用的配置方法,希望读者通过参考本文的探索成果可以快速实现高可用的软件负载均衡,也希望读者能够举一反三、触类旁通,通过自我驱动进行更深入的

k8s-v1.20.10 3master+2worker节点(Keepalived+HAproxy高可用)-爱代码爱编程

k8s-v1.20.10 3master&1node 实验环境 主机网络信息和组件信息 K8S集群角色IP主机名安装的组件VIP192.168.0.15VIPVIPMASTER192.168.0.11k8s-master-1apiserver、controller-manager、scheduler、etcd、docker、kubectl、k

centos7.9上用kubeadm搭建1.23.6版本多master高可用kubernetes集群(haproxy + keepalived,无坑)_haiger01的博客-爱代码爱编程

一、部署节点说明 1.Kubernetes 组件 名称简介kubectl管理 k8s 的命令行工具,可以操作 k8s 中的资源对象。etcd是一个高可用的键值数据库,存储 k8s 的资源状态信息和网络信息的,etcd 中的数据变更是通过 api server 进行的。apiserver提供 k8s api,是整个系统的对外接口,提供资源操作的唯一入口,供