etcd cluster 搭建

来源:互联网 发布:淘宝ry是什么意思 编辑:程序博客网 时间:2024/04/28 02:23

启动cluster

启动集群有3个方式:

1,static方式

这种方式可以参考 Set up a local cluster 的设置方法。这种设置方式的特点时,需要提前知道参与 cluster 机器的 IP。


2,etcd discovery方式

这种方式避免了 static 方式中存在的问题:需要提前知道参与 cluster 机器的 IP。这种方式的做法就是:

  1. 需要一个“已经存在”的 etcd cluster
  2. 借用这个“已经存在”的 etcd cluster,创建我们需要的cluster

做法如下:

1,先启动一个 etcd ,把这个 etcd 作为“已经存在”的 etcd cluster。

etcd –name infra4 –listen-client-urls http://127.0.0.1:42379 –advertise-client-urls http://127.0.0.1:42379 –listen-peer-urls http://127.0.0.1:42380 –initial-advertise-peer-urls http://127.0.0.1:42380 –discovery http://127.0.0.1:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83


2,在这个 etcd 上,创建一个 key ,让我们要创建的 cluster 向这个 key 注册。

curl -X PUT http://localhost:42379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=3

要注意两点:
(1) discovery 后面的一串16进制数,也可以是其它普通的字符串,是唯一的就行。
(2) value后面的数字,是 size 对应的值,是指“cluster 节点数目”。如果节点不达到这个数目,是无法启动 cluster 的。

设置成功之后,可以使用 curl 看一下具体的内容:

curl http://localhost:42379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83


3,然后分别开启3个窗口,启动3个 etcd 节点。

etcd –name infra1 –listen-client-urls http://127.0.0.1:2379 –advertise-client-urls http://127.0.0.1:2379 –listen-peer-urls http://127.0.0.1:2380 –initial-advertise-peer-urls http://127.0.0.1:2380 –discovery http://127.0.0.1:42379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83

etcd –name infra2 –listen-client-urls http://127.0.0.1:22379 –advertise-client-urls http://127.0.0.1:22379 –listen-peer-urls http://127.0.0.1:22380 –initial-advertise-peer-urls http://127.0.0.1:22380 –discovery http://127.0.0.1:42379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83

etcd –name infra3 –listen-client-urls http://127.0.0.1:32379 –advertise-client-urls http://127.0.0.1:32379 –listen-peer-urls http://127.0.0.1:32380 –initial-advertise-peer-urls http://127.0.0.1:32380 –discovery http://127.0.0.1:42379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83


4,测试

向一个节点写数据:

curl -X PUT http://localhost:22379/v2/keys/test -d value=3

从另一个节点读数据:(python -m json.tool是为了美化数据显示,如果没有安装python,就把这段代码去掉 )

curl http://localhost:32379/v2/keys/test | python -m json.tool

// output{    "action": "get",    "node": {        "createdIndex": 8,        "key": "/test",        "modifiedIndex": 8,        "value": "3"    }}

注意:
(1) 不要向“已经存在”的 etcd 写数据,这个“已经存在”的 etcd cluster 的数据,“不与”依靠它创建的 cluster 同步。
(2) 上面在一台机器上搭建的 cluster,如果要在多台机器上创建的话,IP最好改成本机IP。注意,下面例子中,listen-client-urls有两个地址,一个本地IP,另一个是回环地址。加上回环地址,是为了在这台机器上,操作etcdctl方便一一些。

etcd –name infra1 –listen-client-urls http://172.31.0.145:2379,http://127.0.0.1:2379 –advertise-client-urls http://172.31.0.145:2379 –listen-peer-urls http://172.31.0.145:2380 –initial-advertise-peer-urls http://172.31.0.145:2380 –discovery https://discovery.etcd.io/4aae8fd7b09dea57543faeffde3eac83


问题:

  1. 这种方式启动的“已经存在”的 etcd cluster 是单点的,如果这个 etcd cluster 死掉的话,依靠它创建的 cluster 就无法使用了。所以,可以使用 static 方式创建方式一个稳定的 cluster。
  2. 这个“已经存在”的 etcd cluster 的数据,“不与”依靠它创建的 cluster 同步。也就是说,在创建 key/value 时,要向后创建的 cluster 的机器/端口 去写数据。


关于“已经存在”的 cluster

前面介绍了自己创建“已经存在”的 cluster的方法,还可以使用 etcd 官方提供的一个 etcd cluster 来做同样的事。方法就是把上面第2步做的事,按下面这样做:

curl http://discovery.etcd.io/new?size=3

这个 rest api 会返回一个URL(https://discovery.etcd.io/7516d270897711210002f268813b44ce),把这个URL替换第3步命令中,--discovery后面的参数。


3,DNS discovery

这种方法不做介绍了,有兴趣的可以看一下官网介绍:https://github.com/coreos/etcd/blob/master/Documentation/op-guide/clustering.md#dns-discovery


创建 cluster 遇到的问题:

1,启动完 cluster 后,把 cluster 停掉。修改启动的IP地址(例如:从本地IP 换成 回环IP),再次进行启动 cluster 的话,会出现下面这样的错误。提示无法连接“修改IP前”的节点。

2017-11-14 17:47:50.927633 W | rafthttp: health check for peer 6381d1a8f6227a14 could not connect: dial tcp 127.0.0.1:22380: getsockopt: connection refused
2017-11-14 17:47:50.932444 W | rafthttp: health check for peer db5dfd394e5b8b78 could not connect: dial tcp 127.0.0.1:32380: getsockopt: connection refused

例如:
1,第1次启动的 cluster 时有3个节点:2379 / 22379 / 32379,IP地址都是 127.0.0.1。
2,在第二次启动前,把启动参数中的 IP 地址改成本机地址:192.168.0.5。
3,在启动2379那个节点服务时,就会出现上面问题。

解决办法:
因为在启动时,没有指定数据保存参数,保存到了~/infra1.etcd/~/infra2.etcd/~/infra3.etcd下面。把这3个文件夹删除掉后,再用修改后的IP地址启动,就可以了。没有调查具体原因。


2,有一个想法。在使用 etcd discovery 进行启动 cluster,指定 size = 2。然后在把所有节点都启动后在一部分节点启动后,把 size 改成 3。再加入新节点,能不能成功?
结果不行。。。

原创粉丝点击