如何创建您的第一个DigitalOcean负载平衡器

负载平衡器在多个后端服务器之间分配流量。在本教程中,我们将演示如何使用Web界面和默认转发规则创建DigitalOcean负载均衡器,以便在三个后端Web服务器之间分发未加密的Web流量。

介绍

负载平衡器在多个后端服务器之间分配流量。 如果其中一个服务器出现故障,负载均衡器将重定向流量到其他服务器,确保您的服务继续可用。 负载平衡器还允许您添加其他资源来处理临时流量峰值或更一致的需求增加。 此外,在访问者和后端之间放置负载均衡器可以允许您更改后端,而不会使访问者暴露给这些更改。

在本教程中,我们将演示如何使用Web界面和默认转发规则创建DigitalOcean负载均衡器,以便在三个后端Web服务器之间分发未加密的Web流量。

先决条件

在本教程中,我们将使用:

三个Ubuntu 16.04 Droplets在单个数据中心 ,每个都有一个sudo用户和基本防火墙设置使用初始服务器设置与Ubuntu 16.04指南 我们在SFO1数据中心创建了我们的Droplets ,称为web-01web-02web-03

重要提示Droplets和DigitalOcean负载均衡器必须位于同一个数据中心。

一旦Droplet到位,你就准备好跟随。

第1步 - 设置后端服务器

我们将首先安装Nginx并创建我们需要观察负载均衡器工作的测试内容。

每个Droplet

在每个Droplets上,刷新apt软件包索引,然后键入以下命令安装Nginx Web服务器:

sudo apt-get update
sudo apt-get install nginx

安装完成后,我们将允许HTTP流量通过UFW防火墙:

sudo ufw allow 'Nginx HTTP'
Rule added
Rule added (v6)

要确认规则是否按预期添加,我们将检查状态:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

为了确保一致的访问者体验,后端通常应该是相同的,但是我们将在每个Droplet上创建一个唯一的网页来演示分布式请求处理。

在每个服务器的文档根中,我们将创建一个名为lb.html的文件。 对于内容,我们将使用主机名,以便我们可以看到哪个服务器正在处理请求。 如果文档根位于其他位置,请将其替换为以下路径中的默认位置/ var / www / html

将页面添加到web-01

sudo nano /var/www/html/lb.html
/var/www/html/lb.html on web-01
<h1 style="color:blue">web-01</h1>

保存并退出文件。 使用Droplet的IP地址访问您的Web浏览器中的页面,以确保其按预期加载。

web-01测试页的屏幕截图

在web-02上重复

sudo nano /var/www/html/lb.html
/var/www/html/lb.html on web-02
<h1 style="color: orange">web-02</h1>

再次,访问Droplet的IP地址页面,确保它按预期加载:

web-02测试页的屏幕截图

在web-03上重复

sudo nano /var/www/html/lb.html
/var/www/html/lb.html on web-03
<h1 style="color: green">web-03</h1>

web-03测试页的屏幕截图

一旦我们向每个服务器添加了一个页面,我们将创建负载均衡器。

第2步 - 创建负载均衡器

我们将导航到负载平衡器页面,从顶部导航中选择“网络”,然后单击“负载平衡器”。

导航

这将带我们到主页,在那里我们可以创建我们的第一个DigitalOcean负载平衡器。 我们稍后会看到,一旦我们有至少一个负载均衡器,这个页面将作为我们已经创建的所有负载均衡器的概述。

create-lb-button1

接下来,我们将单击“创建负载均衡器”按钮,它将转到创建页面。 我们需要为本教程做出的每一个选择都可以直接在创建页面上看到。

create-lb-empty-screen

我们要:

  • 命名负载平衡器
  • 添加我们的Droplet
  • 查看默认的剩余默认值
  • 创建负载均衡器

请注意,“创建负载均衡器”按钮将不可用,直到我们填写了“名称”字段并选择了“区域”。

让我们来看看以下每个步骤:

选择名称

我们将首先给我们的负载均衡器一个标识名称 像Droplets一样,名称是必需的,并且只能使用字母数字字符,破折号和句点。

我们称之为test-balance 此名称可以稍后在负载均衡器的详细信息页面上更改,一旦创建。

名称lb

添加Droplet

接下来,我们将添加我们的前两个Droplets,并保存第三个,以说明如何向现有负载均衡器添加额外的Droplet。 我们将开始键入主机名的开头, web将显示包含这些字母的标签和Droplet列表。 我们将按名称添加我们的Droplets。

我们将从selelcting web-01开始。

添加Droplet

现在我们已经添加了第一滴:

  • 该区域自动填充该Droplet的区域
  • 选择列表不再包括标记
  • 选择将缩小到同一数据中心中的Droplets,并且
  • 我们的负载均衡器将在该区域中创建

要添加web-02我们将再次键入开始字母,然后选择它。 我们将保存web-03以供以后了解如何添加Droplets到现有负载平衡器:

选择Droplet

注意 :目前没有必要添加任何标签或Droplets。 我们可以创建一个空的负载均衡器,这在设置DNS或自动化基础设施设置时可能很有用。

如果我们不选择任何Droplet或Tags,我们将需要选择一个Region 该区域确定负载均衡器将驻留在哪里以及什么Droplet将可用于它。

查看剩余默认值

我们将在创建负载均衡器时保留其余设置,但在我们做之前,让我们简要了解它们的含义。

默认转发规则

默认转发规则将在test-balance上接收指向端口80的传入HTTP请求,并将它们作为HTTP请求重定向到我们添加的Droplets。 可以在以后添加其他规则。 发送到负载平衡器的任何未配置的请求都将被拒绝。

默认高级设置
转发规则定义将什么类型的传入流量重定向到哪里。

  • 算法 :循环
    这决定了如何路由流量。 循环意味着每个请求进入将被转发到列表上的下一个后端,而“最少连接”将请求转发到当前在负载均衡器和后端之间建立的最少连接的服务器。

  • 粘滞会话 :关闭
    粘性会话使用Cookie在用户和负载平衡服务器之间创建关联。 当负载平衡器接收到请求时,它会检查cookie,如果找到,则将请求发送到cookie中指定的服务器。 如果后端不能完全无状态,则粘性会话可以是有用的。

  • 健康检查http//0.0.0.0 : 80/
    健康检查确保Droplets可用。 默认情况下,它们每10秒测试一次端点。 我们的转发规则的运行状况检查将在端口80上ping每个Droplet的Web服务器,如果服务器在三次尝试后无法响应,则将从旋转中删除。 负载平衡器将继续ping服务器,并且一旦它连续成功接收到响应,服务器将返回到池。

  • SSL :无重定向
    在本教程中,我们将仅处理HTTP请求。 在配置了SSL之后,在“高级设置”中,我们可以选择让我们的负载均衡器将所有传入的HTTP请求重定向到HTTPS,然后再将其传递到后端服务器。

创建负载均衡器

现在,已经填写了名称和区域,以及我们选择的Droplet,我们将单击“创建负载平衡器”。

lb-最终屏幕

创建负载平衡器需要几分钟时间。

第3步 - 测试平衡

创建负载平衡器后,其IP地址将自动显示在“负载平衡器”概述页面上:

lb-IP

一旦创建,IP地址也将显示在特定负载平衡器的详细信息页面上。 与Droplets一样,我们可以通过单击并输入新的名称来更改详细信息页面上的负载均衡器的名称。

lb-IP-detialpage

现在我们有了IP地址,我们可以观察负载均衡器的动作。

我们将从网络浏览器中访问该IP地址开始

http://203.0.113.256/lb.html

应加载两个后端之一。

web-01-via-load-balancer

当我们刷新页面时,我们应该看到负载切换到下一个后端。

web-02-via-load-balancer

这种内容交替确认我们在我们的后端服务器之间平衡流量。 接下来,我们将了解当其中一个后端服务器发生故障时会发生什么。

第4步 - 测试故障转移

要测试故障转移,我们将在web-01上停止Nginx。 这将导致运行状况检查失败。 web-01将从池中自动删除,当我们重新加载页面时,我们应该看到web-02服务我们的请求。

我们将从停止Web服务器开始:

sudo systemctl stop nginx

由于systemctl不提供输出,让我们确保服务器没有运行:

sudo system status nginx

如果我们在状态输出结束时看到类似下面的内容,我们就知道它的状态:

Feb 02 20:44:40 web-01 systemd[1]: Stopping A high performance web server and a reverse proxy server...
Feb 02 20:44:40 web-01 systemd[1]: Stopped A high performance web server and a reverse proxy server.

一旦Nginx停止,健康检查将失败。 默认情况下,它们每10秒检查一次。 连续三次故障后,“负载平衡”概述页面将注册一个问题:

lb-with-issue

注意:健康检查的频率和数量可以在高级设置中自定义

负载均衡器的详细信息页面将提供更多详细信息,显示web-01为“Down”:

Droplet1下

这使我们只有web-02 ,所以当我们重新加载测试页,我们应该收到web-02的内容:

[web-02-via-load-balancer](web-02-via-load-balancer.png)

最后,我们再次带上web-01 经过5次成功的运行状况检查,它将被添加回后端池。

第5步 - 添加更多的Droplet

要向现有负载均衡器添加更多的Droplet,我们单击“添加Droplet”按钮。 弹出对话框将集中我们对负载均衡器数据中心中可用的Droplets的选择。 我们将选择我们的第三个Droplet, web-03

添加Droplet-3

同样,Droplet将不会添加到后端池,直到它返回5个成功的运行状况检查。

Droplet3下

一个已经被验证为健康,它将被添加到后端,所有三个服务器将轮流。 我们可以在我们的浏览器中重新载入网站。 一旦我们重新加载了几次,我们应该看到我们最后一个Droplet, web-03 ,提供它的测试内容。

web-03-via-load-balancer

结论

在本教程中,我们学习了如何使用基于Web的界面创建一个DigitalOcean负载均衡器,使用默认设置来平衡未加密的网络流量。

配置负载平衡器后,您可以按照有关使用DigitalOcean设置域名的指南,为您的域创建A记录或查阅DNS服务的文档。 创建记录时,请务必使用负载平衡器IP地址,而不是特定Droplet的IP。