微服务自动化 etcd集群搭建

静态部署(前提)

它需要开多个虚拟机 那我们就找到你使用的那个虚拟机复制(强调两个主机都已经安装好了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 集群

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

相关推荐
Tassel_YUE43 分钟前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
茶馆大橘1 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
想进大厂的小王4 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
九卷技术录4 小时前
(微服务)服务治理:几种开源限流算法库/应用软件介绍和使用
微服务·服务治理·限流算法
阿伟*rui5 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
beifengtz5 小时前
推荐一款ETCD桌面客户端——Etcd Workbench
etcd·etcd客户端
ZHOU西口5 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
想进大厂的小王8 小时前
Spring-cloud 微服务 服务注册_服务发现-Eureka
微服务·eureka·服务发现
flashman91111 小时前
python在word中插入图片
python·microsoft·自动化·word
Gemini199512 小时前
分布式和微服务的区别
分布式·微服务·架构