Etcd常用命令
存储键值对:
etcdctl --endpoints=http://localhost:2379 put mykey "myvalue"
读取键值对:
etcdctl --endpoints=http://localhost:2379 get mykey
列出所有键值对:
etcdctl --endpoints=http://localhost:2379 get --prefix ""
删除键值对:
etcdctl --endpoints=http://localhost:2379 del mykey
查看 etcd 集群状态:
etcdctl --endpoints=http://localhost:2379 endpoint status
备份 etcd 数据:
etcdctl --endpoints=http://localhost:2379 snapshot save backup.db
恢复 etcd 数据:
etcdctl snapshot restore backup.db --data-dir /path/to/etcd/data-dir
etcd可视化客户端-etcd-workbench
客户端下载地址:https://github.com/tzfun/etcd-workbench/
使用etcd-workbench客户端,可以方便快捷的浏览etcd中存储的数据,也可以对json数据进行格式化查看,很方便
etcd配置用户名密码认证
在使用etcd时候,为了保证数据安全,对连接要进行身份认证,首先添加权限
接着就创建root用户以及设置密码
这样,无论是在代码还是图形化客户端中都可以通过账号密码登录连接到etcd服务了,对etcd中存储的数据进行查询或其他操作
golang连接到etcd
这里需要注意的是etcd/client的版本一定要注意,低版本clientv3.Config中可能没有Username和Password属性
go.etcd.io/etcd/client/v3 v3.5.16
import (
"context"
"fmt"
"time"
clientv3 "go.etcd.io/etcd/client/v3"
)
/* 创建etcd连接 */
func InitEtcd() error {
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"192.168.31.103"},
DialTimeout: 5 * time.Second,
Username: "root",
Password: "12345678",
})
if err != nil {
fmt.Printf("connect to etcd failed, err:%v\n", err)
return err
}
cli.Close()
fmt.Println("connect to etcd success")
return nil
}
注意事项
etcd是一个高性能的键值对数据库,它比关系数据库响应更快,但有一些特定的使用注意事项:
不适合频繁写操作:etcd的设计初衷并不是为了处理大量的写操作。因此,在频繁的写场景下,etcd可能不是最佳缓存服务。因为每次的修改和删除都会产生一个历史版本,在不做控制的情况下,可能导致内存占用极高甚至OOM。如果应用程序需要频繁地写数据,可能需要考虑使用其他更适合的缓存系统。
不适合作为缓存:尽管etcd的响应速度相对较快,但它并不是为缓存而设计的。缓存通常需要在内存中快速存取数据,而etcd则更注重数据的持久性和一致性。因此,将etcd用作缓存可能会导致性能问题,并且不是最佳实践。
数据快照与持久化:etcd的一个重要特性是支持数据快照和持久化。这意味着etcd可以将数据定期保存到磁盘上,以便在需要时进行恢复。这对于确保数据的安全性和可靠性至关重要。
监听功能:etcd提供了强大的监听功能,允许客户端订阅键或前缀的变化,并在数据发生变化时接收通知。这使得etcd非常适合用于分布式系统中的事件通知和状态同步。
etcd是一个高性能的键值对数据库,适用于需要数据持久化和一致性保证的场景。然而,在使用etcd时,需要注意避免频繁的写操作和将其用作缓存。同时,可以利用etcd的数据快照和监听功能来提高系统的可靠性和响应速度。
其他
要想弄明白etcd,掌握这些基础知识还远远不够,仅是皮毛而已,甚至需要往更深层次研究,以及底层原理,才能让etcd为你所用