0
点赞
收藏
分享

微信扫一扫

juju如何让控制器高可用

未定义变量 2022-01-12 阅读 63

如何让控制器高可用

为确保已部署应用程序的高可用性 (HA),控制器本身必须具有高可用性。这需要创建额外的控制器,所有这些都自然地驻留在“控制器”模型中。初始控制器被称为主控制器,如果它失去与集群对等点的连接,则会发生自动故障转移。

有关应用程序方面的信息,请参阅应用程序高可用性。

本页涵盖以下主题:

  • 概述
  • 启用控制器 HA
  • 从集群中移除机器
  • 将机器添加到集群
  • 查看扩展控制器 HA 信息
  • 从控制器故障中恢复
  • 控制器 HA 和日志记录

概述

控制器 HA 使用该juju enable-ha命令进行管理。它通过确保集群具有所需数量的控制器来做到这一点。默认情况下,这个数字是 3,但-n可以使用开关来改变它。因此,此命令用于启用 HA 以及补偿任何丢失的控制器,例如启用 HA 然后删除一个或多个控制器的情况。

供应控制器时,API 服务器代码与 MongoDB 数据库一起安装。

控制器的数量必须是奇数,以便主节点在其对等节点中“投票”。具有偶数个成员的集群将导致随机成员变为非活动状态。后一个系统将成为“热备用”,并在其他成员出现故障时自动变为活动状态。此外,由于 HA 上下文中基础数据库的限制,该数量不能超过七个。这意味着一个集群只能有三个、五个或七个活动成员。

Juju 客户端和代理与集群中的任何控制器通信。这意味着控制器 (API) 级别的处理是分布式的。但是,在任何给定时间只有一个主数据库,所有控制器都写入它。因此,“master”实际上是指底层数据库。

启用控制器 HA

要启用控制器 HA,只需调用以下enable-ha命令:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju enable-ha
</code></span></span>

由于未请求特定数量的集群机器,因此使用默认值 3。因此,我们预计会出现两个新的控制器。实际上,上述命令的输出反映了这一点:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">maintaining machines: <span style="color:#77216f">0</span>
adding machines: <span style="color:#77216f">1</span>, <span style="color:#77216f">2</span>
</code></span></span>

我们还可以在“控制器”模型中查询机器:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju machines -m controller
</code></span></span>

输出应显示正在配置的两台新机器:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">Machine  State    DNS            Inst <span style="color:#c7162b">id</span>              Series  AZ          Message
<span style="color:#77216f">0</span>        started  <span style="color:#77216f">54.166</span>.164.0   i-04790c2414e4c8e80  xenial  us-east-1a  running
<span style="color:#77216f">1</span>        pending  <span style="color:#77216f">54.145</span>.192.13  i-071660e9ce3c3cee5  xenial  us-east-1c  running
<span style="color:#77216f">2</span>        pending  <span style="color:#77216f">54.80</span>.176.66   i-0b36284d1ebb816cf  xenial  us-east-1a  running
</code></span></span>

juju enable-ha再次调用将无效,因为三个控制器已经存在。

刷新控制器列表juju controllers --refresh显示 HA 级别为 3:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">Controller  Model    User   Access     Cloud/Region         Models  Machines    HA  Version
aws-ha*     default  admin  superuser  aws/us-east-1             <span style="color:#77216f">2</span>         <span style="color:#77216f">3</span>     <span style="color:#77216f">3</span>  <span style="color:#77216f">2.4</span>-beta2
</code></span></span>

从集群中移除机器

可以随时从集群中删除机器。这样做的典型原因是:

  • 控制器行为不端,您的意图是用另一个控制器替换它。
  • 您已决定不需要您当前的 HA 级别并希望降低它。
    • 如果移除控制器将导致系统数量为偶数,则其中一个将充当“热备用”。
    • 如果移除控制器会导致系统数量为奇数,那么每个系统都将积极参与集群。

控制器通过从模型中移除其机器(juju remove-machine)从集群中移除。

使用上一节中的示例,我们将删除机器“1”:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju remove-machine -m controller <span style="color:#77216f">1</span>
</code></span></span>

juju controllers --refresh现在的输出变为:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">Controller  Model    User   Access     Cloud/Region         Models  Machines    HA  Version
aws-ha*     default  admin  superuser  aws/us-east-1             <span style="color:#77216f">2</span>         <span style="color:#77216f">2</span>   <span style="color:#77216f">1</span>/2  <span style="color:#77216f">2.4</span>-beta2
</code></span></span>

现在这个集群中只有一个活动控制器(和一个备用控制器)(即两个中的一个是活动的)。请注意,这种情况应尽快纠正。

enable-ha命令不能用于从集群中删除机器。

将机器添加到集群

使用该enable-ha命令来实现所需的控制器数量(即 HA 级别)。

在我们正在进行的示例中,我们原来的 3 成员集群现在有两台机器。我们可以通过juju enable-ha再次发布将其恢复为三个,但如果我们决定将其设为 5 成员集群,我们将执行以下操作:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju enable-ha -n <span style="color:#77216f">5</span>
</code></span></span>

这将导致生成三个控制器 (2 + 3 = 5)。

juju controllers --refresh现在的输出变为:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">Controller  Model    User   Access     Cloud/Region         Models  Machines    HA  Version
aws-ha*     default  admin  superuser  aws/us-east-1             <span style="color:#77216f">2</span>         <span style="color:#77216f">5</span>     <span style="color:#77216f">5</span>  <span style="color:#77216f">2.4</span>-beta2
</code></span></span>

查看扩展控制器 HA 信息

有关控制器 HA 的扩展信息可以从以下show-controller命令获得:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju show-controller
</code></span></span>

此处列出了我们的 5 成员集群的部分输出:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash"> <span style="color:#111111">..</span>.
 <span style="color:#111111">..</span>.
 controller-machines:
    <span style="color:#0e811f">"0"</span><span style="color:#c7162b">:</span>
      instance-id: i-04790c2414e4c8e80
      ha-status: ha-enabled
    <span style="color:#0e811f">"2"</span><span style="color:#c7162b">:</span>
      instance-id: i-0b36284d1ebb816cf
      ha-status: ha-enabled
    <span style="color:#0e811f">"3"</span><span style="color:#c7162b">:</span>
      instance-id: i-09ff42ba5fb9429b0
      ha-status: ha-enabled
    <span style="color:#0e811f">"4"</span><span style="color:#c7162b">:</span>
      instance-id: i-098222dad56cbe9a0
      ha-status: ha-enabled
    <span style="color:#0e811f">"5"</span><span style="color:#c7162b">:</span>
      instance-id: i-0613fb1fa8346de8a
      ha-status: ha-enabled
  models:
    controller:
      uuid: e8c4d910-8818-4a8a-8839-25766a1875d3
      machine-count: <span style="color:#77216f">5</span>
      core-count: <span style="color:#77216f">5</span>
  <span style="color:#111111">..</span>.
  <span style="color:#111111">..</span>.
</code></span></span>

这里,machine-count是模型“控制器”中的机器总数,是core-count控制器机器的数量。ha-status如果成员处于活动状态,则该键显示“ha-enabled”,如果处于热备用模式,则显示“ha-pending”。

从控制器故障中恢复

在失败的控制器出现时,新的控制器不会自动重新生成,也不会删除失败的控制器。但是,只要超过一半的原始集群成员数量保持可用,手动恢复就很简单:

  • 从集群中移除机器
  • 将机器添加到集群

必须在添加新控制器之前删除控制器,因为该enable-ha命令不会检查故障。它只是确保存在成员总数。

在工作控制器数量不足的不幸情况下,您必须从备份中恢复。请参阅备份和恢复 Juju以了解其工作原理。

如果控制器进入“关闭”状态,则认为控制器失败。这可以通过将status命令应用于“控制器”模型来监控:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju status -m controller
</code></span></span>

此输出显示在机器“3”上运行的控制器已失去与集群其余部分的连接:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">Machine  State    DNS             Inst <span style="color:#c7162b">id</span>              Series  AZ          Message
<span style="color:#77216f">0</span>        started  <span style="color:#77216f">54.166</span>.164.0    i-04790c2414e4c8e80  xenial  us-east-1a  running
<span style="color:#77216f">2</span>        started  <span style="color:#77216f">54.80</span>.176.66    i-0b36284d1ebb816cf  xenial  us-east-1a  running
<span style="color:#77216f">3</span>        down     <span style="color:#77216f">54.157</span>.161.147  i-09ff42ba5fb9429b0  xenial  us-east-1e  running
<span style="color:#77216f">4</span>        started  <span style="color:#77216f">54.227</span>.91.241   i-098222dad56cbe9a0  xenial  us-east-1d  running
<span style="color:#77216f">5</span>        started  <span style="color:#77216f">174.129</span>.90.47   i-0613fb1fa8346de8a  xenial  us-east-1c  running
</code></span></span>

但是,输出中的“HA”列juju controllers --refresh仍然显示“5”,如前所述:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">Controller  Model    User   Access     Cloud/Region         Models  Machines    HA  Version
aws-ha*     default  admin  superuser  aws/us-east-1             <span style="color:#77216f">2</span>         <span style="color:#77216f">5</span>     <span style="color:#77216f">5</span>  <span style="color:#77216f">2.4</span>-beta2
</code></span></span>

要从此降级的集群中恢复,您将执行以下操作:

<span style="background-color:rgba(0, 0, 0, 0.03)"><span style="color:#111111"><code style="margin-left:0px" class="language-bash">juju remove-machine -m controller <span style="color:#77216f">3</span>
juju enable-ha -n <span style="color:#77216f">5</span>
</code></span></span>

cdnapicon-default.png?t=LBL2http://cdnap.org/zixun/27707.html

控制器 HA 和日志记录

所有 Juju 机器都将它们的日志发送到 HA 集群中的控制器。每个控制器依次将这些日志发送到跨控制器同步的 MongoDB 数据库。用户juju debug-log正常使用命令读取日志信息。见Juju 日志。

举报

相关推荐

0 条评论