etcd集群安装

一、 etcd rpm包下载

1
2
3
4
curl 'http://xxxx:8360/repo/7/etcd-3.2.22-1.el7.x86_64.rpm' -o etcd-3.2.22-1.el7.x86_64.rpm
rpm -ivh etcd-3.2.22-1.el7.x86_64.rpm

export ETCDCTL_API=3 #要使用etcd的3版本api需要导入环境变量

或者根据版本需要到 https://github.com/etcd-io/etcd/releases 下载指定etcd二进制版本安装包

二、 etcd 启动

修改以下脚本的ETCD_CLUSTER_HOST ETCD_CLUSTER_IP 变量为3台机器的IP地址、
确认3台机器的12379 12380 端口无占用,然后在每台机器上执行如下脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash -xe

source /home/s/etc/monitor_etcd

ETCD_DATA_PATH=/home/s/var/etcd/infra

ETCD_CLUSTER_HOST1=127.0.0.1
ETCD_CLUSTER_HOST2=127.0.0.2
ETCD_CLUSTER_HOST3=127.0.0.3

ETCD_CLUSTER_IP1=127.0.0.1
ETCD_CLUSTER_IP2=127.0.0.2
ETCD_CLUSTER_IP3=127.0.0.3

declare -A cluster_map=([$ETCD_CLUSTER_HOST1]="infra1" \
[$ETCD_CLUSTER_HOST2]="infra2" \
[$ETCD_CLUSTER_HOST3]="infra3")

EXTERNAL_PORT=12379
INTERNAL_PORT=12380
LOCAL_HOST="`hostname --fqdn`"
#LOCAL_IP=`host $LOCAL_HOST 2>/dev/null | awk '{print $NF}'`
LOCAL_IP=`ip a show dev eth0 | grep -w inet | awk '{print $2}' | awk -F '/' '{print $1}'`

EXTERNAL_URL=http://$LOCAL_IP:$EXTERNAL_PORT
INTERNAL_URL=http://$LOCAL_IP:$INTERNAL_PORT

LOCAL_NAME=${cluster_map[$LOCAL_HOST]}
ETCD_CLUSTER_URLS=infra1=http://$ETCD_CLUSTER_IP1:$INTERNAL_PORT,infra2=http://$ETCD_CLUSTER_IP2:$INTERNAL_PORT,infra3=http://$ETCD_CLUSTER_IP3:$INTERNAL_PORT

etcd --name $LOCAL_NAME \
--data-dir=$ETCD_DATA_PATH \
--listen-client-urls $EXTERNAL_URL \
--advertise-client-urls $EXTERNAL_URL \
--listen-peer-urls $INTERNAL_URL \
--initial-advertise-peer-urls $INTERNAL_URL \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster $ETCD_CLUSTER_URLS \
--auto-compaction-retention=1 \
--initial-cluster-state existing > $ETCD_DATA_PATH/etcd.log 2>&1 &

sleep 2
~

三、 etcd 检查

1
2
(1)ETCDCTL_API=3  etcdctl member list --endpoints=127.0.0.1:12379 查看是否互通(显示三个成员)
(2)ETCDCTL_API=3 etcdctl endpoint health --endpoints=127.0.0.1:12379 查看是否健康