1. 简介

etcd是一个键值存储仓库,用于配置共享和服务发现。etcd在使用中可作为一个高可用强一致性的服务发现存储仓库。

etcd作为一个高可用键值存储系统,天生就是为集群化而设计的。由于Raft算法在做决策时需要多数节点的投票,所以etcd一般部署集群推荐奇数个节点,推荐的数量为3、5或者7个节点构成一个集群。

etcd包含以下特点:

  • 简单:基于HTTP+JSON的API让你用curl就可以轻松使用。
  • 安全:可选SSL客户认证机制。
  • 快速:每个实例每秒支持2k+次写操作。
  • 可信:使用Raft算法充分实现了分布式。
  • 数据持久化:默认数据一更新就进行持久化。

Raft算法:工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。Raft是一个共识算法(consensus algorithm),所谓共识,就是多个节点对某个事情达成一致的看法,即使是在部分节点故障、网络延时、网络分割的情况下。

2. Linux下载安装

两种下载方法:

wget https://github.com/etcd-io/etcd/releases/download/v3.2.32/etcd-v3.2.32-linux-amd64.tar.gz

curl -L https://github.com/etcd-io/etcd/releases/download/v3.2.32/etcd-v3.2.32-linux-amd64.tar.gz -o /opt/etcd-v3.2.32-linux-amd64.tar.gz

解压

tar -zxvf etcd-v3.2.32-linux-amd64.tar.gz
etcd 为服务端执行文件
etcdctl 为客户端执行文件

3. 单机模式启动

# 启动
/opt/etcd-v3.2.32-linux-amd64/etcd --data-dir=default.etcd --name default \
--initial-advertise-peer-urls http://ip:2380 --listen-peer-urls http://ip:2380 \
--advertise-client-urls http://ip:2379 --listen-client-urls http://ip:2379

etcd启动后在端口2379上监听客户端通信,在端口2380上监听服器到服务之间的通信。

执行命令测试

执行客户端命令前需要指定使用哪个版本的api
export ETCDCTL_API=3 ./etcdctl put mykey "this is a test"
./etcdctl get mykey

4. 指定各集群成员的方式配置集群

创建执行文件

touch etcd-static.sh

在每个etcd节点上,指定集群成员。

# 指定集群token
# 如果你所在的网络环境配置了多个etcd集群,为了避免意外发生,最好使用-initial-cluster-token参数为每个集群单独配置一个token认证。这样就可以确保每个集群和集群的成员都拥有独特的ID。
TOKEN=token-01 CLUSTER_STATE=new
NAME_1=machine-1
NAME_2=machine-2
NAME_3=machine-3
HOST_1=192.168.199.140
HOST_2=192.168.199.141
HOST_3=192.168.199.142
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380

每个节点添加一下各节点对应启动命令行

THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
/opt/etcd-v3.2.32-linux-amd64/etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
/opt/etcd-v3.2.32-linux-amd64/etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN} THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
/opt/etcd-v3.2.32-linux-amd64/etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--initial-cluster ${CLUSTER} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

后台启动服务:

nohup sh etcd-static.sh &

5. 使用discovery service的方式配置集群

如果你本地没有可用的etcd集群,etcd官网提供了一个可以公网访问的etcd存储地址。你可以通过如下命令得到etcd服务的目录,并把它作为--discovery参数使用。

执行:curl 'https://discovery.etcd.io/new?size=3'
输出:https://discovery.etcd.io/d343fbdbc42552549ec02c2710cdca2c

执行得到的输出内容作为-discovery参数使用

同样的,当你完成了集群的初始化后,这些信息就失去了作用。当你需要增加节点时,需要使用etcdctl来进行操作。为了安全,请务必每次启动新etcd集群时,都使用新的discovery token进行注册。

另外,如果你初始化时启动的节点超过了指定的数量,多余的节点会自动转化为Proxy模式的etcd。

创建执行文件

touch etcd-dynamic.sh

每个节点如下配置

# 指定集群token
# 如果你所在的网络环境配置了多个etcd集群,为了避免意外发生,最好使用-initial-cluster-token参数为每个集群单独配置一个token认证。这样就可以确保每个集群和集群的成员都拥有独特的ID。
TOKEN=token-01 CLUSTER_STATE=new
DISCOVERY=https://discovery.etcd.io/d343fbdbc42552549ec02c2710cdca2c THIS_NAME=节点自己的名称
THIS_IP=节点自己的host
/opt/etcd-v3.2.32-linux-amd64/etcd --data-dir=data.etcd --name ${THIS_NAME} \
--initial-advertise-peer-urls http://${THIS_IP}:2380 --listen-peer-urls http://${THIS_IP}:2380 \
--advertise-client-urls http://${THIS_IP}:2379 --listen-client-urls http://${THIS_IP}:2379 \
--discovery ${DISCOVERY} \
--initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

后台启动服务:

nohup sh etcd-dynamic.sh &

6. 集群模式下客户端命令行

执行客户端命令前需要指定使用哪个版本的api

export ETCDCTL_API=3
  • 获取集群节点
./etcdctl --endpoints=192.168.199.140:2379,192.168.199.141:2379,192.168.199.142:2379 member list

加上参数:--write-out=table,可以以表的形式输出
  • 查看节点状态
./etcdctl --endpoints=192.168.199.140:2379,192.168.199.141:2379,192.168.199.142:2379 endpoint status --write-out=table
  • 向集群中设置值
./etcdctl --endpoints=192.168.199.140:2379,192.168.199.141:2379,192.168.199.142:2379 put key "value"
  • 获取集群中的值
./etcdctl --endpoints=192.168.199.140:2379,192.168.199.141:2379,192.168.199.142:2379 get key

可以跟参数:--prefix,获取所有有相同前缀的数据
  • 删除集群中数据
./etcdctl --endpoints=192.168.199.140:2379,192.168.199.141:2379,192.168.199.142:2379 del key

可以跟参数:--prefix,删除所有有相同前缀的数据

7. etcd-manager安装

官网下载安装包安装

https://etcdmanager.io/

etcd简介及集群安装部署使用的更多相关文章

  1. K8S集群安装部署

    K8S集群安装部署   参考地址:https://www.cnblogs.com/xkops/p/6169034.html 1. 确保系统已经安装epel-release源 # yum -y inst ...

  2. HBase集群安装部署

    0x01 软件环境 OS: CentOS6.5 x64 java: jdk1.8.0_111 hadoop: hadoop-2.5.2 hbase: hbase-0.98.24 0x02 集群概况 I ...

  3. flink部署操作-flink standalone集群安装部署

    flink集群安装部署 standalone集群模式 必须依赖 必须的软件 JAVA_HOME配置 flink安装 配置flink 启动flink 添加Jobmanager/taskmanager 实 ...

  4. HBase 1.2.6 完全分布式集群安装部署详细过程

    Apache HBase 是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,是NoSQL数据库,基于Google Bigtable思想的开源实现,可在廉价的PC Server上搭建大规模结构化存 ...

  5. 1.Hadoop集群安装部署

    Hadoop集群安装部署 1.介绍 (1)架构模型 (2)使用工具 VMWARE cenos7 Xshell Xftp jdk-8u91-linux-x64.rpm hadoop-2.7.3.tar. ...

  6. HBase简介及集群安装

    一.Hbase概述 Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™.该项目的目标是托 ...

  7. 2 Hadoop集群安装部署准备

    2 Hadoop集群安装部署准备 集群安装前需要考虑的几点硬件选型--CPU.内存.磁盘.网卡等--什么配置?需要多少? 网络规划--1 GB? 10 GB?--网络拓扑? 操作系统选型及基础环境-- ...

  8. 【分布式】Zookeeper伪集群安装部署

    zookeeper:伪集群安装部署 只有一台linux主机,但却想要模拟搭建一套zookeeper集群的环境.可以使用伪集群模式来搭建.伪集群模式本质上就是在一个linux操作系统里面启动多个zook ...

  9. 第06讲:Flink 集群安装部署和 HA 配置

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

随机推荐

  1. 从微信小程序到鸿蒙js开发【11】——页面路由

    目录: 1.router.push()&wx.navigateTo() 2.router.replace()&wx.redirectTo() 3.router.back()&w ...

  2. winform导出csv

    public void ExportToSvc1(string strFileName) { string strPath = strFileName + ".csv"; Stri ...

  3. 链接服务器sql语句

     EXEC  sp_addlinkedserver      @server='sha',--被访问的服务器别名       @srvproduct='',      @provider='SQLOL ...

  4. 学习笔记——JVM性能调优之 jmap

    jmap jmap(JVM Memory Map)命令可生成head dump文件,还可查询finalize执行队列.Java堆和永久代的详细信息. 通过配置启动参数:-XX:+HeapDumpOnO ...

  5. springCloud中的注册中心Nacos

    springCloud中的注册中心Nacos 三个模块: 1.注册中心 2.服务提供者(生产者) 提供服务 3.服务消费者(消费者)调用服务 流程:消费者和生产者都要向注册中心注册,注册的是二者中服务 ...

  6. TextView 的append后面 马上调用fullScroll(),会发现无法滚动到真正的底部

    如果在TextView的append后面马上调用fullScroll,会发现无法滚动到真正的底部,这是因为Android下很多(如果不是全部的话)函数都是基于消息的,用消息队列来保证同步,所以函数调用 ...

  7. EF获取数据库表名和列名

    EF获取数据库表名和列名 新建 模板 小书匠 /// <summary>  /// 通过当前DBContext上下文获取对应数据库中所有得表  /// </summary>  ...

  8. pyhont+unittest的测试固件

    在执行一条自动化测试用例时需要做一些测试前的准备工作和测试后的清理工作,如:创建数据库链接.启动服务进程.打开文件.打开浏览器.测试环境的清理.关闭数据链接.关闭文件等.如果每执行一条用例都需要编写上 ...

  9. SpringBoot利用spring.profiles.active=@spring.active@不同环境下灵活切换配置文件

    一.创建配置文件 配置文件结构:这里建三个配置文件,application.yml作为主配置文件配置所有共同的配置:-dev和-local分别配置两种环境下的不同配置内容,如数据库地址等. appli ...

  10. 大家最常用的编程论坛是哪个呢,欢迎评论!!掘金16 juejin 简书41 jianshu 博客85 csdn137 csdn

    软件编程交流论坛 掘金  16 juejin 简书  41 jianshu 博客  85 cnblogs csdn  137 csdn stackoverflow 0 思否 github 大家最常用的 ...