• Nginx 学习(十)高可用中间件的配置与实现


    一  Keepalived热备

    1  概述

    • 调度器出现单点故障,如何解决?
    • Keepalived实现了高可用集群
    • Keepalived最初是为LVS设计的,专门监控各服务器节点的状态
    • Keepalived后来加入了VRRP功能,防止单点故障

    2  运行原理

    Keepalived检测每个服务器节点状态,当服务器节点异常或工作出现故障, Keepalived将故障节点从集群系统中剔除,故障节点恢复后,Keepalived再将其加入到集群系统中所有工作自动完成,无需人工千预

    3  配高可用的web拓扑

    使用keepalived为主从设备提供VIP地址漂移

    二  案列1:使用Keepalived实现web服务器的高可用

    • Web服务器IP地址分别为192.168.88.100和192.168.88.200
    • Web服务器的VIP地址为192.168.88.80
    • 客户端通过访问VIP地址访问Web页面

    1  环境说明

    • web1:eth0->192.168.88.100/24
    • web2:eth0->192.168.88.200/24

    2  配置keepalived

    1. # 在两台web服务器上安装keepalived
    2. [root@pubserver cluster]# vim 07-install-keepalived.yml
    3. ---
    4. - name: install keepalived
    5. hosts: webservers
    6. tasks:
    7. - name: install keepalived # 安装keepalived
    8. yum:
    9. name: keepalived
    10. state: present
    11. [root@pubserver cluster]# ansible-playbook 07-install-keepalived.yml
    12. # 修改配置文件
    13. [root@web1 ~]# vim /etc/keepalived/keepalived.conf
    14. 12 router_id web1 # 设置本机在集群中的唯一识别符
    15. 13 vrrp_iptables # 自动配置iptables放行规则
    16. ... ...
    17. 20 vrrp_instance VI_1 {
    18. 21 state MASTER # 状态,主为MASTER,备为BACKUP
    19. 22 interface eth0 # 网卡
    20. 23 virtual_router_id 51 # 虚拟路由器地址
    21. 24 priority 100 # 优先级
    22. 25 advert_int 1 # 发送心跳消息的间隔
    23. 26 authentication {
    24. 27 auth_type PASS # 认证类型为共享密码
    25. 28 auth_pass 1111 # 集群中的机器密码相同,才能成为集群
    26. 29 }
    27. 30 virtual_ipaddress {
    28. 31 192.168.88.80/24 # VIP地址
    29. 32 }
    30. 33 }
    31. # 删除下面所有行
    32. [root@web1 ~]# systemctl start keepalived
    33. # 等几秒服务完全启动后,可以查看到vip
    34. [root@web1 ~]# ip a s eth0 | grep '88'
    35. inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    36. inet 192.168.88.80/24 scope global secondary eth0
    37. # 配置web2
    38. [root@web1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.200:/etc/keepalived/
    39. [root@web2 ~]# vim /etc/keepalived/keepalived.conf
    40. 12 router_id web2 # 改id
    41. 13 vrrp_iptables
    42. ... ...
    43. 20 vrrp_instance VI_1 {
    44. 21 state BACKUP # 改状态
    45. 22 interface eth0
    46. 23 virtual_router_id 51
    47. 24 priority 80 # 改优先级
    48. 25 advert_int 1
    49. 26 authentication {
    50. 27 auth_type PASS
    51. 28 auth_pass 1111
    52. 29 }
    53. 30 virtual_ipaddress {
    54. 31 192.168.88.80/24
    55. 32 }
    56. 33 }
    57. # 启动服务
    58. [root@web2 ~]# systemctl start keepalived
    59. # 查看地址,eth0不会出现vip
    60. [root@web2 ~]# ip a s | grep '88'
    61. inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    62. # 测试,现在访问88.80,看到是web1上的内容
    63. [root@client1 ~]# curl http://192.168.88.80
    64. Welcome from web1
    65. # 模拟web1出现故障
    66. [root@web1 ~]# systemctl stop keepalived.service
    67. # 测试,现在访问88.80,看到是web2上的内容
    68. [root@client1 ~]# curl http://192.168.88.80
    69. Welcome from web2
    70. # 在web2上查看vip,可以查看到vip 192.168.88.80
    71. [root@web2 ~]# ip a s | grep '88'
    72. inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    73. inet 192.168.88.80/24 scope global secondary eth0

    三  案例2:配置track_script脚本

    通过track script脚本控制监视MASTER服务器的80端口,实现主备切换

    • 创建/etc/keepalived/check_http.sh脚本
    • 该脚本检查本机是否监听在80端口
    • 如果正在监听端口,退出码设置为0,否则为1
    • 修改KeepAlived配置,利用创建的脚本决定是否要切换VIP到BACKUP节点

    1  跟踪脚本

    • KeepAlived默认只提供一个VIP,对运行的服务无感知
    • track_script用于检查一个脚本的返回值,如果返回值为0,则认为当前主机处于正常状态,如果返回值为1,则认为当前主机处于异常状态,需要将VIP地址切换到另一台备用机器上
    • track_script来检测应用程序或服务是否正常,可以增加VIP地址更准确、可靠的自动切换功能,提高系统的可用性和可靠性

    2  实现原理

    • 配置高可用的web集群时,Keepalived只为服务器提供了VIP
    • Keepalived不知道服务器上运行了哪些服务
    • MASTER服务器可以通过跟踪脚本监视本机的80端口,一旦本机80端口失效,则将VIP切换至BACKUP服务器
    • Keepalived对脚本的要求是,退出码为0表示访问成功;退出码为1表示失败。

    3  实施

    1. # 1. 在MASTER上创建监视脚本
    2. [root@web1 ~]# vim /etc/keepalived/check_http.sh
    3. #!/bin/bash
    4. ss -tlnp | grep :80 &> /dev/null && exit 0 || exit 1
    5. [root@web1 ~]# chmod +x /etc/keepalived/check_http.sh
    6. # 2. 修改MASTER配置文件,使用脚本
    7. [root@web1 ~]# vim /etc/keepalived/keepalived.conf
    8. 1 ! Configuration File for keepalived
    9. 2
    10. 3 global_defs {
    11. ...略...
    12. 18 }
    13. 19
    14. 20 vrrp_script chk_http_port { # 定义监视脚本
    15. 21 script "/etc/keepalived/check_http.sh"
    16. 22 interval 2 # 脚本每隔2秒运行一次
    17. 23 }
    18. 24
    19. 25 vrrp_instance VI_1 {
    20. 26 state MASTER
    21. 27 interface eth0
    22. 28 virtual_router_id 51
    23. 29 priority 100
    24. 30 advert_int 1
    25. 31 authentication {
    26. 32 auth_type PASS
    27. 33 auth_pass 1111
    28. 34 }
    29. 35 virtual_ipaddress {
    30. 36 192.168.88.80/24
    31. 37 }
    32. 38 track_script { # 引用脚本
    33. 39 chk_http_port
    34. 40 }
    35. 41 }
    36. # 3. 重起服务
    37. [root@web1 ~]# systemctl restart keepalived.service
    38. # 4. 测试,关闭web1的nginx后,VIP将会切换至web2
    39. [root@web1 ~]# systemctl stop nginx.service
    40. [root@web1 ~]# ip a s | grep 88
    41. inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    42. [root@web2 ~]# ip a s | grep 88
    43. inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    44. inet 192.168.88.80/24 scope global secondary eth0
    45. # 5. 当MASTER的nginx修复后,VIP将会切换回至web1
    46. [root@web1 ~]# systemctl start nginx.service
    47. [root@web1 ~]# ip a s | grep 88
    48. inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    49. inet 192.168.88.80/24 scope global secondary eth0
    50. [root@web2 ~]# ip a s | grep 88
    51. inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0

    四   案列3:Keepalived + LVS服务器

    • 准备5台服务器,两台用于Real ServerI,两台用于搭建高可用、负载平衡集群,一台作为路由器
    • 在RealServer上配置VIP并调整内核参数
    • 两台调度器节点均安装Keepalived和LVS
    • 通过Keepalived配置DR模式的LVS

    1  项目拓扑图

    • 使用Keepalived高可用解决调度器单点失败问题
    • 主、备调度器上配置LVS
    • 主调度器异常时,Keepalived启用备用调度器调度器

    2  环境准备

    环境说明:LVS-DR模式 

    client1eth0->192.168.88.10
    lvs1eth0->192.168.88.5
    lvs2eth0->192.168.88.6
    web1eth0->192.168.88.100
    web2eth0->192.168.88.200

    1. # 关闭2台web服务器上的keepalived,并卸载
    2. [root@pubserver cluster]# vim 08-rm-keepalived.yml
    3. ---
    4. - name: remove keepalived
    5. hosts: webservers
    6. tasks:
    7. - name: stop keepalived # 停服务
    8. service:
    9. name: keepalived
    10. state: stopped
    11. - name: uninstall keepalived # 卸载
    12. yum:
    13. name: keepalived
    14. state: absent
    15. [root@pubserver cluster]# ansible-playbook 08-rm-keepalived.yml
    16. # 创建新虚拟机lvs2
    17. [root@myhost ~]# vm clone lvs2
    18. # 为lvs2设置ip地址
    19. [root@myhost ~]# vm setip lvs2 192.168.88.6
    20. # 连接
    21. [root@myhost ~]# ssh 192.168.88.6
    • 配置高可用、负载均衡
    1. 在2台web服务器的lo上配置vip
    2. 在2台web服务器上配置内核参数
    3. 删除lvs1上的eth0上的VIP地址。因为vip将由keepalived接管
    1. [root@pubserver cluster]# vim 09-del-lvs1-vip.yml
    2. ---
    3. - name: del lvs1 vip
    4. hosts: lvs1
    5. tasks:
    6. - name: rm vip
    7. lineinfile: # 在指定文件中删除行
    8. path: /etc/sysconfig/network-scripts/ifcfg-eth0
    9. regexp: 'IPADDR2=' # 正则匹配
    10. state: absent
    11. notify: restart system
    12. handlers:
    13. - name: restart system
    14. shell: reboot
    15. [root@pubserver cluster]# ansible-playbook 09-del-lvs1-vip.yml
    16. # 查看结果
    17. [root@lvs1 ~]# ip a s eth0 | grep 88
    18. inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
    • 删除lvs1上的lvs规则。因为lvs规则将由keepalived创建
    1. [root@lvs1 ~]# ipvsadm -Ln # 查看规则
    2. [root@lvs1 ~]# ipvsadm -D -t 192.168.88.15:80
    • 在lvs上配置keepalived
    1. # 在主机清单文件中加入lvs2的说明
    2. [root@pubserver cluster]# vim inventory
    3. ...略...
    4. [lb]
    5. lvs1 ansible_host=192.168.88.5
    6. lvs2 ansible_host=192.168.88.6
    7. ...略...
    8. # 安装软件包
    9. [root@pubserver cluster]# cp 01-upload-repo.yml 10-upload-repo.yml
    10. ---
    11. - name: config repos.d
    12. hosts: lb
    13. tasks:
    14. - name: delete repos.d
    15. file:
    16. path: /etc/yum.repos.d
    17. state: absent
    18. - name: create repos.d
    19. file:
    20. path: /etc/yum.repos.d
    21. state: directory
    22. mode: '0755'
    23. - name: upload local88
    24. copy:
    25. src: files/local88.repo
    26. dest: /etc/yum.repos.d/
    27. [root@pubserver cluster]# ansible-playbook 10-upload-repo.yml
    28. [root@pubserver cluster]# vim 11-install-lvs2.yml
    29. ---
    30. - name: install lvs keepalived
    31. hosts: lb
    32. tasks:
    33. - name: install pkgs # 安装软件包
    34. yum:
    35. name: ipvsadm,keepalived
    36. state: present
    37. [root@pubserver cluster]# ansible-playbook 11-install-lvs2.yml
    38. [root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
    39. 12 router_id lvs1 # 为本机取一个唯一的id
    40. 13 vrrp_iptables # 自动开启iptables放行规则
    41. ... ...
    42. 20 vrrp_instance VI_1 {
    43. 21 state MASTER
    44. 22 interface eth0
    45. 23 virtual_router_id 51
    46. 24 priority 100
    47. 25 advert_int 1
    48. 26 authentication {
    49. 27 auth_type PASS
    50. 28 auth_pass 1111
    51. 29 }
    52. 30 virtual_ipaddress {
    53. 31 192.168.88.15 # vip地址,与web服务器的vip一致
    54. 32 }
    55. 33 }
    56. # 以下为keepalived配置lvs的规则
    57. 35 virtual_server 192.168.88.15 80 { # 声明虚拟服务器地址
    58. 36 delay_loop 6 # 健康检查延迟6秒开始
    59. 37 lb_algo wrr # 调度算法为wrr
    60. 38 lb_kind DR # 工作模式为DR
    61. 39 persistence_timeout 50 # 50秒内相同客户端调度到相同服务器
    62. 40 protocol TCP # 协议是TCP
    63. 41
    64. 42 real_server 192.168.88.100 80 { # 声明真实服务器
    65. 43 weight 1 # 权重
    66. 44 TCP_CHECK { # 通过TCP协议对真实服务器做健康检查
    67. 45 connect_timeout 3 # 连接超时时间为3
    68. 46 nb_get_retry 3 # 3次访问失败则认为真实服务器故障
    69. 47 delay_before_retry 3 # 两次检查时间的间隔3
    70. 48 }
    71. 49 }
    72. 50 real_server 192.168.88.200 80 {
    73. 51 weight 2
    74. 52 TCP_CHECK {
    75. 53 connect_timeout 3
    76. 54 nb_get_retry 3
    77. 55 delay_before_retry 3
    78. 56 }
    79. 57 }
    80. 58 }
    81. # 以下部分删除
    82. # 启动keepalived服务
    83. [root@lvs1 ~]# systemctl start keepalived
    84. # 验证
    85. [root@lvs1 ~]# ip a s eth0 | grep 88
    86. inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
    87. inet 192.168.88.15/32 scope global eth0
    88. [root@lvs1 ~]# ipvsadm -Ln # 出现规则
    89. IP Virtual Server version 1.2.1 (size=4096)
    90. Prot LocalAddress:Port Scheduler Flags
    91. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    92. TCP 192.168.88.15:80 wrr persistent 50
    93. -> 192.168.88.100:80 Route 1 0 0
    94. -> 192.168.88.200:80 Route 2 0 0
    95. # 客户端连接测试
    96. [root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
    97. Welcome from web2
    98. Welcome from web2
    99. Welcome from web2
    100. Welcome from web2
    101. Welcome from web2
    102. Welcome from web2
    103. # 为了效率相同的客户端在50秒内分发给同一台服务器。为了使用同一个客户端可以看到轮询效果,可以注释配置文件中相应的行后,重启keepavlied。
    104. [root@lvs1 ~]# vim +39 /etc/keepalived/keepalived.conf
    105. ...略...
    106. # persistence_timeout 50
    107. ...略...
    108. [root@lvs1 ~]# systemctl restart keepalived.service
    109. # 在客户端验证
    110. [root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
    111. Welcome from web2
    112. Welcome from web1
    113. Welcome from web2
    114. Welcome from web2
    115. Welcome from web1
    116. Welcome from web2
    117. # 配置LVS2
    118. [root@lvs1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.6:/etc/keepalived/
    119. [root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
    120. 12 router_id lvs2
    121. 21 state BACKUP
    122. 24 priority 80
    123. [root@lvs2 ~]# systemctl start keepalived
    124. [root@lvs2 ~]# ipvsadm -Ln # 出现规则
    125. IP Virtual Server version 1.2.1 (size=4096)
    126. Prot LocalAddress:Port Scheduler Flags
    127. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    128. TCP 192.168.88.15:80 wrr
    129. -> 192.168.88.100:80 Route 1 0 0
    130. -> 192.168.88.200:80 Route 2 0 0
    • 验证
    1. # 1. 验证真实服务器健康检查
    2. [root@web1 ~]# systemctl stop nginx
    3. [root@lvs1 ~]# ipvsadm -Ln # web1在规则中消失
    4. [root@lvs2 ~]# ipvsadm -Ln
    5. [root@web1 ~]# systemctl start nginx
    6. [root@lvs1 ~]# ipvsadm -Ln # web1重新出现在规则中
    7. [root@lvs2 ~]# ipvsadm -Ln
    8. # 2. 验证lvs的高可用性
    9. [root@lvs1 ~]# shutdown -h now # 关机
    10. [root@lvs2 ~]# ip a s | grep 88 # 可以查看到vip
    11. inet 192.168.88.6/24 brd 192.168.88.255 scope global noprefixroute eth0
    12. inet 192.168.88.15/32 scope global eth0
    13. # 客户端访问vip依然可用
    14. [root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
    15. Welcome from web1
    16. Welcome from web2
    17. Welcome from web2
    18. Welcome from web1
    19. Welcome from web2
    20. Welcome from web2

    五  HAProxy

    1  简介

    它是免费、快速并且可靠的一种解决方案,适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理,可以提供高可用性、负载均衡以及基于TCP和HTTP应用的代理

    2  衡量负责均衡器性能的因素

    • Session rate 会话率,每秒钟产生的会话数
    • Session concurrency 并发会话数,服务器处理会话的时间越长,并发会话数越多
    • Data rate数据速率,以MB/s或Mbps衡量

    3 工作模式

    mode http
            -  客户端请求被深度分析后再发往服务器,只适用于web服务
    mode tcp
            -  4层调度,不检查第七层信息,适用于各种服务
    mode health
            -  仅做健康状态检查,已经不建议使用

    六  案列4  配置HAProxy负载平衡集群

    • 准备三台虚拟机两台做Web服务器,一台安装HAProxy
    • 安装并配置HAProxy,发往HAProxy的连接请求,分发到真正的Web服务器-把HAProxy设置为开机自动启动
    • 设置HAProxy以实现监控,并查看监控信息

    1  项目拓扑图

    2  环境准备

    client1eth0 -> 192.168.88.10
    HAProxyeth0 -> 192.168.88.5
    web1eth0 -> 192.168.88.100
    web2eth0 -> 192.168.88.200

    3  初始化配置

    1. # 关闭192.168.88.6
    2. [root@lvs2 ~]# shutdown -h now
    3. # 配置192.168.88.5为haproxy服务器
    4. [root@pubserver cluster]# vim 12-config-haproxy.yml
    5. ---
    6. - name: config haproxy
    7. hosts: lvs1
    8. tasks:
    9. - name: rm lvs keepalived # 删除软件包
    10. yum:
    11. name: ipvsadm,keepalived
    12. state: absent
    13. - name: rename hostname # 修改主机名
    14. shell: hostnamectl set-hostname haproxy1
    15. - name: install haproxy # 安装软件包
    16. yum:
    17. name: haproxy
    18. state: present
    19. [root@pubserver cluster]# ansible-playbook 12-config-haproxy.yml
    20. # web服务器,不需要配置vip,不需要改内核参数。但是存在对haproxy也没有影响。
    • 配置haproxy
    1. # 修改配置文件
    2. [root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg
    3. # 配置文件中,global是全局配置;default是缺省配置,如果后续有和default相同的配置,default配置将会被覆盖。
    4. # 配置文件中,frontend描述haproxy怎么和用户交互;backend描述haproxy怎么和后台应用服务器交互。这两个选项,一般不单独使用,而是合并到一起,名为listen。
    5. # 将64行之后全部删除,写入以下内容
    6. 64 #---------------------------------------------------------------------
    7. 65 listen myweb # 定义虚拟服务器
    8. 66 bind 0.0.0.0:80 # 监听在所有可用地址的80端口
    9. 67 balance roundrobin # 定义轮询调度算法
    10. # 对web服务器做健康检查,2秒检查一次,如果连续2次检查成功,认为服务器是健康的,如果连续5次检查失败,认为服务器坏了
    11. 68 server web1 192.168.88.100:80 check inter 2000 rise 2 fall 5
    12. 69 server web2 192.168.88.200:80 check inter 2000 rise 2 fall 5
    13. 70
    14. 71 listen stats # 定义虚拟服务器
    15. 72 bind 0.0.0.0:1080 # 监听在所有可用地址的1080端口
    16. 73 stats refresh 30s # 设置监控页面自动刷新时间为30
    17. 74 stats uri /stats # 定义监控地址是/stats
    18. 75 stats auth admin:admin # 监控页面的用户名和密码都是admin
    19. # 启服务
    20. [root@haproxy1 ~]# systemctl start haproxy.service
    21. # 使用firefox访问监控地址 http://192.168.88.5:1080/stats
    22. # 客户端访问测试
    23. [root@client1 ~]# for i in {1..6}; do curl http://192.168.88.5/; done
    24. Welcome from web2
    25. Welcome from web1
    26. Welcome from web2
    27. Welcome from web1
    28. Welcome from web2
    29. Welcome from web1
    30. # client1上使用ab访问
    31. [root@client1 ~]# yum install -y httpd-tools
    32. [root@client1 ~]# ab -n1000 -c200 http://192.168.88.5/

    监控地址 http://192.168.88.5:1080/stats如下:

    • Queue:队列长度。Cur当前队列长度,Max最大队列长度,Limit限制长度
    • Session rate:会话率,每秒钟的会话数
    • Sessions:会话数
    • Bytes:字节数。In收到的字节数,Out发出的字节数
    • Denied:拒绝。Req请求,Resp响应
    • Errors:错误
    • Warning:警告
    • Status:状态
    • LastChk:上一次检查。L4OK,第四层tcp检查通过
    • Wght:权重

    七  负载均衡调度器比较

    LVS适用于需要高并发性和稳定性的场景,Nginx适用于静态文件服务和反向代理等应用层负载均衡场景,HAProxy则具备较为丰富的功能和灵活性,适用于多种负载均衡场景。

    1  LVS(Linux Virtual Server)

    优点:

    • 高性能:LVS使用Linux内核中的IP负载均衡技术,能够实现非常高的并发处理能力。
    • 稳定性:LVS经过长时间的实践应用,成熟稳定,被广泛使用。
    • 可用性:支持高可用性的配置,可以实现故障自动切换,提供无中断的服务。
    • 灵活性:可根据需要采用多种负载均衡算法,如轮询、加权轮询、哈希等。

    缺点:

    • 配置复杂:相对于其他两个技术,LVS的配置相对较为复杂,需要更深入的了解和配置。
    • 功能相对局限:LVS主要是一种传输层负载均衡技术,无法像Nginx和HAProxy那样对应用层协议进行处理。

    2  Nginx

    优点:

    • 高性能:Nginx采用了基于事件驱动的异步非阻塞架构,能够处理大量并发连接。
    • 负载均衡:Nginx具备内置的负载均衡功能,可以根据配置进行请求的转发。
    • 丰富的功能:Nginx支持反向代理、静态文件服务、缓存、SSL等,在Web服务器领域有很广泛的应用。

    缺点:

    • 功能相对较少:相对于LVS和HAProxy,Nginx在负载均衡算法和健康检查等方面的功能相对较少。
    • 限制于应用层协议:Nginx只能对HTTP和HTTPS等应用层协议进行处理,无法处理其他协议。

    3  HAProxy

    优点:

    • 灵活性:HAProxy支持丰富的负载均衡算法和会话保持方式,可以根据需求进行灵活配置。
    • 完整的功能:HAProxy支持高可用性配置、健康检查、故障恢复、SSL等功能,在负载均衡领域应用广泛。
    • 高性能:HAProxy性能优良,能够处理大量并发连接,并且支持异步IO模型。

    缺点:

    • 内存占用:相对于Nginx和LVS,HAProxy在处理大量连接时消耗的内存稍高一些。
    • 高可用性:HAProxy需要借助额外的工具来实现高可用性,例如Keepalived。
  • 相关阅读:
    springboot幼儿园幼儿基本信息管理系统毕业设计源码201126
    用起 Arduino IDE 2.0版本
    机器学习(一)
    STM32 基础知识
    只会postman单接口测试?这些高级功能你必须掌握
    【Java基础】方法重写、修饰符、权限修饰符及final、static关键字
    数据驭王: PostgreSQL教程指南解密
    windows10下同时安装两个mysql服务的解决办法
    js 对象深拷贝递归实现
    理解单点登录
  • 原文地址:https://blog.csdn.net/2301_79227925/article/details/132631532