基于虚拟主机的HAProxy配置实战
本实例是如上图所示
主要实现的功能如下:
当客户访问www.tb.com/tb.com的时候HAProxy将网站提交到电商服务器集群
当访问bbs.tb.com的时候,将访问请求调度到论坛集群,实现论坛负载均衡,当访问blog.tb.com的时候,将请求调度到博客
服务器集群,实现博客集群的负载均衡,除了上面三种请求外,就将请求调度到缺省的其他服务器集群
HAProxy的安装很简单,见
下面主要是来配置它
- global
- log 127.0.0.1 local0 info
- maxconn
- user nobody
- group nobody
- daemon
- nbproc
- pidfile /usr/local/haproxy/logs/haproxy.pid
- defaults
- mode http
- retries
- timeout connect 5s
- timeout client 30s
- timeout server 30s
- timeout check 2s
- listen admin_stats
- bind 0.0.0.0:
- mode http
- log 127.0.0.1 local0 err
- stats refresh 30s
- stats uri /haproxy-status
- stats realm welcome login\ Haproxy
- stats auth admin:xxxxx
- stats auth admin1:xxxxx
- stats hide-version
- stats admin if TRUE
- frontend www
- bind *:
- mode http
- option httplog
- option forwardfor
- log global
- acl host_www hdr_reg(host) -i ^(www.tb.com|tb.com)
- acl host_www hdr_dom(host) -i bbs.tb.com
- acl host_blog hdr_beg(host) -i blog.
- use_backend server_www if host_www
- use_backend server_bbs if host_bbs
- use_backend server_app if host_blog
- default_backend server_default
- backend server_default
- mode http
- option redispatch
- option abortonclose
- blance roundrobin
- cookie SERVERID
- option httpchk GET /check_status.html
- server default1 192.168.88.90: cookie default1 weight check inter rise fall
- server default2 192.168.88.91: cookie default2 weight check inter rise fall
- backend server_www
- mode http
- option redispatch
- option abortonclose
- balance source
- cookie SERVERID
- option httpchk GET /check_status.jsp
- server www1 192.168.88.80: cookie www1 weight check inter rise fall
- server www2 192.168.88.81: cookie www2 weight check inter rise fall
- server www3 192.168.88.82: cookie www3 weight check inter rise fall
- backend server_bbs
- mode http
- option redispatch
- option abortonclose
- balance source
- cookie SERVERID
- option httpchk GET /check_status.php
- server bbs1 192.168.88.81: cookie bbs1 weight check inter rise fall
- server bbs2 192.168.88.82: cookie bbs2 weight check inter rise fall
- backend server_blog
- mode http
- option redispatch
- option abortonclose
- balance source
- cookie SERVERID
- option httpchk GET /check_status.php
- server blog1 192.168.88.85: cookie blog1 weight check inter rise fall
- server blog2 192.168.88.86: cookie blog2 weight check inter rise fall
说明下:
主要终点看下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页面如下
- www1:echo "This is www1 192.668.88.80" >/var/www/html/index.html
- www2: echo "This is www2 192.668.88.81" >/var/www/html/index.html
- www3:echo "This is www3 192.668.88.82" >/var/www/html/index.html
同理:
- server_bbs
- bbs1:echo "This is bbs1 192.668.88.83" >/var/www/html/index.html
- bbs2:echo "This is bbs2 192.668.88.84" >/var/www/html/index.html
- server_blog
- blog1:echo "This is blog1 192.668.88.85" >/var/www/html/index.html
- blog2:echo "This is blog2 192.668.88.86" >/var/www/html/index.html
- server_default
- default1:echo "This is default1 192.668.88.90" >/var/www/html/index.html
- 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的话执行如下命令
- /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监控平台
稍后讲解,怎么来安装,操作
基于虚拟主机的HAProxy配置实战的更多相关文章
- HAProxy详解(三):基于虚拟主机的HAProxy负载均衡系统配置实例【转】
一.基于虚拟主机的HAProxy负载均衡系统配置实例 1.通过HAProxy的ACL规则配置虚拟主机: 下面将通过HAProxy的ACL功能配置一套基于虚拟主机的负载均衡系统.这里操作系统环境为:Ce ...
- 【原创】Apache和基于虚拟主机的Tomcat集群方案
最近建设了北京某政府机构的网站,网站前段使用Apache做负载均衡,后端使用Tomcat做的集群,基于虚拟主机的方式访问,并且实现了静态资源和动态资源的分离. 开始的建设方案有两种,一种是使用apac ...
- 虚拟主机(多站点配置)的实现--centos上的实现
Apache中配置多主机多站点,可以通过两种方式实现 将同一个域名的不同端口映射到不同的站点(虚拟主机) 将同一个端口映射成不同的域名,不同的域名映射到不同的站点 两种方法可以同时存在,局域网通过 ...
- Apache之——多虚拟主机多站点配置的两种实现方案
Apache中配置多主机多站点,可以通过两种方式实现: 将同一个域名的不同端口映射到不同的虚拟主机,不同端口映射到不同的站点: 将同一个端口映射成不同的域名,不同的域名映射到不同的站点. 我们只需要修 ...
- http虚拟主机的简单配置训练
http的虚拟主机 对于某些web访问站点而言,每天的访问量很少,因此真正的放一台服务器去进行web站点是很 浪费资源的,因此我们选择了虚拟主机 web处理模块的分类(MPM) 1.perfork 一 ...
- Apache的虚拟主机功能(基于IP地址、基于虚拟主机、基于端口)
1. 安装Apache服务程序(系统用户,1-199之间) 第一步:在虚拟机软件里选中光盘镜像: 第二步:将光盘设备挂载到/media/cdrom目录 输入:mkdir -p /media/cdrom ...
- ESXi5 中克隆Linux虚拟主机的网络配置
虚拟化技术果然非常方便,尤其是windows主机,克隆后在网络管理中改一下IP即可. 但对于Linux来说就有点麻烦,只修改IP还不行,还有MAC地址,网卡指定等,这个规程对应新手来说没有大半天搞不定 ...
- linux上nginx上配置虚拟主机的相关配置
1.配置主配置: nginx/conf/nginx.conf 2.虚拟主机配置:nginx/conf/extra/learn.weixin.com.conf 配置完后,重启服务器!
- apache php配置 虚拟目录 和 虚拟主机 多域名配置 原理解析
虚拟目录配置 就是说,我们放项目放在D盘,F盘,而不是默认的www文件夹下也可以访问.比如这里,我在 D:/PHP/work 放入的项目文件. 在httpd.conf加入: (位置一般是在 </ ...
随机推荐
- 开源组件ELK日志系统配置与管理
ELK日志系统介绍 开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成.官方网站:https://www.el ...
- Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门
Spring 5.0 中发布了重量级组件 Webflux,拉起了响应式编程的规模使用序幕. WebFlux 使用的场景是异步非阻塞的,使用 Webflux 作为系统解决方案,在大多数场景下可以提高系统 ...
- .net core实践系列之SSO-同域实现
前言 SSO的系列还是以.Net Core作为实践例子与大家分享,SSO在Web方面复杂度分同域与跨域.本篇先分享同域的设计与实现,跨域将在下篇与大家分享. 如有需要调试demo的,可把SSO项目部署 ...
- Python3 与 NetCore 基础语法对比(就当Python和C#基础的普及吧)
Jupyter排版:https://www.cnblogs.com/dotnetcrazy/p/9102030.html 汇总系列:https://www.cnblogs.com/dunitian/p ...
- JVM加载类冲突,导致Mybatis查数据库返回NULL的一个小问题
今天碰到个bug,虽然小,但是有点意思 背景是SpringMVC + Mybatis的一个项目,mapper文件里写了一条sql 大概相当于 select a from tableA where b ...
- H5 颜色属性
07-颜色属性 我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- NOIP2016解题报告
天天听这几道题,但其实题面都没看过.今天做一下. 每道题看懂题后基本一分钟左右就切了.D2T3想的是\(O(n\log n)\)的堆做法,至少90分吧. D1T1模拟即可. D1T2每条路径拆成到根的 ...
- poj3984 广度搜索BFS
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1 ...
- Day2 Numerical simulation of optical wave propagation之标量衍射理论基本原理(二)
2.麦克斯韦方程组的简单行波解 讨论通过线性.各向同性.均匀.无色散.无限电荷和电流的电介质材料的光波传输.在这种情况下,介质具有如下属性: (1)推导获得波动方程( 由麦克斯韦方程组导出的.描述电磁 ...
- oc之封装「可输入值」的UIStepper
2017.07.17 18:10* 字数 66 阅读 644评论 0喜欢 5 oc之封装「可输入值」的UIStepper 最终效果 要求: Platform: iOS7.0+ Language: Ob ...