Etcd初步

源码: https://github.com/coreos/etcd

说明:

  1. master分支可能还不稳定,使用最新的release分支(下面测试的是2.3.6)
  2. 源码编译需要下载100MB左右的源文件,包含依赖文件(如果是在新的golang环境上编译的话)
  3. 如果在etcd目录下go install的话,只编译安装etcd,不编译etcdctl;需要进入ectdetl目录下go install,才会有etcdctl; 基本上就这两个二进制文件了
  4. 直接下载编译的文件比较快捷,而且这里有最新的release的二进制文件: https://github.com/coreos/etcd/releases/
  5. https://github.com/coreos/etcd 下面有一些参考文档的链接

 

集群配置:

https://github.com/coreos/etcd/blob/master/Documentation/op-guide/clustering.md

 

集群实现方式有三种:

今天了解了DNS Discovery,其中:

  1. DNS server使用的是dnsmasq
  2. DNS配置
    添加文件: /etc/dnsmasq.d/etcd.srv.conf

    其中:_etcd-server._tcp.        _etcd-client._tcp.  都是etcd自动添加的
    _etcd-server._tcp.    用于server之间交互,使用 2380 端口
    _etcd-client._tcp.     用于client(如: etcdctl )发现server,使用 2379端口

问题:

上面的dns配置基本是可用的,目前发现的唯一问题是: etcdctl –discovery-srv  etcd.i.beebank.com 来工作时,期望srv记录中拿到的是域名,而不是ip;不过etcd –discovery-srv  etcd.i.beebank.com 却没有这种苛求; 解决办法,把上面的IP换成域名,然后对域名做解析,而且,同一个域名解析出来多个IP也是不错的

 

修改如下:

/etc/hosts

/etc/dnsmasq.d/etcd.srv.conf

 

今天的测试没有涉及认证,server端启动参数:

其中:

–discovery-srv: 用于服务发现

–initial-advertise-peer-urls: 告诉其他成员,通过这个地址来联系我(对于服务发现的时候似乎用途不大,因为dns上已经注册了呀)

–initial-cluster-token: 应该是加群的暗号,暗号对不上是不让进群的

 

测试点:

  1. 通过proxy进行读写
  2. 同时通过单个实例进行读写
  3. 通过etcdctl的–discovery-srv进行读写
  4. 其中一个实例死掉一会儿,重启后依然能读到死后写入的数据
  5. 集群中一个节点到另一个节点之间都不止一个长连接
  6. 稍后测试一个全新的节点接入会是什么样子

======= v3.0.4 试用 ======

server端通过srv记录发现时,如果srv记录中解析到的是域名,则不会发现该域名下的所有IP (这个行为和v2.3.6不一致)

client端通过srv记录发现时,如果srv记录中解析到的是多个IP:PORT, 则etcdctl会试图解析已解析到的IP而报错

所以配置可修改成这样:

看起来好恶心

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据