安装etcd集群(含CA)
前言
etcd 是一个开源的分布式键值存储,用于分布式系统最关键的数据。
它通过将数据复制到多台机器来分布,因此对于单点故障具有很高的可用性。
使用 Raft 共识算法,etcd 优雅地处理网络分区和机器故障,甚至是领导者故障。
etcd 被广泛应用于生产环境:CoreOS、Kubernetes、YouTube Doorman 等。
我这里有
192.168.2.158 etcd-158
192.168.2.159 etcd-159
192.168.2.160 etcd-160
etcd
集群指南
CA
配置时间
1 | yum install ntpdate -y |
1 | rm -f ~/etcd-v3.5.4-linux-amd64.tar.gz |
cfssl 生成自签名 TLS 证书的方法
在 host158
上执行
生成自签名 root CA
证书
1 | #rm -f /opt/cfssl* |
生成
1 | # 创建根证书签名请求文件 |
生成ca
证书和私钥
1 | # 生成 |
结果
1 | # CSR configuration |
使用私钥生成本地颁发的证书
1 | # peer |
生成之后
1 | # 传输到每一个节点 |
创建用户和组
在 host158
上执行
1 | groupadd etcd && useradd -g etcd etcd && echo '1' | passwd --stdin etcd |
运行
host158
1 | rm -rf /opt/etcd/etcd-158 |
host159
1 | rm -rf /opt/etcd/etcd-159 |
host160
1 | rm -rf /opt/etcd/etcd-160 |
校验运行状态
1 | ETCDCTL_API=3 /opt/etcd/etcdctl \ |
配置服务
注意:三个节点配置结束后,服务才会启动成功
host158
1 | rm -rf /opt/etcd/etcd |
host159
1 | rm -rf /opt/etcd/etcd |
host160
1 | rm -rf /opt/etcd/etcd |
校验运行状态
1 | # to get logs from service |
查看成员
1 | ENDPOINTS=192.168.2.158:2379,192.168.2.159:2379,192.168.2.160:2379 |
创建用户
1 | export ETCDCTL_API=3 |
访问
注意:需要添加
1
2
3
4
5
6 export ETCDCTL_API=3
ENDPOINTS=192.168.2.158:2379,192.168.2.159:2379,192.168.2.160:2379
--endpoints ${ENDPOINTS} ${ETCD_AUTH}
--cacert /etc/certs/etcd/ca.pem \
--cert /etc/certs/etcd/etcd-158.pem \
--key /etc/certs/etcd/etcd-158-key.pem \
添加 key-value
1 | export ETCDCTL_API=3 |
通过前缀获取密钥
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} put web1 value1 |
事务中多次写入
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} put user1 bad |
查看 keys
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} watch stock1 |
创建 lease
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} lease grant 300 |
创建 locks
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} lock mutex1 |
etcd
集群中如何进行leader
选举
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} elect one p1 |
校验运行状态
1 | etcdctl --endpoints=${ENDPOINTS} ${ETCD_AUTH} endpoint health |
保存数据库
Snapshot can only be requested from one etcd node, so --endpoints
flag should contain only one endpoint.
1 | ENDPOINTS=192.168.2.158:2379 |
1 | etcdctl --write-out=table --endpoints=${ENDPOINTS} ${ETCD_AUTH} snapshot status my.db |
添加和删除节点
1 | export ETCDCTL_API=3 |
附
容错
对于 ETCD 集群,建议在集群中提供奇数个节点,下表显示了不同的节点数量时 ETCD 集群可以容忍的错误节点数量:
集群节点数 | Majority | 最大容错数 |
---|---|---|
1 | 1 | 0 |
2 | 2 | 0 |
3 | 2 | 1 |
4 | 2 | 1 |
5 | 3 | 2 |
6 | 3 | 2 |
7 | 4 | 3 |
8 | 4 | 3 |
9 | 5 | 4 |