从零开始搭建etcd分布式存储系统+Web管理界面

随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用、强一致性的服务发现存储仓库,渐渐为开发人员所关注。

在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,已经成为了迫切需要解决的问题。

etcd为解决这类问题带来了福音,它是一个高可用的 Key/Value 存储系统,内部采用raft协议作为一致性算法。
准备好了吗,干货要来了,are you ok ?

本飞猪教程内容简介

1.etcd的安装

2.搭建单机版

3.搭建集群版

4.使用监听功能watch(服务发现)

5.使用rest api

6.搭建WEB界面并使用

一.安装 下载地址:https://github.com/coreos/etcd/releases/ mkdir -p /home/chenqionghe/test/etcd/ cd !$ # 下载 wget https://github.com/etcd-io/etcd/releases/download/v3.3.12/etcd-v3.3.12-linux-amd64.tar.gz # 解压安装 tar zxvf etcd-v3.3.12-linux-amd64.tar.gz cd etcd-v3.3.12-linux-amd64 ## 将启动文件和命令管理文件拷贝到 PATH找到的路径中 cp etcd /usr/local/bin cp etcdctl /usr/local/bin cp -r etcd-v3.2.5-linux-amd64 /usr/local/etcd #将软件放置到常用目录下 启动参数解释 --name etcd集群中的节点名,这里可以随意,可区分且不重复就行  --listen-peer-urls 监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等) --initial-advertise-peer-urls 建议用于节点之间通信的url,节点间将以该值进行通信。 --listen-client-urls 监听的用于客户端通信的url,同样可以监听多个。 --advertise-client-urls 建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信。 --initial-cluster-token etcd-cluster-1 节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响。 --initial-cluster 也就是集群中所有的initial-advertise-peer-urls 的合集 --initial-cluster-state new 新建集群的标志 二.搭建单机版

直接启动

etcd

etcd默认监听的是localhost的2379端口,既只监听了lo设备,这样会导致启动后集群中的其他机器无法访问
因此我们可以在启动的时候将默认的localhost改成0.0.0.0,确保etcd监听了所有网卡。

etcd -listen-client-urls="http://0.0.0.0:2379" --advertise-client-urls="http://0.0.0.0:2379"

注意:etcd有要求,如果--listen-client-urls被设置了,那么就必须同时设置--advertise-client-urls,所以即使设置和默认相同,也必须显式设置
我们来使用curl来测试一下,是否可以远程访问,这里我的机器IP是10.211.55.25

➜ ~ curl -L :2379/version {"etcdserver":"3.3.12","etcdcluster":"3.3.0"}

当然,我们也可以通过docker运行,这里给出启动脚本

#!/usr/bin/env bash ETCD_NAME="etcd" ETCD_VERSION="v3.3.1" ETCD_PORT_CLIENT=2379 ETCD_PORT_NODE=2380 docker run -d \ -p ${ETCD_PORT_CLIENT}:2379 \ -p ${ETCD_PORT_NODE}:2380 \ --name ${ETCD_NAME} quay.io/coreos/etcd:${ETCD_VERSION} \ /usr/local/bin/etcd \ --data-dir=/etcd-data --name node1 \ --initial-advertise-peer-urls :2380 --listen-peer-urls :2380 \ --advertise-client-urls :2379 --listen-client-urls :2379 \ --initial-cluster node1=http://0.0.0.0:2380 三.搭建集群版

Etcd构建自身高可用集群主要有三种形式:

静态发现: 预先已知 Etcd 集群中有哪些节点,在启动时直接指定好Etcd的各个node节点地址

Etcd动态发现: 通过已有的Etcd集群作为数据交互点,然后在扩展新的集群时实现通过已有集群进行服务发现的机制

DNS动态发现: 通过DNS查询方式获取其他节点地址信息

这里我们采用Static方式,准备三台机器,ip如下(都已经安装etcd)

node1 10.211.55.2 node2 10.211.55.25 node3 10.211.55.26 进入node1,创建并运行run.sh,脚本内容如下 #!/usr/bin/env bash #节点名称 ETCD_NAME=node-1 #本机IP地址 LOCAL_IP=10.211.55.2 #ETCD存储目录 ETCD_DATA_DIR=/usr/local/etcd/data #初始化名称 INITIAL_CLUSTER_TOKEN=cqh-test-cluster #初始化群集列表 INITIAL_CLUSTER="node-1=http://10.211.55.2:2380,node-2=http://10.211.55.25:2380,node-3=http://10.211.55.26:2380" #初始化状态 INITIAL_CLUSTER_STATE=new #开始运行 etcd --name ${ETCD_NAME} --data-dir ${ETCD_DATA_DIR} \ --initial-advertise-peer-urls ${LOCAL_IP}:2380 \ --listen-peer-urls ${LOCAL_IP}:2380 \ --listen-client-urls ${LOCAL_IP}:2379,:2379 \ --advertise-client-urls ${LOCAL_IP}:2379 \ --initial-cluster-token ${INITIAL_CLUSTER_TOKEN} \ --initial-cluster ${INITIAL_CLUSTER} \ --initial-cluster-state ${INITIAL_CLUSTER_STATE} 进入node2,创建并运行run.sh,脚本内容和node1差不多(只修改了ETCD_NAME和LOCAL_IP) #!/usr/bin/env bash #节点名称 ETCD_NAME=node-2 #本机IP地址 LOCAL_IP=10.211.55.25 #ETCD存储目录 ETCD_DATA_DIR=/usr/local/etcd/data #初始化名称 INITIAL_CLUSTER_TOKEN=cqh-test-cluster #初始化群集列表 INITIAL_CLUSTER="node-1=http://10.211.55.2:2380,node-2=http://10.211.55.25:2380,node-3=http://10.211.55.26:2380" #初始化状态 INITIAL_CLUSTER_STATE=new #开始运行 etcd --name ${ETCD_NAME} --data-dir ${ETCD_DATA_DIR} \ --initial-advertise-peer-urls ${LOCAL_IP}:2380 \ --listen-peer-urls ${LOCAL_IP}:2380 \ --listen-client-urls ${LOCAL_IP}:2379,:2379 \ --advertise-client-urls ${LOCAL_IP}:2379 \ --initial-cluster-token ${INITIAL_CLUSTER_TOKEN} \ --initial-cluster ${INITIAL_CLUSTER} \ --initial-cluster-state ${INITIAL_CLUSTER_STATE} 进入node3,创建并运行run.sh #!/usr/bin/env bash #节点名称 ETCD_NAME=node-3 #本机IP地址 LOCAL_IP=10.211.55.26 #ETCD存储目录 ETCD_DATA_DIR=/usr/local/etcd/data #初始化名称 INITIAL_CLUSTER_TOKEN=cqh-test-cluster #初始化群集列表 INITIAL_CLUSTER="node-1=http://10.211.55.2:2380,node-2=http://10.211.55.25:2380,node-3=http://10.211.55.26:2380" #初始化状态 INITIAL_CLUSTER_STATE=new #开始运行 etcd --name ${ETCD_NAME} --data-dir ${ETCD_DATA_DIR} \ --initial-advertise-peer-urls ${LOCAL_IP}:2380 \ --listen-peer-urls ${LOCAL_IP}:2380 \ --listen-client-urls ${LOCAL_IP}:2379,:2379 \ --advertise-client-urls ${LOCAL_IP}:2379 \ --initial-cluster-token ${INITIAL_CLUSTER_TOKEN} \ --initial-cluster ${INITIAL_CLUSTER} \ --initial-cluster-state ${INITIAL_CLUSTER_STATE}

我们看到3台都启动成功了

从零开始搭建etcd分布式存储系统+Web管理界面

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/beef4476bbad2dfd0d0e8cae0643f9bb.html