zoukankan      html  css  js  c++  java
  • 基于虚拟主机的HAProxy配置实战


    本实例是如上图所示

    主要实现的功能如下:

    当客户访问www.tb.com/tb.com的时候HAProxy将网站提交到电商服务器集群
    当访问bbs.tb.com的时候,将访问请求调度到论坛集群,实现论坛负载均衡,当访问blog.tb.com的时候,将请求调度到博客
    服务器集群,实现博客集群的负载均衡,除了上面三种请求外,就将请求调度到缺省的其他服务器集群
    HAProxy的安装很简单,见

    下面主要是来配置它

     1 global 
     2 log 127.0.0.1 local0 info
     3 maxconn 4096
     4 user nobody
     5 group nobody
     6 daemon 
     7 nbproc 1
     8 pidfile /usr/local/haproxy/logs/haproxy.pid
     9 
    10 defaults
    11 mode http
    12 retries 3
    13 timeout connect 5s
    14 timeout client 30s
    15 timeout server 30s
    16 timeout check 2s
    17 
    18 listen admin_stats
    19 
    20 bind 0.0.0.0:19088
    21 mode http
    22 log 127.0.0.1 local0 err
    23 stats refresh 30s
    24 stats uri /haproxy-status
    25 stats realm welcome login Haproxy
    26 stats auth admin:xxxxx
    27 stats auth admin1:xxxxx
    28 stats hide-version
    29 stats admin if TRUE
    30 
    31 frontend www
    32 bind *:80
    33 mode http
    34 option httplog
    35 option forwardfor
    36 log global
    37 acl host_www hdr_reg(host) -i ^(www.tb.com|tb.com)
    38 acl host_www hdr_dom(host) -i bbs.tb.com
    39 acl host_blog hdr_beg(host) -i blog. 
    40 use_backend server_www if host_www
    41 use_backend server_bbs if host_bbs
    42 use_backend server_app if host_blog
    43 default_backend server_default
    44 backend server_default
    45 mode http
    46 option redispatch
    47 option abortonclose
    48 blance roundrobin
    49 cookie SERVERID
    50 option httpchk GET /check_status.html
    51 server default1 192.168.88.90:8000 cookie default1 weight 3 check inter 2000 rise 2 fall 3
    52 server default2 192.168.88.91:8000 cookie default2 weight 3 check inter 2000 rise 2 fall 3
    53 backend server_www 
    54 mode http
    55 option redispatch
    56 option abortonclose
    57 balance source 
    58 cookie SERVERID
    59 option httpchk GET /check_status.jsp
    60 server www1 192.168.88.80:80 cookie www1 weight 6 check inter 2000 rise 2 fall 3
    61 server www2 192.168.88.81:80 cookie www2 weight 6 check inter 2000 rise 2 fall 3
    62 server www3 192.168.88.82:80 cookie www3 weight 6 check inter 2000 rise 2 fall 3
    63 
    64 backend server_bbs 
    65 mode http
    66 option redispatch
    67 option abortonclose
    68 balance source 
    69 cookie SERVERID
    70 option httpchk GET /check_status.php
    71 server bbs1 192.168.88.81:8080 cookie bbs1 weight 8 check inter 2000 rise 2 fall 3
    72 server bbs2 192.168.88.82:8090 cookie bbs2 weight 8 check inter 2000 rise 2 fall 3
    73 
    74 backend server_blog
    75 mode http
    76 option redispatch
    77 option abortonclose
    78 balance source 
    79 cookie SERVERID
    80 option httpchk GET /check_status.php
    81 server blog1 192.168.88.85:80 cookie blog1 weight 5 check inter 2000 rise 2 fall 3
    82 server blog2 192.168.88.86:80 cookie blog2 weight 5 check inter 2000 rise 2 fall 3 

    说明下:
    主要终点看下frontend中关于ACL配置部分的内容这个是实现虚拟主机的核心配置部分,另外这个配置文件定义了server_www,servr_bbs,server_blog,server_default,4个backend,
    分别对应4个人服务器集群,对于server_www群和server_bbs群,采用了基于IP的负载均衡算法其他两个采用了基于权重进行轮训的调度算法
    每个backend中定义了httpchk的检测方式以此一定要保证这里的URL都是可以访问到的
    为了验证负载均衡的功能,这里需要将后端真实服务器做一个标记,这个架构一个加入了九个真实的后端服务器共分为4组,这里将server_www的3台后端
    服务器设置默认的web页面如下

    1 www1:echo "This is www1 192.668.88.80" >/var/www/html/index.html
    2 www2: echo "This is www2 192.668.88.81" >/var/www/html/index.html 
    3 www3:echo "This is www3 192.668.88.82" >/var/www/html/index.html

    同理:

    1 server_bbs
    2 bbs1:echo "This is bbs1 192.668.88.83" >/var/www/html/index.html 
    3 bbs2:echo "This is bbs2 192.668.88.84" >/var/www/html/index.html 
    4 server_blog
    5 blog1:echo "This is blog1 192.668.88.85" >/var/www/html/index.html 
    6 blog2:echo "This is blog2 192.668.88.86" >/var/www/html/index.html 
    7 server_default
    8 default1:echo "This is default1 192.668.88.90" >/var/www/html/index.html 
    9 default2:echo "This is default2 192.668.88.91" >/var/www/html/index.html

    以上准备好,下面开始测试

    2 启动HAPRoxy
    在HAProxy安装完成之后会在安装根目录下生成一个可执行的二进制文件,对HAProxy的启动,关闭,重启操作都是通过这个文件来实现的
    查看帮助
    haproxy -h
    haproxy [-f <配置文件>] [-vdVD] [-n 最大并发连接数] [-N 默认的连接数]
    参数介绍
    -v 显示版本信息
    -d 表示让进程运行在debug模式 -db表示禁用在后台模式,让程序在前台运行
    -D 让程序以daemon模式启动
    -q 表示安静模式,程序无任何输出
    -c 对haproxy配置文件进行语法检查
    -n 设置最大并发连接数
    -m 限制可用内存大小(单位MB)
    -N 设置默认连接数
    -p 设置HAProxy的PID文件路径
    -de 不使用epoll模型
    -ds 不使用speculaive epoll
    -dp 不使用poll模型
    -sf 程序启动后向PID文件发送FINISH信号,这个参数放在命令行最后
    -st 程序启动后像PID文件里的进程发送terminame信号,这个参数放在命令行最后,经常用于重启HAProxy进程
    关闭HAproxy执行如下命令:
    kill -9 haproxy
    要平滑重启HAProxy的话执行如下命令

    1 /usr/local/haproxy/sbin/haproxy -f > /usr/local/haproxy/conf/haproxy.cfg -st ·cat /usr/local/haproxy/logs/haproxy.pid·

    为了方便管理,可以把HAProxy封装成一个脚本
    接下里测试HAProxy实现虚拟主机和负载均衡的功能
    首先通过不同的ip的客户端以www.tb.com或者tb.com来访问网站,如果HAProxy运行正常,并且ACL规则设置正确,server_www的
    三台后端服务器默认的web页面信息将会依次出现,这说明HAProxy对电商网站实现了负载均衡,同时不会出现其他后端服务器的默认web页面信息,说明ACL规则生效,实现虚拟主机功能.
    同理,通过不同的ip的客户端以bbs.tb.com访问网站时,server_bbs的两台后端服务器默认的web页面信息将轮换出现,实现了论坛的负载均衡,同时不会出现其他后端服务器的默认web页面信息
    说明ACL规则生效,实现虚拟主机功能。
    同理验证blog.tb.com。
    最后访问其他ip或者其他访问的时候,请求将会被调度到server_www指定的两台后端真实服务器上.
    测试HAProxy的故障转移功能
    这里假定将server_www组的一台后端服务器192.168.88.82的httpd服务停止,那么当通过www.tb.com或者tb.com域名访问网站时,这个失效的节点将不会被访问到,因为当httpd服务被停止后,HAProxy通过httpchk
    方式将立即检测到此节点无法访问到数据,从而屏蔽此节点对外提供服务的功能,这样就实现了故障的转移.通过类似的方法可以测试其他节点的应用
    使用HAProxy的web监控平台
    稍后讲解,怎么来安装,操作

  • 相关阅读:
    如何进行函数式编程
    HTML文本格式化
    非模态对话框的创建及注意事项
    中国第一代程序员列传
    野指针
    缓冲区溢出攻击
    windows全部启动项
    HTML 样式
    Volatile关键字
    HTML基本标签
  • 原文地址:https://www.cnblogs.com/Dicky-Zhang/p/6285058.html
Copyright © 2011-2022 走看看