关于etcd集群部署
折腾良久,终于部署成功了……
一开始在做服务发现的时候,只是搭了单机的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
继续添加节点即可
上一篇: docker部署etcd集群
下一篇: Ext combo backspace
推荐阅读
-
Elasticsearch单机双节点集群部署实战
-
docker部署rabbitmq集群的实现方法
-
Spring Cloud Alibaba | Nacos集群部署
-
Mysql基于Mysql Cluster+MysqlRouter的集群部署方案
-
laravel项目利用twemproxy部署redis集群的完整步骤
-
SQL Server AlwaysOn 集群 关于主Server IP与Listener IP调换的详细测试
-
通过Docker部署Redis 6.x集群的方法
-
使用docker快速部署Elasticsearch集群的方法
-
使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法
-
Nginx部署tomcat/wildfly集群负载均衡