ETCD安装部署与etcdctl常用命令

单机部署

以3.5.1为例:https://github.com/etcd-io/etcd/releases/tag/v3.5.1
虚机部署

ETCD_VER=v3.5.1

# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
/tmp/etcd-download-test/etcdutl version

检查etcdserver版本

# start a local etcd server
/tmp/etcd-download-test/etcd

# write,read to etcd
/tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
/tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo

docker部署

rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
  docker rmi gcr.io/etcd-development/etcd:v3.5.1 || true && \
  docker run \
  -p 2379:2379 \
  -p 2380:2380 \
  --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
  --name etcd-gcr-v3.5.1 \
  gcr.io/etcd-development/etcd:v3.5.1 \
  /usr/local/bin/etcd \
  --name s1 \
  --data-dir /etcd-data \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://0.0.0.0:2380 \
  --initial-cluster s1=http://0.0.0.0:2380 \
  --initial-cluster-token tkn \
  --initial-cluster-state new \
  --log-level info \
  --logger zap \
  --log-outputs stderr

docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcd --version"
docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl version"
docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl get foo"
docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdutl version"

集群部署

多节点集群化部署,启动方式包含静态配置和服务发现,

静态配置

适用于线下环境,由于etcd集群中各member需要互相感知对方,因此在启动时会对集群有一定要求,包含:

  • 集群节点个数已知
  • 集群各节点的地址已知

集群各节点的地址信息通过etcd启动时通过“–initial-cluster”来设置,此参数指定的URL就是集群各个节点的advertise-peer-urls,需要与“–initial-advertise-peer-urls”配置值匹配,多个节点用逗号隔开。
etcd server在“–listen-client-urls”指定监听客户端请求,而“–advertise-client-urls”指定该成员的客户端URL则会向集群的其他成员发布(etcd server之间是可以重定向请求的,比如:Follower节点可以将客户端的写请求重定向给Leader节点)
注意:如果要使用etcd的proxy特性,慎用http://localhost:2379作为“–advertise-client-urls”参数,这将导致死循环,因为etcd proxy将会优先把请求重定向给自己,知道本节点的内存,文件描述符等资源被耗尽为止。

三个节点启动方式案例如下:

节点1:10.1.1.10
etcd --name infra0 --initial-advertise-peer-urls http://10.1.1.10:2380 \
  --listen-peer-urls http://10.1.1.10:2380 \
  --listen-client-urls http://10.1.1.10:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.10:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new

节点2:10.1.1.11
etcd --name infra1 --initial-advertise-peer-urls http://10.1.1.11:2380 \
  --listen-peer-urls http://10.1.1.11:2380 \
  --listen-client-urls http://10.1.1.11:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.11:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new

节点3:10.1.1.12
etcd --name infra2 --initial-advertise-peer-urls http://10.1.1.12:2380 \
  --listen-peer-urls http://10.1.1.12:2380 \
  --listen-client-urls http://10.1.1.12:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.12:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new

集群启动后,“–initial-cluster”参数的更新会被忽略,如果真要修改集群配置,就要用到运行时重配置特性。

错误案例

etcd --name infra1 --initial-advertise-peer-urls http://10.1.1.11:2380 \
  --listen-peer-urls http://10.1.1.11:2380 \
  --listen-client-urls http://10.1.1.11:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.11:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380 \
  --initial-cluster-state new
错误原因:infra1没有包含在枚举的node列表中

etcd --name infra1 --initial-advertise-peer-urls http://127.0.0.1:2380 \
  --listen-peer-urls http://10.1.1.11:2380 \
  --listen-client-urls http://10.1.1.11:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.11:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.12:2379\
  --initial-cluster-state new
错误原因:节点infra0映射的地址是127.0.0.1:2380,与初始化集群member列表中的http://10.1.1.11:2380不匹配

etcd --name infra3 --initial-advertise-peer-urls http://10.1.1.13:2380 \
  --listen-peer-urls http://10.1.1.13:2380 \
  --listen-client-urls http://10.1.1.13:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://10.1.1.13:2379 \
  --initial-cluster infra0=http://10.1.1.10:2380,infra1=http://10.1.1.11:2379,infra2=http://10.1.1.13:2379\
  --initial-cluster-state new
错误原因:该节点配置参数与洁群的其他member不同,且试图加入到集群中。etcd抛出一个集群ID不匹配的错误退出

服务发现

etcd服务自发现即为使用一个现有的etcd集群来启动另一个新的etcd集群,自发现包含两种模式:

  • etcd自发现模式
  • DNS自发现模式

etcd自发现模式

设置服务发现URL,如下例如:https://myetcd.local/v2/keys/discovery/6csfdfsdfdsfdsfswerewrwerwer,通过discovery参数来启动etcd,新的etcd实例就会自动使用https://myetcd.local的/v2/keys/discovery/6csfdfsdfdsfdsfswerewrwerwer目录进行etcd的启动注册。具体如下:


节点1:10.1.1.10
etcd --name infra0 --initial-advertise-peer-urls http://10.1.1.10:2380 \
  --listen-peer-urls http://10.1.1.10:2380 \
  --listen-client-urls http://10.1.1.10:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.10:2379 \
  --discovery https://myetcd.local/v2/keys/discovery/6csfdfsdfdsfdsfswerewrwerwere \
  --initial-cluster-state new

节点2:10.1.1.11
etcd --name infra1 --initial-advertise-peer-urls http://10.1.1.11:2380 \
  --listen-peer-urls http://10.1.1.11:2380 \
  --listen-client-urls http://10.1.1.11:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.11:2379 \
  --discovery https://myetcd.local/v2/keys/discovery/6csfdfsdfdsfdsfswerewrwerwere \
  --initial-cluster-state new

节点3:10.1.1.12
etcd --name infra2 --initial-advertise-peer-urls http://10.1.1.12:2380 \
  --listen-peer-urls http://10.1.1.12:2380 \
  --listen-client-urls http://10.1.1.12:2379,http://127.0.0.1:2379\
  --advertise-client-urls http://10.1.1.12:2379 \
  --discovery https://myetcd.local/v2/keys/discovery/6csfdfsdfdsfdsfswerewrwerwere \
  --initial-cluster-state new

这样新启动的etcd member都会通过现有的etcd进行自动注册,一旦所有的member都注册完成,就组成了一个集群。如果没有现成的etcd集群可用,可以使用公网上的etcd(etcd官网提供了一个可以公网访问的etcd存储地址:https://discovery.etcd.io,可免费使用)进行服务发现。使用下面命令创建一个新的服务发现URL

[root@VM-12-8-opencloudos ~]# curl https://discovery.etcd.io/new?size=3
https://discovery.etcd.io/765b77d1962b6b30859f25f900b4d2ea

然后例如启动一个节点如下:
etcd --name infra2 --initial-advertise-peer-urls http://10.0.12.8:12380 \
  --listen-peer-urls http://10.0.12.8:12380 \
  --listen-client-urls http://10.0.12.8:2379,http://127.0.0.1:12379\
  --advertise-client-urls http://10.0.12.8:12379 \
  --discovery https://discovery.etcd.io/765b77d1962b6b30859f25f900b4d2ea \
  --initial-cluster-state new

例如启动一个后,访问此地址:可见nodes有一个节点已经注册
在这里插入图片描述
这种方式需要通过HTTP代理才能访问到公网,etcd的启动参数“–discovery-proxy”支持配置HTTP代理服务器。同样在完成集群的初始化后,这些信息就失去了作用,当需要增加节点时,使用etcdctl来进行操作。
为了安全,每次启动新etcd集群时,都使用新的discovery token进行注册。另外,如果初始化时启动的节点超过了指定的数量,那么多余的节点会自动转化为Proxy模式的etcd

DNS自发现模式

DNS的SRV记录能够用于服务发现,因此etcd还支持使用DNS SRV记录进行启动。

DNS配置(包含SRV记录配置以及A记录配置)

$ dig +noall +ansver SRV _etcd-server._tcp.example.com
_etcd-server._tcp.example.com.	300	IN	SRV 0	0	2380	infra0.example.com
_etcd-server._tcp.example.com.	300	IN	SRV 0	0	2380	infra1.example.com
_etcd-server._tcp.example.com.	300	IN	SRV 0	0	2380	infra2.example.com

$ dig +noall +ansver infra0.example.com infra1.example.com infra2.example.com
infra0.example.com.	300	IN	A	10.0.1.10
infra1.example.com.	300	IN	A	10.0.1.11
infra2.example.com.	300	IN	A	10.0.1.12

启动方式如下:

etcd --name infra0 
  --initial-advertise-peer-urls http://infra0.example.com:2380 \
  --listen-peer-urls http://infra0.example.com:2380 \
  --listen-client-urlshttp://infra0.example.com:2379\
  --advertise-client-urlshttp://infra0.example.com:2379 \
  --initial-cluster-token etcd-cluster-1 \
  --discovery-srv example.com \
  --initial-cluster-state new

etcdctl常用命令

用户可以通过etcdctl命令行工具与etcd服务端进行交互。可以直接查看etcdctl的默认的API版本

[root@VM-12-8-opencloudos ~]# etcdctl version
etcdctl version: 3.5.4
API version: 3.5

key的常规操作

  • 写入一个key
# 所有存储的key都通过Raft协议被复制到etcd集群的所有节点上,Raft协议保证了数据的一致性和可靠性。
[root@VM-12-8-opencloudos ~]# etcdctl put foo bar
OK

# 使用租约,租约需要提前创建
[root@VM-12-8-opencloudos ~]# etcdctl put foo1 bar1 --lease=1234abcd
OK
  • 读取一个key
如果当前集群包含的数据
foo = bar
foo1 = bar1
foo2 = bar2
foo3 = bar3

[root@VM-12-8-opencloudos ~]# etcdctl get foo
foo
bar
# 只打印value
[root@VM-12-8-opencloudos ~]# etcdctl get foo --print-value-only
bar
# 读取一个范围内的key,注意是左闭右开[foo,foo3)
[root@VM-12-8-opencloudos ~]# etcdctl get foo foo3
foo
bar
foo1
bar1
foo2
bar2

# 遍历所有foo为前缀的key
[root@VM-12-8-opencloudos ~]# etcdctl get --prefix foo
foo
bar
foo1
bar1
foo2
bar2
foo3
bar3

# 限制输出结果的数量
[root@VM-12-8-opencloudos ~]# etcdctl get --prefix --limit=2 foo
foo
bar
foo1
bar1
  • 读取老版本的key
    etcd支持客户端读取老版本的key,可以对数据进行回滚等操作。因为对etcd后端存储的每次修改都会增加etcd集群全局的版本号(revision),所以只需要提供指定的版本号就能读取相应版本的key
例如当前数据:
foo bar 			# revision=2
foo1 = bar1			# revision=3
foo = bar_new		# revision=4
foo1 = bar1_new		# revision=5

$ etcdctl get --prefix foo
foo
bar_new
foo1
bar_new1
$ etcdctl get --prefix --rev=4 foo
foo
bar_new
foo1
bar1
$ etcdctl get --prefix --rev=3 foo
foo
bar
foo1
bar1
$ etcdctl get --prefix --rev=2 foo
foo
bar
$ etcdctl get --prefix --rev=1 foo
  • 按key的字段序来读取
    当客户端希望读取大于或等于key的字节值时,可使用“–from-key”参数
例如当前集群:
a = 123
b = 456
c = 789
$ etcdctl get --from-key b
b
456
c
789
  • 删除key
    用户可以删除一个etcd集群中的一个key或一个范围内的key
假设集群内的值:
foo = bar
foo1 = bar1
foo2 = bar2
foo3 = bar3
zzz1 = 1
zzz2 = 2
zzz3 = 3
aaa = bbb
a = 123
b = 456
c = 789
# 删除一个key
[root@VM-12-8-opencloudos ~]# etcdctl del foo
1
# 删除一个范围的key
[root@VM-12-8-opencloudos ~]# etcdctl del foo1 foo9
3
# 删除某个key同时返回对应的value
[root@VM-12-8-opencloudos ~]# etcdctl del aaa --prev-kv
1
aaa
bbb
# 删除某个前缀的key
[root@VM-12-8-opencloudos ~]# etcdctl del --prefix zzz
3
# 删除字典序大于或等于某个字符的所有key
[root@VM-12-8-opencloudos ~]# etcdctl del --from-key b
2

key的历史与watch

etcd具备watch机制,当某个key发生变化时,客户端就能感知到变化,对应就是watch命令,除非该子命令捕获到退出信号量,否则会一直等待。

watch

如下,可以watch一个key:
在这里插入图片描述
可以watch一个范围的key:
在这里插入图片描述
可以watch某个字符串为前缀的key:
在这里插入图片描述
watch子命令还支持交互模式,使用-i选项可以watch多个key,可以手动输入
在这里插入图片描述
watch从指定版本开始

[root@VM-12-8-opencloudos ~]# etcdctl watch --rev=2 foo
PUT
foo
bar
DELETE
foo

PUT
foo
bar
PUT
foo
1

[root@VM-12-8-opencloudos ~]# etcdctl watch --prev-kv foo
PUT
foo # key
1 # value更新前
foo # key
1 # value更新后
PUT
foo  
1 # value更新前
foo
2 # value更新后

压缩

为了让客户端能够访问到key过去任意版本的value,etcd会一直保存key所有历史版本的value。然而,etcd所占的磁盘空间不能无限膨胀,因此需要为etcd配置压缩key版本号来释放磁盘空间,具体如下:

 # 压缩所有key版本号5之前的所有数据
[root@VM-12-8-opencloudos ~]# etcdctl compact 5
compacted revision 5
[root@VM-12-8-opencloudos ~]# etcdctl get --rev=4 foo
{"level":"warn","ts":"2023-06-18T11:05:23.679+0800","logger":"etcd-client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0000d4a80/127.0.0.1:2379","attempt":0,"error":"rpc error: code = OutOfRange desc = etcdserver: mvcc: required revision has been compacted"}
Error: etcdserver: mvcc: required revision has been compacted

在压缩key版本前,用户需要认真权衡,压缩后该版本之前所有key的value将都不可用。用户可以通过get一个key(无论是否存在)来获取当前etcd服务端版本号

 [root@VM-12-8-opencloudos ~]# etcdctl get mykeydemo -w=json
{"header":{"cluster_id":14841639068965178418,"member_id":10276657743932975437,"revision":208,"raft_term":2}
> 可见etcd的最新版本号是208

租约

租约是etcd v3 API的特性,客户端可以为key授予租约(lease)、当一个key绑定一个租约时,它的生命周期变会与该租约的TTL(time-to-live)保持一致。如果一个租约到期,则绑定的所有key都会被自动删除

[root@VM-12-8-opencloudos ~]# etcdctl lease grant 10
lease 694d8836e2ae5000 granted with TTL(10s)
[root@VM-12-8-opencloudos ~]# etcdctl put qwer bar --lease=694d8836e2ae5000
OK
[root@VM-12-8-opencloudos ~]# etcdctl get qwer
qwer
bar
[root@VM-12-8-opencloudos ~]# etcdctl get qwer
  • 撤销租约
$ etcdctl lease revoke 694d8836e2ae5000

$ etcdctl get foo
租约被撤销后,将会删除绑定在上面的所有key
  • 续租
# 客户端能通过刷新TTL的方式为租约维活,使它不过期
$ etcdctl lease keep-alive 694d8836e2ae5000

在这里插入图片描述
如上可见,每次续租都发生在该租约快过期时,且续租的TTL等于最初授予的值

  • 获取租约信息
# 创建租约
[root@VM-12-8-opencloudos ~]# etcdctl lease grant 500
lease 694d8836e2ae504e granted with TTL(500s)
# 查看租约的TTL以及剩余时间
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 694d8836e2ae504e
# 绑定租约
lease 694d8836e2ae504e granted with TTL(500s), remaining(469s)
[root@VM-12-8-opencloudos ~]# etcdctl put asdf a --lease=694d8836e2ae504e
OK
# 查看绑定此租约的keys
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 694d8836e2ae504e --keys
lease 694d8836e2ae504e granted with TTL(500s), remaining(405s), attached keys([asdf])

  • 租约过期查询
[root@VM-12-8-opencloudos ~]# etcdctl lease grant 10
lease 694d8836e2ae5070 granted with TTL(10s)
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 
Error: lease timetolive command needs lease ID as argument
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 694d8836e2ae5070
lease 694d8836e2ae5070 granted with TTL(10s), remaining(1s)
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 694d8836e2ae5070
lease 694d8836e2ae5070 granted with TTL(10s), remaining(0s)
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 694d8836e2ae5070
lease 694d8836e2ae5070 already expired
[root@VM-12-8-opencloudos ~]# etcdctl lease timetolive 694d8836e2ae5070
lease 694d8836e2ae5070 already expired

etcd常用配置参数

etcd可以通过命令行选项和环境变量配置启动参数,命令行与环境变量的关系,例如:–my-flag,则环境变量为ETCD_MY_FLAG,都是加了一个ETCD前缀。

member相关参数

参数含义默认值备注
–name标识该member对人友好的名字default
–data-dir数据目录的路径${name}.etcd
–wal-dirWAL 文件专用目录“”如果该值被设置,那么etcd就会被WAL文件写入该目录,而不是数据目录
–snapshot-count触发一次磁盘快照的提交事务的次数100000
–heartbeat-intervalLeader 心跳时间间隔100单位:ms
–election-timeout一次等待选举的超时时间1000单位:ms
–listen-peer-urls集群节点之间通信监听的 URLhttp://localhost:2380如果指定的 IP是 0.0.0.0,那么etcd 会监听所有网卡的指定端口
–listen-client-urls监听客户端请求的U]RLhttp://local-host:2379如果指定的IP是 0.0.0.0,那么etcd 会监听所有网卡的指定端口
–max-snapshotsetcd 保存的最大快照文件数50 代表无限制。Windows上无限制,但建议定期手动删除
–max-walsetcd 保存的 WAL 最大文件数50 代表无限制。Windows上无限制,但建议定期手动删除
–cors逗号分隔的跨城资源共享(CORS)白名单0 代表无限制。Windows上无限制,但建议定期手动删除

cluster相关参数

以–initial为前缀的选项用于一个member最初的启动过程和运行时,重启时则被忽略。以–discovery为前缀的选项用于服务发现。

参数含义默认值备注
–initial-advertise-peer-urls该member的peer URL。这些地址用于etcd数据在集群内进行交互http://localhost:2380至少一个,必需能够对集群中的所有member均可路由,可以是域名
–initial-cluster初始启动的集群配置default=http://localhost:2380key/value 形 式key指每个节点-“name”选项的值
–initial-cluster-state初始化集群状态new当静态启动或当DNS服务发现所有member都存在时设置成new。设置 成existing 时etcd 会尝试加人-个已经存在的集群
–initial-cluster-token初始化集群token
–discovery最初创建一个集群的服务发现 URL
–discovery-srv最初创建一个集群的服务发现DNSsrv域名
–discovery-fallback服务发现失败时的行为:proxy或exitproxyproxy只支持v2的API
–discovery -proxy服务发现使用的HTTP代理
–strict-reconfig-check拒绝所有会引起quorum丢失的重配置false
–auto-compaction-retentionMVCC键值存储不被自动压缩的时间0单位:h(小时),0意味着屏蔽自动压缩
–enable-v2接受v2的API请求true

proxy相关参数

以–proxy为前缀的选项配置etcd运行在proxy模式下,proxy模式只支持v2 API

参数含义默认值备注
–proxy设置proxy模式与否:off,readonly,onoff
–proxy-failure-wati当后端发生错误时proxy下次发送给它的等待时间5000单位:ms
–proxy-refresh-interval后端刷新时间间隔30000单位:ms
–proxy-dial-timeout与后端链接的超时时间1000单位:ms。0代表没有timeout
–proxy-write-timeout写后端的超时时间5000单位:ms。0代表没有timeout
–proxy-read-timeout读后端的超时时间0单位:ms。0代表没有timeout

安全相关参数

参数含义默认值备注
–ca-file客户端服务器TLS CA文件路径
–cert-file客户端服务器TLS 证书文件路径
–key-file客户端服务器TLS 秘钥文件路径
–client-cert-auth是否开启客户端证书认证false
–trusted-ca-file客户端服务器TLS授信CA文件路径
–auto-tls客户端TLS是否使用自动生成的证书false
–peer-cert-file服务器TLS证书文件路径
–peer-key-file服务器TLS key文件路径
–peer-client-cert-auth是否启用peer客户端证书认证false
–peer-trusted-ca-file服务端TLS受信CA文件路径
–peer-auto-tls是否使用自动生成的证书false

日志相关参数

参数含义默认值备注
–debug将etcd所有的子项目日志界别都调整为DEBUGfalse默认日志级别为INFO
–log-package-levels为etcd某个独立的子项目设置日志级别,默认所有的子项目的日志级别为INFO例如 etcdserver=WARNING,security=DEBUG

不安全相关参数

使用不安全选项会破坏一致性协议的保证,

参数含义默认值备注
–force-new-cluster强制创建只有一个节点的etcd集群false该选项会强制一处集群内所有现存的节点(包含自身),一般备份恢复配合使用

统计相关参数

etcd统计运行时性能分析和监控数据

参数含义默认值备注
–enable-pprof启用收集运行时profile数据,并通过HTTP服务对外暴露falseURL是client URL+/debug/pprof/
–metrics设置到处metric数据的详细程度basic

认证相关参数

参数含义默认值备注
–auth-token指定token的类型和选项,并通过HTTP服务器对外暴露格式:type,var1=va11,var2=val2
  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是在 CentOS 中部署 etcd 集群的步骤: 1. 下载 etcd 安装包 可以从 etcd 官网下载最新版的 etcd 安装包,下载地址为:https://github.com/etcd-io/etcd/releases 2. 解压安装包 将下载的 etcd 安装包解压到指定目录,比如 /usr/local/etcd ``` tar -zxvf etcd-v3.4.13-linux-amd64.tar.gz -C /usr/local/etcd --strip-components=1 ``` 3. 创建 etcd 配置文件 在每个节点上创建 etcd 配置文件,比如 /etc/etcd.conf,配置内容如下: ``` name=node1 # 节点名称,每个节点名称不同 data-dir=/var/lib/etcd # 数据存储目录 initial-cluster=node1=http://192.168.1.1:2380,node2=http://192.168.1.2:2380,node3=http://192.168.1.3:2380 # 集群中所有节点的地址和端口号 initial-advertise-peer-urls=http://192.168.1.1:2380 # 当前节点的地址和端口号 listen-peer-urls=http://192.168.1.1:2380 # 监听地址和端口号 listen-client-urls=http://192.168.1.1:2379,http://127.0.0.1:2379 # 监听客户端连接的地址和端口号,可以指定多个 advertise-client-urls=http://192.168.1.1:2379 # 当前节点对外提供服务的地址和端口号 initial-cluster-state=new # 集群状态,new 表示新建集群 ``` 其中,initial-cluster 中的节点名称和地址需要根据实际情况修改。 4. 启动 etcd 集群 在每个节点上启动 etcd 服务: ``` /usr/local/etcd/etcd --config-file /etc/etcd.conf ``` 5. 验证 etcd 集群 使用 etcdctl 工具验证 etcd 集群是否正常运行: ``` export ETCDCTL_API=3 etcdctl --endpoints=http://192.168.1.1:2379,http://192.168.1.2:2379,http://192.168.1.3:2379 member list ``` 如果返回了所有节点的信息,则说明 etcd 集群已经成功启动。 以上是在 CentOS 中部署 etcd 集群的步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值