• Haproxy负载均衡


    软件:haproxy---主要是做负载均衡的7层,也可以做4层负载均衡
    apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。
    负载均衡是通过OSI协议对应的
    7层负载均衡:用的7层http协议
    4层负载均衡:用的是tcp协议加端口号做的负载均衡

    ha-proxy概述

    ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。

    ha-proxy的特点

    ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。

    •支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
    •支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
    •性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
    •拥有一个功能出色的监控页面,实时了解系统的当前状况。
    •功能强大的ACL支持,给用户极大的方便。

    haproxy算法:

    1.roundrobin
    基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接
    2.static-rr
    基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
    3.leastconn
    新的连接请求被派发至具有最少连接数目的后端服务器.

    Haproxy 实现七层负载

    Keepalived + Haproxy

    /etc/haproxy/haproxy.cfg
    global                                                      //关于进程的全局参数
        log             127.0.0.1 local2 info  #日志服务器
        pidfile         /var/run/haproxy.pid  #pid文件
        maxconn         4000     #最大连接数
        user            haproxy   #用户
        group           haproxy      #组
        daemon            #守护进程方式后台运行
        nbproc 1        #工作进程数量  cpu内核是几就写几
        
        defaults        用于为其它配置段提供默认参数
        listen          是frontend和backend的结合体
        frontend        虚拟服务VIrtual Server
        backend         真实服务器Real Server

    实验准备俩台提供后端服务页面的nginx服务器,一台安装haproxy的服务器。这台服务器就是负载均衡,客户端通过访问这台负载均衡服务器来访问后端页面

    安装haproxy服务器:192.168.231.190

    后端服务器:192.168.231.185

                           192.168.231.183

    后端服务器:

    1. 服务器1
    2. yum -y install nginx
    3. echo "server--1" > /usr/share/nginx/html/index.html
    4. systemctl start nginx
    5. 服务器2
    6. yum -y install nginx
    7. echo "server--2" > /usr/share/nginx/html/index.html
    8. systemctl start nginx

    安装haproxy的服务器:

    1. 安装haproxy
    2. yum -y install haproxy
    3. 修改haproxy的配置文件
    4. vim /etc/haproxy/haproxy.cfg
    5. global
    6. log 127.0.0.1 local2 info
    7. pidfile /var/run/haproxy.pid
    8. maxconn 4000 #优先级低
    9. user haproxy
    10. group haproxy
    11. daemon #以后台形式运行ha-proxy
    12. nbproc 1 #工作进程数量 cpu内核是几就写几
    13. defaults
    14. mode http #工作模式 http ,tcp 是 4 层,http是 7
    15. log global
    16. retries 3 #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查
    17. option redispatch #服务不可用后重定向到其他健康服务器。
    18. maxconn 4000 #优先级中
    19. contimeout 5000 #ha服务器与后端服务器连接超时时间,单位毫秒ms
    20. clitimeout 50000 #客户端超时
    21. srvtimeout 50000 #后端服务器超时
    22. listen stats
    23. bind *:81
    24. stats enable
    25. stats uri /haproxy
    26. stats auth qianfeng:123
    27. frontend web
    28. mode http
    29. bind *:80 #监听哪个ip和什么端口
    30. option httplog #日志类别 http 日志格式
    31. acl html url_reg -i \.html$ #1.访问控制列表名称html。规则要求访问以html结尾的url
    32. use_backend httpservers if html #2.如果满足acl html规则,则推送给后端服务器httpservers
    33. default_backend httpservers #默认使用的服务器组
    34. backend httpservers #名字要与上面的名字必须一样
    35. balance roundrobin #负载均衡的方式
    36. server http1 192.168.231.185:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
    37. server http2 192.168.231.183:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2

    haproxy的监控端口是80,与后端nginx的端口重复,更改配置文件,

    listen  stats 

    bind  *.90

    #check inter 2000          检测心跳频率
    #rise 2     2 次正确认为服务器可用
    #fall 2      2 次失败认为服务器不可用

    启动haproxy

    systemctl start haproxy

    浏览器访问:192.168.231.190

    由于设置的权重是相同的  因此会各自访问一次

    查看监控

    Haproxy与keepalived高可用

    实验机器

    后端提供服务的服务器:

     192.168.231.185 

     192.168.231.183

    负载均衡服务器:

    192.168.231.190

    192.168.231.191

    1. 实验步骤:
    2. 在俩台后端服务器上 都进行相同操作
    3. yum -y install nginx
    4. echo "server--1" > /usr/share/nginx/html/index.html
    5. systemctl start nginx
    1. 俩台负载均衡服务器都进行操作:
    2. yum -y install haproxy
    3. vim /etc/haproxy/haproxy.cfg
    4. global
    5. log 127.0.0.1 local2 info
    6. pidfile /var/run/haproxy.pid
    7. maxconn 4000 #优先级低
    8. user haproxy
    9. group haproxy
    10. daemon #以后台形式运行ha-proxy
    11. nbproc 1 #工作进程数量 cpu内核是几就写几
    12. defaults
    13. mode http #工作模式 http ,tcp 是 4 层,http是 7
    14. log global
    15. retries 3 #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查
    16. option redispatch #服务不可用后重定向到其他健康服务器。
    17. maxconn 4000 #优先级中
    18. contimeout 5000 #ha服务器与后端服务器连接超时时间,单位毫秒ms
    19. clitimeout 50000 #客户端超时
    20. srvtimeout 50000 #后端服务器超时
    21. listen stats
    22. bind *:81
    23. stats enable
    24. stats uri /haproxy
    25. stats auth qianfeng:123
    26. frontend web
    27. mode http
    28. bind *:80 #监听哪个ip和什么端口
    29. option httplog #日志类别 http 日志格式
    30. acl html url_reg -i \.html$ #1.访问控制列表名称html。规则要求访问以html结尾的url
    31. use_backend httpservers if html #2.如果满足acl html规则,则推送给后端服务器httpservers
    32. default_backend httpservers #默认使用的服务器组
    33. backend httpservers #名字要与上面的名字必须一样
    34. balance roundrobin #负载均衡的方式
    35. server http1 192.168.231.185:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
    36. server http2 192.168.231.183:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2

    在负载均衡服务器下载keepalived:

    1. 负载均衡服务器进行相同操作:
    2. yum -y install keepalived
    3. 修改配置文件,在第一台负载均衡服务器上
    4. vim /etc/keepalived/keepalived.conf
    5. ! Configuration File for keepalived
    6. global_defs {
    7. router_id director1
    8. }
    9. vrrp_instance VI_1 {
    10. state MASTER
    11. interface ens33
    12. virtual_router_id 80
    13. priority 100
    14. advert_int 1
    15. authentication {
    16. auth_type PASS
    17. auth_pass 1111
    18. }
    19. virtual_ipaddress {
    20. 192.168.231.66/24
    21. }
    22. }
    23. 修改第二台负载均衡服务器的配置文件
    24. vim /etc/keepalived/keepalived.conf
    25. ! Configuration File for keepalived
    26. global_defs {
    27. router_id directory2
    28. }
    29. vrrp_instance VI_1 {
    30. state BACKUP
    31. interface ens33
    32. nopreempt
    33. virtual_router_id 80
    34. priority 50
    35. advert_int 1
    36. authentication {
    37. auth_type PASS
    38. auth_pass 1111
    39. }
    40. virtual_ipaddress {
    41. 192.168.231.66/24
    42. }
    43. }

    这里定义的master的负载均衡服务器是192.168.231.190

    定义的backup的负载均衡服务器是192.168.231.191

    定义的虚拟ip是192.168.231.66

    因此用户访问时访问的就是192.168.231.66

    然后负载均衡服务器均启动keepalived,此时的虚拟ip 在master服务器上

    systemctl start keepalived

    浏览器访问:

    扩展对调度器Haproxy健康检查

    两台机器都做
    让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Haproxy失败,则关闭本机的Keepalived

    写一个脚本,然后在keepalived的配置文件内引用

    在master服务器

    1. a. script 这是脚本内容
    2. [root@ha-proxy-master ~]# cat /etc/keepalived/check_haproxy_status.sh
    3. #!/bin/bash /usr/bin/curl -I http://localhost &>/dev/null
    4. if [ $? -ne 0 ];then
    5. # /etc/init.d/keepalived stop
    6. systemctl stop keepalived
    7. fi
    8. [root@ha-proxy-master ~]# chmod a+x /etc/keepalived/check_haproxy_status.sh
    9. b. keepalived使用script
    10. [root@ha-proxy-master keepalived]# vim keepalived.conf
    11. ! Configuration File for keepalived
    12. global_defs {
    13. router_id director1
    14. }
    15. vrrp_script check_haproxy {
    16. script "/etc/keepalived/check_haproxy_status.sh"
    17. interval 5
    18. }
    19. vrrp_instance VI_1 {
    20. state MASTER
    21. interface ens33
    22. virtual_router_id 80
    23. priority 100
    24. advert_int 1
    25. authentication {
    26. auth_type PASS
    27. auth_pass 1111
    28. }
    29. virtual_ipaddress {
    30. 192.168.231.66/24
    31. }
    32. track_script {
    33. check_haproxy
    34. }
    35. }

    在backup服务器

    将脚本复制到backup服务器,然后修改backup的keepalived的配置文件

    1. [root@ha-proxy-slave keepalived]# vim keepalived.conf
    2. ! Configuration File for keepalived
    3. global_defs {
    4. router_id directory2
    5. }
    6. vrrp_script check_haproxy {
    7. script "/etc/keepalived/check_haproxy_status.sh"
    8. interval 5
    9. }
    10. vrrp_instance VI_1 {
    11. state BACKUP
    12. interface ens33
    13. nopreempt
    14. virtual_router_id 80
    15. priority 50
    16. advert_int 1
    17. authentication {
    18. auth_type PASS
    19. auth_pass 1111
    20. }
    21. virtual_ipaddress {
    22. 192.168.231.66/24
    23. }
    24. track_script {
    25. check_haproxy
    26. }
    27. }

    重启keepalived

    1. [root@ha-proxy-master keepalived]# systemctl restart keepalived
    2. [root@ha-proxy-slave keepalived]# systemctl restart keepalived
    3. 注:必须先启动haproxy,再启动keepalived

    两台机器都配置haproxy的日志:需要打开注释并添加

    1. [root@ha-proxy-master ~]# vim /etc/rsyslog.conf
    2. # Provides UDP syslog reception #由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听
    3. $ModLoad imudp
    4. $UDPServerRun 514
    5. 找到 #### RULES #### 下面添加
    6. local2.* /var/log/haproxy.log
    7. [root@ha-proxy-master ~]# systemctl restart rsyslog
    8. [root@ha-proxy-master ~]# systemctl restart haproxy
    9. [root@ha-proxy-master ~]# tail -f /var/log/haproxy.log

  • 相关阅读:
    点云处理实战 PCL求解点云表面曲率
    【接口自动化测试】Postman(一) 介绍和安装
    学习在php中将特大数字转成带有千/万/亿为单位的字符串
    CVPR‘15 Joint action recognition and pose estimation from video
    聚苯硫醚修饰牛血清白蛋白/人血清白蛋白/卵清白蛋白纳米粒PPS-PEG-BSA/HSA/OVA(规格信息)
    ES组合查询语法
    基于python+Django+SVM算法模型的文本情感识别系统
    CentOS7.x 设置 Java 开发运行环境
    网站接入微信支付后如何实现退款和取消预约?
    一种管理KEIL工程输出文件的方法
  • 原文地址:https://blog.csdn.net/m0_59933574/article/details/134198391