前言:Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。Etcd内部采用raft协议作为一致性算法,Etcd基于Go语言实现
文章目录
一、Etcd简介
1.特点
- etcd作为服务发现系统,有以下的特点:
- 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
- 安全:支持SSL证书验证
- 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
- 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
2.Etcd应用场景
- Etcd比较多的应用场景是用于服务发现,服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接
- 从本质上说,服务发现就是要了解集群中是否有进程在监听upd或者tcp端口,并且通过名字就可以进行查找和链接
- 要解决服务发现的问题,需要下面三大支柱,缺一不可
- 一个强一致性、高可用的服务存储目录
- 基于Ralf算法的etcd天生就是这样一个强一致性、高可用的服务存储目录
- 一种注册服务和健康服务健康状况的机制
- 用户可以在etcd中注册服务,并且对注册的服务配置key TTL,定时保持服务的心跳以达到监控健康状态的效果
- 一个强一致性、高可用的服务存储目录
- 一种查找和连接服务的机制
- 通过在etcd指定的主题下注册的服务业能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个proxy模式的etcd,这样就可以确保访问etcd集群的服务都能够互相连接
3.Etcd架构组成
- Etcd主要分为四个部分
- HTTP Server: 用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求
- Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现
- Raft:Raft强一致性算法的具体实现,是etcd的核心
- WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容
- 通常,一个用户的请求发送过来,会经由HTTP Server转发给Store进行具体的事务处理
- 如果涉及到节点的修改,则交给Raft模块进行状态的变更、日志的记录,然后再同步给别的etcd节点以确认数据提交
- 最后进行数据的提交,再次同步
4.Etcd参数
- ETCD参数说明:
//2379端口用于外部通信,2380用于内部通信
--name
etcd集群中的节点名,这里可以随意,可区分且不重复就行
--listen-peer-urls
监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等)
--initial-advertise-peer-urls
建议用于节点之间通信的url,节点间将以该值进行通信
--listen-client-urls
监听的用于客户端通信的url,同样可以监听多个
--advertise-client-urls
建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信
--initial-cluster-token etcd-cluster-1
节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响
--initial-cluster
也就是集群中所有的initial-advertise-peer-urls 的合集
--initial-cluster-state new
新建集群的标志
--data-dir
指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件
5.自签SSL证书
二、Etcd群集部署
1.环境部署
- 系统环境:
- master:
- IP:192.168.170.128 配置:双核双线程+2G内存
- node1:
- IP:192.168.170.145 配置:双核双线程+4G内存</
- master: