golang etcd安装

本文详细介绍Etcd的安装步骤,包括Linux环境下的源码安装、二进制安装及使用Homebrew安装。此外,还提供了Etcd的常用操作指令,如查看版本、后台启动、添加与删除键值等。同时,文章也介绍了如何使用Etcd作为服务发现工具,并提供了多个实用案例。
1.Linux安装
curl -L https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz -o etcd-v3.3.2-linux-amd64.tar.gz
tar zxf etcd-v3.3.2-linux-amd64.tar.gz
etcd源码安装
git clone https://github.com/etcd-io/etcd.git
cd etcd
./build
cd bin
cp etcd etcdctl /usr/local/bin
#或者
brew install etcd
#启动etcd
etcd

2.查看版本

./etcd -version

3.后台启动

nohup ./etcd >/tmp/etcd.log 2>&1 &       // 日志文件输出到/tmp/etcd.log目录

3.1 设置环境变量

root@localhost etcd]# echo 'export ETCDCTL_API=3' >> /etc/profile ## 环境变量添加 ETCDCTL_API=3
[root@localhost etcd]# source /etc/profile # 是profile中修改的文件生效
[root@localhost etcd]# ./etcdctl get mykey # 可以直接使用./etcdctl get key 命令了
mykey
this is awesome # 刚添加的内容

4.添加key

./etcdctl put mykey "this is awesome"

5.其他操作

./etcdctl –version   –api版本
./etcdctl ls -p /   –列出目录下所有目录或节点,-p参数会自动用/标识出节点还是目录
./etcdctl set /p1/p2/v1 hello  –创建一个节点,并给他一个value
./etcdctl get /p1/p2/v1   –获取一个节点的value

# 删除某个 key
➜  ./etcdctl mk /foo bar
bar
➜  ./etcdctl rm /foo
PrevNode.Value: bar
➜  ./etcdctl get /foo
Error:  100: Key not found (/foo) [1062]

# 只有当 key 的值匹配的时候,才进行删除
➜  ./etcdctl mk /foo bar
bar
➜  ./etcdctl rm --with-value wrong /foo
Error:  101: Compare failed ([wrong != bar]) [1063]
➜  ./etcdctl rm --with-value bar /foo

# 创建一个目录
➜  ./etcdctl mkdir /dir

# 删除空目录
➜  ./etcdctl mkdir /dir/subdir/
➜  ./etcdctl rmdir /dir/subdir/

# 删除非空目录
➜  ./etcdctl rmdir /dir
Error:  108: Directory not empty (/dir) [1071]
➜  ./etcdctl rm --recursive /dir

# 列出目录的内容
➜  ./etcdctl ls /
/queue
/anotherdir
/message

# 递归列出目录的内容
➜  ./etcdctl ls --recursive /
/anotherdir
/message
/queue
/queue/00000000000000001053
/queue/00000000000000001054

# 监听某个 key,当 key 改变的时候会打印出变化
➜  ./etcdctl watch /message
changed

# 监听某个目录,当目录中任何 node 改变的时候,都会打印出来
➜  ./etcdctl watch --recursive /
[set] /message
changed

# 一直监听,除非 `CTL + C` 导致退出监听
➜  ./etcdctl watch --forever /message
new value
chaned again
Wola

# 监听目录,并在发生变化的时候执行一个命令
➜  ./etcdctl exec-watch --recursive / -- sh -c "echo change detected."
change detected.

简单:易于部署,易使用。基于 HTTP+JSON 的 API 让你用 curl 就可以轻松使用。
安全:可选 SSL 客户认证机制。
快速:每个实例每秒支持一千次写操作。
可信:使用一致性 Raft 算法充分实现了分布式。

6.使用etcd作为服务发现

# 启动 srv 注册到etcd
cd user/srv
./user-srv --registry etcd

#启动 api 注册到etcd
cd /user/api
./user-api --registry etcd


#启动 micro-api api网关,注册到etcd
cd micro-examples/
micro --registry etcd api  --namespace=io.github.entere.api --handler=api


#查看服务是否正常启动
micro --registry etcd list services

#获取指定名的服务
micro --registry etcd get service io.github.entere.srv.user
micro --registry etcd get service io.github.entere.api.user

#测试

curl -H "Content-Type:application/x-www-form-urlencoded" -X POST -d "user_id=f546e78a46284765" http://localhost:8080/user/info

etcdctl --debug member list

etcdctl --debug --endpoints http://127.0.0.1:2379 ls

etcdctl cluster-health
7.etcdkeeper安装
docker run -it -d --name etcdkeeper \
-p 8080:8080 \
deltaprojects/etcdkeeper

访问http://IP:8080/etcdkeeper/

// etcdkeeper二进制下载
https://github.com/evildecay/etcdkeeper/releases

./etcdkeeper -p 12349  //启动etcd
//浏览器查看:
http://127.0.0.1:12379/etcdkeeper/
8.etcd-browser安装
docker run --rm  -d --name etcd-browser \
-p 8000:8000 \
--env ETCD_HOST=IP \
--env ETCD_PORT=2379 \
buddho/etcd-browser

运行后访问http://IP:8000/

9.实践案例

// 设置 etcdctl的API版本
export ETCDCTL_API=3

//  查询所有注册的微服务
etcdctl --endpoints=127.0.0.1:2379 get / --prefix --keys-only

// 查看前缀为xx到key
etcdctl --endpoints=$ENDPOINTS get xxx  --prefix

// 查询对应的值
etcdctl --write-out="json" get /micro/registry/xxx | python -m json.tool

// 证书的访问
ETCDCTL_API=3 etcdctl --endpoints=$ENDPOINTS --cacert=<ca-file> --cert=<cert-file> --key=<key-file>  <command>

backup[备份 etcd 的数据]
etcdctl backup

watch[监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出]
etcdctl watch key

exec-watch[监测一个键值的变化,一旦键值发生更新,就执行给定命令]
etcdctl exec-watch key --sh -c "ls"

member[通过 list、add、remove、update 命令列出、添加、删除 、更新etcd 实例到 etcd 集群中]
etcdctl member list;etcdctl member add 实例;etcdctl member remove 实例;etcdctl member update 实例。

etcdctl cluster-health[检查集群健康状态]


https://www.huweihuang.com/kubernetes-notes/etcd/etcdctl-v2.html

相关链接

https://www.jianshu.com/p/2966b6ef5d10https://juejin.im/post/5dabc50ef265da5b591b761a

### 使用 GoLangEtcd 的基本概念 GoLang 是一种高效的编程语言,广泛用于构建分布式系统和微服务架构。Etcd 是一个分布式的键值存储工具,通常被用来保存配置数据、元数据以及实现分布式锁等功能。两者结合可以很好地支持现代云原生应用的需求。 以下是关于如何在 Go 中使用 Etcd 的一些核心知识点: #### 安装依赖库 要开始使用 Etcd,在项目中需要引入官方的客户端库 `go.etcd.io/etcd/clientv3`。可以通过以下命令安装该库: ```bash go get go.etcd.io/etcd/clientv3 ``` 此操作会下载并安装必要的包来连接到 Etcd 集群[^1]。 #### 连接到 Etcd 实例 下面是一个简单的代码片段展示如何创建与 Etcd 的连接,并执行基础的操作(如写入和读取键值对): ```go package main import ( "context" "fmt" "log" clientv3 "go.etcd.io/etcd/client/v3" ) func main() { cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{"localhost:2379"}, // 替换为实际的 Etcd 地址 DialTimeout: 5 * time.Second, }) if err != nil { log.Fatalf("无法连接至 Etcd:%v", err) } defer cli.Close() ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) _, err = cli.Put(ctx, "key1", "value1") // 设置 key-value 对 cancel() if err != nil { log.Fatal(err) } fmt.Println("成功设置键值对") getResp, err := cli.Get(context.TODO(), "key1") // 获取指定 Key 值 if err != nil { log.Fatal(err) } for _, ev := range getResp.Kvs { fmt.Printf("%s : %s\n", ev.Key, ev.Value) // 打印获取的结果 } } ``` 上述程序展示了如何向 Etcd 存储数据并通过其检索出来[^4]。 #### 最佳实践建议 当开发涉及 Etcd 的应用程序时,应考虑采用某些最佳实践以提高性能和可靠性。例如,合理管理上下文超时时间能够防止长时间阻塞调用;利用事务机制保障一致性等[^2]。 #### 处理复杂场景下的 Pub/Sub 模型 如果希望基于 Etcd 构建发布订阅模式,则可借助 Watch API 来监听特定路径的变化情况。如下所示即为一段简单演示代码: ```go rChan := cli.Watch(context.Background(), "/some/path/") for wresp := range rChan { for _, evt := range wresp.Events { fmt.Printf("Type: %s Key:%q OldValue:%q NewValue:%q\n", evt.Type, string(evt.Kv.Key), string(evt.PrevKv.Value), string(evt.Kv.Value)) } } ``` 这里我们监视某个目录下发生的所有事件,并打印相关信息[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值