由于测试的需要,有时需要搭建一个单机版的etcd 环境,为了方便以后搭建查看,现在对单机部署进行记录。

一、部署单机etcd

  1. 下载 指定版本的etcd
    下载地址

    1. ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/updates/22/x86_64/e/etcd-2.2.5-1.fc22.x86_64.rpm

    先判断是否已经安装了etcd,已经安装的话就需要先删除掉,注意权限问题

    1. [vagrant@localhost wae]$ yum list installed | grep etcd
    2. etcd.x86_64 2.2.-.el7 installed
    3. [vagrant@localhost wae]$ yum remove etcd.x86_64
    4. Loaded plugins: fastestmirror
    5. You need to be root to perform this command.
    6. [vagrant@localhost wae]$ sudo yum remove etcd.x86_64
    7. Loaded plugins: fastestmirror
    8. Resolving Dependencies
    9. --> Running transaction check
    10. ---> Package etcd.x86_64 :2.2.-.el7 will be erased
    11. --> Finished Dependency Resolution
    12.  
    13. Dependencies Resolved
    14.  
    15. ===================================================================================================
    16. Package Arch Version Repository Size
    17. ===================================================================================================
    18. Removing:
    19. etcd x86_64 2.2.-.el7 installed M
    20.  
    21. Transaction Summary
    22. ===================================================================================================
    23. Remove Package
    24.  
    25. Installed size: M
    26. Is this ok [y/N]: y
    27. Downloading packages:
    28. Running transaction check
    29. Running transaction test
    30. Transaction test succeeded
    31. Running transaction
    32. Erasing : etcd-2.2.-.el7.x86_64 /
    33. warning: /etc/etcd/etcd.conf saved as /etc/etcd/etcd.conf.rpmsave
    34. Verifying : etcd-2.2.-.el7.x86_64 /
    35.  
    36. Removed:
    37. etcd.x86_64 :2.2.-.el7
    38.  
    39. Complete!

    安装下载的rpm包

    1. [vagrant@localhost etcd]$ sudo yum localinstall etcd-2.2.-.fc22.x86_64.rpm

    验证安装成功

    1. [vagrant@localhost etcd]$ etcdctl --version
    2. etcdctl version 2.2.
  2. 创建一个服务描述文件,放入systemd的服务目录下,一般安装完成都会自动创建
    1. [vagrant@localhost etcd]$ sudo vi /usr/lib/systemd/system/etcd.service
    2. [Unit]
    3. Description=Etcd Server
    4. After=network.target
    5. After=network-online.target
    6. Wants=network-online.target
    7.  
    8. [Service]
    9. Type=notify
    10. WorkingDirectory=/var/lib/etcd/
    11. EnvironmentFile=-/etc/etcd/etcd.conf
    12. User=etcd
    13. # set GOMAXPROCS to number of processors
    14. ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\""
    15. Restart=on-failure
    16. LimitNOFILE=
    17.  
    18. [Install]
    19. WantedBy=multi-user.target
  3. 修改etcd的配置
    一般默认访问的地址是http://localhost:2379,这边我们可以自定义,因为是单机,我们就直接127.0.0.1,有想法的就端口修改下好了
    1. [vagrant@localhost etcd]$ sudo vi /etc/etcd/etcd.conf

    # [member]
    ETCD_NAME=default
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    #ETCD_WAL_DIR=""
    #ETCD_SNAPSHOT_COUNT="10000"
    #ETCD_HEARTBEAT_INTERVAL="100"
    #ETCD_ELECTION_TIMEOUT="1000"
    #ETCD_LISTEN_PEER_URLS="http://localhost:2380"
    ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:4001"
    #ETCD_MAX_SNAPSHOTS="5"
    #ETCD_MAX_WALS="5"
    #ETCD_CORS=""
    #
    #[cluster]
    #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
    # if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
    #ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
    #ETCD_INITIAL_CLUSTER_STATE="new"
    #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:4001"
    #ETCD_DISCOVERY=""
    #ETCD_DISCOVERY_SRV=""
    #ETCD_DISCOVERY_FALLBACK="proxy"
    #ETCD_DISCOVERY_PROXY=""
    #
    #[proxy]
    #ETCD_PROXY="off"
    #ETCD_PROXY_FAILURE_WAIT="5000"
    #ETCD_PROXY_REFRESH_INTERVAL="30000"
    #ETCD_PROXY_DIAL_TIMEOUT="1000"
    #ETCD_PROXY_WRITE_TIMEOUT="5000"
    #ETCD_PROXY_READ_TIMEOUT="0"
    #
    #[security]
    #ETCD_CERT_FILE=""
    #ETCD_KEY_FILE=""
    #ETCD_CLIENT_CERT_AUTH="false"
    #ETCD_TRUSTED_CA_FILE=""
    #ETCD_PEER_CERT_FILE=""
    #ETCD_PEER_KEY_FILE=""
    #ETCD_PEER_CLIENT_CERT_AUTH="false"
    #ETCD_PEER_TRUSTED_CA_FILE=""
    #
    #[logging]
    #ETCD_DEBUG="false"
    # examples for -log-package-levels etcdserver=WARNING,security=DEBUG
    #ETCD_LOG_PACKAGE_LEVELS=""

    如果想要局域网可以访问的话,则将 127.0.0.1 换成宿主机的 ip 即可了,最后外部用 ip 进行接口访问即可。

  4. 启动并测试ETCD
    首先设置开机启动:systemctl enable etcd
    1. [vagrant@localhost etcd]$ sudo systemctl daemon-reload
    2. [vagrant@localhost etcd]$ sudo systemctl start etcd
    3. [vagrant@localhost etcd]$ sudo systemctl status etcd
    4. etcd.service - Etcd Server
    5. Loaded: loaded (/usr/lib/systemd/system/etcd.service; disabled; vendor preset: disabled)
    6. Active: active (running) since Fri -- :: UTC; 8s ago
    7. Main PID: (etcd)
    8. Memory: 26.0M
    9. CGroup: /system.slice/etcd.service
    10. └─ /usr/bin/etcd --name=default --data-dir=/var/lib/etcd/default.etcd --listen-cl...
    11.  
    12. Mar :: localhost.localdomain systemd[]: Starting Etcd Server...
    13. Mar :: localhost.localdomain systemd[]: Started Etcd Server.

    查看集群健康状态

    1. [vagrant@localhost etcd]$ sudo etcdctl cluster-health
    2. member ce2a822cea30bfca is healthy: got healthy result from http://127.0.0.1:4001
    3. cluster is healthy

    ok,没有问题

  5. 卸载与删除etcd
    1. [vagrant@localhost wae]$ yum list installed | grep etcd
    2. etcd.x86_64 2.2.-.el7 installed
    3. [vagrant@localhost wae]$ yum remove etcd.x86_64

二、接口测试

etcd的数据形式是以健对值方式存在的。

  1. 通过接口获取版本信息

    1. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/version -XGET
    2. {"etcdserver":"2.2.5","etcdcluster":"2.2.0"}
  2. 更新一个健对值信息,并通过 ke y获取到 value
    1. [vagrant@localhost etcd]$ etcdctl set /tmp/message wozainali
    2. wozainali
    3. [vagrant@localhost etcd]$ etcdctl get /tmp/message
    4. wozainali

    设置的方式:etcdctl set key value
    获取的方式:etcdctl get key

  3. 通过接口获取健对值信息
    1. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XGET
    2. {"action":"get","node":{"key":"/tmp/message","value":"wozainali","modifiedIndex":,"createdIndex":}}

    再看看 详细的请求信息

    1. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XGET
    2. {"action":"get","node":{"key":"/tmp/message","value":"wozainali","modifiedIndex":,"createdIndex":}}
    3. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XGET -vv
    4. * About to connect() to 127.0.0.1 port (#)
    5. * Trying 127.0.0.1...
    6. * Connected to 127.0.0.1 (127.0.0.1) port (#)
    7. > GET /v2/keys/tmp/message HTTP/1.1
    8. > User-Agent: curl/7.29.
    9. > Host: 127.0.0.1:
    10. > Accept: */*
    11. >
    12. < HTTP/1.1 200 OK
    13. < Content-Type: application/json
    14. < X-Etcd-Cluster-Id: 7e27652122e8b2ae
    15. < X-Etcd-Index: 12
    16. < X-Raft-Index: 37173
    17. < X-Raft-Term: 3
    18. < Date: Fri, 09 Mar 2018 09:16:15 GMT
    19. < Content-Length: 104
    20. <
    21. {"action":"get","node":{"key":"/tmp/message","value":"wozainali","modifiedIndex":12,"createdIndex":12}}
    22. * Connection #0 to host 127.0.0.1 left intact
  4. 通过接口更新一个健对值信息
    1. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XPUT -d value=nihaoha
    2. {"action":"set","node":{"key":"/tmp/message","value":"nihaoha","modifiedIndex":,"createdIndex":},"prevNode":{"key":"/tmp/message","value":"wozainali","modifiedIndex":,"createdIndex":}}
    3. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XGET
    4. {"action":"get","node":{"key":"/tmp/message","value":"nihaoha","modifiedIndex":,"createdIndex":}}

    我们看到更新的时候,会有两条记录,一条是当前记录,一条是之前的记录,多次更新也只会保留最近的信息,获取的时候默认获取最新的信息

    1. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XPUT -d value=wowowow
    2. {"action":"set","node":{"key":"/tmp/message","value":"wowowow","modifiedIndex":,"createdIndex":},"prevNode":{"key":"/tmp/message","value":"nihaoha","modifiedIndex":,"createdIndex":}}

    具体复杂的操作需要去看官方文档,这边只做了解使用。https://coreos.com/etcd/docs/latest/v2/api.html

  5. 通过接口删除健对值信息
    1. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XDELETE
    2. {"action":"delete","node":{"key":"/tmp/message","modifiedIndex":,"createdIndex":},"prevNode":{"key":"/tmp/message","value":"wowowow","modifiedIndex":,"createdIndex":}}
    3. [vagrant@localhost etcd]$ curl http://127.0.0.1:4001/v2/keys/tmp/message -XGET
    4. {"errorCode":,"message":"Key not found","cause":"/tmp/message","index":}

    可以看到删除之后,重新去获取该 key 的值,提示Key not found,证明我们删除成功了。

以上就是,简单的指定etcd单机安装,以及api的几个简单应用。

三、问题

  1. 在修改访问ip问局域网ip之后发现,使用 etcdctl 进行操作的时候会出现如下错误

    1. [vagrant@localhost etcd]$ etcdctl ls
    2. Error: dial tcp 127.0.0.1:: getsockopt: connection refused
    3. [vagrant@localhost etcd]$
    4. [vagrant@localhost etcd]$
    5. [vagrant@localhost etcd]$ etcdctl cluster-health
    6. cluster may be unhealthy: failed to list members
    7. Error: client: etcd cluster is unavailable or misconfigured
    8. error #: dial tcp 127.0.0.1:: getsockopt: connection refused
    9. error #: dial tcp 127.0.0.1:: getsockopt: connection refused

    查询之后,发现应该是 ETCD_LISTEN_CLIENT_URLS 没有写入 http://127.0.0.1:4001 的原因,追加配置  http://127.0.0.1:4001,重新试一下

    1. [vagrant@localhost etcd]$ etcdctl ls
    2. /test
    3. /test123
    4. /tmp
    5. /test1223
    6. [vagrant@localhost etcd]$ etcdctl cluster-health
    7. member ce2a822cea30bfca is healthy: got healthy result from http://192.168.10.50:4001
    8. cluster is healthy
    9. [vagrant@localhost etcd]$

    现在就可以了。
    注意,添加配置的时候,用英文的逗号隔开.

ETCD 单机安装的更多相关文章

  1. cenots7单机安装Kubernetes

    关于什么是Kubernetes请看另一篇内容:http://www.cnblogs.com/boshen-hzb/p/6482734.html 一.环境搭建 master安装的组件有: docker ...

  2. (原) 1.1 Zookeeper单机安装

    本文为原创文章,转载请注明出处,谢谢 zookeeper 单机安装配置 1.安装前准备 linux系统(此文环境为Centos6.5) Zookeeper安装包,官网https://zookeeper ...

  3. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  4. Ubuntu 下 Neo4j单机安装和集群环境安装

    1. Neo4j简介 Neo4j是一个用Java实现的.高性能的.NoSQL图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,通过图中的节点和节点的关系来建模.Neo4j完全兼容A ...

  5. Hbase单机安装部署

    Hbase单机安装部署 http://blogxinxiucan.sh1.newtouch.com/2017/07/27/Hbase单机安装部署/ 下载Hbase Hbase官网下载地址 http:/ ...

  6. 单机安装Hadoop

    单机安装hadoop ------------------------------------------------------------------ 操作系统:centos7 64 位 hado ...

  7. 服务发现系统etcd之安装和使用

    一.概述 etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致 ...

  8. Linux下Kafka单机安装配置方法

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topi ...

  9. ArcGIS 10.1 for Server安装教程系列—— Linux下的单机安装

    http://www.oschina.net/question/565065_81231      因为Linux具有稳定,功能强大等特性,因此常常被用来做为企业内部的服务器,我们的很多用户也是将Ar ...

随机推荐

  1. 661. Image Smoother@python

    Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother t ...

  2. 【线段树 细节题】bzoj1067: [SCOI2007]降雨量

    主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...

  3. MySQLfailover错误一则

    由于公司现有主库要转移到新的主库上,所以,我打算利用MySQLfailover工具的故障转移. 1.开发把程序账号转移到新主库上 2.停止现有主库,使之进行故障转移,转移期间会自动锁表,保持数据一致性 ...

  4. MySql压缩版安装及避免1055错误和msvcp120.dll丢失

    MySql压缩版安装及避免1055错误和msvcp120.dll丢失 MySQL压缩版的安装快速方便,5.7及最新的8版本安装方式大致相同. 在使用group by分组时,可能会遇到1055错误. 另 ...

  5. django 12天(跨域,文件上传,下载,cookie,session)

    django 12天(跨域,文件上传,下载) 跨域 什么是跨域 1.协议不同 2.端口不同 3.主机不同 如何解决跨域 1.安装django-cors-headers模块 2.在settings.py ...

  6. MIP启发式算法:爬山算法 (Hill climbing)

    本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing). 目录 前言 Hill climbing 的过程 ...

  7. Django框架简介及模板Template,filter

    Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View) ...

  8. 在web中绘制图像 -- canvas篇

    汗,不小心点击发布了.其实正在编辑中...... HTML Canvas是现代浏览器中非常棒的绘图技术,Canvas可以绘制图形,操作图片,制作游戏,创建动画等:Canvas是很容易使用的,下面我们来 ...

  9. POJ——1364King(差分约束SPFA判负环+前向星)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11946   Accepted: 4365 Description ...

  10. 刷题总结——路径(ssoi)

    题目: 题目背景 CF 57D 题目描述 小美今天和她的好朋友在玩捉迷藏游戏.地图可以抽象成一张 n*m 的图,地图上有一些障碍.但这些障碍有一些性质:1:每个障碍周围 8 个格子是没有障碍的.2:每 ...