关于etcd集群部署

本文详细介绍了如何部署和配置etcd集群,从单机版etcd的启动到集群的搭建,包括设置client-urls、initial-cluster参数,以及添加新节点的步骤,特别提醒了在现有集群中添加节点时的注意事项。

折腾良久,终于部署成功了……


2019年8月25日更
有点儿无语,蠢哭…
看了下Document\demo.md里是有Set a cluster的步骤的…
与之前摸索的步骤的区别在于
1、initial-cluster中将集群中的所有节点都加进来
2、initial-cluster-state都是new
3、直接启动节点,不需要执行member add的命令
下文中的步骤,应该集群部署之后添加节点,或者是原有节点下线之后重新上线之后的步骤…再一次尴尬


一开始在做服务发现的时候,只是搭了单机的etcd就开始玩儿了,出于可靠性的考量,单机并不能满足实际项目的要求,于是决定搭一个三台机器的小集群,也就有了本文的折腾,这里实名吐槽win10的WSL,吹得天花乱坠,用起来巨坑无比,谁用谁知道~

本来是决定在win10单机开三个端口来假装是三台机器的,中间配置失败等各种原因,尝试未果,于是又上了一台centos7的虚拟机

正确的配置步骤应该是这样的~

首先,下载etcd release,这里选用的是3.3.15版本,根据自己的操作系统下载对应的包,解压即可。主要有两个可执行文件,etcd和etcdctl。etcd用于启动etcd服务,etcdctl是’A simple command line client for etcd’,etcd的命令行客户端。

其次,启动etcd服务。本地测试可以直接执行./etcd不用带任何参数,启动成功之后,执行命令 ./etcdctl member list可以查看启动的服务信息,使用的是默认对外端口2379。另外还可以通过浏览器访问http://localhost:2379/v2/members查看。

简单的glance到此为止,上述etcd服务启动后,只有本地可以访问,如果其他机器需要访问,就需要在启动服务的时候,指定client-urls

./etcd --listen-client-urls http://192.168.56.101:2379 --advertise-client-urls http://192.168.56.101:2379
此时就可以使用指定的client-url访问了,例如http://192.168.56.101:2379/v2/members,返回结果如下

{
	"members": [{
		"id": "8e9e05c52164694d",
		"name": "default",
		"peerURLs": [
			"http://localhost:2380"
		],
		"clientURLs": [
			"http://192.168.56.101:2379"
		]
	}]
}

到此为止,单机版etcd服务的简单配置,基本就结束了。

下面开始集群的配置。

在机器A上的服务启动配置文件etcd0.json,内容如下

{
	"name": "etcd0",
	"listen-peer-urls": "http://192.168.56.101:2380",
	"listen-client-urls": "http://192.168.56.101:2379,http://127.0.0.1:2379",
	"initial-advertise-peer-urls": "http://192.168.56.101:2380",
	"initial-cluster": "etcd0=http://192.168.56.101:2380",
	"initial-cluster-state": "new",
	"data-dir": "/path/to/{$name}.etcd",
	"wal-dir": "/path/to/{$name}.wal",
	"initial-cluster-token": "etcd-cluster",
	"advertise-client-urls": "http://192.168.56.101:2379"
}
  • name: 服务节点可读的名称

  • listen-peer-urls:侦听对等流量的URL列表

  • listen-client-urls:用于客户端请求的url地址,多值逗号隔开

  • advertise-client-urls: 客户端通过这些url连接到集群

  • initial-advertise-peer-urls: 用于集群节点间通信的url地址

  • initial-cluster: 引导的初始集群配置,如果是第一台启动服务的节点,只需要配置当前节点即可

  • initial-cluster-state: 初始集群状态(new,existing),如果是第一台启动服务的节点,name值为new,其余的为existing

  • data-dir

  • wal-dir

  • initial-cluster-token: etcd集群启动时的初始集群令牌。在运行多个集群时,指定此选项可以防止意外的跨群集交互。同一个集群的节点使用同一个值。

通过制定config-file的方式启动节点

./etcd --config-file etcd0.json
在机器B上的服务启动配置文件etcd1.json,内容如下

{
	"name": "etcd1",
	"listen-peer-urls": "http://10.0.117.211:2380",
	"listen-client-urls": "http://10.0.117.211:12379,http://127.0.0.1:2379",
	"initial-advertise-peer-urls": "http://10.0.117.211:2380",
	"initial-cluster": "etcd0=http://192.168.56.101:2380,etcd1=http://10.0.117.211:2380",
	"data-dir": "/path/to/{$name}.etcd",
	"wal-dir": "/path/to/{$name}.wal",
	"initial-cluster-state": "existing",
	"initial-cluster-token": "etcd-cluster",
	"advertise-client-urls": "http://10.0.117.211:2379"
}

对于集群中已经有节点存在的情况下,需要注意以下几点

  • 配置文件中initial-cluster-state需要为existing

  • initial-cluster中要包含集群中其他已启动的节点以及当前节点

  • 最后也是最重要的,要先将当前节点添加到集群,再启动节点!

  • 添加当前节点到集群:执行命令 etcdctl member add <name> <peerURL>,上面的节点的话,命令是 ./etcdctl member add etcd1 "http://10.0.117.211:2380"

  • 启动当前节点 ./etcd --config-file etcd1.json

继续添加节点即可

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值