Hits

etcd 学习

今天中秋节,祝大家中秋快乐。

etcd

etcd 是什么?

etcd是一个键值存储仓库,用于配置共享和服务发现。

A Highly-available key value store for shared configuration and service discovery

实际上,etcd是一个受到Zookeeper和docker启发而催生的项目,除了拥有与之类似的功能外,更具有以下4个特点:

  • 简单:基于HTTP+JSON的API让你可以用CURL命令轻松使用
  • 安全:可以选择SSL客户端认证机制
  • 快速:每个实例每秒支持1000次写操作
  • 可信:使用 Ralf 算法充分实现了分布式

etcd 应用场景

  • 服务发现
  • 消息发布和订阅
  • 负载均衡
  • 分布式通知与协调
  • 分布式锁
  • 分布式队列
  • 集群监控与Leader竞选
  • 为什么使用etcd而不使用Zookeerper

etcd 安装

$ wget https://github.com/etcd-io/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
$ tar xzvf etcd-v3.3.9-linux-amd64.tar.gz
$ mv etcd-v3.3.9-linux-amd64 /opt/etcd

解压后是一些文档和两个二进制文件 etcdetcdctl。etcd是server端,etcdctl是客户端。测试环境,启动一个节点的etcd服务,只需要运行 ./etcd命令就行。

  • name表示节点名称,默认为 default
  • data-dir 保存日志和快照目录,默认为当前工作目录default.etcd/目录下
  • http://localhost:2380 和集群中其他节点通信
  • http://localhost:2379` 提供HTTP API服务,供客户端交互。
  • heartbeat为100ms,该参数的作用是leader多久发送一次心跳到followers,默认值是100ms。
  • election为1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为1000ms。
  • snapshot count为10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。
  • 集群和每个节点都会生成一个uuid。
  • 启动的时候会运行raft,选举出leader。

创建 systemd 服务

  • 设定etcd配置文件,建立相关目录
$ mkdir -p /var/lib/etcd/
$ mkdir -p /opt/etcd/config/
  • 创建etcd和systemd配置文件
cat <<EOF | sudo tee ~/etcd.conf
#节点名称
ETCD_NAME=$(hostname -s)
#数据存放位置
ETCD_DATA_DIR=/var/lib/etcd
EOF
$ cat <<EOF | sudo tee /etc/systemd/system/etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target

[Service]
User=root
Type=notify
EnvironmentFile=-/opt/etcd/config/etcd.conf
ExecStart=/opt/etcd/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target
EOF
  • 启动 etcd
$ systemctl daemon-reload && systemctl enable etcd && systemctl start etcd

etcd 基本使用

etcdtctl 是一个命令行客户端,它能提供一些简洁的命令,供用户直接跟etcd服务打交道,而无需基于 HTTP API 的方式。可以方便我们在对服务进行测试或者手动修改数据库内容。建议刚刚接触etcd时通过etdctl来熟悉相关操作。这些操作跟HTTP API基本上是对应的。

数据库操作

  • set
$ etcdctl set /testdir/testkey "Hello World"
Hello World
  • get
  • update
  • rm
  • mk 如果给定的键不存在,则创建一个新的键值
  • mkdir
  • setdir
  • updatedir
  • rmdir
  • ls
  • backup 备份etcd的数据
$ etcdctl backup --data-dir /var/lib/etcd --backup-dir /home/etcd_backuo
  • watch 监控一个键值的变化。
  • exec-watch,监控键值,一旦变化执行指定命令
  • member 通过list、add、remove命令列出、添加、删除ectd实例到etcd集群中

参考

本文链接:参与评论 »

--EOF--

专题「docker相关知识学习」的其它文章 »

Comments