欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于etcd集群部署

程序员文章站 2022-07-13 22:38:45
...

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

一开始在做服务发现的时候,只是搭了单机的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

继续添加节点即可

相关标签: etcd集群