如何使用上DigitalOcean浮动IP地址

一个DigitalOcean浮动IP是可以映射到你的Droplet的一个可公开访问的静态IP地址。浮动IP也可以立即重新映射,通过DigitalOcean控制面板或API,您的其他Droplet在同一个数据中心。这种即时重映射功能授予您设计并通过增加冗余的入口点,或网关,为您的服务器创建高可用性(HA)服务器基础架构的能力。

介绍

DigitalOcean浮动IP是可以分配给您的某个Droplet的可公开访问的静态IP地址。 浮动IP还可以通过DigitalOcean控制面板或API立即重新映射到同一数据中心中的其他Droplet中的一个。 此即时重映射功能允许您通过向服务器的入口点或网关添加冗余来设计和创建不具有单点故障的高可用性(HA)服务器基础架构。 实现完整的HA设置还需要在您的基础架构的每一层(例如应用程序和数据库服务器)实现冗余,这往往难以实现,但可以证明对于减少停机时间和保持快乐的用户基础是无价的。

需要注意的是指派浮动IP到Droplet不会取代Droplet的原公网IP地址,这将保持不变。 相反,浮动IP将提供额外的静态IP地址,可用于访问其当前分配给的Droplet。

本教程将涵盖以下主题:

  • A基本高可用性设置
  • 如何管理DigitalOcean浮动IP
  • Droplet锚点IP
  • 浮动IP元数据
  • 如何实施HA设置
  • 其他浮动IP使用案例

让我们看一个基本的HA设置示例,开始。

A基本高可用性设置

要了解HA服务器设置的工作原理,最简单的方法,如果你不熟悉,是看一个非常基本的。 最基本的HA服务器设置包括一个浮动IP,它指向一个主动/被动配置中的一组最低限度的两个负载均衡器。 这充当您的服务器设置的网关层,您的用户将访问它以访问您的Web服务器。

主动/被动图

以下是图中每个组件的说明:

  • 活动服务器:接收一个从浮动IP转发用户流量的服务器。 通常,这是一个负载均衡器,将流量转发到Web应用程序服务器的后端
  • 被动服务器:通常是相同配置到活动服务器备用服务器。 它只会在故障转移事件期间接收流量 - 即,如果活动服务器变得不可用,并且浮动IP被重新映射到备用服务器
  • 浮动IP:指向服务器之一,并且可以在活动服务器发生故障的情况下被重新映射的IP地址

重要的是要注意,浮动IP本身不会自动提供高可用性; 故障转移机制 ,它能够自动检测活动服务器的故障,并重新分配浮动IP到被动服务器的过程中,必须制定并实施了被视为高度可用的设置。 假设已经实现了有效的故障转移策略,则上述设置允许服务可用,即使其中一个服务器失败。

有几种不同的方法来实现故障转移,稍后我们将讨论,但让我们来看看如何使用DigitalOcean浮动IP。

如何管理DigitalOcean浮动IP

与大多数DigitalOcean资源一样,浮动IP可通过控制面板或API进行管理。 虽然控制面板允许您创建,重新分配和销毁浮动IP,但是使用API​​是实现有效的自动故障转移机制所必需的。 我们将从控制面板开始看看这两种管理浮动IP的方法。

控制面板

要管理通过DigitalOcean控制面板的浮动IP地址,单击网络链接(顶部导航菜单),然后在左侧菜单中的浮动IP地址 第一次访问该页面时,您会看到一个页面,其中显示您没有浮动IP,但您可以创建一个:

无浮动IP

在这里,你可以选择你的Droplet之一,并点击分配浮动IP按钮创建一个浮动IP。 如果要获取浮动IP而不立即将其分配给Droplet,可以从列表中选择特定的数据中心。

注意:如果您分配一个浮动IP到了2015年10月20日前创建了一个Droplet,您将看到一个模式消息,其中将包括提交指令之前,浮动IP,可以分配给Droplet所必须遵循。 这会在你的Droplet,我们将在本教程后面讨论创建一个锚IP。

稍后,您将有一个新的浮动IP指向您选择的Droplet:

分配浮动IP

如果您至少有一个浮动IP,此页面将显示您的浮动IP列表,其中包括有关每个条目的以下详细信息:

  • 地址:浮动IP地址,这是它如何被访问,并如何在内部确定
  • 数据中心:在其中浮动IP的创建数据中心。 浮动IP只能分配给同一数据中心内的Droplets
  • Droplet:该浮动IP分配给批处理。 发送到浮动IP地址的请求将定向到此Droplet。 这也可以设置为“未分配”,这意味着浮动IP被保留,但不会将网络流量传递到任何Droplet

除了浮动IP信息之外,本部分还允许您执行以下操作:

  • 重新分配(蓝笔按钮):分配浮动IP到不同的Droplet,在同一数据中心内。 您还可以取消分配浮动IP
  • 删除(红色的X按钮):从您的账户放开浮动IP

重新分配浮动IP

现在您熟悉通过控制面板管理浮动IP,让我们来看看使用API​​。

API

DigitalOcean API允许您执行所有可以通过控制面板执行的浮动IP管理操作,但允许您以编程方式进行更改。 这是特别有用的,因为HA设置需要能够自动将浮动IP重新分配给其他Droplet。

该API允许您执行以下浮动IP操作:

  • 列出浮动IP
  • 为区域预留新的浮动IP
  • 将新浮动IP分配给Droplet
  • 将浮动IP重新分配给Droplet
  • 取消分配浮动IP
  • 删除浮动IP

如果你不熟悉DigitalOcean API还没有,看看这个教程: 如何使用DigitalOcean API第2版 在DigitalOcean API,它涵盖浮动IP地址的完整文档,可以在这里找到: DigitalOcean API文档

注:为Ruby(官方DigitalOcean API包装DropletKit )和 Go ( Go )已与全浮式IP支持更新。

我们不会介绍通过API管理您的浮动IP的所有细节,但我们将展示一个快速示例。 下面是使用的例子curl命令来重新分配现有的浮动IP来Droplet:

curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer your_api_token' -d '{ "type": "assign", "droplet_id": 5000 }' "https://api.digitalocean.com/v2/floating_ips/8.8.8.9/actions" 

假设你换成实际值,突出显示的值,如您的API令牌,目标DropletID,并重新分配浮动IP地址,这将指向8.8.8.9 (浮动IP)到你的Droplet与一个ID 5000

现在,您熟悉使用控制面板和API管理浮动IP,让我们看看浮动IP如何与Droplet通信。

Droplet锚点IP

一个浮动IP和一个Droplet之间的网络流量流过一个锚的IP,这是别名一个Droplet的公共网络接口(IP地址eth0 )。 因此,Droplet必须具有锚IP,然后才能将浮动IP分配给它。 2015年10月20日之后创建的Droplet将自动拥有锚IP。 如果您有在此之前创建一个Droplet,您可以按照中的说明添加锚点IP 如何使在旧Droplet浮动IP的教程。

锚点IP只能由其所属的Droplet访问,并且只能访问分配给Droplet的浮动IP。 这意味着,锚点IP是您应该绑定任何您希望通过浮动IP高度可用的公共服务。 例如,如果您在主动/被动负载平衡器设置中使用浮动IP,则应该将负载平衡器服务绑定到其各自的Droplet锚点IP,以便它们只能通过浮动IP地址访问。 这将阻止您的用户使用您的Droplet的公共IP地址绕过您的浮动IP。

如何检索您的锚点IP

检索您的Droplet的锚IP的最简单方法是使用Droplet元数据服务。 锚IP信息,如存储在元数据的任何数据,可以通过运行基本检索curl从Droplet的命令行命令。

此命令将检索Droplet的锚点IP地址:

curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address

此命令将检索Droplet的锚IP的网络掩码:

curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/netmask

此命令将检索Droplet的锚点IP的网关:

curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/gateway

另一种方法来查找你Droplet的锚IP信息是使用ip addr的命令:

ip addr show eth0

锚IP(突出显示)将在您的正常公共IP地址信息下:

[secondary_output Example output:]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 04:01:7d:c2:a2:01 brd ff:ff:ff:ff:ff:ff
    inet 159.203.90.122/20 brd 159.203.95.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.17.0.47/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::601:7dff:fec2:a201/64 scope link
       valid_lft forever preferred_lft forever

浮动IP元数据

Droplet可以看到,如果它有一个浮动IP使用分配给它Droplet元数据服务。 如果分配了浮动IP,则Droplet还可以检索浮动IP的地址。 此信息在实施HA服务器设置时非常有用。

存储在元数据的任何信息一样,这些细节可以通过运行基本检索curl从Droplet的命令行命令。

要查看Droplet是否有分配给自己的浮动IP,请运行以下命令:

curl -s http://169.254.169.254/metadata/v1/floating_ip/ipv4/active

如果将浮动IP分配给Droplet,则可以使用此命令检索其地址:

curl -s http://169.254.169.254/metadata/v1/floating_ip/ipv4/ip_address

Droplet元数据完整文档可以找到这里

如何实施HA设置

现在,您已经熟悉DigitalOcean浮动IP的工作原理,您已经准备好开始构建自己的高可用性服务器设置。 如果您需要帮助入门,以下是几个教程,将引导您完成各种主动/被动高可用性设置的创建。 每个教程使用不同的软件解决方案来实现高可用性,所以随意选择一个最适合您的需求。

Corosync和Pacemaker

Corosync和Pacemaker提供了一个集群软件包,可用于创建有效的HA设置。 Corosync提供了一个消息层,使服务器能够作为集群进行通信,而Pacemaker提供了控制集群行为的能力。 本教程将演示如何使用Corosync和Pacemaker与浮动IP创建一个主动/被动HA服务器上DigitalOcean基础设施: 如何在Ubuntu 14.04创建Corosync,Pacemaker和浮动IP的高可用性设置

Keepalived

Keepalived是一种可以监视服务器或进程以在基础架构上实现高可用性的服务。 本指南使用keepalived守护进程来监视两个Web服务器。 辅助服务器将接管网络流量,如果使用DigitalOcean API自动自称共享的浮动IP地址的所有权主服务器体验的问题: 如何建立与KEEPALIVED高度可用的Web服务器和IP地址漂浮在Ubuntu 14.04

心跳

Heartbeat提供了集群功能,可以与浮动IP一起使用以实现基本的主动/被动高可用性服务器设置。 不推荐使用此设置在生产中使用,但它有效地演示了一个简单的HA服务器设置如何才能实现: 如何创建心跳高可用性设置和浮动IP地址在Ubuntu 14.04

其他浮动IP使用案例

利用浮动IP的另一种方法是蓝绿部署,一种部署和发布软件的策略。 它依赖于维护两个单独的生产能力环境,昵称蓝色和绿色,以方便讨论。 本指南,讨论如何使用上DigitalOcean蓝绿色的部署,以简化用户过渡到你的软件的新版本的过程: 如何使用蓝-绿部署安全地发布软件

结论

您现在应该了解DigitalOcean浮动IP的工作原理,以及如何使用它们来创建高可用性服务器基础架构。

如果您对浮动IP或高可用性有任何疑问,请将其留在以下注释中!