使用 HaProxy 制作一个简单的负载均衡器

Posted 海拥✘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 HaProxy 制作一个简单的负载均衡器相关的知识,希望对你有一定的参考价值。

在本文中,我将向大家展示如何使用 haProxy 从我通过 express 设置的 servler 制作一个简单的负载均衡器。

我们将有两个文件夹:

  • app:一个简单的后端服务器,使用 express 构建
  • haproxy:将充当负载均衡器的 haProxy 文件夹

第 1 步:使用 Express 创建后端服务器

让我们使用 Express 创建一个简单的后端服务器。为此,我们创建一个名为 app 的文件夹并将其输入。

首先,我们通过说来创建我们的包结构 yarn init。然后我们根据服务器的要求添加快递包:yarn add express。

现在我们创建一个名为 index.js 的文件并添加以下代码:

const app = require('express')();
const appid = process.env.APPID || 4000;
app.get('/', (req, res) => res.send(`APP ID: $appid`));
app.listen(appid, () => console.log(`listening on $appid`));

为了使这个 nodeJS 项目成为 docker 镜像,我们添加了 Dockerfile:

FROM node:12
WORKDIR /home/node/app
COPY / /home/node/app
RUN npm install
CMD npm run app

要创建我们的 Docker 镜像,我们运行命令:

docker image -t example-app .

第 2 步:安装 HaProxy 结构

什么是 HaProxy?

HAProxy(高可用性代理)是一个负载均衡器任务管理器。它提供免费和安全的服务,例如负载平衡、高可用性和许多服务的代理。


我们为 laod-balancer 创建 haproxy 文件夹,并向其中添加一个名为 haproxy.cfg 的文件:

frontend http
    bind *:80
    mode http
    timeout connect 10s
    timeout client 10s
    timeout server 10s
    retries 3
    use_backend all
backend all
    mode http
    server s1 nodeapp1:4001
    server s2 nodeapp2:4002
    server s3 nodeapp3:4003
    server s4 nodeapp4:4004

这里关键字的含义:

  • bind:我们正在运行的端口值
  • mode:输入为 HTTP 或 HTTPs(如果 SSL 可用)。
  • timeout:超时值。如果第一次尝试失败,可以再次尝试。为此,您需要设- 置重试次数。
  • retries:超时时重复多少次的值。
  • use_backend:要使用的后端服务器信息。
    在 haproxy 文件夹中,我们添加 Dockerfile 文件以将此结构转换为 docker 镜像。

在 haproxy 文件夹中,我们添加 Dockerfile 文件以将此结构转换为 docker 镜像。

FROM haproxy:1.7
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

第 3 步:运行时间 🚀

为了运行所有这些结构(图像),我们docker-compose.yml在外部创建文件。

version: '3'
services:
  haproxy:
    build: ./haproxy
    container_name: haproxy
    ports:
      - '80:80'
  nodeapp1:
    image: example-app
    environment:
      - APPID=4001
  nodeapp2:
    image: example-app
    environment:
      - APPID=4002
  nodeapp3:
    image: example-app
    environment:
      - APPID=4003
  nodeapp4:
    image: example-app
    environment:
      - APPID=4004

当我们创建整个结构时,我们的文件夹结构应该是这样的:

> app/
>   node_modules/
>   Dockerfile
>   index.js
>   package.json
>   yarn.lock
>
> haproxy/
>   Dockerfile
>   haproxy.cfg
>
> docker-compose.yml

我们来运行我们的图像:

docker-compose up --build

运行此命令后,我们转到http://localhost. 这里我们可以看到,每次刷新页面,APP_ID的值都会发生变化。我们已经成功完成了一个简单的负载均衡器服务。

额外🥳

对于更复杂的结构,您可以像这样更改 haproxy 的内容:

global
defaults http
    timeout client 50s
    timeout connect 50s
    timeout queue 60s
    timeout http-keep-alive 2m
frontend MyFrontent1
    bind :80
    mode http
    use_backend MyBackends1 # or -> default_backend MyBackends
frontend MyFrontend2
    bind :4000
    mode http
    use_backend MyBackends2
backend MyBackends1
    mode http
    server server1 nodeapp1:4001
    server server2 nodeapp2:4002
backend MyBackends2
    mode http
    server server3 nodeapp3:4003
    server server4 nodeapp4:4004

由于我们添加了另一个前端,因此我们需要将其添加到 docker-compose 中。

.
.
.
haproxy:
  build: ./haproxy
  container_name: haproxy
  ports:
    - '80:80'
    - '4000:4000' # 4000 inputtan 4000 outputa aktarıyoruz
.
.
.

在这里,我们创建了两个前端和两个连接到每个前端的服务器。当你去http://localhost 刷新页面时,你可以看到你在 4001 和 4002 端口之间切换,当你去 port http://localhost/4000 时,可以看到你在 4003 和 4004 端口之间切换。

⭐️ 好书推荐

《大数据导论》

【内容简介】


本书围绕新工科背景下大数据人才培养需求编写,系统介绍了大数据采集与预处理、大数据存储与管理、大数据处理与分析、大数据可视化处理流程;重点分析了科大讯飞大数据平台在政务、交通、金融和用户画像等实际场景中的应用,还介绍了大数据实验环境的详细搭建步骤;最后介绍了大数据治理中法律政策、行业标准建设的最新进展,分析了大数据可能带来的伦理风险和应对策略。

📚 京东自营购买链接:《大数据导论》

以上是关于使用 HaProxy 制作一个简单的负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

HAproxy负载均衡剖析

haproxy做简单负载均衡

配置HAProxy实现负载均衡

使用haproxy实现负载均衡集群

Keepalived+Haproxy负载均衡

HaProxy + Keepalived 实现高可用负载均衡