Etcd集群搭建和使用简介

简介: Etcd集群搭建 环境信息 主机1 主机2 主机3 10.25.72.164 10.25.72.233 10.25.73.196 安装etcd yum install -y etcd 安装etcd 配置第一台 编辑etcd配置文件 vim /etc/etcd/etcd.

Etcd集群搭建

环境信息

主机1 主机2 主机3
10.25.72.164 10.25.72.233 10.25.73.196

安装etcd

yum install -y etcd 安装etcd

配置第一台

编辑etcd配置文件

vim /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  #etcd数据保存目录
ETCD_LISTEN_CLIENT_URLS="http://10.25.72.164:2379,http://localhost:2379"  #供外部客户端使用的url
ETCD_ADVERTISE_CLIENT_URLS="http://10.25.72.164:2379,http://localhost:2379" #广播给外部客户端使用的url
ETCD_NAME="etcd1"   #etcd实例名称

ETCD_LISTEN_PEER_URLS="http://10.25.72.164:2380"  #集群内部通信使用的URL
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.25.72.164:2380"  #广播给集群内其他成员访问的URL
ETCD_INITIAL_CLUSTER="etcd1=http://10.25.72.164:2380,etcd2=http://10.25.72.233:2380,etcd3=http://10.25.73.196:2380"    #初始集群成员列表
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #集群的名称
ETCD_INITIAL_CLUSTER_STATE="new"  #初始集群状态,new为新建集群

然后执行systemctl start etcd启动etcd进程

其他两台

etcd2和etcd3为加入etcd-cluster集群的实例,需要将其ETCD_INITIAL_CLUSTER_STATE设置为"exist"

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  
ETCD_LISTEN_CLIENT_URLS="http://10.25.72.233:2379,http://localhost:2379"  
ETCD_ADVERTISE_CLIENT_URLS="http://10.25.72.233:2379,http://localhost:2379" 
ETCD_NAME="etcd2"  

ETCD_LISTEN_PEER_URLS="http://10.25.72.233:2380" 
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.25.72.233:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://10.25.72.164:2380,etcd2=http://10.25.72.233:2380,etcd3=http://10.25.73.196:2380"  
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="exist"  

搭建完毕,可以查看集群节点来确定有没有搭建成功

[root@SZD-L0110301 default.etcd]# etcdctl member list
4536e7d0bdb3b43c: name=etcd3 peerURLs=http://10.25.73.196:2380 clientURLs=http://10.25.73.196:2379,http://localhost:2379 isLeader=false
c441e6c11a47ff3d: name=etcd1 peerURLs=http://10.25.72.164:2380 clientURLs=http://10.25.72.164:2379,http://localhost:2379 isLeader=true
ddc007546c89f163: name=etcd2 peerURLs=http://10.25.72.223:2380 clientURLs=http://10.25.72.223:2379,http://localhost:2379 isLeader=false

Etcd使用

集群数据操作命令

设键值

[root@SZD-L0110301 default.etcd]# etcdctl set /testdir/testkey "hello world"
hello world
  • key存在的方式和zookeeper类似,为 /路径/key
  • 设置完之后,其他集群也可以查询到该值
  • 如果dirkey不存在,该命令会创建对应的项

查看键值

切换到另外一个节点

[root@SZD-L0110303 etcd]# etcdctl get /testdir/testkey
hello world

不存在的时候会报错

更新

当键不存在时,会报错

[root@SZD-L0110303 etcd]# etcdctl update /testdir/testkey "hello bruce"
hello bruce

删除

[root@SZD-L0110303 etcd]# etcdctl rm /testdir/testkey
PrevNode.Value: hello bruce

更多的操作命令省略,可以见help

查看API的版本

[root@SZD-L0072834 ~]# etcdctl -version
etcdctl version: 3.1.10
API version: 2

切换API版本

export ETCDCTL_API=3

集群管理命令

查看API的版本

[root@SZD-L0072834 ~]# etcdctl -version
etcdctl version: 3.1.10
API version: 2

切换API版本

export ETCDCTL_API=3

查看集群健康状态

[root@SZD-L0110301 default.etcd]# etcdctl cluster-health
member 4536e7d0bdb3b43c is healthy: got healthy result from http://10.25.73.196:2379
member c441e6c11a47ff3d is healthy: got healthy result from http://10.25.72.164:2379
member ddc007546c89f163 is healthy: got healthy result from http://10.25.72.223:2379
cluster is healthy

backup

备份 etcd 的数据,参数有:

--data-dir etcd 的数据目录

--backup-dir 备份到指定路径

watch

监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出。

[root@SZD-L0110301 default.etcd]# etcdctl watch /testdir/testkey
hello bruce
[root@SZD-L0110303 etcd]# etcdctl update /testdir/testkey "hello bruce"
  • 在第二个节点update之后,第一个watch的才有结果输出
  • watch会直接退出,如果不想退出可以设置 --forever参数, 这样就会一直监测,直到用户按 CTRL+C 退出

exec-watch

监测一个键值的变化,一旦键值发生更新,就执行给定命令。

[root@SZD-L0110301 default.etcd]# etcdctl exec-watch /testdir/testkey -- sh -c 'ls'
member
相关文章
|
存储 Docker 容器
docker部署etcd集群及使用?
docker部署etcd集群及使用?
658 0
|
存储 缓存 运维
ISCSI详解(三)——ISCSI原理和架构
ISCSI详解(三)——ISCSI原理和架构
703 2
|
存储 Kubernetes 算法
云原生|kubernetes|etcd集群详细介绍+安装部署+调优(一)
云原生|kubernetes|etcd集群详细介绍+安装部署+调优(一)
1790 0
云原生|kubernetes|etcd集群详细介绍+安装部署+调优(一)
|
存储 Kubernetes 监控
云原生必备知识: etcd性能
决定etcd性能的关键因素,包括:  延迟( agency):延迟是完成操作的时间。  吞吐量 (throughput):吞吐量是在某个时间期间之内完成操作的总数量。当etcd接收并发客户端请求时,通常平均延迟随着总体吞吐量增加而增加。
1742 0
云原生必备知识: etcd性能
|
存储 域名解析 缓存
|
XML JSON Go
Golang深入浅出之-XML处理在Go语言中的实现:encoding/xml包
【4月更文挑战第26天】Go语言的`encoding/xml`库提供XML处理,包括序列化和反序列化。本文讨论了XML处理的基础,如`xml.Marshal`和`xml.Unmarshal`函数,以及常见问题和易错点,如标签命名、结构体嵌套、omitempty标签和命名空间。建议遵循标签命名规则,正确处理嵌套和属性,谨慎使用omitempty,以及理解并有效利用命名空间。文中还给出了基础示例和处理XML属性的代码示例,帮助读者掌握XML处理技巧。
296 1
Golang深入浅出之-XML处理在Go语言中的实现:encoding/xml包
|
Linux 网络安全 数据安全/隐私保护
Linux专栏03:使用Xshell远程连接云服务器
Linux专栏03:使用Xshell远程连接云服务器
1045 0
|
Linux
linux系统如何使用GPT工具进行分区
linux系统如何使用GPT工具进行分区
691 2
|
Kubernetes Ubuntu Devops
Kubectl debug 调试容器
Kubectl debug 调试容器
2601 0
Kubectl debug 调试容器