写点什么

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

评论

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

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵社区

通信技术 科技史

从用户到开发者是一种思维进化过程 | 访 StarRocks Committer 周威

StarRocks

关于链路追踪所需要了解的知识

穿过生命散发芬芳

链路追踪 9月月更

高级产品经理必备素养

产品海豚湾

产品经理 职业发展 商业化 9月月更 产品价值

leetcode 206. Reverse Linked List 反转链表(简单)

okokabcd

LeetCode 数据结构与算法

【CSS·显示类型】 block、inline以及inline-block

翼同学

CSS 前端 9月月更

基于 xbot 实现微信关键词自动回复

Hanson

微信 微信机器人 自动回复

跟着卷卷龙一起学Camera--黑电平Blacklevel

卷卷龙

ISP camera 9月月更

华为云WeLink直播助力高校毕业典礼:这届毕业生,我们云上嗨

科技云未来

C++学习------cassert头文件的作用与源码学习

桑榆

c++ 9月月更

玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生

数据库 数据复制 数据管理 数据备份 玖章算术

【CSS】:正常布局流(normal flow)、有趣的浮动(float)

翼同学

CSS 前端 9月月更

以数字技术赋能产业金融生态能力建设,破解银行的场景焦虑

易观分析

金融 银行 数字科技

华为云快成长GaussDB(for Redis)

IT资讯搬运工

Nacos 安装教程(史上最详细保姆级教程)

nacos SpringCloud 9月月更

数据可视化系列教程之组件构成

云智慧AIOps社区

前端 低代码 开源项目 数据可视化 可视化大屏

测试需求平台3-登录打通和产品列表功能实现

MegaQi

测试平台开发教程 9月月更

数据中心网络架构的需求原则及策略

阿泽🧸

数据中心 9月月更

Predicate

急需上岸的小谢

9月月更

Linux面试最高频的5个基本问题

千锋IT教育

实践分享!GitLab CI/CD 快速入门

北京好雨科技有限公司

企业号九月金秋榜 Kuberetes

南阳蓝天燃气携手WeLink共创数字蓝天

科技云未来

高并发场景下,6种方案,保证缓存和数据库的最终一致性!

C++后台开发

数据库 缓存 高并发 后端开发 C++开发

万物皆可集成系列:低代码对接企企云实现数据集成

葡萄城技术团队

maven入门

楠羽

maven 笔记 9月月更

k8s自定义controller三部曲之一:创建CRD(Custom Resource Definition)

程序员欣宸

Kubernetes k8s 9月月更

Web3大行其道,为何说Zebec值得投资人期待?

BlockChain先知

【CSS·清除浮动】Clearing floats:clear、clearfix、overflow、flow-root

翼同学

CSS 前端 9月月更

深耕隐私计算技术,瓴羊DataTrust团队喜获殊荣

瓴羊企业智能服务

# 靠谱:开源IM项目OpenIM压测程序介绍-自己动手压测性能和稳定性

Geek_1ef48b

2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。请你返回 s 里所有 子字符串的 最大波

福大大架构师每日一题

算法 rust语言 福大大

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