Consul 故障转移事件

Consul 故障转移事件

在本章中,我们将学习有关Consul中的故障转移事件。这将通过以下功能完成:

  • 单集群故障
  • Jepsen测试
  • 多集群故障
  • 进行快照

让我们详细了解每一个。

单集群故障

在单集群故障中,放置在其中一个数据中心的集群开始出现故障。在每种情况下,确保系统不仅可以防止故障转移,而且还有一个可靠的备份是很重要的。为了防止Consul的故障转移事件,我们将使用一种称为Consul-alerts的东西。主要项目可以在以下找到: https://github.com/AcalephStorage/consul-alerts 。

Consul-alerts是一个高可用的守护进程,根据Consul Health检查发送通知和提醒。该项目在localhost:9000上运行守护进程和API,并连接到本地的consul代理(localhost:8500),使用默认数据中心(dc1)。

有两种方法可以开始使用该项目。第一种方法是通过 GO 安装它。对于已安装并配置了GO的用户,可以按照以下步骤进行操作:

$ go get github.com/AcalephStorage/consul-alerts
$ go install
$ consul-alerts start

最后一个命令可以轻松地用于覆盖consul-alert的默认端口、数据中心选项、consul-acl令牌等。命令也可以写成如下所示:

$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""

第二种方法涉及用户使用Docker。对于不同的场景,这两种方法都同样有用。要在Docker上使用Consul-alerts,请使用以下命令从Docker Hub拉取镜像。

$ docker pull acaleph/consul-alerts

Consul 故障转移事件

进入Docker方法,我们可以考虑以下三个选项−

  • 使用内置在容器中的Consul Agent。
  • 使用在另一个Docker容器中运行的Consul Agent。
  • 使用Consul-alerts来链接到远程Consul实例。

现在让我们详细讨论这两个选项。

使用内置在容器中的Consul Agent

让我们使用以下命令启动consul agent−

$ docker run -ti \
   --rm -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \  
   --entrypoint = /bin/consul \
   acaleph/consul-alerts \
   agent -data-dir /data -server -bootstrap -client = 0.0.0.0

在这里,我们通过标志 entrypoint 来覆盖Consul的入口点。我们也通过使用 --entrypoint 标志和端口使用启动客户端 -p标志,数据目录/data 使用标志-data-dir和客户端为0.0.0.0。

Consul 故障转移事件

在新的终端窗口中,让我们启动consul-alerts选项。

$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks

在上面的步骤中,我们执行consul-alerts以交互模式启动。警报地址端口被指定为9000。观察程序会检查consul代理是否已启用,以及consul检查项目。

Consul 故障转移事件

我们可以清楚地看到,领事警报已经很容易启动,并且它已经注册了一个新的健康检查,增加了领事代理。数据中心被定义为dc1,根据用户的需要可以进行更改。

使用在另一个Docker容器中运行的Consul代理

在这里,您可以使用任何类型的Consul镜像在Docker容器中运行。使用consul-alerts镜像,我们可以很容易地将consul容器与consul-alerts容器连接起来。这可以通过使用 --link参数 来完成。

注意 - 在使用以下命令之前,请确保consul容器已在另一个终端上运行。

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   --link consul:consul \
   acaleph/consul-alerts start \
   --consul-addr=consul:8500 \
   --log-level = info --watch-events --watch-checks

使用Consul-alerts连接远程Consul实例

在这里,我们应该使用以下命令来使用Consul-alerts连接到远程Consul实例。

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   acaleph/consul-alerts start \
   --consul-addr = remote-consul-server.domain.tdl:8500 \
   --log-level = info --watch-events --watch-checks

Jepsen测试

Jespen是一个用于测试任何系统中的部分容错和网络的工具。它通过在系统上创建一些随机操作来测试系统。 Jepsen是用Clojure编写的 。不幸的是,对于演示,Jepsen测试需要大规模的数据库系统群集形成,因此超出了此处所涵盖的范围。

Jepsen通过在五个不同的主机上设置要测试的数据存储来工作。它创建一个客户端,用于针对数据存储发送请求的每个五个节点。它还创建了一系列名为“Nemesis”的特殊客户端,它们在集群中制造混乱,比如使用 iptables 切断节点之间的连接。然后,它继续并发地对不同的节点发出请求,同时交替地分割和修复网络。

在测试运行结束时,它会修复群集,并等待群集恢复,然后验证系统的中间和最终状态是否符合预期。此处摘录了一些内容 这里 。

想了解更多关于Jepsen测试的信息,请点击这里 这里 。

多个群集故障

在多个数据中心部署的群集在支持向客户提供服务时发生故障。Consul使我们能够确保当其中一种情况出现时,Consul具有帮助您在此类条件下启用服务的功能。

为了实现这一点,我们将通过一个项目来介绍如何将Consul从一个群集复制到多个群集。该项目通过使用consul-replicate守护程序在多个Consul数据中心之间复制K/V对。您可以在此处查看Hashicorp项目- https://github.com/hashicorp/consul-replicate 。尝试此项目的一些先决条件包括-

  • Golang
  • Docker
  • Consul
  • Git

让我们从以下命令开始-

注意 -在运行以下命令之前,请确保您的机器上正确安装和配置了Git

$ git clone – https://github.com/hashicorp/consul-replicate.git

输出如下所示的屏幕截图。

Consul 故障转移事件

$ cd consul-replicate
$ make

输出结果将如下截图所示。

Consul 故障转移事件

$ docker pull library/golang:1.7.4

上述命令将创建 bin/consul-replicate,可以作为二进制文件调用。下表显示了其包含的所有子命令的完整列表 –

选项 描述
auth 基本认证用户名(可选密码),用冒号分隔。没有默认值。
consul * 要查询的consul实例的位置(可以是IP地址或FQDN)和端口。
max-stale 查询的最大过时时间。如果指定了,Consule会将工作分配给所有服务器,而不仅仅是leader。默认值为0(无)。
ssl 在与Consul通信时使用HTTPS。要求Consul服务器配置为提供安全连接。默认值为false。
ssl-verify 通过SSL连接时验证证书。这需要使用-ssl参数。默认值为true。
syslog 将日志输出发送到syslog(除了标准输出和标准错误以外)。默认值为false。
syslog-facility 发送到syslog时使用的设备。需要使用-syslog参数。默认值为LOCAL。
token Consul API令牌。没有默认值。
prefix* 包括源前缀的源,连同目标前缀,以冒号( : )分隔。此选项是可累计的,可以多次指定以进行多个前缀的复制。
exclude 在复制过程中需要排除的前缀。此选项是可累加的,可以多次指定以排除多个前缀。
wait 在复制之前等待稳定的最小(:最大)时间,用冒号( : )分隔。如果省略了可选的最大值,则假定为所需最小值的4倍。没有默认值。
retry 在与API通信时,如果Consule返回错误,则等待的时间量。默认值为5秒。
config 指定配置文件的路径或配置文件目录在磁盘上,相对于当前工作目录。在命令行界面上指定的值优先于配置文件中指定的值。没有默认值。
日志级别 输出的日志级别。这适用于标准输出/标准错误日志记录以及syslog日志记录(如果启用)。有效值为”debug”、”info”、”warn”和”err”。默认值为”warn”。
once 运行 Consule Replicate 一次并退出(与守护进程的默认行为相反)。 (仅限CLI)
version 输出版本信息并退出。 (仅限CLI)

拍摄快照

快照是管理Consul集群的备份的重要组成部分。默认情况下,Consul提供了一种保存Consul集群快照的方法。Consul提供了四个独立的子命令,可以使用这些命令使用consul创建快照,它们是 –

  • Consul快照保存
  • Consul快照代理
  • Consul快照检查
  • Consul快照恢复

让我们详细了解每一个。

Consul快照保存

该命令用于检索Consul服务器状态的原子、瞬时快照,其中包括键/值条目、服务目录、准备查询、会话和ACL。快照将保存到指定的文件名中。

$ consul snapshot save <name-of-the-file>.snap

输出结果如下所示:

Consul 故障转移事件

要检查当前目录中是否存在该文件,请通过在当前目录中运行它来检查。对于非 leader 节点,请执行以下命令 −

$ consul snapshot save -stale <name-of-file>.snap

Consul快照代理

此子命令启动一个进程,它会对Consul服务器的状态进行快照并将其保存在本地,或推送到可选的远程存储服务中。

Consul 故障转移事件

Consul快照检查

用于检查Consul服务器当前状态的快照,包括键/值条目、服务目录、准备查询、会话和ACL。可以使用以下命令执行该操作 −

注意 −请记住,以下命令只能在保存快照的目录中运行。

$ consul snapshot save <name-of-the-file>.snap

输出结果如下所示:

Consul 故障转移事件

Consul快照还原

快照还原命令用于还原Consul服务器状态的某个时间点的快照,包括键/值条目、服务目录、准备查询、会话和ACL。快照是从保存的备份文件中读取的。

注意 −请记住,以下命令只能在保存快照的目录中运行。

$ consul snapshot restore <name-of-the-file>.snap

输出结果如下所示:

Consul 故障转移事件

如果你在AWS上使用Consul,这个项目可能会帮助你节省一些时间− https://github.com/pshima/consul-snapshot 。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程