QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

手把手教你 Etcd 的云端部署

  • 2019-10-16
  • 本文字数:2596 字

    阅读完需:约 9 分钟

手把手教你Etcd的云端部署

Etcd 是一个开源的分布式键值存储,它由 CoreOS 团队开发,现在由 Cloud Native Computing Foundation 负责管理。这个词的发音是“et-cee-dee”,表示在多台机器上分发 Unix 系统的“/etc”目录,其中包含了大量的全局配置文件。它是许多分布式系统的主干,为跨服务器集群存储数据提供可靠的方式。它适用于各种操作系统,包括 Linux、BSD 和 OS X。


Etcd 具有下面这些属性:


  • 完全复制:集群中的每个节点都可以使用完整的存档

  • 高可用性:Etcd 可用于避免硬件的单点故障或网络问题

  • 一致性:每次读取都会返回跨多主机的最新写入

  • 简单:包括一个定义良好、面向用户的 API(gRPC)

  • 安全:实现了带有可选的客户端证书身份验证的自动化 TLS

  • 快速:每秒 10000 次写入的基准速度

  • 可靠:使用 Raft 算法实现了存储的合理分布


自从 2014 年成为 Kubernetes 的一部分以来,Etcd 社区呈现指数级的增长。CoreOS、谷歌、Redhat、IBM、思科、华为等等均是 Etcd 的贡献成员。其中 AWS、谷歌云平台和 Azure 等大型云提供商成功在生产环境中使用了 Etcd。


Etcd 在 Kubernetes 中的工作是为分布式系统安全存储关键数据。它最著名的是 Kubernetes 的主数据存储,用于存储配置数据、状态和元数据。由于 Kubernetes 通常运行在几台机器的集群上,因此它是一个分布式系统,需要 Etcd 这样的分布式数据存储。内网部署同一网段情况下访问很方便。


但当集群基于云部署的时候客户端多要跨网络访问集群。今天,我们会专门为大家介绍两个跨网络访问方案:


方案一:每个 Etcd 节点拥有公网 ip,通过指定–advertise-client-urls 参数通过公网 IP 广播地址


方案二:Etcd 节点无公网 ip,通过网关及 ssh tunnel 转发请求


具体实施可参考以下步骤:

集群节点

通过 internetwork 访问,每个 Etcd 节点都有公网 IP

如需要通过 internet 访问 Etcd 集群,必须配置 --advertise-client-urls 为内网 ip 和外网 IP 例如:


–advertise-client-urls http://10.0.64.100:2379,http://125.94.39.48:2380

集群配置

./etcd --name etcd0 --initial-advertise-peer-urls http://10.0.64.100:2380 \  --listen-peer-urls http://0.0.0.0:2380 \  --listen-client-urls http://0.0.0.0:2379  \  --advertise-client-urls http://10.0.64.100:2379,http://125.94.39.48:2380 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster etcd0=http://10.0.64.100:2380,etcd1=http://10.0.64.101:2380,etcd2=http://10.0.64.102:2380 \  --initial-cluster-state new >> etcd.log 2>&1 &
复制代码


./etcd --name etcd1 --initial-advertise-peer-urls http://10.0.64.101:2380  \  --listen-peer-urls http://0.0.0.0:2380 \  --listen-client-urls http://0.0.0.0:2379 \  --advertise-client-urls http://10.0.64.101:2379,http://125.94.39.105:2380  \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster etcd0=http://10.0.64.100:2380,etcd1=http://10.0.64.101:2380,etcd2=http://10.0.64.102:2380 \  --initial-cluster-state new  >> etcd.log 2>&1 &
复制代码


./etcd --name etcd2 --initial-advertise-peer-urls http://10.0.64.102:2380 \  --listen-peer-urls http://0.0.0.0:2380 \  --listen-client-urls  http://0.0.0.0:2379  \  --advertise-client-urls http://10.0.64.102:2379,http://59.37.136.50:2380 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster etcd0=http://10.0.64.100:2380,etcd1=http://10.0.64.101:2380,etcd2=http://10.0.64.102:2380 \  --initial-cluster-state new  >> etcd.log 2>&1 &
复制代码

访问集群

export ETCDCTL_API=3
#内网访问etcdctl --endpoints=http://10.0.64.100:2379,http://10.0.64.101:2379,http://10.0.64.102:2379 member list
#公网访问etcdctl --endpoints=http://125.94.39.48:2379,http://125.94.39.105:2379,http://59.37.136.50:2379 member listcurl http://125.94.39.48:2379/v2/keys/message
复制代码


通过网关访问集群,集群无公网 IP,gateway 有公网 IP。

Etcd 集群配置

./etcd --name etcd0 --initial-advertise-peer-urls http://10.0.64.100:2380 \  --listen-peer-urls http://0.0.0.0:2380 \  --listen-client-urls http://0.0.0.0:2379  \  --advertise-client-urls http://10.0.64.100:2379 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster etcd0=http://10.0.64.100:2380,etcd1=http://10.0.64.101:2380,etcd2=http://10.0.64.102:2380 \  --initial-cluster-state new >> etcd.log 2>&1 &
复制代码


./etcd --name etcd1 --initial-advertise-peer-urls http://10.0.64.101:2380  \  --listen-peer-urls http://0.0.0.0:2380 \  --listen-client-urls http://0.0.0.0:2379 \  --advertise-client-urls http://10.0.64.101:2379  \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster etcd0=http://10.0.64.100:2380,etcd1=http://10.0.64.101:2380,etcd2=http://10.0.64.102:2380 \  --initial-cluster-state new  >> etcd.log 2>&1 &
复制代码


./etcd --name etcd2 --initial-advertise-peer-urls http://10.0.64.102:2380 \  --listen-peer-urls http://0.0.0.0:2380 \  --listen-client-urls  http://0.0.0.0:2379  \  --advertise-client-urls http://10.0.64.102:2379 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster etcd0=http://10.0.64.100:2380,etcd1=http://10.0.64.101:2380,etcd2=http://10.0.64.102:2380 \  --initial-cluster-state new  >> etcd.log 2>&1 &
复制代码

开启 gateway

etcd gateway start --endpoints=http://10.0.64.100:2379,http://10.0.64.101:2379,http://10.0.64.102:2379   >> etcd_gateway.log 2>&1 &
复制代码

验证集群

export ETCDCTL_API=3etcdctl  --endpoints=http://10.0.64.100:2379,http://10.0.64.101:2379,http://10.0.64.102:2379 member listetcdctl  --endpoints=http://127.0.0.1:23790 member list
复制代码

创建 ssh tunnel

#有公网ip地址主机上执行ssh  -g -f -N -L 23690:127.0.0.1:23790 root@127.0.0.1
复制代码

通过公网访问网关

export ETCDCTL_API=3etcdctl  --endpoints=http://157.255.51.197:23690 member listetcdctl  --endpoints=http://157.255.51.197:23690 put foo baretcdctl  --endpoints=http://157.255.51.197:23690 get foo 
复制代码


2019-10-16 23:022895

评论

发布
暂无评论
发现更多内容

React进阶(十):React 项目启动原理详解

No Silver Bullet

React 12月日更

从手游中的感悟

搬砖的周狮傅

游戏 日常感悟

第2周学习总结

糖糖学编程

架构实战营

明年的能力计划之学会咨询

将军-技术演讲力教练

阿里云消息队列 RocketMQ、Kafka 荣获金融级产品稳定性测评 “先进级” 认证

阿里巴巴云原生

阿里云 云原生 稳定性 获奖

云未来、新可能 - 绿色、无处不在、可信的计算

阿里巴巴云原生

阿里云 容器 云原生 活动 KubeCON

从甲方到乙方,如何做好混沌工程的行业化落地

阿里巴巴云原生

阿里云 云原生 混沌工程 金融行业 行业化落地

DDD领域驱动设计实战(六)-理解领域事件(Domain Event)

JavaEdge

12月日更

架构实战营 - 模块2 - 作业

Pyel

「架构实战营」

模块二作业

黄秀明

Service Mesh 在中国工商银行的探索与实践

阿里巴巴云原生

阿里云 微服务 云原生 服务网格 金融实践

Prometheus Exporter (三十二)Varnish Exporter

耳东@Erdong

Prometheus 28天写作 exporter 12月日更 Varnish

从 WAN 到 SD-WAN 边缘设备的网络架构

devpoint

TLS ssl SD-WAN 12月日更

性能工具之stress工具使用教程(带源码说明)

zuozewei

Linux 工具 性能测试 12月日更

架构实战营 - 第 4 期 - 模块二作业

Evan

架构实战营 「架构实战营」

实用机器学习笔记十九:模型验证

打工人!

人工智能 机器学习 深度学习 学习笔记 12月日更

19《重学JAVA》--集合(一)

杨鹏Geek

Java25周年 28天写作 12月日更

建木持续集成平台v2.1.0发布

Jianmu

DevOps CI/CD 开源社区

全网最牛逼的华为NTP配置命令,建议收藏!

Ethereal

华为 ntp 网络技术

[Pulsar] LookUp原理

Zike Yang

Apache Pulsar 12月日更

Android 8.0 下载安装进入【安装未知应用】页面,两步简化一步

阿策小和尚

28天写作 Android 小菜鸟 12月日更

跟着动画学Go数据结构之选择排序

宇宙之一粟

golang 数据结构 选择排序 12月日更

Dubbo-Admin 功能展示与实操解析

阿里巴巴云原生

阿里云 云原生 Dubbo-Admin 功能

字典树之旅04.Patricia Trie(二)

极客志

Java 自然语言处理 数据结构 算法 字典树

签名验证反爬,反反爬第二篇博客,Python爬虫120例

梦想橡皮擦

12月日更

Kotlin Maps:五个基本函数

坚果

kotlin 28天写作 12月日更

微信朋友圈高性能复杂度设计

CH

「架构实战营」

微信朋友圈的高性能复杂度分析

糖糖学编程

架构实战营

模块二作业

novoer

#架构实战营

消息队列存储-mysql表

🌾🌾🌾小麦🌾🌾🌾

架构实战营

被灵魂问倒:这个BUG为什么没测出来?

华为云开发者联盟

测试 bug 文档 测试用例 测试工程师

手把手教你Etcd的云端部署_架构_贾世闻_InfoQ精选文章