etcd 总览

来源:互联网 发布:网页中js文件怎么打开 编辑:程序博客网 时间:2024/06/09 21:51

总览

在集群中, 每个 ETCD 程序都必须互相连接,需要 /etc/hosts 或 DNS 支持, 开始时候, 你并不需要知道 IP 地址, 你可以通过 etcd discovery 服务找到其他成员

当一个 etcd 集群成员启动并欲行, 可以通过实时配置方法添加或者移除其他成员, 更好地了解实时运行配置, 我们建议阅读相关文档涉及

这个文档包含下面的 etcd 集群 bootstrapping 架构信息

静态etcd discoverydns discovery

每个 bootstrapping 机制都使用到三个 etcd 成员, 并且具备下面详细信息

名称地址主机名
NameAddressHostnameinfra010.0.1.10infra0.example.cominfra110.0.1.11infra1.example.cominfra210.0.1.12infra2.example.com

静态

假如我们在集群启动前知道 cluster member 的 ip 与 size, 我们可以通过设定 initial-cluster flag 使用离线 bootstarp 配置, 每个机器都会需要定义下面的命令行或者环境变量
环境变量定义方法

ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380"ETCD_INITIAL_CLUSTER_STATE=new

命令行定义方法

--initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \--initial-cluster-state new

注意, URLs 定义的参数 initial-cluster 将会等同于各个节点中的 initial-advertise-peer-urls 定义

假如你具有多个集群(或者创建与小辉一个独立集群)而使用相同的配置用于测试, 我们强烈推荐你为每个不同的集群都定义一个惟一的 initial-cluster-token

通过配置 cross-cluster-interraction, 令 etcd 就算在使用相同配置, 也可以在不同集群中生成一个唯一的集群 ID 与成员 ID, 避免夸集群之间的相互影响

etcd 监听 listen-client-urls 接受客户端, etcd 成员公布 URLs 中定义的 advertise-client-urls 到其他成员, 代理, 客户端, 请确保 advertise-client-urls 可以被客户端访问, 常见错误是把 advertise-client-urls 设定为 localhost 或者定义为默认, 那么远程 client 无法访问到 etcd

每个机器都可以通过下面的参数执行启动

机器一

$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \  --listen-peer-urls http://10.0.1.10:2380 \  --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.10:2379 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \  --initial-cluster-state new

机器二

$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \  --listen-peer-urls http://10.0.1.11:2380 \  --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.11:2379 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \  --initial-cluster-state new

机器三

$ etcd --name infra2 --initial-advertise-peer-urls http://10.0.1.12:2380 \  --listen-peer-urls http://10.0.1.12:2380 \  --listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.12:2379 \  --initial-cluster-token etcd-cluster-1 \  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \  --initial-cluster-state new

命令行启动时候, 参数 –initial-cluster 将会被后续运行的 etcd 忽略, 你可以在初始化启动进程完成后清空或者删除环境变量或命令行参数, 假如你需要在以后改变配置, (例如添加或者移除集群中成员) 参考在线配置文档

Error Cases

下面例子中, 你不需要包含我们的新主机枚举列表, 假如这里有一个新的集群, 节点必须添加到初始化集群成员列表中

$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \  --listen-peer-urls https://10.0.1.11:2380 \  --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.11:2379 \  --initial-cluster infra0=http://10.0.1.10:2380 \  --initial-cluster-state newetcd: infra1 not listed in the initial cluster configexit 1

这个例子中, 我们尝试映射节点 (infra0) 到不同地址 (127.0.0.1:2300) 与 (10.0.1.10:2300) 假如这个节点监听到不同的 IP 地址, 所有地址都必须在 initial-cluster 配置中直接放映出来

$ etcd --name infra0 --initial-advertise-peer-urls http://127.0.0.1:2380 \  --listen-peer-urls http://10.0.1.10:2380 \  --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.10:2379 \  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380 \  --initial-cluster-state=newetcd: error setting up initial cluster: infra0 has different advertised URLs in the cluster and advertised peer URLs listexit 1

假如你配置不同的配置集, 尝试加入到这个集群, 你需要获得集群 ID 匹配到当前存在的 etcd 集群

$ etcd --name infra3 --initial-advertise-peer-urls http://10.0.1.13:2380 \  --listen-peer-urls http://10.0.1.13:2380 \  --listen-client-urls http://10.0.1.13:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.13:2379 \  --initial-cluster infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra3=http://10.0.1.13:2380 \  --initial-cluster-state=newetcd: conflicting cluster ID to the target cluster (c6ab534d07e8fcc4 != bc25ea2a74fb18b0). Exiting.exit 1

Discovery

在这个例子, 你可能不知道你的集群中每个成员的 IP, 例如当前使用云平台中的产品, 用户使用网络 DHCP, 这个环境中, 无法使用静态配置, 你可以使用一个存在的 etcd 集群 bootstrap 启动一个新集群, 我们称这个过程为 discovery

这里有两个方法, 你可以使用 disvoery

etcd discovery serviceDNS SRV records

etcd Discovery

更好地了解关于 discovery 服务协议涉及, 我们建议你阅读这个文档

Lifetime of a Discovery URL

URL ID 是发现 etcd cluster 的唯一身份象征, 对于创建新集群, 你需要取代 discovery URL 结果

此外,discovery URL 只用于集群的初始引导。若改变运行中的集群中成员,请参见实时配置手册

自定义 etcd Discovery 服务

Discovery 用于一个已经存在的集群自己 bootstrap, 假如你使用你自己的 etcd 集群, 你可以创建一个 URL 如下

$ curl -X PUT https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=3

创建 discovery URL 定义集群 size 为 3

假如你启动 etcd 集群使用 discovery 服务大于预期的 etcd 成员数量, 扩展 etcd 进程将会失败

Each member must have a different name flag specified. Hostname or machine-id can be a good choice. Or discovery will fail due to duplicated name.

在每个 etcd 成员使用下面参数进行启动

$ etcd --name infra0 --initial-advertise-peer-urls http://10.0.1.10:2380 \  --listen-peer-urls http://10.0.1.10:2380 \  --listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.10:2379 \  --discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83$ etcd --name infra1 --initial-advertise-peer-urls http://10.0.1.11:2380 \  --listen-peer-urls http://10.0.1.11:2380 \  --listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.11:2379 \  --discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83$ etcd --name infra2 --initial-advertise-peer-urls http://10.0.1.12:2380 \  --listen-peer-urls http://10.0.1.12:2380 \  --listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 \  --advertise-client-urls http://10.0.1.12:2379 \  --discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83

每个 member 都会对 etcd discovery 服务进行自我注册, 并对整个 etcd 集群所有成员完成注册

原创粉丝点击