阿里云ECS Ubuntu18 部署单节点etcd方法
阿里云ECS Ubuntu18 部署单节点etcd方法
安装
安装etcd
有两种方法安装,第一种使用apt,第二种从github下载编译好的二进制文件,我使用的是第二种。
我下的是3.3的最后一个版本。
mv /tmp/etcd-download-test/etcd /usr/local/bin/
mv /tmp/etcd-download-test/etcdctl /usr/local/bin/
# 编辑/etc/profile 设置API版本为3
export ETCDCTL_API=3
测试etcd
# 默认方式启动
etcd
etcdctl put mykey "this is awesome"
etcdctl get mykey
编辑配置文件
/etc/etcd/etcd.conf
因为云公有IP是动态绑定的,ifconfig不可能查到ECS的公网IP
name: "sigle"
data-dir: "/home/data/etcd"
# 172.17.35.123是阿里云ECS的内网IP
listen-client-urls: "http://172.17.35.123:2379"
advertise-client-urls: "http://172.17.35.123:2379"
后台运行
nohup etcd --config-file=/etc/etcd/etcd.conf >/tmp/etcd.log 2>&1 &
测试Go版本的Client
大坑
安装好Go后,创建一个go module项目,注意这里有个坑,依赖的gRPC版本不能使用默认,要改为:
google.golang.org/grpc v1.26.0 // indirect
详细看
[]: https://www.cnblogs.com/roastpiglet/p/13045039.html
get.go
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/clientv3"
"log"
"time"
)
const requestTimeout = time.Second * 5
const pIP = "X.X.X.X:2379"
func GetClient() *clientv3.Client {
cli, err := clientv3.New(clientv3.Config{
// 如果是ECS内部访问,使用内网IP
//Endpoints: []string{"172.17.35.123:2379"},
// 如果外部访问,使用公网IP
Endpoints: []string{pIP},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Println("connet fail.")
return nil
} else {
fmt.Println("connet success.")
return cli
}
}
func KvGet() {
cli := GetClient()
if cli == nil {
fmt.Println("cli == nil")
}
defer cli.Close()
_, err := cli.Put(context.TODO(), "foo", "bar")
if err != nil {
log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
resp, err := cli.Get(ctx, "foo")
cancel()
if err != nil {
log.Fatal(err)
}
for _, ev := range resp.Kvs {
fmt.Printf("%s : %s\n", ev.Key, ev.Value)
}
}
func main() {
KvGet()
}
参考链接
https://github.com/etcd-io/etcd/blob/master/clientv3/example_kv_test.go
https://github.com/etcd-io/etcd/tree/master/clientv3
https://github.com/etcd-io/etcd
https://www.cnblogs.com/roastpiglet/p/13045039.html