一、简介
1. 简介
etcd是一个分布式键值存储系统,用于存储分布式系统中最关键的数据,由CoreOS开发并作为开源项目进行维护。它使用Raft一致性算法来实现高可用性和数据一致性,并提供了简单的HTTP
API用于读取、写入和观察存储在其上的键值对。
2. 特点
分布式:etcd被设计为一个分布式系统,可以运行在多台机器上组成集群。通过将数据复制到不同节点上,并使用Raft协议确保数据副本之间的强一致性,从而实现高可靠性和容错能力。
键值存储:etcd以类似字典(key-value)形式保存数据。每个key都与一个value相关联,并且可以根据key进行读取、写入或删除操作。
强一致性:通过Raft算法提供强一致性保证,在集群中所有节点之间达成共识以确保数据副本之间始终保持同步状态。
高可用:由于采用了分布式架构,当某些节点失效时,其他健康节点仍然能够正常工作并提供服务。这使得应用程序能够持续访问和更新存储在etcd中的信息。
监视功能:除了基本CRUD操作外,etcd还提供了监视功能,允许应用程序监听特定键的更改事件。这使得应用程序能够实时感知数据变化并做出相应的响应。
安全性:etcd支持基于TLS(传输层安全)的加密通信,并提供身份验证和授权机制来保护数据的安全性。
3. 端口介绍
端口 2379 是 etcd 的客户端监听端口。当你想要与 etcd 进行交互时(例如读取或写入键值对),需要使用这个端口来连接到 etcd 实例。
端口 2380 是 etcd 的对等节点通信监听端口。etcd 集群中的各个节点之间通过这个端口进行通信和同步数据。
1、编写脚本
vi /install_etcd.sh
#!/bin/bash
ETCD_VERSION='3.5.4'
ETCD_INSTALLDIR='/opt/module/etcd'
install_etcd() {
local etcd_name="etcd-v${1}-linux-amd64"
local etcd_url="https://github.com/etcd-io/etcd/releases/download/v${1}/etcd-v${1}-linux-amd64.tar.gz"
if [ -z "$(command -v etcd)" ]; then
if [ ! -d "${2}" ]; then
mkdir -p "${2}"
fi
if [ ! -f /tmp/"${etcd_name}".tar.gz ]; then
wget "$etcd_url" -P /tmp
if [ $? -ne 0 ]; then
echo "${etcd_name}.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"
echo "下载地址:$etcd_url"
exit 1
fi
fi
if [ -d "${2}/${etcd_name}" ]; then
rm -rf "${2}/${etcd_name}"
fi
tar -zxvf /tmp/etcd-v"${1}"-linux-amd64.tar.gz -C "${2}"
sudo cp -a "${2}"/etcd-v"${1}"-linux-amd64/etcd "${2}"/etcd-v"${1}"-linux-amd64/etcdctl /usr/bin/
nohup "${2}"/etcd-v"${1}"-linux-amd64/etcd >/tmp/etcd.log 2>&1 &
fi
}
install_etcd $ETCD_VERSION $ETCD_INSTALLDIR
exit 0
2. 增加执行权限
在终端中执行以下命令,为脚本添加执行权限。
chmod a+x /install_etcd.sh
3. 执行脚本
执行以下命令,运行脚本开始下载、安装和配置Apisix。
/install_etcd.sh
请等待安装完成,如有异常会有提示。
4. 查看启动状态
etcdctl member list
返回结果如下所示,started表示已启动。
[root@hadoop103 ~]# etcdctl member list
8e9e05c52164694d, started, default, http://localhost:2380, http://localhost:2379, false
5. 卸载etcd
删除对应文件和目录即可。
rm -rf /root/default.etcd
rm -rf /root/etcd01.etcd
rm -rf /usr/bin/etcd
rm -rf /usr/bin/etcdctl
rm -rf /usr/lib/firewalld/services/etcd-client.xml
rm -rf /usr/lib/firewalld/services/etcd-server.xml
rm -rf /opt/module/etcd
集群版
准备的集群节点为:192.168.5.3
、192.168.5.4
、192.168.5.5
。
首先,在192.168.5.3
节点将以下脚本内容复制并保存为/install_etcd.sh文件。
#!/bin/bash
ETCD_VERSION='3.5.4'
ETCD_INSTALLDIR='/opt/module/etcd'
install_etcd() {
local etcd_name="etcd-v${1}-linux-amd64"
local etcd_url="https://github.com/etcd-io/etcd/releases/download/v${1}/etcd-v${1}-linux-amd64.tar.gz"
if [ -z "$(command -v etcd)" ]; then
if [ ! -d "${2}" ]; then
mkdir -p "${2}"
fi
if [ ! -f /tmp/"${etcd_name}".tar.gz ]; then
wget "$etcd_url" -P /tmp
if [ $? -ne 0 ]; then
echo "${etcd_name}.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"
echo "下载地址:$etcd_url"
exit 1
fi
fi
if [ -d "${2}/${etcd_name}" ]; then
rm -rf "${2}/${etcd_name}"
fi
tar -zxvf /tmp/etcd-v"${1}"-linux-amd64.tar.gz -C "${2}"
sudo cp -a "${2}"/etcd-v"${1}"-linux-amd64/etcd "${2}"/etcd-v"${1}"-linux-amd64/etcdctl /usr/bin/
# nohup "${2}"/etcd-v"${1}"-linux-amd64/etcd >/tmp/etcd.log 2>&1 &
fi
}
install_etcd $ETCD_VERSION $ETCD_INSTALLDIR
exit 0
2. 增加执行权限
在终端中执行以下命令,为脚本添加执行权限。
chmod a+x /install_etcd.sh
3. 分发脚本
使用scp命令把脚本分发到192.168.5.4和192.168.5.5节点。
scp /install_etcd.sh 192.168.5.4:/
scp /install_etcd.sh 192.168.5.5:/
4. 执行脚本
在192.168.5.3节点执行以下命令,开始在三个节点分别运行脚本,开始下载和安装etcd
/install_etcd.sh
ssh 192.168.5.4 /install_etcd.sh
ssh 192.168.5.5 /tmp/install_etcd.sh
请等待安装完成,如有异常会有提示。
5. 启动etcd新集群
将以下脚本内容复制并保存为/etcd_start_info.sh文件。
需要把etcd集群节点更换为自己的集群节点。
#!/bin/bash
# etcd集群节点
node1=192.168.5.3
node2=192.168.5.4
node3=192.168.5.5
# etcd版本
ETCD_VERSION='3.5.4'
# etcd安装目录
ETCD_INSTALLDIR='/opt/module/etcd'
nodes=($node1 $node2 $node3)
for node in "${nodes[@]}"
do
echo "复制下面脚本到 $node 执行启动etcd"
echo "nohup \\
etcd --name etcd$(echo $node | awk -F '.' '{print $NF}') --initial-advertise-peer-urls http://$node:2380 \\
--listen-peer-urls http://$node:2380 \\
--listen-client-urls http://$node:2379,http://127.0.0.1:2379 \\
--advertise-client-urls http://$node:2379 \\
--data-dir $ETCD_INSTALLDIR/etcd-v$ETCD_VERSION-linux-amd64/data \\
--initial-cluster-token etcd-cluster-1 \\
--initial-cluster etcd$(echo $node1 | awk -F '.' '{print $NF}')=http://$node1:2380,etcd$(echo $node2 | awk -F '.' '{print $NF}')=http://$node2:2380,etcd$(echo $node3 | awk -F '.' '{print $NF}')=http://$node3:2380 \\
--initial-cluster-state new \\
--auto-tls \\
--peer-auto-tls \\
> /tmp/etcd.log 2>&1 &"
echo "-----------------------------------------------------------------------"
done
exit 0
5.2 增加执行权限
在终端中执行以下命令,为脚本添加执行权限。
chmod a+x /etcd_start_info.sh
5.3 执行脚本
执行此脚本后会打印集群的启动命令,然后根据打印的启动命令,分别复制到三个节点执行启动etcd集群。
/etcd_start_info.sh
执行后结果如下图所示:
5.4 查看启动状态
etcdctl member list
返回结果如下所示,started表示已启动。
[root@hadoop103 ~]# etcdctl member list
d1ba583667016d5, started, etcd3, http://192.168.5.3:2380, http://192.168.5.3:2379, false
1fdc35df8ab0c538, started, etcd5, http://192.168.5.5:2380, http://192.168.5.5:2379, false
68d20b112ee2f6c4, started, etcd4, http://192.168.5.4:2380, http://192.168.5.4:2379, false
6. 启动已存在的etcd集群
将以下脚本内容复制并保存为/etcd_start_info.sh文件。
需要把etcd集群节点更换为自己的集群节点。
与上面一个脚本不同的是--initial-cluster-state existing,这里的初始化集群状态是已存在。
#!/bin/bash
# etcd集群节点
node1=192.168.5.3
node2=192.168.5.4
node3=192.168.5.5
# etcd版本
ETCD_VERSION='3.5.4'
# etcd安装目录
ETCD_INSTALLDIR='/opt/module/etcd'
nodes=($node1 $node2 $node3)
for node in "${nodes[@]}"
do
echo "复制下面脚本到 $node 执行启动etcd"
echo "nohup \\
etcd --name etcd$(echo $node | awk -F '.' '{print $NF}') --initial-advertise-peer-urls http://$node:2380 \\
--listen-peer-urls http://$node:2380 \\
--listen-client-urls http://$node:2379,http://127.0.0.1:2379 \\
--advertise-client-urls http://$node:2379 \\
--data-dir $ETCD_INSTALLDIR/etcd-v$ETCD_VERSION-linux-amd64/data \\
--initial-cluster-token etcd-cluster-1 \\
--initial-cluster etcd$(echo $node1 | awk -F '.' '{print $NF}')=http://$node1:2380,etcd$(echo $node2 | awk -F '.' '{print $NF}')=http://$node2:2380,etcd$(echo $node3 | awk -F '.' '{print $NF}')=http://$node3:2380 \\
--initial-cluster-state existing \\
--auto-tls \\
--peer-auto-tls \\
> /tmp/etcd.log 2>&1 &"
echo "-----------------------------------------------------------------------"
done
exit 0
6.2 增加执行权限
在终端中执行以下命令,为脚本添加执行权限。
chmod a+x /etcd_start_info.sh
6.3 执行脚本
执行此脚本后会打印集群的启动命令,然后根据打印的启动命令,分别复制到三个节点执行启动etcd集群。
/etcd_start_info.sh
7. 停止集群
可以通过杀死集群节点对应的进程来停止。
kill -9 $(ps -ef | grep etcd | awk 'NR==1 {print $2}')
8. 卸载etcd
删除对应文件和目录即可
rm -rf /root/default.etcd
rm -rf /root/etcd01.etcd
rm -rf /usr/bin/etcd
rm -rf /usr/bin/etcdctl
rm -rf /usr/lib/firewalld/services/etcd-client.xml
rm -rf /usr/lib/firewalld/services/etcd-server.xml
rm -rf /opt/module/etcd