高可用架构一利用HAproxy进行负载均衡服务器部署

Posted python运维实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高可用架构一利用HAproxy进行负载均衡服务器部署相关的知识,希望对你有一定的参考价值。

一.什么是负载均衡?

负载均衡,英文名称为Load Balance,是指建立在现有网络结构之上,并提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其原理就是数据流量分摊到多个服务器上执行,减轻每台服务器的压力,多台服务器共同完成工作任务,从而提高了数据的吞吐量。

二.HAproxy概述

(1)HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

(2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

(3)HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

在生产环境中,在7层处理上使用HAProxy作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件负载均衡设备使用TCP缓冲,可建立极长的请求,且有着较大的响应时间。

三.实现架构

【高可用架构一】利用HAproxy进行负载均衡服务器部署

场景说明:

1.服务器操作系统

 
   
   
 
  1. [root@haopython ~]# uname -a

  2. Linux haopython.com 3.10.0-862.2.3.el7.x86_64 #1 SMP Wed May 9 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

  3. [root@haopython ~]#

Centos7.3

2.应用软件

 
   
   
 
  1. [root@node01 ~]# rpm -qa | grep haproxy

  2. haproxy-1.5.18-7.el7.x86_64

  3. [root@web01 ~]# httpd -v

  4. Server version: Apache/2.4.6 (CentOS)

  5. Server built:   Apr 20 2018 18:10:38    

3.服务器IP规划

负载均衡器1台:192.168.150.71/24 Web服务器3台:192.168.150.73/24 192.168.150.74/24 192.168.150.75/24

四.软件安装与配置

本次主要配置haproxy代理服务器软件作为后端3台WEB服务器实现负载均衡的功能。

1.yum方式安装haproxy软件

 
   
   
 
  1. [root@haopython ~]# yum install haproxy –y

2.配置haproxy代理服务器

 
   
   
 
  1. [root@haopython haproxy]# ls

  2. haproxy.cfg  haproxy.cfg.bak

  3. [root@haopython haproxy]# vim haproxy.cfg

  4. [root@haopython /]# vim /etc/haproxy/haproxy.cfg

配置文件内容:

 
   
   
 
  1. #---------------------------------------------------------------------

  2. # Example configuration for a possible web application.  See the

  3. # full configuration options online.

  4. #

  5. #   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

  6. #

  7. #---------------------------------------------------------------------

  8. #---------------------------------------------------------------------

  9. # Global settings

  10. #---------------------------------------------------------------------

  11. global

  12.    # to have these messages end up in /var/log/haproxy.log you will

  13.    # need to:

  14.    #

  15.    # 1) configure syslog to accept network log events.  This is done

  16.    #    by adding the '-r' option to the SYSLOGD_OPTIONS in

  17.    #    /etc/sysconfig/syslog

  18.    #

  19.    # 2) configure local2 events to go to the /var/log/haproxy.log

  20.    #   file. A line like the following can be added to

  21.    #   /etc/sysconfig/syslog

  22.    #

  23.    #    local2.*                       /var/log/haproxy.log

  24.    #

  25.    log         127.0.0.1 local2

  26.    chroot      /var/lib/haproxy

  27.    pidfile     /etc/haproxy/haproxy.cfg

  28.    maxconn     4000

  29.    user        haproxy

  30.    group       haproxy

  31.    daemon

  32.    # turn on stats unix socket

  33.    stats socket /var/lib/haproxy/stats

  34. #---------------------------------------------------------------------

  35. # common defaults that all the 'listen' and 'backend' sections will

  36. # use if not designated in their block

  37. #---------------------------------------------------------------------

  38. defaults

  39.    mode                    http

  40.    log                     global

  41.    option                  httplog

  42.    option                  dontlognull

  43.    option http-server-close

  44.    option forwardfor       except 127.0.0.0/8

  45.    option                  redispatch

  46.    retries                 3

  47.    timeout http-request    10s

  48.    timeout queue           1m

  49.    timeout connect         10s

  50.    timeout client          1m

  51.    timeout server          1m

  52.    timeout http-keep-alive 10s

  53.    timeout check           10s

  54.    maxconn                 3000

  55. #---------------------------------------------------------------------

  56. # main frontend which proxys to the backends

  57. #---------------------------------------------------------------------

  58. frontend  main *:80

  59.    acl url_static       path_beg       -i /static /images /javascript /stylesheets

  60.    acl url_static       path_end       -i .jpg .gif .png .css .js

  61.    use_backend static          if url_static

  62.    default_backend             app

  63. #---------------------------------------------------------------------

  64. # static backend for serving up images, stylesheets and such

  65. #---------------------------------------------------------------------

  66. backend static

  67.    balance     roundrobin

  68.    server      static 127.0.0.1:4331 check

  69. #---------------------------------------------------------------------

  70. # round robin balancing between the various backends

  71. #---------------------------------------------------------------------

  72. backend app

  73.    balance     roundrobin

  74.    server  app1 192.168.150.73:80 check

  75.    server  app2 192.168.150.74:80 check

  76.    stats   uri     /admin?stats

  77.    stats   auth    admin:admin

  78.    stats   admin   if TRUE

五.启动服务并测试

 
   
   
 
  1. [root@haopython /]# systemctl restart haproxy

  2. [root@haopython /]# curl http://192.168.150.71

  3. THIS IS WEB01!!!

  4. [root@haopython /]# curl http://192.168.150.71

  5. WEB02 SERVER

  6. [root@haopython /]# curl http://192.168.150.71

  7. THIS IS WEB01!!!

  8. [root@haopython /]#

六.查看haproxy的状态

 
   
   
 
  1. [root@haopython /]# systemctl status -l haproxy

  2. ● haproxy.service - HAProxy Load Balancer

  3.   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)

  4.   Active: active (running) since Mon 2018-05-28 11:49:28 CST; 1min 41s ago

  5. Main PID: 3576 (haproxy-systemd)

  6.    Tasks: 3

  7.   CGroup: /system.slice/haproxy.service

  8.           ├─3576 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

  9.           ├─3578 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

  10.           └─3579 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

  11. May 28 11:49:28 haopython.com systemd[1]: Started HAProxy Load Balancer.

  12. May 28 11:49:28 haopython.com systemd[1]: Starting HAProxy Load Balancer...

  13. May 28 11:49:28 haopython.com haproxy-systemd-wrapper[3576]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

  14. [root@haopython /]#

  15. [root@haopython /]#

七.在浏览器中查看和修改haproxy的相关参数

【高可用架构一】利用HAproxy进行负载均衡服务器部署


学习|生活|分享|积累|永不停步


请留下你指尖的温度

让太阳拥抱你

微信ID:goodpython


以上是关于高可用架构一利用HAproxy进行负载均衡服务器部署的主要内容,如果未能解决你的问题,请参考以下文章

实现基于Haproxy+Keepalived负载均衡高可用架构

高可用篇之Keepalived (HAProxy+keepalived 搭建高可用负载均衡集群)

高可用架构二基于HAProxy+Keepalived高可用负载均衡web服务的搭建

详解Keepalived和HAProxy高可用负载均衡

高可用haproxy调度后端服务器实现动静分离集群架构

Haproxy实现web的高可用及负载均衡群集