5.4.4. 扩展 etcd


您可以通过在 etcd 主机中添加更多资源或通过添加更多 etcd 主机来纵向扩展 etcd 集群。

注意

由于 etcd 使用的投票系统,集群必须始终包含奇数个成员数。

拥有奇数 etcd 主机的集群可考虑容错。etcd 主机数量为奇数不会改变仲裁所需的数量,但会增加故障的容错能力。例如,对于包含三个成员的群集,仲裁为 2,保留一个失败容错能力。这可确保集群在两个成员健康时继续运行。

建议具有三个 etcd 主机的生产环境级别的集群。

新主机需要一个全新的 Red Hat Enterprise Linux 7 专用主机。etcd 存储应位于 SSD 磁盘上,以实现最佳性能和在 /var/lib/etcd 中挂载的专用磁盘上。

先决条件
  1. 在添加新的 etcd 主机前,备份 etcd 配置和数据以防止数据丢失。
  2. 检查当前的 etcd 集群状态,以避免添加新主机到不健康的集群。运行这个命令:

    # ETCDCTL_API=3 etcdctl --cert="/etc/etcd/peer.crt" \
              --key=/etc/etcd/peer.key \
              --cacert="/etc/etcd/ca.crt" \
              --endpoints="https://*master-0.example.com*:2379,\
                https://*master-1.example.com*:2379,\
                https://*master-2.example.com*:2379"
                endpoint health
    https://master-0.example.com:2379 is healthy: successfully committed proposal: took = 5.011358ms
    https://master-1.example.com:2379 is healthy: successfully committed proposal: took = 1.305173ms
    https://master-2.example.com:2379 is healthy: successfully committed proposal: took = 1.388772ms
  3. 在运行 scaleup playbook 前,请确保新主机已注册到正确的红帽软件频道:

    # subscription-manager register \
        --username=*<username>* --password=*<password>*
    # subscription-manager attach --pool=*<poolid>*
    # subscription-manager repos --disable="*"
    # subscription-manager repos \
        --enable=rhel-7-server-rpms \
        --enable=rhel-7-server-extras-rpms

    etcd 托管在 rhel-7-server-extras-rpms 软件频道中。

  4. 确保从 etcd 集群中删除所有未使用的 etcd 成员。这必须在运行 scaleup playbook 之前完成。

    1. 列出 etcd 成员:

      # etcdctl --cert="/etc/etcd/peer.crt" --key="/etc/etcd/peer.key" \
        --cacert="/etc/etcd/ca.crt" --endpoints=ETCD_LISTEN_CLIENT_URLS member list -w table

      复制未使用的 etcd 成员 ID(如果适用)。

    2. 通过使用以下命令指定其 ID 来删除未使用的成员:

      # etcdctl --cert="/etc/etcd/peer.crt" --key="/etc/etcd/peer.key" \
        --cacert="/etc/etcd/ca.crt" --endpoints=ETCD_LISTEN_CLIENT_URL member remove UNUSED_ETCD_MEMBER_ID
  5. 在当前 etcd 节点上升级 etcd 和 iptables:

    # yum update etcd iptables-services
  6. 为 etcd 主机备份 /etc/etcd 配置。
  7. 如果新的 etcd 成员也是 OpenShift Container Platform 节点,将所需的主机数量添加到集群中
  8. 此流程的其余部分假定您添加了一台主机,但是如果您添加多个主机,请在每个主机上执行所有步骤。

5.4.4.1. 使用 Ansible 添加新 etcd 主机

流程
  1. 在 Ansible 清单文件中,创建一个名为 [new_etcd] 的新组,再添加新主机。然后,将 new_etcd 组添加为 [OSEv3] 组的子组:

    [OSEv3:children]
    masters
    nodes
    etcd
    new_etcd 1
    
    ... [OUTPUT ABBREVIATED] ...
    
    [etcd]
    master-0.example.com
    master-1.example.com
    master-2.example.com
    
    [new_etcd] 2
    etcd0.example.com 3
    1 2 3
    添加以下行:
    注意

    将旧的 etcd 主机条目替换为清单文件中的新 etcd 主机条目。在替换旧的 etcd 主机时,必须创建一个 /etc/etcd/ca/ 目录的副本。另外,您可以在扩展 etcd 主机前重新部署 etcd ca 和 certs。

  2. 在安装 OpenShift Container Platform 并托管 Ansible 清单文件的主机中,切换到 playbook 目录并运行 etcd scaleup playbook:

    $ cd /usr/share/ansible/openshift-ansible
    $ ansible-playbook  playbooks/openshift-etcd/scaleup.yml
  3. 在 playbook 运行后,通过将新 etcd 主机从 [new_etcd] 组移到 [etcd] 组来修改清单文件,使其反映当前的状态:

    [OSEv3:children]
    masters
    nodes
    etcd
    new_etcd
    
    ... [OUTPUT ABBREVIATED] ...
    
    [etcd]
    master-0.example.com
    master-1.example.com
    master-2.example.com
    etcd0.example.com
  4. 如果使用 Flannel,修改位于 /etc/sysconfig/flanneld 主机上的 flanneld 服务配置,使其包含新的 etcd 主机:

    FLANNEL_ETCD_ENDPOINTS=https://master-0.example.com:2379,https://master-1.example.com:2379,https://master-2.example.com:2379,https://etcd0.example.com:2379
  5. 重启 flanneld 服务:

    # systemctl restart flanneld.service
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.