Linux虚拟机安装etcd集群


etcd是一个开源的分布式键值存储系统,由CoreOS团队开发,主要用于存储分布式系统中的关键数据。它采用Raft一致性算法,确保数据的一致性和高可用性,同时提供简单的HTTP/JSON API,方便开发者快速集成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sudo -s
#设置要下载的版本
ETCD_VER=v3.5.14
INSTALL_DIR=/opt

# 也可以从google下载,鉴于国内无法访问,就注释掉了
# GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}

# 清理原来下载过的
rm -f ${INSTALL_DIR}/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf ${INSTALL_DIR}/etcd && mkdir -p ${INSTALL_DIR}/etcd

# 下载
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o ${INSTALL_DIR}/etcd-${ETCD_VER}-linux-amd64.tar.gz
# 解压
tar xzvf ${INSTALL_DIR}/etcd-${ETCD_VER}-linux-amd64.tar.gz -C ${INSTALL_DIR}/etcd --strip-components=1
# 删除压缩包
rm -f ${INSTALL_DIR}/etcd-${ETCD_VER}-linux-amd64.tar.gz

# 测试
${INSTALL_DIR}/etcd/etcd --version
${INSTALL_DIR}/etcd/etcdctl version

配置etcd的路径

1
2
3
4
5
6
7
cat << EOF > /etc/profile.d/etcd.sh
export PATH=$PATH:/opt/etcd
EOF

source /etc/profile
etcd --version
etcdctl version

生成一个长一点的token保证安全

1
2
$ echo apisix-etcd|md5sum
4fb245d9b94bb0c1e50131fd9aabd3af -

创建配置文件

假设我们有三个虚拟机,ip分别是10.13.215.75、10.13.213.233、10.13.208.179

1
2
mkdir /etc/etcd/
vim /etc/etcd/etcd.conf

节点1

1
2
3
4
5
6
DATA_DIR=/data/etcd
HOST_NAME=master1
HOST_IP=10.13.215.75
CLUSTER=master1=http://10.13.215.75:2380,master2=http://10.13.213.233:2380,master3=http://10.13.208.179:2380
CLUSTER_STATE=new
TOKEN=lclPOgNq38pBt5zdplFj64hoIEppy5xFLHz6G

节点2

1
2
3
4
5
6
DATA_DIR=/data/etcd
HOST_NAME=master2
HOST_IP=10.13.213.233
CLUSTER=master1=http://10.13.215.75:2380,master2=http://10.13.213.233:2380,master3=http://10.13.208.179:2380
CLUSTER_STATE=new
TOKEN=lclPOgNq38pBt5zdplFj64hoIEppy5xFLHz6G

节点3

1
2
3
4
5
6
DATA_DIR=/data/etcd
HOST_NAME=master3
HOST_IP=10.13.208.179
CLUSTER=master1=http://10.13.215.75:2380,master2=http://10.13.213.233:2380,master3=http://10.13.208.179:2380
CLUSTER_STATE=new
TOKEN=lclPOgNq38pBt5zdplFj64hoIEppy5xFLHz6G

每个节点创建systemd服务文件

  • 创建mkdir -p /data/etcd
    1
    mkdir -p /data/etcd
  • 编辑systemd服务文件 vim /usr/lib/systemd/system/etcd.service
    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
    [Unit]
    Description=Etcd Server
    After=network.target
    After=network-online.target
    Wants=network-online.target

    [Service]
    Type=notify
    WorkingDirectory=/data/etcd
    EnvironmentFile=/etc/etcd/etcd.conf
    User=root
    # set GOMAXPROCS to number of processors
    ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /opt/etcd/etcd \
    --data-dir ${DATA_DIR} \
    --name \"${HOST_NAME}\" \
    --initial-advertise-peer-urls http://${HOST_IP}:2380 \
    --listen-peer-urls http://${HOST_IP}:2380 \
    --advertise-client-urls http://${HOST_IP}:2379 \
    --listen-client-urls http://${HOST_IP}:2379 \
    --initial-cluster ${CLUSTER} \
    --initial-cluster-state ${CLUSTER_STATE} \
    --initial-cluster-token ${TOKEN}"
    Restart=on-failure
    LimitNOFILE=65536

    [Install]
    WantedBy=multi-user.target

启动

1
2
systemctl daemon-reload
systemctl start etcd

查看状态

1
etcdctl endpoint status -w table --endpoints='10.13.215.75:2379,10.13.213.233:2379,10.13.208.179:2379'