静态部署(前提)

它需要开多个虚拟机 那我们就找到你使用的那个虚拟机复制(强调两个主机都已经安装好了etcd服务并且能够正常运行)

不是复制就可以使用 我们需要把里面的不是vmdk和vmx的文件删了

  

然后再回到我们的虚拟机,鼠标右键选择打开

 

然后启动虚拟机它会提示我们是否已知虚拟机被复制选择已知复制该虚拟机就行 (选第一个就会默认IP一样的)

进来输入ifconfig查看IP    再到外部进行连接

连接之后我们在两个里面输入 systemctl status etcd 的状态

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

静态发现: 

预先已知etcd集群中有哪些节点,在启动时通过--initial-cluster参数直接指定好etcd的各个节点地址

etcd动态发现:

静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能存在预先并不知道各节点ip的情况, 这时可通过已经搭建的etcd来辅助搭建新的etcd集群。通过已有的etcd集群作为数据交互点,然后在扩展新的集群时 实现通过已有集群进行服务发现的机制。比如官方提供的:discovery.etcd.io

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

 

集群搭建

1.安装服务(参考http://t.csdnimg.cn/oZeA6)

2.先删除/var/lib/etcd目录

cd /var/lib/etcd && rm -rf *

修改 vim /etc/etcd/etcd.conf 文件 (注意:记得里面IP要改成自己的哦)

#[Member] #1.节点名称,必须唯一 ETCD_NAME="etcd01" #2.设置数据保存的目录 ETCD_DATA_DIR="/var/lib/etcd" #3.用于监听其他etcd member的url ETCD_LISTEN_PEER_URLS="http://192.168.27.128:2380" #4.该节点对外提供服务的地址 ETCD_LISTEN_CLIENT_URLS="http://192.168.27.129:2379,http://127.0.0.1:2379"

#[Clustering] #1.对外公告的该节点客户端监听地址 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.129:2379" #2.该节点成员对等URL地址,且会通告集群的其余成员节点 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.129:2380" #3.集群中所有节点的信息 ETCD_INITIAL_CLUSTER="etcd01=http://192.168.27.128:2380,etcd02=http://192.168.27.129:2380" #4.创建集群的token,这个值每个集群保持唯一 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #5.初始集群状态,新建集群的时候,这个值为new; ETCD_INITIAL_CLUSTER_STATE="new" #6.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API #为了兼容flannel,将默认开启v2版本,故配置文件中设置  ETCD_ENABLE_V2="true"

 打开两个主机的防火墙端口:

步骤一:firewall-cmd --zone=public --add-port=2379/tcp --permanent

步骤二:firewall-cmd --zone=public --add-port=2380/tcp --permanent

步骤三:firewall-cmd --reload

步骤四:firewall-cmd --list-port

 我们在启动一下: systemctl start etcd 

 然后我们在第二个主机里面输入:systemctl stop etcd 

先删除/var/lib/etcd目录

cd /var/lib/etcd && rm -rf *

 编辑 vim /etc/etcd/etcd.conf   (然后把里面的128替换成129)

#[Member] #1.节点名称,必须唯一 ETCD_NAME="etcd02(第二个主机)" #2.设置数据保存的目录 ETCD_DATA_DIR="/var/lib/etcd(自己的目录)" #3.用于监听其他etcd member的url ETCD_LISTEN_PEER_URLS="http://192.168.27.128:2380" #4.该节点对外提供服务的地址 ETCD_LISTEN_CLIENT_URLS="http://192.168.27.129:2379,http://127.0.0.1:2379"

#[Clustering] #1.对外公告的该节点客户端监听地址 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.129:2379" #2.该节点成员对等URL地址,且会通告集群的其余成员节点 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.129:2380" #3.集群中所有节点的信息 ETCD_INITIAL_CLUSTER="etcd01=http://192.168.27.128:2380,etcd02=http://192.168.27.129:2380" #4.创建集群的token,这个值每个集群保持唯一 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #5.初始集群状态,新建集群的时候,这个值为new; ETCD_INITIAL_CLUSTER_STATE="new" #6.flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API #为了兼容flannel,将默认开启v2版本,故配置文件中设置  ETCD_ENABLE_V2="true"

搞完之后我们分别在两个主机里面输入 systemctl start etcd 

查看集群:etcd member list     

拼上 -w table 它就是以表格的形式

然后试一下在第一个主机里面输入 etcdctl put  /spring/name root 

在第二个主机里面输入 etcdctl  get  /spring/name

以上就是虚拟机的版本

接下来就是docker版本

镜像

docker pull quay.io/coreos/etcd:v3.3.1

创建一个网关

docker network create  --subnet 172.19.0.0/16 ots

创建第一个主机

docker run -d \ -p 2379:2379 -p 2380:2380 \ --name node1 --network=ots \ --ip 172.19.0.110 \ quay.io/coreos/etcd:v3.3.1 \ etcd \ -name node1 \ -advertise-client-urls http://172.19.0.110:2379 \ -initial-advertise-peer-urls http://172.19.0.110:2380 \ -listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 \ -initial-cluster-token etcd-cluster \ -initial-cluster "node1=http://172.19.0.110:2380,node2=http://172.19.0.120:2380,node3=http://172.19.0.130:2380" \ -initial-cluster-state new

创建第二个主机

docker run -d \ --name node2 --network=ots \ --ip 172.19.0.120 \ quay.io/coreos/etcd:v3.3.1 \ etcd \ -name node2 \ -advertise-client-urls http://172.19.0.120:2379 \ -initial-advertise-peer-urls http://172.19.0.120:2380 \ -listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 \ -initial-cluster-token etcd-cluster \ -initial-cluster "node1=http://172.19.0.110:2380,node2=http://172.19.0.120:2380,node3=http://172.19.0.130:2380" \ -initial-cluster-state new

创建第三个主机

docker run -d \ -p 2579:2379 -p 2580:2380 \ --name node3 --network=ots \ --ip 172.19.0.130 \ quay.io/coreos/etcd:v3.3.1 \ etcd \ -name node3 \ -advertise-client-urls http://172.19.0.130:2379 \ -initial-advertise-peer-urls http://172.19.0.130:2380 \ -listen-client-urls http://0.0.0.0:2379 -listen-peer-urls http://0.0.0.0:2380 \ -initial-cluster-token etcd-cluster \ -initial-cluster "node1=http://172.19.0.110:2380,node2=http://172.19.0.120:2380,node3=http://172.19.0.130:2380" \ -initial-cluster-state new

创建之后我们在查看一下主机:docker ps

 然后我们重新启动一下:docker restart {node1,node2,node3}

进入第一个主机:docker exec -it node1 sh 新开一个

进入之后输入etcdctl set /spring/name root

进入第一个主机:docker exec -it node2 sh 新开一个

 进入之后输入:etcdctl get /spring/name

进入第一个主机:docker exec -it node3 sh

 进入之后输入:etcdctl get /spring/name

然后关闭第一个主机:docker stop node1 

然后我们查看:etcdctl memner list

--listen-client-urls #监听 URL;用于与客户端通讯 --listen-peer-urls   #监听 URL;用于与其他节点通讯 --initial-advertise-peer-urls  #告知集群其他节点 URL --advertise-client-urls  #告知客户端 URL --initial-cluster-token  #集群的 ID --initial-cluster        #集群中所有节点 --initial-cluster-state new  #表示从无到有搭建 etcd 集群

如果虚拟机带不动 我们就可以使用这个方式

 

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。