Etcd 配置

  1. 使用apt安装etcd
sudo apt install etcd
  1. 生成证书(参考 https://www.jianshu.com/p/ba0964c41b50
  2. 配置config文件 /etc/etcd/etcd.conf
# [Member]
ETCD_NAME="worker1"
ETCD_DATA_DIR="/var/lib/etcd/worker"
ETCD_LISTEN_PEER_URLS="http://yourip-1:2380"
ETCD_LISTEN_CLIENT_URLS="http://yourip-1:2379,http://127.0.0.1:2379"

# [Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://yourip-1:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://yourip-1:2379"
ETCD_INITIAL_CLUSTER="worker1=http://yourip-1:2380,worker2=http://yourip-2:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"

# [Security]
ETCD_CERT_FILE="/etc/etcd/cert/server.crt"
ETCD_KEY_FILE="/etc/etcd/cert/server.key"
ETCD_TRUSTED_CA_FILE="/etc/etcd/cert/ca.crt"
ETCD_CLIENT_CERT_AUTH=true
ETCD_PEER_CERT_FILE="/etc/etcd/cert/server.crt"
ETCD_PEER_KEY_FILE="/etc/etcd/cert/server.key"
ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/cert/ca.crt"
ETCD_PEER_CLIENT_CERT_AUTH=true
  1. 修改service文件 /lib/systemd/system/etcd.service
[Unit]
Description=etcd - highly-available key value store
Documentation=https://github.com/coreos/etcd
Documentation=man:etcd
After=network.target
Wants=network-online.target

[Service]
EnvironmentFile=/etc/etcd/etcd.conf
Type=notify
User=etcd
ExecStart=/usr/bin/etcd --name ${ETCD_NAME} \
  --data-dir=${ETCD_DATA_DIR} \
  --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
  --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS} \
  --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
  --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
  --initial-cluster=${ETCD_INITIAL_CLUSTER} \
  --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \
  --initial-cluster-state=${ETCD_INITIAL_CLUSTER_STATE} \
  --cert-file=${ETCD_CERT_FILE} \
  --key-file=${ETCD_KEY_FILE} \
  --peer-cert-file=${ETCD_PEER_CERT_FILE} \
  --peer-key-file=${ETCD_PEER_KEY_FILE} \
  --trusted-ca-file=${ETCD_TRUSTED_CA_FILE} \
  --client-cert-auth=${ETCD_CLIENT_CERT_AUTH} \
  --peer-client-cert-auth=${ETCD_PEER_CLIENT_CERT_AUTH} \
  --peer-trusted-ca-file=${ETCD_PEER_TRUSTED_CA_FILE}

Restart=on-abnormal
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
Alias=etcd2.service

Etcd 选举

文档 https://www.cnblogs.com/xybaby/p/10124083.html

演示动画 http://thesecretlivesofdata.com/raft/

  • 节点的三种状态
    1. leader(集群中唯一,所有的写入都由leader受理,follower从leader同步数据)
    2. candidate(follower接收leader心跳超时后,会转为candidate状态)
    3. follower(只读节点)

raft-node-status