部署Etcd集群
#创建工作目录
mkdir -p /opt/etcd/{
bin,cfg,ssl}
#将创建的证书拷贝到ssl下
cp ~/TLS/etcd/ca*pem ~/TLS/etcd/server*pem /opt/etcd/ssl/
#拉取所需要的Etcd包
wget https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
#解压安装包
tar xvf etcd-v3.4.9-linux-amd64.tar.gz
#将命令etcd etcdctl移动到/opt/etcd/bin目录下
mv etcd-v3.4.9-linux-amd64/{
etcd,etcdctl} /opt/etcd/bin/
修改Etcd配置信息
cat > /opt/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://172.22.213.49:2380"
ETCD_LISTEN_CLIENT_URLS="https://172.22.213.49:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.22.213.49:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://172.22.213.49:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://172.22.213.49:2380,etcd-2=https://172.22.213.52:2380,etcd-3=https://172.22.213.53:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
#参数说明
ETCD_NAME #节点名称,集群中唯一
ETCD_DATA_DIR: #数据目录
ETCD_LISTEN_PEER_URLS #集群通信监听地址
ETCD_LISTEN_CLIENT_URLS #客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS#集群通告地址
ETCD_ADVERTISE_CLIENT_URLS #客户端通告地址
ETCD_INITIAL_CLUSTER #集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN #集群 Token
ETCD_INITIAL_CLUSTER_STATE #加入集群的当前状态,new 是新集群,existing 表示加入已有集群
添加到systemd管理
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--peer-cert-file=/opt/etcd/ssl/server.pem \
--peer-key-file=/opt/etcd/ssl/server-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
将Etcd推送到其他节点
#将master做的配置推送到node1~2
#拷贝etcd目录
scp -r /opt/etcd/ node1:/opt/
#拷贝服务文件
scp /usr/lib/systemd/system/etcd.service node1:/usr/lib/systemd/system/
#拷贝etcd目录
scp -r /opt/etcd/ node2:/opt/
#拷贝服务文件
scp /usr/lib/systemd/system/etcd.service node2:/usr/lib/systemd/system/
修改节点的Etcd配置
#其他节点的配置和master的配置一样,注意修改/opt/etcd/cfg/etcd.conf文件中的IP地址,IP地址不同
node1
vim /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://172.22.213.52:2380"
ETCD_LISTEN_CLIENT_URLS="https://172.22.213.52:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.22.213.52:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://172.22.213.52:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://172.22.213.49:2380,etcd-2=https://172.22.213.52:2380,etcd-3=https://172.22.213.53:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
node2
vim /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-3"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://172.22.213.53:2380"
ETCD_LISTEN_CLIENT_URLS="https://172.22.213.53:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.22.213.53:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://172.22.213.53:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://172.22.213.49:2380,etcd-2=https://172.22.213.52:2380,etcd-3=https://172.22.213.53:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
启动Etcd
#使修改的配置文件生效
systemctl daemon-reload
#启动Etcd并设置开机自启
systemctl start etcd && systemctl enable etcd #注意三个节点需同时启动
报错:
[root@node1 cfg]# systemctl start etcd
Job for etcd.service failed because a timeout was exceeded. See “systemctl status etcd.service” and “journalctl -xe” for details.
由于未同时启动三个节点导致,所以服务超时
也有可能受Etcd版本不同,V3 和V2,解决方案如下:
vim /etc/profile
#在文件末尾添加如下内容
export ETCDCTL_API=3
保存并退出
source /etc/profile
启动Etcd即可
查看Etcd集群状态
扫描二维码关注公众号,回复:
12881250 查看本文章

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://172.22.213.49:2379,https://172.22.213.52:2379,https://172.22.213.53:2379" endpoint health
#出现以下结果未集群正常
https://172.22.213.53:2379 is healthy: successfully committed proposal: took = 13.884077ms
https://172.22.213.49:2379 is healthy: successfully committed proposal: took = 13.5873ms
https://172.22.213.52:2379 is healthy: successfully committed proposal: took = 14.504876ms