etcd 指定配置文件启动_etcd 入门使用

本文介绍了ETCD作为分布式可靠键值存储系统的应用场景和RAFT协议在集群中的作用。强调了奇数节点数量对性能和稳定性的重要性,分析了偶数节点可能导致的网络分割问题。同时,详细阐述了网络分割后ETCD集群的处理策略,并提供了部署ETCD的基本步骤。
摘要由CSDN通过智能技术生成

ETCD 入门

Zookeeper,通常用作服务发现和配置共享,ETCD 作为后起之秀,下面是官网对其的描述。

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

如今的互联网,ETCD 有很多适用场景,下面就介绍如何进行集群部署。

4fe973e1185dd96f22f178e2e65344a6.png

集群节点数量与网络分割

ETCD 适用 RAFT 协议保证集群中的各个节点之间状态一致。根据 RAFT 算法,节点越多,会降低集群的写性能。因为每一次写操作,需要集群中的大多数节点将日志固化成功后,Leader 才能修改内部状态机,并将结果返回给客户端。 也就是在同等配置下,节点越少,集群性能越高。通常按照需求将部署节点数量定为 3、5、7....奇数个节点。

为什么不能是偶数

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

网络分割后,ETCD集群如何处理

  • 当集群的 Leader 在多数节点这一侧时,集群可以正常工作。少数节点侧无法收到 leader 心跳,无法完成选举。
  • 当集群的 Leader 在少数节点这一侧时,集群仍可以正常工作,多数侧节可以重新选举出新的 leader,集群正常工作。
  • 网络分割恢复后,少数节点侧会接受集群 leader 的日志,知道和其他节点状态一直

部署

etcd 在生产环境推荐使用集群方式部署。 etcd 默认使用 2379 端口提供 HTTP API 服务,2380端口和 peer 通信。

安装

etcd 基于 GO 语言实现,因此可以通过项目主页 下载源代码自行编译,也可以下载编译好的二级制文件,甚至可以直接使用制作好的 docker 镜像。

  • 下载软件包
cat install_etcd.sh​#!/bin/bash​ETCD_VER=v3.3.12​# choose either URLGOOGLE_URL=https://storage.googleapis.com/etcdGITHUB_URL=https://github.com/etcd-io/etcd/releases/downloadDOWNLOAD_URL=${GITHUB_URL}​rm -rf /usr/local/etcd/ && mkdir -p /usr/local/etcd/​curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /usr/local/src/etcd-${ETCD_VER}-linux-amd64.tar.gztar zxf /usr/local/src/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /usr/local/etcd/ --strip-components=1ln -s /usr/local/etcd/etcd /usr/local/bin/etcdln -s /usr/local/etcd/etcdctl /usr/local/bin/etcdctl​/usr/local/etcd/etcd --versionETCDCTL_API=3 /usr/local/etcd/etcdctl version# /usr/local/etcd/etcd2019-02-14 16:11:49.511087 I | etcdmain: etcd Version: 3.3.122019-02-14 16:11:49.511133 I | etcdmain: Git SHA: d57e8b82019-02-14 16:11:49.511137 I | etcdmain: Go Version: go1.10.82019-02-14 16:11:49.511141 I | etcdmain: Go OS/Arch: linux/amd642019-02-14 16:11:49.511145 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 42019-02-14 16:11:49.511154 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd2019-02-14 16:11:49.511507 I | embed: listening for peers on http://localhost:23802019-02-14 16:11:49.511600 I | embed: listening for client requests on localhost:23792019-02-14 16:11:49.524574 I | etcdserver: name = default2019-02-14 16:11:49.524588 I | etcdserver: data dir = default.etcd2019-02-14 16:11:49.524593 I | etcdserver: member dir = default.etcd/member2019-02-14 16:11:49.524599 I | etcdserver: heartbeat = 100ms2019-02-14 16:11:49.524603 I | etcdserver: election = 1000ms2019-02-14 16:11:49.524606 I | etcdserver: snapshot count = 1000002019-02-14 16:11:49.524616 I | etcdserver: advertise client URLs = http://localhost:23792019-02-14 16:11:49.524620 I | etcdserver: initial advertise peer URLs = http://localhost:23802019-02-14 16:11:49.524627 I | etcdserver: initial cluster = default=http://localhost:23802019-02-14 16:11:49.528711 I | etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c322019-02-14 16:11:49.528741 I | raft: 8e9e05c52164694d became follower at term 02019-02-14 16:11:49.528753 I | raft: newRaft 8e9e05c52164694d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]2019-02-14 16:11:49.528757 I | raft: 8e9e05c52164694d became follower at term 12019-02-14 16:11:49.534067 W | auth: simple token is not cryptographically signed2019-02-14 16:11:49.536543 I | etcdserver: starting server... [version: 3.3.12, cluster version: to_be_decided]2019-02-14 16:11:49.536644 I | etcdserver: 8e9e05c52164694d as single-node; fast-forwarding 9 ticks (election ticks 10)2019-02-14 16:11:49.536992 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c322019-02-14 16:11:49.829034 I | raft: 8e9e05c52164694d is starting a new election at term 12019-02-14 16:11:49.829072 I | raft: 8e9e05c52164694d became candidate at term 22019-02-14 16:11:49.829093 I | raft: 8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 22019-02-14 16:11:49.829106 I | raft: 8e9e05c52164694d became leader at term 22019-02-14 16:11:49.829114 I | raft: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 22019-02-14 16:11:49.829365 I | etcdserver: setting up the initial cluster version to 3.32019-02-14 16:11:49.830463 N | etcdserver/membership: set the initial cluster version to 3.32019-02-14 16:11:49.830502 I | etcdserver/api: enabled capabilities for version 3.32019-02-14 16:11:49.830564 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379]} to cluster cdf818194e3a8c322019-02-14 16:11:49.830579 I | embed: ready to serve client requests2019-02-14 16:11:49.830715 E | etcdmain: forgot to set Type=notify in systemd service file?2019-02-14 16:11:49.831388 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!mkdir -p /data/etcd/var/mkdir -p /data/etcd/config/$ cat <

常用命令选项

通过 list, add,remove,update ,命令列出、添加、删除、更新 etcd 实例到 etcd 集群中。

member

监测一个键值的变化,一旦键值发生更新,就会输出最新的值或执行指定命令

watch

非数据库操作

删除某个键值

del

支持的选项

获取某个键的值

get

指定某个键的值

put

etcdctl 目前 V3 版本兼容 V2 版本的接口 API ,故需要在使用 etcdctl 时,指明使用的 API 版本。设置环境变量 export ETCDCTL_API=3 或者在每个执行的命令前 ETCDCTL_API=3,为了方便使用第一种方式 。

注:CRUD即Create,Read,Update,Delete是符合REST风格的一套API操作。

etcd 在键的组织上采用了层次化的空间结构,用户指定的键可以为单独的名字,例如 testkey,放在根目录下 /,也可以为指定目录结构。如 /cluster/node1/testkey,则创建对应的目录结构。

数据库操作围绕对键值和目录的 CRUD 完整生命周期的管理。

数据库操作

etcdctl 支持如下的命令,大体上分为数据库操作和非数据库操作两类,后面将分别进行解释。

etcd 项目二进制发行包中已经包含了 etcdctl 工具,没有的话,可以从 github.com/coreos/etcd/releases 下载。

CoreOS 在开发 etcd 时,预留了多钟交互接口。etcdctl 是一个命令行客户端,它能提供一些简洁的命令,供用户直接跟 etcd 服务打交道,而无需基于 HTTP API 方式。可以方便对服务进行测试或者手动修改数据库内容。推荐刚刚接触 etcd 时通过 etcdctl 命令来熟悉相关的操作,这些操作跟 HTTP API实际上是对应的。

使用 Etcd

启动 etcd创建 systemd 配置文件设定 etcd 配置文件创建相关目录

创建 systemd 服务

name 表示节点名称,默认是 defaultdata-dir 保存日志和快照的目录,默认为当前工作目录 ./default.etcd在 http://localhost:2380 和集群中其他节点通信。在 http://localhost:2379 提供HTTP API服务,供客户端交互。heartbeat 为 100ms,该参数的作用是 leader 多久发送一次心跳到 followers,默认值是 100ms。election为 1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为 1000ms。snapshot count 为 10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。集群和每个节点都会生成一个 uuid。启动的时候会运行 raft,选举出 leader。

从上面的输出可以看出以下几个重要的信息。

启动单节点 etcd

安装成功后,目录中有两个二进制文件 etcd 和 etcdctl。etcd 是 server 端,etcdctl 是 client 端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值