🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### **问题** 我们在操作Etcd的过程中会发现,为什么有时候更改Etcd的一个启动参数,不会像k8s那样直接修改然后重启就可以了,而是要进行很复杂的操作呢? 其实,这和当Etcd节点初始化后, 集群的状态信息是保存在该节点的数据目录中的,此时部分启动参数已经不再起作用。要更改集群状态,必须通过etcdctl命令操作,更改每个节点中数据目录中的状态。 ### **启动参数** 接下来我们介绍一下ETCD常用的启动参数,以及哪些启动参数是Etcd节点在初始化后修改不起作用的,哪些参数是节点初始化后起作用的。 * **`listen-client-urls`** 它表示客户端的监听地址,比如`http://0.0.0.0:2379`,表示使用http协议,监听所有的interface。 这个参数在节点初始化后是可以修改并起作用的。 比如修改成只监听两个interface `http://127.0.0.1:2379,http://192.168.92.121:2379` * **`advertise-client-urls`** 该参数告诉其他的peer,用什么地址来连接本节点的客户端。比如,在某个节点上执行`etcdctl cluster-health`命令,该节点就会使用其他节点的`advertise-client-urls`去连接其他节点,获取其他节点的状态。 这个参数在节点初始化后更改是起作用的。比如,我们想更改端口。并且,更改并重启之后,节点会自动更新Etcd集群的状态。`etcdctl member list`查看集群,就会看到这个地址已经变了。 不过要注意,如果更改了此参数,那么`listen-client-urls`可能也要更改。比如该参数更改了端口为12379,那么`listen-client-urls`也要把端口更改为12379。这是因为,如果peer使用advertise的地址(12379端口)来请求本节点时,而本节点却没有监听advertise的地址(即没有监听12379端口),那么peer就会请求失败。 * **`listen-peer-urls`** 该参数表示peer的监听地址。比如`http://0.0.0.0:2380`。表示监听所有的interface。 这个参数在节点初始化后是可以修改并起作用的。 比如修改成只监听两个interface `http://127.0.0.1:2380,http://192.168.92.121:2380`。 该参数和`listen-client-urls`很相似,可以看作一个进程只接收什么协议、什么端口的请求。 * **`initial-advertise-peer-urls`** 该参数表示其他节点连接本节点的peer端口时使用的地址。peer端口的主要作用有:节点之间的选举、数据的同步。 该参数在节点初始化后更改,就不会起作用了。 (为什么修改后不起作用?) ### **总结** 经过分析,发现,initial开头的参数,在节点初始化后更改,就不会起作用了。而其他参数在节点初始化后更改,还是可以起作用的。(此结论不一定正确)