参考文档:
为了确保已部署应用程序的高可用性,控制器本身必须具有高可用性。这就需要创建其他控制器,所有这些控制器自然都位于“控制器”模型内。初始控制器被称为主控制器,如果它与集群对等方失去连接,则会进行自动故障转移。
有关应用程序方面的信息,请参阅应用程序高可用性。
概述
控制器HA使用juju enable-ha
命令进行管理。它通过确保集群具有必需数量的控制器来实现。缺省情况下,此数字为三,但是-n开关可用于更改该数字。因此,此命令既可以启用HA,也可以补偿任何丢失的控制器,就像启用HA然后删除一个或多个控制器的情况一样。
设置控制器后,API服务器代码将与MongoDB数据库一起安装。
控制器的数量必须为奇数,以便主机可以在其对等主机之间“投票”。成员数偶数的群集将导致随机成员变为非活动状态。后一个系统将成为“热备用”系统,并在其他成员发生故障时自动变为活动状态。此外,由于HA上下文中基础数据库的限制,该数字不能超过7。所有这些意味着一个集群只能具有三个,五个或七个活动成员。
Juju客户和代理与群集中的任何控制器进行对话。这意味着控制器(API)级别的处理是分布式的。但是,在任何给定时间只有一个主数据库,并且所有控制器都将其写入。因此,“主”实际上是指基础数据库。
启用控制器HA
要启用控制器HA,只需调用enable-ha命令:
juju enable-ha
由于未请求特定数量的群集计算机,因此使用默认的三台。因此,我们希望出现两个新的控制器。实际上,以上命令的输出反映了这一点:
maintaining machines: 0
adding machines: 1, 2
我们还可以查询“控制器”模型中的机器:
juju machines -m controller
输出应显示正在配置的两台新计算机:
Machine State DNS Inst id Series AZ Message
0 started 54.166.164.0 i-04790c2414e4c8e80 xenial us-east-1a running
1 pending 54.145.192.13 i-071660e9ce3c3cee5 xenial us-east-1c running
2 pending 54.80.176.66 i-0b36284d1ebb816cf xenial us-east-1a running
由于已经存在三个控制器,因此再次调用juju enable-ha
将没有任何效果。
使用juju controllers --refresh
刷新控制器列表显示HA级别为3:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 3 3 2.4-beta2
从集群中删除计算机
可以随时从群集中删除计算机。这样做的典型原因是:
-
控制器行为异常,您的意图是将其替换为另一个控制器。
-
您已决定不需要当前的HA级别,并且希望降低它。
- 如果卸载控制器将导致偶数系统,则将充当“热备用”。
- 如果卸下控制器会导致奇数个系统,则每台都将积极参与集群。
通过从模型中删除控制器的机器(juju remove-machine
),可以从集群中删除控制器。
使用前面章节中的示例,这是我们将怎样删除机器“ 1”:
juju remove-machine -m controller 1
现在juju controllers --refresh
的输出为:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 2 1/2 2.4-beta2
现在,该集群中只有一个活动控制器(和一个备用控制器)(即,两个活动控制器中的一个处于活动状态)。请注意,这种情况应尽快纠正。
将计算机添加到集群
使用enable-ha命令可达到所需的控制器数量(即HA级别)。
在我们正在进行的示例中,我们原来的3成员集群现在有两台计算机。我们可以通过再次发出juju enable-ha将其恢复到三个,但是如果我们决定将其设置为5个成员集群,则可以执行以下操作:
juju enable-ha -n 5
这将导致再生成三个控制器(2 + 3 = 5)。
juju controllers --refresh
的输出为:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 5 5 2.4-beta2
查看扩展控制器HA信息
可以从show-controller
命令获取有关控制器HA的扩展信息:
juju show-controller
下面列出了我们的5成员集群的部分输出:
...
...
controller-machines:
"0":
instance-id: i-04790c2414e4c8e80
ha-status: ha-enabled
"2":
instance-id: i-0b36284d1ebb816cf
ha-status: ha-enabled
"3":
instance-id: i-09ff42ba5fb9429b0
ha-status: ha-enabled
"4":
instance-id: i-098222dad56cbe9a0
ha-status: ha-enabled
"5":
instance-id: i-0613fb1fa8346de8a
ha-status: ha-enabled
models:
controller:
uuid: e8c4d910-8818-4a8a-8839-25766a1875d3
machine-count: 5
core-count: 5
...
...
此处,计算机数量是“控制器”模型中的计算机总数,而核心数量是控制器计算机的数量。如果成员处于活动状态,则密钥状态会显示为“ ha-enabled”(已启用),如果成员处于热备用模式,则状态为“ ha-pending”。
从控制器故障中恢复
在出现故障的控制器时,不会自动重新生成新的控制器,也不会删除故障的控制器。但是,只要原始成员数量的一半以上仍然可用,手动恢复就很简单:
- 卸下损坏的控制器(如上所述)。
- 添加新的控制器(如上所述)。
在添加新控制器之前,必须先删除控制器,因为
enable-ha
命令不会检查故障。它只是确保存在成员总数。
在不幸的情况下,如果存在可用的工作控制器数量不足,则必须从备份中还原。请参阅备份和还原Juju以了解其工作原理。
如果控制器进入“down”状态,则认为该控制器发生故障。可以通过将状态命令应用于“控制器”模型来对其进行监视:
juju status -m controller
此输出表明,在机器“ 3”上运行的控制器已失去与集群其余部分的连接:
Machine State DNS Inst id Series AZ Message
0 started 54.166.164.0 i-04790c2414e4c8e80 xenial us-east-1a running
2 started 54.80.176.66 i-0b36284d1ebb816cf xenial us-east-1a running
3 down 54.157.161.147 i-09ff42ba5fb9429b0 xenial us-east-1e running
4 started 54.227.91.241 i-098222dad56cbe9a0 xenial us-east-1d running
5 started 174.129.90.47 i-0613fb1fa8346de8a xenial us-east-1c running
但是,juju控制器的输出中的“ HA”列–refresh仍然像以前一样显示为“ 5”:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 5 5 2.4-beta2
要从此降级的群集中恢复,请执行以下操作:
juju remove-machine -m controller 3
juju enable-ha -n 5
控制器HA和日志记录
所有Juju计算机都将其日志发送到HA群集中的控制器。每个控制器依次将这些日志发送到MongoDB数据库,该数据库在各个控制器之间是同步的。用户通常使用juju debug-log命令读取日志信息。请参阅Juju日志。