Consul - 故障转移事件

在本章中,我们将了解Consul中的故障转移事件.这将通过以下功能和减号来完成;

  • 单一群集失败

  • Jepsen测试

  • 多个群集失败

  • 拍摄快照

让我们来吧详细了解每一个.

单个群集故障

在单个群集故障中,放置在其中一个数据中心的群集启动失败.在每种情况下,重要的是要确保在发生故障转移的情况下,系统不仅可以阻止它,还可以拥有可以依赖的备份.为了防止Consul Failover事件,我们将使用称为Consul-alerts的东西.主要项目可在以下网址找到 -   https://github.com/AcalephStorage/consul-alerts .

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

有两种方法可以入门该项目.第一种方法是通过 GO 安装它.对于已安装和配置GO的用户,他们可以按照下面给出的步骤进行操作;

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

最后一个命令可以很容易地用来覆盖领事的默认端口-alert,datacenter option,consul-acl token等.该命令也可以写成下面给出的 :

 
 $ 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在容器本身内置的代理.

  • 使用在另一个Docker容器上运行的Consul Agent.

  • 使用Consul-alerts连接到远程领事实例.

现在让我们详细讨论这两个方面.

使用构建的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

在这里,我们正在覆盖领事的入口点,如标志所述 - 入口点的.与此同时,我们通过使用 -p标志,数据目录/数据使用标志-data-dir和客户端为0.0.0.0来提及使用的端口来引导客户端.

Entrypoint

在新的终端窗口中,让我们启动consul-alerts选项./p>

 
 $ 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.手表会检查是否启用了领事代理以及领事检查.

警报选项

我们可以清楚地看到领事警报已经轻松启动,并且已经注册了新的健康检查并添加了领事代理.数据中心被视为dc1,可以根据用户进行更改.

使用在另一个Docker容器上运行的Consul Agent

在这里,你可以使用任何类型的领事图像在Docker容器上运行.使用consul-alerts图像,我们可以轻松地将consul容器与consul-alerts容器链接起来.这是使用  - 链接标志完成的.

注意 : 在使用以下命令之前,请确保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-alerts进行链接通过远程领事实例.

 
 $ 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-event s  -  watch-checks

Jepsen测试

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

Jepsen通过设置正在测试的数据存储来工作五个不同的主机.它为被测数据存储创建一个客户端,指向五个节点中的每一个发送请求.它还创建了一系列称为"Nemesis"的特殊客户端,它们在集群中造成严重破坏,例如使用 iptables 切断节点之间的链接.然后它继续对不同节点同时发出请求,同时交替分区和修复网络.

在测试运行结束时,它会修复集群,等待集群恢复,然后验证系统的中间状态和最终状态是否符合预期.

多个群集失败

在多个群集故障转移事件期间,多个群集部署在一起数据中心无法支持客户支持的服务. 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

输出结果如下图所示.

Git Clone


 
 $ cd consul-replicate 
 $ make

输出结果如下面的截图所示.

复制

如果您在构建二进制文件时遇到一些问题,您还可以尝试使用以下命令手动拉动Docker镜像 :

 
 $ docker pull library/golang:1.7.4

上述命令将创建bin/consul-replicate,可以是作为二进制文件调用.下表显示了它所涵盖和减去的子命令的完整列表;

选项描述
auth基本身份验证用户名(和可选密码),以冒号分隔.没有默认值.
consul * 要查询的consul实例的位置(可能是IP地址或FQDN)和端口.
max-陈旧查询的最大陈旧性.如果指定,Consule将在所有服务器之间分配工作,而不仅仅是领导者.默认值为0(无).
ssl使用HTTPS时与领事交谈.需要将服务器服务器配置为服务器安全连接.默认值为false.
ssl-verify连接时验证证书通过SSL.这需要使用-ssl.默认值为true.
syslog将日志输出发送到syslog(除了stdout和stderr).默认值为false
syslog-facility要使用的工具发送到syslog.这需要使用-syslog.默认值为LOCAL
tokenConsul API令牌.没有默认值.
前缀 * 源前缀包括带有选项目标前缀的,用冒号(:)分隔.此选项是可添加的,可以多次指定多个前缀进行复制.
exclude复制期间要排除的前缀.此选项是附加的,可以多次指定多个前缀来排除.
wait复制前等待稳定性的minium(:maximum),用冒号(:)分隔.如果省略可选的最大值,则假定它是所需最小值的4倍.没有默认值.
重试等待时间的金额如果Consule在与API通信时返回错误.默认值为5秒.
config配置的路径磁盘上配置文件的文件或目录,相对于当前工作目录. CLI上指定的值优先于配置文件中指定的值.没有默认值.
log-level日志级别输出.这适用于stdout/stderr日志记录以及syslog日志记录(如果已启用).有效值为"debug","info","warn"和"err".默认值为"warn".
一次运行Consule复制一次并退出(与守护进程的默认行为相反).(仅限CLI)
版本输出版本信息并退出.(仅限CLI)

拍摄快照

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

  • Consul snapshot save

  • Consul快照代理

  • Consul snapshot inspect

  • 领事快照恢复

让我们详细了解每一项.

领事快照保存

此com mand设置为检索Consul服务器状态的原子时间点快照,其中包括键/值条目,服务目录,准备查询,会话和ACL.快照将保存到提到的文件名中.

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

输出结果如下面的截图所示.

快照保存

要检查当前目录中是否存在该文件,请通过在当前目录中运行它来检查它.如果是非领导者节点,请执行以下命令 :

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

Consul快照代理

此子命令启动一个进程,该进程拍摄状态的快照Consul服务器并在本地保存它们,或将它们推送到可选的远程存储服务.

快照代理

Consul Snapshot Inspect

它用于检查Consul服务器状态的时间点快照,其中包括键/值条目,服务目录,准备好的查询,会话和ACL.该命令可以执行如下 :

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

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

输出结果如下图所示.

Snapshot Inspect

Consul Snapshot Restore

快照恢复命令用于恢复点数 - Consul服务器状态的及时快照,包括键/值条目,服务目录,准备好的查询,会话和ACL.从保存的备份文件中读取快照.

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

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

输出结果如下图所示.

Snapshot Restore

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