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
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
- 编辑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
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'
|