Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx,相比较而言,LVS性能最好,但是搭建相对复杂,Nginx的upstream模块支持群集功能,但是对群集节点的健康检查功能不强,性能没有Hapr oxy好。Haproxy的官方网站是http://haproxy.1wt.eu/。
本案例介绍使用Haproxy及Nginx搭建一套web群集。

一、案例环境

使用三台服务器模拟搭建一套web群集,具体的拓补图如下:

主机 系统 IP地址 主要软件
Haproxy服务器 CentOS7.4 X86_64 172.16.10.30 haproxy-1.5.19.tar.gz
Nginx服务器1 CentOS7.4 X86_64 172.16.10.10 nginx-1.12.0.tar.gz
Nginx服务器2 CentOS7.4 X86_64 172.16.10.20 nginx-1.12.0.tar.gz
客户端 Windows7 172.16.10.8 IE浏览器

二.编译安装Nginx服务器

1.搭建Nginx1

使用nginx-1.12.0.tar.gz安装包进行编译安装

[root@localhost ~]# yum install gcc gcc-c++ pcre-devel zlib-devel make-y
[root@localhost ~]# useradd -M -s /sbin/nologin nginx                #创建运行用户
[root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
[root@localhost ~]# cd /opt/nginx-1.12.0/
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx         #配置相关参数
[root@localhost nginx-1.12.0]# make && make install   #安装

安装完后的默认信息如下

  • 默认安装目录:/usr/local/nginx
  • 默认日志:/usr/local/nginx/logs
  • 默认监听端口:80
  • 默认web目录:/usr/local/nginx

接下来设置测试页面并启动Nginx服务。

[root@localhost ~]# cd /usr/local/nginx/html
[root@localhost html]# echo "Server 172.16.10.10" > test.html
[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost ~]# nginx             #启动
[root@localhost ~]# systemctl stop firewalld.service    #关闭防火墙
[root@localhost ~]# setenforce 0

在客户端访问http://172.16.10.10/test.html,网页正常显示。

2.搭建Nginx2

编译安装的步骤与Nginx1相同,不同之处在于建立测试页面。

[root@localhost ~]# cd /usr/local/nginx/html
[root@localhost html]# echo "Server 172.16.10.20" > test.html

三、编译安装Haproxy

使用haproxy-1.5.19.tar.gz安装包进行编译安装

[root@localhost ~]# yum install gcc gcc-c++ pcre-devel bzip2-devel make -y #用yum安装一系列d的环境支持
[root@localhost ~]# tar zxvf haproxy-1.5.19.tar.gz -C /opt/ #解压haproxy软件包至/opt目录下
[root@localhost ~]# cd /opt/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux26  #64位系统
[root@localhost haproxy-1.5.19]# make install   #安装

四.创建Haproxy的配置文件

Haproxy默认不创建配置文件,需要复制软件包的模板配置文件,并进行编辑

[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy    #创建配置文件目录
[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/  #将haproxy.cfg文件复制到配置文件目录下
[root@localhost haproxy-1.5.19]# cd /etc/haproxy/
[root@localhost haproxy]# vim haproxy.cfg
#删除以下语句
chroot /usr/share/haproxy  #禁锢到haproxy的根目录下
redispatch   #强制将请求发送到已经down掉的机器#添加
listen  webcluster 0.0.0.0:80             #定义一个webcluster的应用option httpchk GET /test.html     #访问服务器的test.html文件balance roundrobinserver inst1 172.16.10.10:80 check inter 2000 fall 3    #定义nginx节点服务器server inst2 172.16.10.20:80 check inter 2000 fall 3

五.创建Haproxy自启动脚本

[root@localhost haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@localhost haproxy]# chmod +x haproxy
[root@localhost haproxy]# chkconfig --add /etc/init.d/haproxy  #添加系统服务
[root@localhost haproxy]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost haproxy]# service haproxy start      #启动Haproxy服务
[root@localhost haproxy]# systemctl stop firewalld.service  #关闭防火墙

六、测试web群集

通过上面的步骤,已经搭建完成Haproxy的web群集,接下来验证群集是否正常工作。一个群集一般需要具备两个特性,第一个是高性能,第二个是高可用。

1.测试高性能

在客户端使用浏览器打开http://172.16.10.30/test.html, 浏览器显示信息如图所示:

刷新一下,显示信息如图所示:

可以看到群集的负载均衡调度生效,满足群集的高性能要求。

2.测试高可用

将172.16.10.10的Nginx服务器停用,在客户端使用浏览器打开http://172.16.10.30/test。html ,浏览器显示信息如图所示:

从中可以看出,当一台节点出现故障时,不会影响群集的使用,这样满足了群集的高可用性。

七、Haproxy的日志

Haproxy的日志默认输出系统的syslog中,查看不方便,在生产环境中可以单独定义出来。

1.修改haproxy配置文件中(/etc/haproxy/haproxy.cfg)关于日志配置的选项,加入下面的配置:

log /dev/log    local0 info
log /dev/log    local0 notice

将这两行配置放到global配置项目中,主要是将info及notice日志分别记录到不同的日志文件中。

2.然后重启Haproxy的服务

[root@localhost ~]# service haproxy restart      #重新启动Haproxy服务

3.修改rsyslog配置

为了便于管理,将Haproxy的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。

[root@localhost ~]# touch /etc/rsyslog.d/haproxy.conf
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf

加入下面的内容:

if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log        #info日志记录到/var/log/haproxy/haproxy-info.log下&~      #表示日志写入到日志文件后,rsyslog停止处理这个信息if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log       #notice日志记录到/var/log/haproxy/haproxy-notice.log下&~

4.保存配置文件并重启rsyslog服务

[root@localhost ~]# systemctl restart rsyslog.service

5.测试日志信息

在客户端访问http://172.16.10.30/test.html后,可以使用 tail -f /var/log/haproxy/haproxy-info.log 即时查看haproxy的访问请求日志。

[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log
Jun 30 21:20:48 localhost haproxy[4202]: 172.16.10.8:50352 [30/Jun/2018:21:20:48.466] webcluster webcluster/inst1 1/0/0/1/2 200 279 - - ---- 1/1/0/1/0 0/0 "GET /test.html HTTP/1.1"
Jun 30 21:21:58 localhost haproxy[4202]: 172.16.10.8:50353 [30/Jun/2018:21:21:58.114] webcluster webcluster/inst2 0/0/4/1/5 200 249 - - ---- 1/1/0/1/0 0/0 "GET /test.html HTTP/1.1"

转载于:https://blog.51cto.com/11134648/2134644

Haproxy+Nginx实现web负载均衡群集相关推荐

  1. nginx实现web负载均衡

    1.安装相关依赖包(开发包组"Development Tools"和 "Development Libraries",以及pcre-devel包) # yum ...

  2. Nginx+Tomcat负载均衡群集

    通常情况下,单个Tomcat站点由于可能出现单点故障而无法应付客户复杂多样的请求,所以需要结合Nginx强大的处理并发连接能力,将Nginx作为负载均衡器,用于调用Tomcat服务器,从而实现负载均衡 ...

  3. 基于HAProxy+Keepalived高可用负载均衡web服务的搭建

    一 原理简介 1.HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的we ...

  4. Web负载均衡解决方案 HAproxy

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

  5. 配置 Haproxy 负载均衡群集

    配置 haproxy 负载均衡群集

  6. 集群(三)——haproxy+nginx搭建web集群

    集群(三)--haproxy+nginx搭建web集群 一.Haproxy 前言 二.Haproxy 简介 1.常见的web集群调度器 2.Haproxy应用分析 3.Haproxy高性能负载均衡的主 ...

  7. LVS负载均衡群集—NAT模式实例

    文章目录 前言 一.群集与分布式 1.1 群集的含义 1.2 系统性能扩展方式 1.3 群集的三种类型 1.4 LVS的负载调度算法 1.5 分布式系统 1.6 集群和分布式 1.7 负载均衡群集架构 ...

  8. Linux LVS 负载均衡群集

    目录 Linux LVS 负载均衡群集 一.集群与分布式 集群的含义 LVS 模型 系统性能扩展方式 群集的三种类型 负载均衡群集 高可用群集 高性能运算群集 LVS 的负载调度算法 分布式系统 集群 ...

  9. LVS负载均衡群集 --NAT模式实战部署(图文详解)

    目录 一.群集应用概述 1.1 群集的含义 1.2 应用场景出现高并发的解决方案 1.3 系统性能扩展方式 1.4 群集的三种分类 1.4.1 负载均衡群集 1.4.2 高可用群集 1.4.3 高性能 ...

最新文章

  1. 【必看】做了3年运维却不涨薪?那是你还没get这个技能
  2. php提交后清楚表单缓存,PHP提交表单后如何控制缓存 | 学步园
  3. 30是什么意思_“29+16”变“30+18”是什么意思?独立艺术院校有何优势?报考需要注意什么?...
  4. LeetCode题库整理【Java】—— 7整数反转
  5. oralcle中的性能统计基本用法statpack
  6. ubunut 安装 pyqt5
  7. PR-Place-performing Placement and Optimization-1
  8. 最新邮箱密码破解方法
  9. 世界互联网大会:马云演讲实录
  10. 建立一个电脑网络至少需要两台计算机,两台电脑见建立一个局域网方法介绍
  11. VOT数据集自动/手动下载
  12. Error: com.android.ide.common.process.ProcessException
  13. 拿到外卖后秒退单,一连12天吃霸王餐的女子栽了!
  14. CSS 中 a 标签为什么不能继承父类的颜色?
  15. Android9.0默认将开发者选项中的OEM锁开关打开
  16. 神马广告投放的展现样式有哪些?神马广告投放的优势
  17. 怎样才能做好SNS社区网站
  18. (附源码)node.js华联招聘网站011229
  19. C#程序发布时,一定要好好地保护,不然你会后悔的
  20. React Native BLE蓝牙通信 App开发

热门文章

  1. Android Material Components – MaterialAlertDialog
  2. 数据库基础:什么是行?什么是主键?
  3. scrapy常用设置参考手册
  4. 为什么会出现NoSQL数据库
  5. 随机抽取文件内容中的一行
  6. widows下 python环境变量配置
  7. 在Mac OS X上利用Spotlight搜索代码
  8. php排序函数实例学习教程
  9. CentOS软件包管理之RPM
  10. (待补充)【n个骰子的点数】剑指offer——面试题43:n个骰子的点数