前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三章 负载均衡LB服务之Haproxy(二)

第三章 负载均衡LB服务之Haproxy(二)

作者头像
晓天
发布2020-08-25 16:06:37
9630
发布2020-08-25 16:06:37
举报

3.2 Haproxy实验

3.2.1 实验架构

本节实验架构图如下:

客户端访问http://202.0.0.1时,要把请求分发到192.168.10.100、192.168.5.102,这两台服务器上。

我们首先配置好四台主机的ip地址,并将web1、web2两台服务器部署httpd服务,并分别创建页面www1.rzz.com和www2.rzz.com。

3.2.2 Haproxy服务器配置

首先,centos的系统光盘并不自带Haproxy的程序包,所以需要我们手动下载,在这里我下载的是1.5.18版,并使用winscp工具上传至Linux系统的/mnt/目录下。然后安装该软件包:

rpm -ivh /mnt/haproxy-1.5.18-8.el7.x86_64.rpm

Haproxy的配置文件是/etc/haproxy/haproxy.cfg其中共有五个主要配置模块,当然这些组件不是必选的,可以根据需要选择部分作为配置。

  • global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
  • defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件。而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么default部分参数对应的值自动被覆盖。
  • frontend:设置接收请求的前端虚拟节点,即设置VIP及端口。Frontend可以根据规则直接指定具体使用后端的backend(可动态选择)。
  • backend:后端服务集群的配置,即真实的服务器集群,一个Backend对应一个或者多个实体服务器。
  • listen: 可替代Frontend和Backend的组合配置。

另外,在defaults区域中的一些设置项,都是对连接的时间、活动时间做设置的,最好配置较大些的时间参数,否则针对远距离客户容易产生掉线。

timeout server 300s

timeout connect 300s

timeout client 300s

timeout http-request 30s

timeout queue 300s

mode tcp 好了,下面我们来正式配置Haproxy做负载均衡。正如上面对配置文件中五个配置模块的介绍,我们有两种配置方式:listen式和frontend+backend式。

方式一:listen式

在/etc/haproxy/haproxy.cfg的配置文件的最后写入如下内容:

listen testWeb 202.0.0.1:80

---定义监听名,可自定义,指定监听的ip及端口

mode http ---指定监听模式

balance roundrobin ---指定算法

server web1 192.168.10.100:80 check weight 30

---指定内部服务器及权重,并检查其状态

server web2 192.168.10.101:80 check weight 30

保存后,启动服务

systemctl restart haproxy ---启动服务

netstat -ant | grep 80 ---可见抓取

如此,一个最简单的均衡集群就搭建完毕了,我们可以使用windows客户端,多次访问http://202.0.0.1,会发现轮流显示www1.rzz.com和www2.rzz.com的两个站点。

方式二:frontend+backend式 (常用)

我们先把配置文件中方式一的代码删除或注释掉,然后写入如下内容:

frontend testWeb ---设定前端节点,名字自定义

bind 202.0.0.1:80 ---指定监听ip及端口

mode http ---指定负载均衡模式为http模式

default_backend webServers ---指定与该frontend对应的后端节点

backend webServers ---设定后端节点,名字自定义

balance roundrobin ---设置算法

server web1 192.168.10.100:80 check weight 30 ---指定内部节点服务器及权重

server web2 192.168.10.101:80 check weight 30

然后重启服务

systemctl restart haproxy

再从windows客户端多次访问http://202.0.0.1,得到与方式一相同的效果。

另外,若要haproxy支持https的分流,需要在本方式中对443端口做绑定,配置如下:

frontend testWeb ---设定前端节点,名字自定义

bind 202.0.0.1:443 ---指定监听ip及端口

mode tcp --- 注:https分流必须使用tcp模式

default_backend webServers ---指定与该frontend对应的后端节点

backend WebServers

mode tcp

balance roundrobin

server web1 192.168.10.100:443 check weight 30

server web2 192.168.10.101:443 check weight 30

可见,后面backend中增加mode tcp 句,即指定使用tcp模式接收,且server中也要指定为443端口,其他都与上面配置一样。

3.2.3 多点虚拟主机分流

之前原理中我们讲过,haproxy支持的http模式下,可以针对站点内不同的URI做区分处理,下面我们就来演示一下配置过程:

同样编辑配置文件,基于上一个实验方式二的内容,改写为如下:

frontend testWeb

bind 202.0.0.1:80 #指定监听ip及端口

mode http

acl a1 hdr(Host) -i www.rzz1.com --- -i表示忽略大小写

acl a2 hdr(Host) -i www.rzz2.com

--- 设定acl(访问控制列表)规则,名字自定义,并设置前段监听的域名

use_backend webServers1 if a1

use_backend webServers2 if a2

--- 指定满足哪个acl时使用哪个backend

default_backend webServers ---未能满足acl的访问仍走默认的backend

backend webServers1

balance roundrobin

server web1 192.168.10.100:80 check weight 30

backend webServers2

balance roundrobin

server web2 192.168.10.101:80 check weight 30

backend webServers

balance roundrobin

server web3 192.168.10.102:80 check weight 30

注:1、此处的三个backend中都可以增加多个server做负载均衡

2、此处的backend webServers中指定的web3主机,本实验中并未创建虚拟机,读者可自行创建验证。

配置完成后,我们再次重启服务

systemctl restart haproxy

然后,为了配合域名的访问,我们还需要一台DNS服务器,解析www.rzz.com、www.rzz1.com、www.rzz2.com都到202.0.0.1主机上,这里请读者自定配置,不再演示。下图是用windows搭建的dns服务器,仅供参考:

最后,我们把windows客户端网卡设置正确的DNS指向,即可验证实验了。会发现访问www.rzz1.com时,显示的是www1.rzz.com,访问www.rzz2.com时,显示的是www2.rzz.com,这与配置文件中的设置指向完全吻合。

注:可以使用如下命令检查配置文件书写是否正确。

haproxy -f /etc/haproxy/haproxy.cfg -c

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档