Etcd学习(一)安装和测试

Etcd是一个比较新的分布式协调框架,现在才只到0.4.6版本,还没发布1.0版本

从网上搜etcd关键字,基本上就只能看到“开源中国”的介绍:

etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。etcd 的灵感来自于 ZooKeeper 和 Doozer,侧重于:

  • 简单:支持 curl 方式的用户 API (HTTP+JSON)
  • 安全:可选 SSL 客户端证书认证
  • 快速:单实例可达每秒 1000 次写操作
  • 可靠:使用 Raft 实现分布式

Etcd is written in Go and uses the raft consensus algorithm to manage a highly-available replicated log.

一、安装和测试

安装非常简单,大概经历以下几个步骤吧:

1、下载VMWare9.0虚拟机和一个Ubuntu12 desktop版的ISO,安装好Ubuntu,以及root用户,vim软件等的初始化设置。(必须安装Linux-64bit,否则运行时etcd会出错)

2、下载Go语言编译器,用来编译Etcd的,下载地址是:http://tip.golang.so/dl/,上面有解压说明教程。

3、下载CURL,用于在Linux终端发送HTTP请求到Etcd服务器,网上有它的编译和安装教程,比如这个http://blog.csdn.net/lifan5/article/details/7350154

4、下载etcd源码,到GitHub下载就可以,下载了以后解压,然后用Go编译器进行编译,它的GitHub网页上有说明。

5、环境都搞完了以后就可以启动etcd了,然后你可以先照着上面的API教程操作一把:https://github.com/coreos/etcd/blob/master/Documentation/api.md

二、.NET客户端代码测试

我准备先开发.NET的客户端,因为这个目前急需。

下载 drusellers/etcetera

然后用VS202打开自行编译成DLL,将DLL加入到自己的新的工程中。

1、节点存活周期测试:

普通创建的节点(不加TTL)在ETCD崩溃或者重启之后,不会被删除,下次再启动Etcd这些节点还会在,值也不会变。

2、节点监视

设置和监视单层节点,正常工作:

static string registryCenterIP = "192.168.195.128";
        static int registryCenterPort = 4001;
        static string sysFlag = "systemA";
        static string URL = "http://" + registryCenterIP + ":" + registryCenterPort + "/v2/keys/" + sysFlag + "/";
        static EtcdClient client = new EtcdClient(new Uri(URL));

        static void Main(string[] args)
        {
            client.Set("config1", "value1");
            client.Watch("config1", FollowUp_Config);

            Thread.Sleep(3000);

            client.Set("config1", "value2"); //watch回调函数会被触发

设置和监视多层节点,将不管用:

static string registryCenterIP = "192.168.195.128";
        static int registryCenterPort = 4001;
        static string sysFlag = "systemA";
        static string URL = "http://" + registryCenterIP + ":" + registryCenterPort + "/v2/keys/" + sysFlag + "/";
        static EtcdClient client = new EtcdClient(new Uri(URL));

        static void Main(string[] args)
        {
            client.Set("config1/x", "value1");
            client.Watch("config1/x", FollowUp_Config);

            Thread.Sleep(3000);

            client.Set("config1/x", "value2"); //watch回调函数不会被触发

因为config1和你预想的不一样,实际上config1不是一个目录,因为内部实现没有解析这样的格式,然后为config1创建一个对应的目录。

而是提供了一个createDir()的接口来创建目录。

所以在为config1创建了目录的前提下,监视config1/x的watch回调函数才会被触发:

client.CreateDir("config1");

            client.Set("config1/x", "value1");
            client.Watch("config1/x", FollowUp_Config);

            Thread.Sleep(3000);

            client.Set("config1/x", "value2"); //watch回调函数会被触发

另外更重要的一点,设置对节点的watch只是一次有效的!!!

比如下面代码:

static string registryCenterIP = "192.168.195.128";
        static int registryCenterPort = 4001;
        static string sysFlag = "systemA";
        static string URL = "http://" + registryCenterIP + ":" + registryCenterPort + "/v2/keys/" + sysFlag + "/";
        static EtcdClient client = new EtcdClient(new Uri(URL));

        static void Main(string[] args)
        {
            client.Watch("conf", FollowUp_Config);

            Thread.Sleep(2000);
            client.Set("conf", "value1");  //会触发watch回调函数

            Thread.Sleep(2000);
            client.Set("conf", "value2");  //不会触发watch回调函数

            Thread.Sleep(2000);
            client.Set("conf", "valuejiyiqin");    //不会触发watch回调函数

            Thread.Sleep(2000);
            client.Delete("conf"); //不会触发watch回调函数

必须要连续设置watch才会有效:

static string registryCenterIP = "192.168.195.128";
        static int registryCenterPort = 4001;
        static string sysFlag = "systemA";
        static string URL = "http://" + registryCenterIP + ":" + registryCenterPort + "/v2/keys/" + sysFlag + "/";
        static EtcdClient client = new EtcdClient(new Uri(URL));

        static void Main(string[] args)
        {
            client.Watch("conQ", FollowUp_Config);
            Thread.Sleep(2000);
            client.Set("conQ", "value1");  //会触发watch回调函数

            client.Watch("conQ", FollowUp_Config);
            Thread.Sleep(2000);
            client.Set("conQ", "value2");  //会触发watch回调函数

            client.Watch("conQ", FollowUp_Config);
            Thread.Sleep(2000);
            client.Delete("conQ"); //会触发watch回调函数

3、目录监视

如果要监视config1目录,需要在Watch函数的第三个参数recursive = true?指定为true,这样才会触发回调函数。

而且监视只是一次有效,比如这样:

static string registryCenterIP = "192.168.195.128";
        static int registryCenterPort = 4001;
        static string sysFlag = "systemA";
        static string URL = "http://" + registryCenterIP + ":" + registryCenterPort + "/v2/keys/" + sysFlag + "/";
        static EtcdClient client = new EtcdClient(new Uri(URL));

        static void Main(string[] args)
        {
            client.CreateDir("config2");
            client.Watch("config2", FollowUp_Config, true);

            Thread.Sleep(2000);
            client.Set("config2/x", "value1");  //会触发watch回调函数

            Thread.Sleep(2000);
            client.Set("config2/x", "value2");  //不会触发watch回调函数

            Thread.Sleep(2000);
            client.Set("config2/y", "valuejiyiqin");    //不会触发watch回调函数

            Thread.Sleep(2000);
            client.Delete("config2/x"); //不会触发watch回调函数

这样才会所有在这个目录下面的增删该操作都会触发回调函数:

static string registryCenterIP = "192.168.195.128";
        static int registryCenterPort = 4001;
        static string sysFlag = "systemA";
        static string URL = "http://" + registryCenterIP + ":" + registryCenterPort + "/v2/keys/" + sysFlag + "/";
        static EtcdClient client = new EtcdClient(new Uri(URL));

        static void Main(string[] args)
        {
            client.CreateDir("config2");

            client.Watch("config2", FollowUp_Config, true);
            Thread.Sleep(2000);
            client.Set("config2/x", "value1"); //会触发

            client.Watch("config2", FollowUp_Config, true);
            Thread.Sleep(2000);
            client.Set("config2/x", "value2"); //会触发

            client.Watch("config2", FollowUp_Config, true);
            Thread.Sleep(2000);
            client.Set("config2/y", "valuejiyiqin"); //会触发

            client.Watch("config2", FollowUp_Config, true);
            Thread.Sleep(2000);
            client.Delete("config2/x"); //会触发

By 季义钦 [email protected]

时间: 2024-12-21 06:09:55

Etcd学习(一)安装和测试的相关文章

hadoop学习笔记(一)——hadoop安装及测试

这几天乘着工作之余,学习了一下hadoop技术,跌跌撞撞的几天,终于完成了一个初步的hadoop的安装及测试,具体如下: 动力:工作中遇到的数据量太大,服务器已经很吃力,sql语句运行老半天,故想用大数据技术来改善一下 环境:centos5.11+jdk1.7+hadoop2.5.2 1.  伪分布安装步骤 关闭防火墙 修改ip 修改hostname 设置ssh自动登录 安装jdk 安装hadoop 注:此部分涉及到的Linux操作部分可以再下面的链接中找到,Linux初级操作 2.  安装jd

etcd学习记录

参考资料: etcd:从应用场景到实现原理的全方位解读 etcd:用于服务发现的键值存储系统 Etcd学习(一)安装和.NET客户端测试 Etcd学习(二)集群搭建Clustering

从零开始学习CocoaPods安装和使用

从零开始学习CocoaPods安装和使用 转载: Code4App原创:http://code4app.com/article/cocoapods-install-usage http://m.ithao123.cn/content-9745764.html CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽

SystemTap 学习笔记 - 安装篇

https://segmentfault.com/a/1190000000671438 在安装前,需要知道下自己的系统环境,我的环境如下: uname -r 2.6.18-308.el5 Linux 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 安装 为了部署 SystemTap,需要安装以下两个 RPM 包: systemtap systemtap-runtime 以 root

ORCHARD学习教程-安装

安装说明:测试对象为正式版1.8 安装方法: 使用Microsoft Web Platform Installer 利用Microsoft WebMatrix 来安装 Working with Orchard in WebMatrix. 下载编译文件手动安装Manually Installing Orchard Using a zip File. 直接在源码中生成用命令行安装或直接在VS运行 前提条件: The minimum requirements for running Orchard a

Oracle基础学习1--Oracle安装

安装过程较简单,按着步骤走即可.这里需要提醒如果要使用PL/SQL来操作Oracle,那么最好安装32位Oracle程序.原因是网上说PL/SQL只对32位Oracle进行支持,如果用64为Oracle+PL/SQL协同工作,会出现许多问题,例如无法加载oci.dll等.自己当然也亲自经历过,64位的Oracle单独使用很好,但相应的PL/SQL Developer却较难配置. 安装过程需要注意两个地方: ?  全局数据库名: ?  系统用户的密码(一般默认即可) 如何验证安装成功?按着自己的经

Django学习笔记——安装(linux环境)

1. 下载安装Django pip install Django==1.6.5 测试是否安装成功 >>> import django >>> djan.VERSION >>> django.VERSION (1, 6, 5, 'final', 0) 2. 安装数据库MySQL 说明:使用python连接到MySQL前提是需要让一个python连接到MySQL的接口——MySQLdb 下载:http://sourceforge.net/projects/

CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录《第二部分:编译,安装,测试》

前言 GCC(GNU Compiler Collection,GNU编译器合集)是linux以及其他类UNIX平台上进行开源项目,软件开发等必不可少的工具链组成之一(工具链的其他成员包括 binutils,Glibc,libstdc++ 等) 另 外,对于程序员以及系统管理员而言,经常需要从软件的源码手动编译安装,而不论是configure脚本,还是make工具/makefile文件,最终 都需要调用gcc(或者其它编译器)来进行实际的编译工作,因此,经常需要使用gcc的新版特性,并且与旧版gc

2018-05-11-机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI-BOX2D

layout: post title: 2018-05-11-机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI-BOX2D key: 20180511 tags: 机器学习 cuda cudnn tensorflow gym modify_date: 05-11 --- 机器学习环境安装-I7-GTX960M-UBUNTU1804-CUDA90-CUDNN712-TF180-KERAS-GYM-ATARI-B