HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

手把手教你 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:022823

评论

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

一文读懂Penpad 以 Fair Launch 方式推出的首个资产 PEN

BlockChain先知

一文读懂Penpad 以 Fair Launch 方式推出的首个资产 PEN

股市老人

华为云时习知&成都大学附属医院,打造“互联网+医疗”标杆

轶天下事

Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析

小万哥

git 程序人生 编程语言 软件工程 后端开发

App前端开发跨平台框架比较:React Native、Flutter、Xamarin等

天津汇柏科技有限公司

App app定制开发 软件开发定制

AIGC 周报(2.26~3.03)

AIGC Weekly 周报

人工智能 AI AI应用 openai AIGC

我正在使用React Native (Expo) 开源一个精美的电商购物应用。

Geek_9da61c

产品设计 软件开发 开源中国 品牌设计

无惧“高基数”数据挑战,TDengine 携手树根互联

TDengine

tdengine 时序数据库

华为智慧教室3.0的晨光,点亮教育智能化变革

脑极体

AI

SpringBoot混淆代码,防止反编译代码泄露

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

技术管理者如何避免被裁掉(1)

芃篙君

管理

HttpMessageConverter添加java8 LocateTime时间转换

智慧源点

编程究竟难在哪?

算法的秘密

带你全方位体验 Amazon Connect

亚马逊云科技 (Amazon Web Services)

作业12

大肚皮狒狒

牛市初期,Penpad 以 Fair Launch 方式推出首个资产 PEN

石头财经

如何将Word一键转PPT?收好这3个办公提效神器!

彭宏豪95

效率 PPT 在线白板 办公软件 AI工具

一文读懂Penpad 以 Fair Launch 方式推出的首个资产 PEN

股市老人

华为云低代码Astro企业应用 Astro Pro上线啦!

华为云PaaS服务小智

低代码 华为云 公测

自定义限速功能实践——Map版本

FunTester

华为云时习知&成都大学附属医院,打造“互联网+医疗”标杆

华为云PaaS服务小智

云计算 软件开发 华为云

GaussDB跨云容灾:实现跨地域的数据库高可用能力

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

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