ETCD系列之二:部署集群

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集群启动的一些注意事项,希望对你有帮助。

时间: 2024-12-23 05:47:33

ETCD系列之二:部署集群的相关文章

ZooKeeper源码研究系列(4)集群版服务器介绍

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 集群版服务器启动过程 启动类是org.apache.zookeeper.server.quorum.QuorumPeerMain,启动参数就是配置文件的地址 2.1 配置文件说明 来看下一个简单的配置文件内容: tickTime=4000 initLimit=10

ZooKeeper源码研究系列(5)集群版建立连接过程

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 各服务器角色的请求处理器链 先介绍下Leader.Follower.Observer服务器的请求处理器链 2.1 Leader服务器 PrepRequestProcessor->ProposalRequestProcessor->CommitProcessor-

使用IBM PureApplication System的BPM模式来部署集群化

本文将介绍 IBM PureApplication System 上的 IBM Business Process Manager V8.本文假设您熟悉 IBM Business Process Manager (IBM BPM),了解 IBM PureApplication System. 您还将学习如何使用图形化向导部署 BPM 模式,并在 PureApplication System 上创建不同类型的环境.在完成部署之后,只需几小时即可创建您想要的模式.然后开发人员可以像平常一样访问和使用

云服务器 nginx + tomcat 部署集群 配置

nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/oct

weblogic集群中部署单节点

问题描述 weblogic集群中部署单节点 现有weblogic集群环境server-0和server-1 部署了应用A,现有一个应用B不能部署集群只能部署单节点(server-0或则server-1中的其中一个) 请问这种方式可以实现吗,并且B应用也要对外提供web访问. 如何配置实现或推荐一些资料给我,对weblogic不熟悉,找不到搜索关键词 解决方案 http://blog.csdn.net/xu1314/article/details/41870807 解决方案二: 多节点部署Cass

什么是集群,什么是负载均衡,他们2者的关系是什么啊。

问题描述 什么是集群,什么是负载均衡,他们2者的关系是什么啊.希望有自己的理解,不要copy长篇大论..因为我已经看过了.就是看得迷迷糊糊的所以才请教大家.我可能不可以这样理解:1:集群是一种多服务器结构(可能每个服务器部署在多个电脑上,也可以是1个).2:是否集群主要看是不是多个相同应用被部署.(可以在多台电脑上,也可以是1个)3:要负载均衡必须集群. 解决方案 解决方案二:集群是一个统称,他分为好几种,如高性能科学群集.负载均衡群集.高可用性群集等.科学群集通常,这种集群涉及为群集开发并行编

如何构建高可用ZooKeeper集群

ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 ZooKeeper 便捷的使用方式.卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop.HBase.Kafka 和 Dubbo 等大型分布式系统中. 本文的目标读者是对 ZooKeeper 有一定了解的技术人员,将从 ZooKeeper 运行模式.集群组成.容灾和水平扩容四方面逐步深入,最终构建

Redis集群演进的心路历程——从2.0到3.0时代

KV存储的基本要求: 1.大容量,支持TB级别存储 2.高性能 3.功能丰富   一.基于Redis 2.x的KV存储 Cluster:每个集群32个节点 集群中数据分配规则存储在Zookeeper中 对外提供RPC服务   Apache HBase 优势:水平扩展 缺点:不满足在线核心业务SLA(99.9%响应<25ms)   redis 优势:高性能,API接口丰富 缺点:单节点存储能力有限   主要存在的问题: 1.扩容困难,单个集群容量合理上限1TB(单节点30GB) 2.共享集群,业务

tomcat集群,如何实现文件共享?NFS?

问题描述 最近才开始学习集群和负载均衡技术,在网上找资料,终于实现负载均衡及session复制,但是紧接着问题又来了,文件如何共享?网上查了下,说nfs可是实现虚拟目录共享解决这个问题,奈何一直没搞明白,大伙有做过的吗,求指导指导.. 解决方案 解决方案二:同求,再问一下,你的session复制是用的tomcat自带的功能吗?解决方案三:引用1楼xiaoxuanzi110的回复: 同求,再问一下,你的session复制是用的tomcat自带的功能吗? 嗯,可以用自带的,也可以自己配一下,这里比较