ETCD系列之二:部署集群-阿里云开发者社区

开发者社区> 丰茂> 正文

ETCD系列之二:部署集群

简介: ETCD系列之二:部署集群 1. 概述 想必很多人都知道ZooKeeper,通常用作配置共享和服务发现。和它类似,ETCD算是一个非常优秀的后起之秀了。本文重点不在描述他们之间的不同点。首先,看看其官网关于ETCD的描述[1]: A distributed, reliable key-va
+关注继续查看

ETCD系列之二:部署集群

1. 概述

想必很多人都知道ZooKeeper,通常用作配置共享和服务发现。和它类似,ETCD算是一个非常优秀的后起之秀了。本文重点不在描述他们之间的不同点。首先,看看其官网关于ETCD的描述[1]:

A distributed, reliable key-value store for the most critical data of a distributed system.

在云计算大行其道的今天,ETCD有很多典型的使用场景。常言道,熟悉一个系统先从部署开始。本文接下来将描述,如何部署ETCD集群。

安装官网说明文档,提供了3种集群启动方式,实际上按照其实现原理分为2类:

  • 通过静态配置方式启动
  • 通过服务发现方式启动

在部署集群之前,我们需要考虑集群需要配置多少个节点。这是一个重要的考量,不得忽略。

2. 集群节点数量与网络分割

ETCD使用RAFT协议保证各个节点之间的状态一致。根据RAFT算法原理,节点数目越多,会降低集群的写性能。这是因为每一次写操作,需要集群中大多数节点将日志落盘成功后,Leader节点才能将修改内部状态机,并返回将结果返回给客户端。

也就是说在等同配置下,节点数越少,集群性能越好。显然,只部署1个节点是没什么意义的。通常,按照需求将集群节点部署为3,5,7,9个节点。

这里能选择偶数个节点吗? 最好不要这样。原因有二:

  • 偶数个节点集群不可用风险更高,表现在选主过程中,有较大概率或等额选票,从而触发下一轮选举。
  • 偶数个节点集群在某些网络分割的场景下无法正常工作。试想,当网络分割发生后,将集群节点对半分割开。此时集群将无法工作。按照RAFT协议,此时集群写操作无法使得大多数节点同意,从而导致写失败,集群无法正常工作。

当网络分割后,ETCD集群如何处理的呢?

  • 当集群的Leader在多数节点这一侧时,集群仍可以正常工作。少数节点那一侧无法收到Leader心跳,也无法完成选举。
  • 当集群的Leader在少数节点这一侧时,集群仍可以正常工作,多数派的节点能够选出新的Leader, 集群服务正常进行。

当网络分割恢复后,少数派的节点会接受集群Leader的日志,直到和其他节点状态一致。

3. ETCD参数说明

这里只列举一些重要的参数,以及其用途。

  • —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件;
  • —wal-dir 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。
  • —name 节点名称
  • —initial-advertise-peer-urls 告知集群其他节点url.
  • — listen-peer-urls 监听URL,用于与其他节点通讯
  • — advertise-client-urls 告知客户端url, 也就是服务的url
  • — initial-cluster-token 集群的ID
  • — initial-cluster 集群中所有节点

4. 通过静态配置方式启动ETCD集群

按照官网中的文档,即可完成集群启动。这里略。

5. 通过服务发现方式启动ETCD集群

ETCD还提供了另外一种启动方式,即通过服务发现的方式启动。这种启动方式,依赖另外一个ETCD集群,在该集群中创建一个目录,并在该目录中创建一个_config的子目录,并且在该子目录中增加一个size节点,指定集群的节点数目。

在这种情况下,将该目录在ETCD中的URL作为节点的启动参数,即可完成集群启动。使用
--discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83 配置项取代静态配置方式中的--initial-clusterinital-cluster-state参数。其中https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83是在依赖etcd中创建好的目录url。

6. 节点迁移

在生产环境中,不可避免遇到机器硬件故障。当遇到硬件故障发生的时候,我们需要快速恢复节点。ETCD集群可以做到在不丢失数据的,并且不改变节点ID的情况下,迁移节点。
具体办法是:

  • 1)停止待迁移节点上的etc进程;
  • 2)将数据目录打包复制到新的节点;
  • 3)更新该节点对应集群中peer url,让其指向新的节点;
  • 4)使用相同的配置,在新的节点上启动etcd进程;

5. 结束

本文记录了ETCD集群启动的一些注意事项,希望对你有帮助。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10076 0
Kubernetes中使用CronJob定时备份etcd集群数据
kubernetes中部署的应用的信息都存放在etcd里面,这里面的数据非常重要,需要备份,以备不时之需。 这里使用k8s提供的定时任务来执行备份任务,定时任务的pod要和etcd的pod要在同一个node上面(使用nodeAffinity)。
1260 0
阿里云容器服务ACK集群上如何使用ack-etcd-backup-operator定期自动对ETCD集群数据做备份
如果用户在 阿里云容器服务平台 上创建了独享专有的Kubernetes集群(dedicated kubernetes cluster),那么用户将对集群的管理节点和工作节点享有完全的控制能力,其中Etcd集群是Kubernetes集群中一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。
4475 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13883 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11888 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
22399 0
+关注
3
文章
0
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载