Consul教程

Consul - 故障转移事件

在本章中,我们将了解 Consul 中的故障转移事件。这将在以下功能的帮助下完成-
单个集群故障 Jepsen 测试 多个集群故障 拍摄快照
让我们详细了解其中的每一个。

单个集群故障

在单个集群故障中,放置在其中一个数据中心的集群开始出现故障。在每种情况下,重要的是要确保在发生故障转移的情况下,系统不仅可以防止它,而且还有一个可以依赖的备份。为了防止 Consul Failover 事件,我们将使用称为 Consul-alerts 的东西。主要项目可以在-https://github.com/AcalephStorage/consul-警报。
Consul-alerts 是一个高度可用的守护进程,用于根据 Consul 健康检查发送通知和提醒。该项目在 localhost:9000 运行守护进程和 API,并使用默认数据中心 (dc1) 连接到本地 consul 代理 (localhost:8500)。
有两种方法可以开始项目。第一种方法是通过 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-Alerts
进入Docker方法,我们可以考虑以下三个选项-
使用内置于容器本身的 Consul Agent。 使用在另一个 Docker 容器上运行的 Consul 代理。 使用 Consul-alerts 通过远程 Consul 实例进行链接。
现在让我们详细讨论这两点。

使用容器本身内置的Consul Agent

让我们使用以下命令启动 consul 代理-
$ 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 的 入口点。与此同时,我们通过使用 -p 标志,数据目录/data 使用标志-data-dir 和客户端作为 0.0.0.0 提及使用的端口来引导客户端。
Entrypoint
在一个新的终端窗口上,让我们启动 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。watch 会检查 consul 代理是否启用以及 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-复制。尝试这个项目的一些先决条件包括-
Golang 码头工人 Consul Git
让我们开始使用以下命令-
注意-在运行以下命令之前,请确保您的机器上正确安装和配置了 Git。
$ git clone-https://github.com/hashicorp/consul-replicate.git
输出将如以下屏幕截图所示。
Git Clone
$ cd consul-replicate
$ make
输出将如以下屏幕截图所示。
Replicate
如果您在构建二进制文件时遇到问题,您也可以尝试使用以下命令手动拉取 Docker 镜像-
$ docker pull library/golang:1.7.4
上述命令会创建bin/consul-replicate,可以作为二进制调用。下表显示了它涵盖的子命令的完整列表-
选项 说明
auth 基本身份验证用户名(和可选密码),以冒号分隔。没有默认值。
Consul* 要查询的 consul 实例的位置(可能是 IP 地址或 FQDN)和端口。
max-stale 查询的最大陈旧度。如果指定,Consule 将在所有服务器之间分配工作,而不仅仅是领导者。默认值为 0(无)。
ssl 在与 Consul 交谈时使用 HTTPS。需要将Consul服务器配置为服务器安全连接。默认值为 false。
ssl-verify 通过 SSL 连接时验证证书。这需要使用-ssl。默认值为 true。
syslog 将日志输出发送到 syslog(除了 stdout 和 stderr)。默认值为 false
syslog-facility 发送到系统日志时使用的工具。这需要使用-syslog。默认为本地
token Consul API 令牌。没有默认值。
prefix* 源前缀包括带有选项的目标前缀,以冒号分隔 (:)。此选项是附加的,可以多次指定以复制多个前缀。
exclude 复制期间要排除的前缀。此选项是附加的,可以多次指定以排除多个前缀。
wait 复制前等待稳定的最小值(:maximum),用冒号分隔(:)。如果省略可选的最大值,则假定为所需最小值的 4 倍。没有默认值。
retry Consule 在与 API 通信时返回错误时等待的时间。默认值为 5 秒。
config 磁盘上配置文件或配置文件目录的路径,相对于当前工作目录。 CLI 上指定的值优先于配置文件中指定的值。没有默认值。
log-level 输出的日志级别。这适用于 stdout/stderr 日志记录以及 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 snapshot save-stale <name-of-file>.snap

Consul快照代理

这个子命令启动一个进程,获取 Consul 服务器状态的快照并将它们保存在本地,或者将它们推送到可选的远程存储服务。
快照代理

Consul快照检查

它用于检查 Consul 服务器状态的时间点快照,其中包括键/值条目、服务目录、准备好的查询、会话和 ACL。该命令可以执行如下-
注意-请记住,以下命令只能在保存快照的目录中运行。
$ consul snapshot save <name-of-the-file>.snap
输出将如以下屏幕截图所示。
快照检查

Consul 快照恢复

snapshot restore 命令用于恢复 Consul 服务器状态的时间点快照,其中包括键/值条目、服务目录、准备好的查询、会话和 ACL。从保存的备份文件中读取快照。
注意-请记住,以下命令只能在保存快照的目录中运行。
$ consul snapshot restore <name-of-the-file>.snap
输出将如以下屏幕截图所示。
快照恢复
如果您正在使用 AWS 开发 Consul,这个项目可能会帮助您节省一些时间-https://github.com/pshima/consul-snapshot。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4