写点什么

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

评论

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

筹备两年,60万字诚意续作《腾讯游戏开发精粹Ⅱ》正式发布

博文视点Broadview

奖金翻倍!Flink Forward Asia Hackathon 最新参赛指南请查收

Apache Flink

大数据 flink 编程 后端 hackathon

应用不停机发布的思考与初识

陈俊

高可用 技术架构 不停机发布

95后平均7个月就离职?他们边玩还能边赚钱···

Geek_1e5497

填坑总结:python内存泄漏排查小技巧

华为云开发者社区

Python 内存 内存泄漏 回收 全局变量

如何让 Sublime Text 编辑器支持新的 ABAP 关键字

Jerry Wang

SAP abap 11月日更 Sublime

dart系列之:在dart中使用数字和字符串

程序那些事

flutter dart 程序那些事 11月日更

“愚公移山”的方法解atoi,自以为巧妙!

老表

Python LeetCode 11月日更 算法与数据结构

吐司盒子?芝士码?HarmonyOS创新音视频测试技术来啦|HDC2021技术分论坛

HarmonyOS开发者社区

HarmonyOS

OpenHarmony驱动框架解读和开发实践|HDC2021 技术分论坛

HarmonyOS开发者社区

HarmonyOS

HarmonyOS内核技术大揭秘|HDC2021技术分论坛

HarmonyOS开发者社区

HarmonyOS

「Oracle」Oracle 数据库安装

恒生LIGHT云社区

数据库 oracle

模块四作业

Geek_1d37ea

架构训练营

openGauss开源自动化测试框架Yat,增强社区测试能力

openGauss

面向Web3的Meta Space,元宇宙基础设施的补充

股市老人币圈新

压缩比达到7:1,TDengine助力校园智慧用电系统降本增效

TDengine

tdengine 时序数据库

MySQL Workbench 使用教程 - 如何使用 Workbench 操作 MySQL / MariaDB 数据库中文指南

蒋川

MySQL MariaDB MySQL 数据库

创建第一个微信小程序

坚果前端

微信小程序 11月日更

SAP Cloud for Customer Extensibility的设计与实现

Jerry Wang

SAP abap C4C 11月日更

DevEco Testing,新增分布式测试功能|HDC2021技术分论坛

HarmonyOS开发者社区

HarmonyOS

面向Web3的Meta Space,或成为构建元宇宙的最佳基建

区块链小八歌

【软件开发】盲盒app搭建芒趣app

Geek_84185f

又添权威认定,旺链科技通过可信区块链专项认证!

旺链科技

区块链 产业区块链 技术测评 数字化经济

模块四学习总结

Geek_1d37ea

架构训练营

Sechunter移动应用隐私合规检测详解

华为云开发者社区

移动应用 目标检测 隐私 Sechunter 隐私合规

一次谈不上有点内卷的美东某金融公司面试

HoneyMoose

linux下prometheus+grafana安装

小黄鸡1992

11月日更

关于HTTPS认证,这里解决你所有疑惑

华为云开发者社区

https 证书 数据加密 认证 签发证书

搞定大厂算法面试之leetcode精讲4.贪心

全栈潇晨

LeetCode 算法面试

Chrome 插件特性及实战场景案例分析

vivo互联网技术

前端开发 插件设计 chrome扩展

数仓如何限制临时数据文件下盘量

华为云开发者社区

sql 线程 GaussDB(DWS) 临时文件 落盘

Flutter 自动化测试

Flutter 自动化测试

手把手教你Etcd的云端部署-InfoQ