zoukankan      html  css  js  c++  java
  • ETCD 简介及基本用法

    ETCD 项目地址
    ETCD 官方文档

    1. 简介

    ETCD 是一个高可用的分布式键值数据库,可用于服务发现。ETCD 采用 raft 一致性算法,基于 Go 语言实现。

    特点

    简单:安装配置使用简单,提供 HTTP API
    安全:支持 SSL 证书
    可靠:采用 raft 算法,实现分布式系统数据的可用性和一致性

    2. 用法

    通过 etcdctl 可以使用 ETCD。假设使用 v3 版本,且集群设置如下:

    export ETCDCTL_API=3
    HOST_1=10.240.0.17
    HOST_2=10.240.0.18
    HOST_3=10.240.0.19
    ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379
    
    etcdctl --endpoints=$ENDPOINTS member list

    版本设置

    ETCD v2 和 v3 两个版本不兼容,且 v2 已经停止支持。如果一个系统上同时按照了两个版本,需要通过环境变量来切换:

    export ETCDCTL_API=3

    读写数据

    put 命令写数据:

    etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"

    get 命令读数据:

    etcdctl --endpoints=$ENDPOINTS get foo
    etcdctl --endpoints=$ENDPOINTS --write-out="json" get foo

    通过 --write-out="json" 选项读数据时,会读包括元数据在内的所有数据,并以 JSON 格式输出。

    通过 prefix 选项读数据

    etcdctl --endpoints=$ENDPOINTS put web1 value1
    etcdctl --endpoints=$ENDPOINTS put web2 value2
    etcdctl --endpoints=$ENDPOINTS put web3 value3
    
    etcdctl --endpoints=$ENDPOINTS get web --prefix

    删除数据

    etcdctl --endpoints=$ENDPOINTS put key myvalue
    etcdctl --endpoints=$ENDPOINTS del key
    
    etcdctl --endpoints=$ENDPOINTS put k1 value1
    etcdctl --endpoints=$ENDPOINTS put k2 value2
    etcdctl --endpoints=$ENDPOINTS del k --prefix

    事务性写入 txn

    通过 txn 可以将多个请求放入一个事务:

    etcdctl --endpoints=$ENDPOINTS put user1 bad
    etcdctl --endpoints=$ENDPOINTS txn --interactive
    
    compares:
    value("user1") = "bad"      
    
    success requests (get, put, delete):
    del user1  
    
    failure requests (get, put, delete):
    put user1 good

    监控数据变化 watch

    通过 watch 选项,可以在将来发生改变时获得通知:

    etcdctl --endpoints=$ENDPOINTS watch stock1
    etcdctl --endpoints=$ENDPOINTS put stock1 1000
    
    etcdctl --endpoints=$ENDPOINTS watch stock --prefix
    etcdctl --endpoints=$ENDPOINTS put stock1 10
    etcdctl --endpoints=$ENDPOINTS put stock2 20

    安全写入 lease

    lease 选项可以通过 TTL 写入数据:

    etcdctl --endpoints=$ENDPOINTS lease grant 300
    # lease 2be7547fbc6a5afa granted with TTL(300s)
    
    etcdctl --endpoints=$ENDPOINTS put sample value --lease=2be7547fbc6a5afa
    etcdctl --endpoints=$ENDPOINTS get sample
    
    etcdctl --endpoints=$ENDPOINTS lease keep-alive 2be7547fbc6a5afa
    etcdctl --endpoints=$ENDPOINTS lease revoke 2be7547fbc6a5afa
    # or after 300 seconds
    etcdctl --endpoints=$ENDPOINTS get sample

    分布式锁 lock

    etcdctl --endpoints=$ENDPOINTS lock mutex1
    
    # another client with the same name blocks
    etcdctl --endpoints=$ENDPOINTS lock mutex1

    集群状态

    为每台机器指定初始群集配置:

    etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status
    
    +------------------+------------------+---------+---------+-----------+-----------+------------+
    |     ENDPOINT     |        ID        | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
    +------------------+------------------+---------+---------+-----------+-----------+------------+
    | 10.240.0.17:2379 | 4917a7ab173fabe7 | 3.0.0   | 45 kB   | true      |         4 |      16726 |
    | 10.240.0.18:2379 | 59796ba9cd1bcd72 | 3.0.0   | 45 kB   | false     |         4 |      16726 |
    | 10.240.0.19:2379 | 94df724b66343e6c | 3.0.0   | 45 kB   | false     |         4 |      16726 |
    +------------------+------------------+---------+---------+-----------+-----------+------------+
    
    etcdctl --endpoints=$ENDPOINTS endpoint health
    
    10.240.0.17:2379 is healthy: successfully committed proposal: took = 3.345431ms
    10.240.0.19:2379 is healthy: successfully committed proposal: took = 3.767967ms
    10.240.0.18:2379 is healthy: successfully committed proposal: took = 4.025451ms

    Member

    添加,删除,更新成员。

  • 相关阅读:
    firstresponder 后,键盘不显示
    performSelector
    setNeedsDisplay、setNeedsLayout 区别
    Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
    GCD介绍(一):基本概念和dispatch queues
    一些概念
    /mnt/sdcard /sdcard
    eclipse 导入已存在的工程文件出错
    ios 常用技巧
    ios nsstring去掉换行符
  • 原文地址:https://www.cnblogs.com/kika/p/10851608.html
Copyright © 2011-2022 走看看