目录

etcd

https://juejin.im/post/5e02fb1f518825123b1aa341#heading-20

https://www.hi-linux.com/posts/40915.html

简介

etcdCoreOS团队发起的开源项目,目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,基于Go语言实现。

  • Raftetcd所采用的保证分布式系统强一致性的算法。

  • Node:一个Raft状态机实例。

  • Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。

  • Cluster:由多个Member构成可以协同工作的etcd集群。

  • Peer:对同一个etcd集群中另外一个Member的称呼。

  • Client: 向etcd集群发送HTTP请求的客户端。

  • WAL:预写式日志,etcd用于持久化存储的日志格式。

  • snapshotetcd防止WAL文件过多而设置的快照,存储etcd数据状态。

  • Proxyetcd的一种模式,为etcd集群提供反向代理服务。

  • LeaderRaft算法中通过竞选而产生的处理所有数据提交的节点。

  • Follower:竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。

  • Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始竞选。

  • Term:某个节点成为Leader到下一次竞选时间,称为一个Term

  • Index:数据项编号。Raft中通过TermIndex来定位数据。

安装

直接使用二进制文件

1
2
$ curl -LO https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
$ tar -xzcf etcd-v3.4.9-linux-amd64.tar.gz

其中etcdserver端,etcdctl是客户端,测试环境,启动一个单节点的etcd服务,只需要运行etcd命令就行

1
2
3
4
5
6
7
8
9
# 日志输出
embed: name = default								# 名称
embed: data dir = default.etcd						
embed: member dir = default.etcd/member
embed: heartbeat = 100ms							# leader心跳间隔
embed: election = 1000ms							# 重新投票超时时间
embed: snapshot count = 100000	# 有多少事务被提交时,触发截取快照保存到磁盘
embed: advertise client URLs = http://localhost:2379
etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c32
  • 会自动在执行目录创建default.etcd文件夹来存放数据
  • 在端口2379提供HTTP API,端口2380负责和集群其他节点通信

创建systemd服务

  • 建立目录

    1
    2
    3
    
    $ mv etcd-v3.4.9-linux-amd64/ /opt/etcd
    $ mkdir -p /var/lib/etcd/
    $ mkdir -p /opt/etcd/config/
    
  • 写etcd配置文件

    1
    2
    3
    4
    5
    6
    
    $ cat << EOF | sudo tee /opt/etcd/config/etcd.conf
    #节点名称
    ETCD_NAME=$(hostname -s)
    #数据存放位置
    ETCD_DATA_DIR=/var/lib/etcd
    EOF
    
  • 写systemd配置文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    $ 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
    
  • 启动

    1
    
    $ systemctl start etcd