• Haproxy集群与常见的Web集群调度器


    1. Web集群调度器概述

    1.1 Web集群调度器简介

    web集群调度器是用于管理和调度web服务器集群的工具。
    它的主要功能是根据特定的算法和策略将请求分配给不同的服务器,以实现负载均衡和高可用性

    1.2 调度器类别

    1.2.1 常用软件类

    • LVS:性能最好,但是搭建相对复杂
    • Nginx:其中upstream模块支持群集功能,且性能不错,但对群集节点健康检查功能不强,高并发性能没有Haproxy好
    • Haproxy:高并发性能较好,适用于负载大的web站点

    1.2.2 常用硬件类

    国内的:梭子鱼、绿盟等…
    国外的:F5、Array

    2. Haproxy软件介绍

    2.1 Haproxy简介

    HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。

    2.2 支持功能

    • TCP 和 HTTP反向代理
    • SSL/TSL服务器
    • 可以针对HTTP请求添加cookie,进行路由后端服务器
    • 可平衡负载至后端服务器,并支持持久连接
    • 支持所有主服务器故障切换至备用服务器
    • 支持专用端口实现监控服务
    • 支持停止接受新连接请求,而不影响现有连接
    • 可以在双向添加,修改或删除HTTP报文首部
    • 响应报文压缩
    • 支持基于pattern实现连接请求的访问控制
    • 通过特定的URI为授权用户提供详细的状态信息

    2.3 主要特性

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

    2.4 常用调度算法

    Haproxy支持多种调度算法,最常用的有8种

    2.4.1 轮询:RR(Round Robin)

    RR算法是最简单最常用的一种算法,即轮询调度

    2.4.2 最小连接数:LC(Least Connections)

    最小连接数算法,根据后端的节点连接数大小动态分配前端请求

    2.4.3 基本来源访问:SH(Source Hashing)

    基于来源访问调度算法,用于一些有Session会话记录在服务端的场景,可以基于来源的IP、Cookie等做集群调度

    2.4.4 uri

    表示根据请求的URI,做cdn需使用

    2.4.5 url_param

    表示根据HTTP请求头来锁定每 一 次HTTP请求。

    2.4.6 rdp—cookie(name)

    表示根据据cookie (name)来锁定并哈希每一次TCP请求。

    2.4.7 source

    表示根据请求的源IP,类似Nginx的IP hash机制。

    2.4.8 static-rr

    表示根据权重,轮询

    3. Haproxy与其他调度器对比分析

    3.1 LVS与Haproxy对比

    LVS在企业应用中抗负载能力很强,但存在不足

    LVS不支持正则处理,不能实现动静分离
    对于大型网站,LVS的实施配置复杂,维护成本相对较高
    Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件

    适用于负载大的web站点
    运行在硬件上可支持数以万计的并发连接的连接请求

    3.2 LVS、Nginx与Haproxy

    LVS基于Linux操作系统实现软负载均衡,而Haproxy和Nginx是基于第三方应用实现的软负载均衡

    LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而实现Haproxy和Nginx都可以实现4层和7层技术,Haproxy可提供TCP和Http应用的负载均衡综合解决方案

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

    Haproxy功能强大,但整体性能低于4层模式的LVS负载均衡

    Nginx主要用于web服务器或缓存服务器

    3.3 Haproxy的优点

    Haproxy也是支持虚拟主机的

    Haproxy支持8种负载均衡器策略

    Haproxy的优点能补充nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定url来检测后端服务器的状态

    Haproxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

    Haproxy支持TCP协议的负载均衡转发

    4. Keepalived + Haproxy实现动静分离、负载均衡、高可用

    4.1 前置准备

    #客户机
    192.168.67.100
    #虚拟vip地址
    192.168.67.200
    
    #主服务器
    192.168.67.101
    #备服务器
    192.168.67.102
    
    #nginx静态服务器1
    192.168.67.103
    #nginx静态服务器2
    192.168.67.104
    
    #tomcat动态服务器1/2
    192.168.67.105:8081
    192.168.67.105:8082
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4.2 配置tomcat动态服务器

    #配置tomcat多实例
    
    systemctl stop firewalld
    setenforce 0
    #关闭防火墙
    
    #所需安装包
    apache-tomcat-9.0.16.tar.gz  
    jdk-8u201-linux-x64.rpm
    
    rpm -ivh jdk-8u201-linux-x64.rpm  
    #安装jdk插件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    #设置JDK环境变量
    vi /etc/profile.d/java.sh
    
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64   
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    source /etc/profile.d/java.sh
    #调用Java脚本
    
    java -version
    #查看当前JDK版本
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    #部署tomcat多实例服务
    
    cd /opt
    tar xf apache-tomcat-9.0.16.tar.gz
    #解压tomcat源码包
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    cp -r apache-tomcat-9.0.16/ /usr/local/tomcat1
    cp -r apache-tomcat-9.0.16/ /usr/local/tomcat2
    
    #将tomcat复制到usr/local ,并且改名,方便管理
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    #更改tomcat1、2 server.xhl文件
    vi /usr/local/tomcat1/conf/server.xml
    vi /usr/local/tomcat2/conf/server.xml
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    重复上述操作

    #修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
    
    • 1
    #tomcat1
    vi /usr/local/tomcat1/bin/startup.sh 
    #编辑启动文件
    
    #添加
    export CATALINA_BASE=/usr/local/tomcat1
    export CATALINA_HOME=/usr/local/tomcat1
    export TOMCAT_HOME=/usr/local/tomcat1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    vi /usr/local/tomcat1/bin/shutdown.sh
    #编辑关闭文件
    
    #添加内容
    export CATALINA_BASE=/usr/local/tomcat1
    export CATALINA_HOME=/usr/local/tomcat1
    export TOMCAT_HOME=/usr/local/tomcat1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    重复上述操作

    #路径启动
    /usr/local/tomcat1/bin/startup.sh
    /usr/local/tomcat2/bin/startup.sh
    
    ss -natp |grep java
    #查看进程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    #准备动态资源
    mkdir /usr/local/tomcat1/webapps/test
    mkdir /usr/local/tomcat2/webapps/test
    #创建动态资源根目录
    
    • 1
    • 2
    • 3
    • 4
    #创建动态页面
    
    #tomcat1
    vi /usr/local/tomcat1/webapps/test/index.jsp
    
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>JSP test1 page</title>   
    </head>
    <body>
    <% out.println("动态页面 1,http://www.test1.com");%>
    </body>
    </html>
    
    
    #tomcat2
    vi /usr/local/tomcat2/webapps/test/index.jsp
    
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>JSP test2 page</title>   
    </head>
    <body>
    <% out.println("动态页面 2,http://www.test1.com");%>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    #重启服务
    
    /usr/local/tomcat1/bin/shutdown.sh 
    /usr/local/tomcat1/bin/startup.sh 
    
    /usr/local/tomcat2/bin/shutdown.sh 
    /usr/local/tomcat2/bin/startup.sh 
    
    ss -natp |grep java
    #查看运行情况
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    #配置虚拟vip
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.67.200
    NETMASK=255.255.255.255
     
    #重启网络服务,开启虚拟网卡
    systemctl restart network
    ifup lo:0
    ifconfig lo:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    #设置路由
    route add -host 192.168.67.200 dev lo:0
    route -n
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    #配置内核参数
    vim /etc/sysctl.conf
    
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    
    sysctl -p
    #刷新内核参数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    4.3 配置nginx静态页面服务器1

    systemctl disable --now forewalld
    setenforce 0
    #关闭防火墙
    
    yum install -y epel-release
    yum install -y nginx
    #yum安装nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    rpm -ql nginx
    #查看主页文件所在路径
    
    • 1
    • 2

    在这里插入图片描述

    echo this is nginx1 > /usr/share/nginx/html/index.html
    #编辑静态页面1
    cat /usr/share/nginx/html/index.html
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    systemctl start nginx
    #启动服务
    
    • 1
    • 2
    #配置虚拟vip
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.67.200
    NETMASK=255.255.255.255
     
    #重启网络服务,开启虚拟网卡
    systemctl restart network
    ifup lo:0
    ifconfig lo:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    #设置路由
    route add -host 192.168.67.200 dev lo:0
    route -n
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    #配置内核参数
    vim /etc/sysctl.conf
    
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    
    sysctl -p
    #刷新内核参数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    4.4 配置nginx静态页面服务器2

    systemctl disable --now forewalld
    setenforce 0
    #关闭防火墙
    
    yum install -y epel-release
    yum install -y nginx
    #yum安装nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    echo this is nginx2 > /usr/share/nginx/html/index.html
    #编辑静态页面2
    cat /usr/share/nginx/html/index.html
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    systemctl start nginx
    #启动服务
    
    • 1
    • 2
    #配置虚拟vip
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.67.200
    NETMASK=255.255.255.255
     
    #重启网络服务,开启虚拟网卡
    systemctl restart network
    ifup lo:0
    ifconfig lo:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    #设置路由
    route add -host 192.168.67.200 dev lo:0
    route -n
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    #配置内核参数
    vim /etc/sysctl.conf
    
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    
    sysctl -p
    #刷新内核参数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    4.5 配置主服务器

    systemctl stop firewalld
    setenforce 0
    #关闭防火墙
    
    cd /opt
    #配置haproxy服务
    haproxy-2.8.3.tar.gz     #所需安装包
    #安装依赖环境
    yum install -y  pcre-devel bzip2-devel gcc gcc-c++ make  zlib-devel pcre-devel openssl-devel systemd-devel
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    tar xf haproxy-2.8.3.tar.gz
    #解压缩软件包
    
    • 1
    • 2

    在这里插入图片描述

    cd haproxy-2.8.3
    #进入源码包内
    ls
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    make PREFIX=/usr/local/haproxy ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1
    #指定安装目录并开启一些功能
    
    make install PREFIX=/usr/local/haproxy
    #安装到该目录
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    useradd -M -s /sbin/nologin haproxy
    #创建用户
    chown haproxy.haproxy /usr/local/haproxy -R
    #指定属主和属组
    mkdir /etc/haproxy
    #创建配置文件目录
    
    cd examples/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    cd /etc/haproxy
    vim haproxy.cfg
    #创建配置文件
    
    #以下是一些全局配置和默认认配置,可以直接拷
    
    global		#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
        #将info(及以上)的日志发送到rsyslog的local0接口,将warning(及以上)的日志发送到rsyslog的local1接口
        log 127.0.0.1 local0 info
        log 127.0.0.1 local1 warning	
    	
        maxconn 30000			            #最大连接数,HAProxy 要求系统的 ulimit -n 参数大于 maxconn*2+18
    
        #chroot /var/lib/haproxy            #修改haproxy工作目录至指定目录,一般需将此行注释掉
        pidfile     /var/run/haproxy.pid    #指定保存HAProxy进程号的文件
        user haproxy            #以指定的用户名身份运行haproxy进程
        group haproxy           #以指定的组名运行haproxy,以免因权限问题带来风险
        daemon					#让haproxy以守护进程的方式工作于后台
        #nbproc 1				#指定启动的haproxy进程个数,只能用于守护进程模式的haproxy,默认只启动一个进程。haproxy是单进程、事件驱动模型的软件,单进程下工作效率已经非常好,不建议开启多进程
        spread-checks 2         #在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。
    
    defaults   	#配置默认参数,这些参数可以被用到listen,frontend,backend组件     
        log     global			#所有前端都默认使用global中的日志配置
        mode    http			#模式为http(7层代理http,4层代理tcp)
        option  http-keep-alive #使用keepAlive连接,后端为静态建议使用http-keep-alive,后端为动态应用程序建议使用http-server-close
        option  forwardfor      #记录客户端IP在X-Forwarded-For头域中,haproxy将在发往后端的请求中加上"X-Forwarded-For"首部字段
        option  httplog			#开启httplog,在日志中记录http请求、session信息等。http模式时开启httplog,tcp模式时开启tcplog
        option  dontlognull		#不在日志中记录空连接
        option  redispatch		#当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时,将其转发到别的后端上
        option  abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        maxconn 20000			#最大连接数,“defaults”中的值不能超过“global”段中的定义
        retries 3               #定义连接后端服务器的失败重连次数,连接失败次数超过此值后会将对应后端服务器标记为不可用
        #contimeout 5000        #设置连接超时时间,默认单位是毫秒
        #clitimeout 50000       #设置客户端超时时间,默认单位是毫秒
        #srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒
        timeout http-request 2s 	#默认http请求超时时间,此为等待客户端发送完整请求的最大时长,用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发
        timeout queue 3s   	    #默认客户端请求在队列中的最大时长
        timeout connect 1s		#默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容
        timeout client 10s		#默认和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接,新版本中替代clitimeout
        timeout server 2s		#默认和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是高并发时,新版本中替代srvtimeout
        timeout http-keep-alive 10s		#默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout client
        timeout check 2s		#和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间,只是读取到检查结果的时长)
    #可以根据直接需求自行修改
    
    #直接拷贝版
    global
        log 127.0.0.1 local0 info
        log 127.0.0.1 local1 warning
     maxconn 30000
    
        pidfile     /var/run/haproxy.pid
        user haproxy
        group haproxy
        daemon
        spread-checks 2
    
    defaults
        log     global
        mode    http
        option  http-keep-alive
        option  forwardfor
        option  httplog
        option  dontlognull
        option  redispatch
        option  abortonclose
        maxconn 20000
        retries 3
        timeout http-request 2s
        timeout queue 3s
        timeout connect 1s
        timeout client 10s
        timeout server 2s
        timeout http-keep-alive 10s
        timeout check 2s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    #以下为自定义配置
    
    frontend http-in   
       bind *:80     #监听任意地址的80号端口
       acl url_jsp path_end -i .jsp 
       use_backend tomcat_server if url_jsp #定义以.jsp结尾的访问路径,转发给名字叫做tomcat_server的服务器
       default_backend nginx_server
    
    backend nginx_server
       balance roundrobin      #定义轮询算法
       option httpchk GET /index.html  #定义路径
    
       server nginx1 192.168.67.103:80 check inter 2000 fall 3 rise 2  #定义服务器地址,定义健康检查,2秒做一次检查,连续失败3次直接隔离,连续成功2次将这带入到集群中   
       server nginx2 192.168.67.104:80 check inter 2000 fall 3 rise 2
    backend tomcat_server
        balance roundrobin
        option http-server-close #关闭长连接
        cookie HA_STICKY_dy insert indirect nocache #在后端服务器启用基于cookie的会话保持策略
        server tomcat1 192.168.67.105:8081 cookie tomcat1 check inter 2000 fall 3 rise 2
        server tomcat2 192.168.67.105:8082 cookie tomcat2 check inter 2000 fall 3 rise 2
    
    listen stats    #定义监控页面
        bind *:1080                   #绑定端口1080
        stats enable                  #启用统计报告监控
        stats refresh 30s             #每30秒更新监控数据
        stats uri /stats              #访问监控页面的uri
        stats realm HAProxy\ Stats    #监控页面的认证提示
        stats auth admin:admin        #监控页面的用户名和密码
    
    #直接拷贝版
    frontend http-in
       bind *:80
       acl url_jsp path_end -i .jsp
       use_backend tomcat_server if url_jsp
       default_backend nginx_server
    
    backend nginx_server
       balance roundrobin
       option httpchk GET /index.html
       server nginx1 192.168.67.103:80 check inter 2000 fall 3 rise 2
       server nginx2 192.168.67.104:80 check inter 2000 fall 3 rise 2
    backend tomcat_server
        balance roundrobin
        option http-server-close
        cookie HA_STICKY_dy insert indirect nocache
        server tomcat1 192.168.67.105:8081 cookie tomcat1 check inter 2000 fall 3 rise 2
        server tomcat2 192.168.67.105:8082 cookie tomcat2 check inter 2000 fall 3 rise 2
    listen stats
        bind *:1080
        stats enable
        stats refresh 30s
        stats uri /stats
        stats realm HAProxy\ Stats
        stats auth admin:admin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    cd /opt/haproxy-2.8.3
    cp examples/haproxy.init /etc/init.d/haproxy
    #拷贝管理脚本文件
    vim /etc/init.d/haproxy
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
    #添加软连接
    chmod +x /etc/init.d/haproxy
    #添加执行权限
    chkconfig --add /etc/init.d/haproxy
    #添加到系统服务
    chkconfig --list haproxy
    #查看当前状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    service haproxy start
    #开启服务
    或
    systemctl start haproxy
    #开启服务
    
    ss -natp |grep haproxy
    #查看进程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    yum install keepalived -y
    #安装keepalived服务
    
    • 1
    • 2

    在这里插入图片描述

    vim /etc/keepalived/check_keepalived.sh
    #编写一个简单的keepalived的安全检查脚本
    
    #!/bin/bash
    
    if ! killall -0 haproxy
    
    then
    systemctl stop keepalived
    
    fi
    
    chmod +x check_haproxy.sh
    #添加可执行权限
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    vim keepalived.conf
    #编辑配置文件
    
    • 1
    • 2

    在这里插入图片描述
    剩下没用的全部删除

    #配置好配置文件后,将配置文件传给备服务器
    #默认备服务器已经安装好keepalived
    
    scp check_keepalived.sh keepalived.conf 192.168.67.102:`pwd`
    #将当前脚本和配置文件传给192.168.67.102相应目录
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    #前往备服务器
    vim /etc/keepalived/keepalived.conf
    #编辑配置文件
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    #返回主服务器
    systemctl start keepalived
    #开启服务
    
    ip a
    #查看vip是否配置完成
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    4.6 配置备服务器

    #按照主服务器配置haproxy服务
    service haproxy start
    #开启服务
    
    ss -natp |grep haproxy
    #查看进程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    4.7 测试

    #前往主服务器
    ip a
    
    • 1
    • 2

    在这里插入图片描述

    #前往备服务器
    ip a
    
    • 1
    • 2

    在这里插入图片描述

    #现在关掉主服务器的keepalived服务
    systemctl stop keepalived
    
    ip a
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    #前往备服务器查看
     ip a
    
    • 1
    • 2

    在这里插入图片描述

    #前往客户机
    #测试动静分离、负载均衡
    curl 192.168.67.200/test/index.jsp #x2
    curl 192.168.67.200/index.html #x2
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  • 相关阅读:
    高德地图 JS API用于绘画船舶轨迹
    【字符串】求解方程 数学
    sklearn.metrics模块重要API总结(待更新)
    【Android常见问题(六)】- UX标注色值带有百分比的使用方法
    Bicycles(变形dijkstra,动态规划思想)
    泰迪杯A题通讯产品销售和盈利能力分析一等奖作品
    【无标题】shell_43.Linux三种在 shell 脚本中处理选项的方法
    多线程系列(十三) -一文带你搞懂阻塞队列
    第六章 数字化工作方法与应用
    Qt|多个窗口共有一个提示框类
  • 原文地址:https://blog.csdn.net/m0_74170357/article/details/132837067