【理论+实验】HAProxy搭建高可用集群

一、HAProxy介绍

HaProxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件,它适用于负载流量大的Web站点,当HAProxy运行在硬件上时,可支持数以万计的并发连接的连接请求。

二、HAProxy的特点

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。
HAProxy非常适用于并发流量大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

HAProxy的主要特性:

  1. 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美
  2. 支持TCP协议的负载均衡转发
  3. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s
  4. 支持多达8种负载均衡算法
  5. 支持Session会话保持,Cookie的引导
  6. 支持通过获取指定的url来检测后端服务器的状态
  7. 支持虚机主机功能,从而实现web负载均衡更加灵活
  8. 支持连接拒绝、全透明代理等独特的功能
  9. 拥有强大的ACL支持,用于访问控制
  10. 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成

三、HAProxy与LVS、Nginx的比对

  1. LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

  2. LVS是可实现4层的ip负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCp和HTTP应用的负载均衡综合解决方案;

  3. LVS因为工作在Iso模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式

  4. HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;

  5. Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

四、HAProxy调度算法

  1. rr(轮询):通俗的讲,就是轮流询问,跟网易云音乐的按顺序播放一样
  2. static-rr(加权轮询):表示根据web服务器的权重来分配前端请求。权重越大,分配给的流量就越多
  3. LC(最小连接):根据后端的节点连接数大小动态分配前端请求
  4. SH(源地址哈希):类似nginx的ip hash算法,基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度,简单来说,可以理解为ip绑定,比如A访问了服务器1,那么在服务器重启之前,A每次访问,都会被分配给服务器1。
  5. uri(目的地址哈希):表示根据用户请求的URI做hash,做cdn时需要使用。
  6. url_ param:根据请求的URl参数’balance url_ param’ requires an URL parameter name
  7. hdr (name):根据HTTP请求头来锁定每一次HTTP请求
  8. rdp-cookie (name):根据cookie (name)来锁定并哈希每一次TCP请求

HAProxy三种会话保持的方式:

  1. 源地址hash
  2. 设置cookie
  3. 会话粘性表stick-table

五、实验

1.架构图

在这里插入图片描述
客户端:centos7,192.168.41.43
HAProxy服务器:centos7,192.168.41.44
nginx1:centos7,192.168.41.45
nginx2:centos7,192.168.41.46

2.简要分析

客户端发起访问请求,数据包发送到HAproxy上,由HAProxy的调度算法决定将请求调度到Web集群中的哪一台Web服务器上,Web服务器接收到转发来的请求,将回包发送给HAProxy,再由HAProxy回复给客户端。

3.实验步骤

-------------------45、46服务器(nginx)--------------------
这个已经搭建无数遍了,就不再赘述,仅罗列命令集合,45、46操作一模一样
yum install -y epel-release
yum install -y nginx
echo "this is45's nginx" > /usr/share/nginx/html/index.html   #45服务器操作
echo "this is 46's nginx" > /usr/share/nginx/html/index.html   #46服务器操作
systemctl start nginx
访问测试

-------------------44服务器(HAProxy)--------------------
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make   #安装HAProxy所需依赖包
uname -r   #查看内核参数,如果内核版本是大于2.6.28的,需要在编译的时候声明
cd /opt   #将包上传到opt,切换到opt目录
tar zxvf haproxy-1.5.19.tar.gz   #解压
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64   #make编译,TARGET参数根据内核版本进行配置,大于2.6.28就用linux2628,小于2.6.28就用linux26,ARCH参数表示系统架构,x86_64为64位
make install   #编译安装
mkdir /etc/haproxy    #创建配置文件的目录
cp examples/haproxy.cfg /etc/haproxy/   #将模板文件复制到配置文件目录
cd /etc/haproxy/
vim haproxy.cfg    #修改配置文件
global   #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
        log /dev/log   local0 info  #该参数定义日志输出设备和日志级别,将原先的127.0.0.1修改为/dev/log
        log /dev/log   local0 notice   #同上
        #log loghost    local0 info
        maxconn 4096   #每个进程最大连接数,需考虑"ulimit -n"限制,推荐使用10240
        #chroot /usr/share/haproxy 该参数注释
        uid 99   #用户ID
        gid 99   #用户组ID
        daemon   #守护进程模式
        nbproc   #该参数是需要手动添加的,其作用是设置并发进程数,建议与当前服务器CPU核数相等或为其2倍
        #debug
        #quiet

defaults   #配置默认参数,这些参数可以被用到Listen,frontend,backend组件 
        log     global   #日志,采用全局配置中的设置
        mode    http   #模式,有tcp(四层)和http(七层)两种,我们这里使用http模式
        option  httplog   #日志类别为http日志格式
        option  dontlognull   #不记录健康检查日志信息
        retries 3   #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch   #当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000   #最大连接数,“defaults”中的值不能超过“global”段中的定义
        #contimeout      5000   连接超时时间,默认单位为ms,这是老版本的配置,我们选择注释掉,添加新版本写法
        #clitimeout      50000   客户端超时时间,同上
        #srvtimeout      50000   服务端超时时间,同上
        timeout http-request 10s  #默认http请求超时时间
        timeout queue 1m        #默认队列超时时间
        timeout connect 10s     #默认连接超时时间,新版本中替代contimeout,该参数向后兼容
        timeout client 1m       #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
        timeout server 1m       #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容         
        timeout http-keep-alive 10s      #默认持久连接超时时间
        timeout check 10s       #设置心跳检查超时时间

---删除之后的所有listen项,手动添加以下配置---
listen webcluster 0.0.0.0:80  #haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /index. html  #检查服务器的index.html文件。option指定健康检查的方式为 httpchk, 发送http的GET请求检查index.html文件,返回2xx、3xx表示正常;返回4xx/5xx表示异常,则会将该web服务器隔离起来,不会将访问请求分配给它。
        balance roundrobin    #负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.41.45:80 check inter 2000 rise 2 fall 3   #定义在线节点
        server inst2 192.168.41.46:80 check inter 2000 rise 2 fall 3   #定义在线节点
        #server inst2 192.168.41.47:80 check inter 2000 rise 2 fall 3 backup  #定义备份节点
配置完毕,保存退出
ln -s /usr/local/sbin/haproxy /usr/sbin/   #做个软链接,将haproxy的可执行文件放入环境PATH的目录下
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy    #将haproxy.init文件复制到/etc/init.d/目录下,并改名为haproxy
cd /etc/init.d/ 
chmod +x haproxy    #增加文件的执行权限
chkconfig --add /etc/init.d/haproxy       #把haproxy加入系统服务管理中
service haproxy start 或 /etc/init.d/haproxy start    #启动haproxy
访问测试
        


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.日志管理

默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,要将haproxy的info及notice日志分别记录到不同的日志文件中。(其他级别的日志仍记录在系统日志/var/log/messages中;因为error日志较少,故一般不做分离)
修改rsyslog配置,将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。

cd /var/log/
mkdir haproxy   #创建haproxy日志文件的存放目录/var/log/haproxy
​vim /etc/rsyslog.d/haproxy.conf   #在rsyslog.d目录下自定义haproxy.conf配置文件,在文件中写入日志管理的操作,在rsyslog服务工作时,会自动加载rsyslog.d目录中的文件
if ($programname == 'haproxy' and $syslogseverity-text == 'info')   #该文件中的变量均为系统变量
then -/var/log/haproxy/haproxy-info.log
&~   #"&~"表示当日志写入到日志文件后,rsyslog停止处理这个信息。
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
:wq保存退出
systemctl restart rsyslog.service   #重启日志服务
访问查看,同时tail -f /var/log/haproxy/haproxy-info.log 追踪日志文件(可以不断刷新页面,查看日志记录信息)

在这里插入图片描述
在这里插入图片描述

总结

  1. 防火墙(当访问不到页面,第一时间检查防火墙)
  2. haproxy.cfg文件的参数配置,global和default共有的参数,其在default中的设置不能超出global中的设置
  3. 各参数需要稍微上点心去记一记其代表的含义,尤其是失败重试、超时时间等参数信息
  4. 日志分离管理中,对日志消息的级别的控制,可以参考我以前的文章有写
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建Kubernetes高可用集群,可以按照以下步骤进行操作: 1. 准备环境:确保每个节点满足安装要求,并安装docker、kubeadm和kubelet等必要软件。 2. 部署master节点的高可用组件:首先在每个master节点上部署keepalived和haproxy。这些组件将负责提供VIP和负载均衡功能。 3. 使用kubeadm初始化第一个master节点:在其中一个master节点上使用kubeadm init命令进行集群初始化。执行该命令后,会得到一个join命令,记下来以便后续使用。 4. 加入其他master节点:在其他master节点上执行之前记下的join命令,并添加参数--control-plane,以将其加入到集群的控制平面中。 5. 加入worker节点:在每个worker节点上执行join命令,将其加入到集群中。 6. 安装集群网络:根据需要选择合适的网络插件,并在集群中部署。 7. 进行集群测试:使用kubectl命令验证集群是否正常工作。 这样,就完成了Kubernetes高可用集群搭建过程。请注意,这只是一个简要的概述,实际操作中可能还需要进行一些额外的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [K8s高可用集群搭建](https://blog.csdn.net/weixin_44917045/article/details/127993927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [k8s系列(二)之k8s高可用集群环境搭建](https://blog.csdn.net/qq_29653373/article/details/126147549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一念去殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值