首页 > 代码库 > Etcd学习(二)集群搭建Clustering

Etcd学习(二)集群搭建Clustering

1、单个etcd节点(测试开发用)

之前我一直开发测试一直是用的一个Etcd节点,然后启动命令一直都是直接打一个etcd(我已经将etcd安装目录的bin目录加入到PATH环境变量中),然后启动信息显示etcd server监听在默认的4001端口,peer server监听在默认的7001端口。


2、三个Etcd节点组成Clustering

然后今天想测试一下集群功能,就按照gutHub上面的教程:

参考:https://github.com/coreos/etcd/blob/master/Documentation/clustering.md

Let start by creating 3 new etcd instances.

We use -peer-addr to specify server port and -addr to specify client port and -data-dir to specify the directory to store the log and info of the machine in the cluster:

./etcd -peer-addr 127.0.0.1:7001 -addr 127.0.0.1:4001 -data-dir machines/machine1 -name machine1

Note: If you want to run etcd on an external IP address and still have access locally, you‘ll need to add -bind-addr 0.0.0.0so that it will listen on both external and localhost addresses. A similar argument -peer-bind-addr is used to setup the listening address for the server port.

Let‘s join two more machines to this cluster using the -peers argument. A single connection to any peer will allow a new machine to join, but multiple can be specified for greater resiliency.

./etcd -peer-addr 127.0.0.1:7002 -addr 127.0.0.1:4002 -peers 127.0.0.1:7001,127.0.0.1:7003 -data-dir machines/machine2 -name machine2
./etcd -peer-addr 127.0.0.1:7003 -addr 127.0.0.1:4003 -peers 127.0.0.1:7001,127.0.0.1:7002 -data-dir machines/machine3 -name machine3

备注:

We can also get the current leader in the cluster:

curl -L http://127.0.0.1:4001/v2/leader

We can retrieve a list of machines in the cluster using the HTTP API:

curl -L http://127.0.0.1:4001/v2/machines

打开三个终端将上面三个命令都原原本本执行了一下。

然后执行Get操作查看我之前单个节点时加进去的节点的内容:

curl -L http://127.0.0.1:4002/v2/keys/configA
结果发现key not found的提示,难道在原来一个节点的基础上加了两个节点组成一个集群,会导致之前的数据丢失?

后来研究了一下这个命令,发现指定了数据存储路径,我猜想:

(1)只要同时运行的etcd命令<IP, Port>不冲突,可以同时启动多个etcd节点。

(2)即时启动在不同时间启动在相同<IP,Port>上,只要数据路径指定的不一样,也不是同一个etcd节点。


所以我果断关掉刚才打开的这三个终端,还是用运行我以前的那个etcd命令(默认启动在哪个数据路径我还不知道),然后执行Get操作查看我之前单个节点时加进去的节点的内容:

curl -L http://127.0.0.1:4002/v2/keys/configA

发现内容都在,看来我后来启动的这三个组成clustering的etcd节点和我之前启动的那个etcd节点没有没有关系,因为不是使用相同的数据路径。


3、三个Etcd节点组成Clustering的数据持久性

刚才已经把三个etcd集群的节点关掉了,现在重新启动这三个节点。发现之前写入的节点以及值都还在,说明持久性没有问题。

然后我在/home目录下面找到了machines这个目录,将下面的三个machines,machine2,machine3全部删掉,再次用上面的三个命令启动集群,再次查看之前加的节点,发现已经不存在了,说明集群的数据都是存储在其指定的数据路径下面。

备注:所以说,如要要完全重新使用你的etcd服务器,即要清掉之前的所有数据,将目录删除掉即可。


4、三个Etcd节点组成Clustering应该访问那个(进行操作请求)

三个任意一个都可以,即使它不是leader


5、必须要三个节点组成Clustering?

未完待续。。。


6、集群中的节点分布在多个不同机器上,效果是否一样?

未完待续。。。


Etcd学习(二)集群搭建Clustering