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。这种方式的做法就是:
- 需要一个“已经存在”的 etcd cluster
- 借用这个“已经存在”的 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
问题:
- 这种方式启动的“已经存在”的 etcd cluster 是单点的,如果这个 etcd cluster 死掉的话,依靠它创建的 cluster 就无法使用了。所以,可以使用 static 方式创建方式一个稳定的 cluster。
- 这个“已经存在”的 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。再加入新节点,能不能成功?
结果不行。。。
- etcd cluster 搭建
- ETCD Cluster 安装
- etcd服务器集群搭建
- etcd集群搭建步骤
- golang etcd环境搭建
- ETCD集群搭建
- etcd集群搭建--static方式
- Docker + Swarm + etcd 集群搭建
- 部署kubernetes出现“etcd cluster is unavailable or misconfigured”错误
- ETCD
- etcd
- etcd
- etcd
- Etcd学习(二)集群搭建Clustering
- etcd 集群搭建及常用场景分析
- 本地服务方式搭建etcd集群
- etcd 集群搭建及常用场景分析
- etcd在同一台虚拟机搭建集群
- 每天一个linux命令(12):vmstat命令
- 火车票购票系统模拟
- 畅通工程之局部最小花费问题(prime算法)
- python中pip安装出现is not a support wheel on is platform问题的解决
- 回调函数与匿名函数,一段值得研究的代码
- etcd cluster 搭建
- OpenCV-002:从本地摄像头读取视频并播放
- MAP底层
- BZOJ2510: 弱题(循环矩阵+矩阵快速幂)
- Cmder 加入右键菜单
- Spring Boot使用拦截器Interceptor
- fatal error LNK1181: 无法打开输入文件“sc_base.lib”
- 多线程编程之七:pthread条件变量
- static 和final的区别