目录
- 编写docker-compose.yml
- 运行docker-compose
- 检查搭建状态
- 测试节点
- Golang 与 etcd 简单交互
编写docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 |
version: "3.0"
networks:
etcd-net: # 网络
driver: bridge # 桥接模式
volumes:
etcd1_data: # 挂载到本地的数据卷名
driver: local
etcd2_data:
driver: local
etcd3_data:
driver: local
###
### etcd 其他环境配置见:https://doczhcn.gitbook.io/etcd/index/index-1/configuration
###
services:
etcd1:
image: bitnami/etcd:latest # 镜像
container_name: etcd1 # 容器名 --name
restart: always # 总是重启
networks:
- etcd-net # 使用的网络 --network
ports: # 端口映射 -p
- "20000:2379"
- "20001:2380"
environment: # 环境变量 --env
- ALLOW_NONE_AUTHENTICATION=yes # 允许不用密码登录
- ETCD_NAME=etcd1 # etcd 的名字
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380 # 列出这个成员的伙伴 URL 以便通告给集群的其他成员
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 # 用于监听伙伴通讯的URL列表
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 # 用于监听客户端通讯的URL列表
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379 # 列出这个成员的客户端URL,通告给集群中的其他成员
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster # 在启动期间用于 etcd 集群的初始化集群记号
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 # 为启动初始化集群配置
- ETCD_INITIAL_CLUSTER_STATE=new # 初始化集群状态
volumes:
- etcd1_data:/bitnami/etcd # 挂载的数据卷
etcd2:
image: bitnami/etcd:latest
container_name: etcd2
restart: always
networks:
- etcd-net
ports:
- "20002:2379"
- "20003:2380"
environment:
- ALLOW_NONE_AUTHENTICATION=yes
- ETCD_NAME=etcd2
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
volumes:
- etcd2_data:/bitnami/etcd
etcd3:
image: bitnami/etcd:latest
container_name: etcd3
restart: always
networks:
- etcd-net
ports:
- "20004:2379"
- "20005:2380"
environment:
- ALLOW_NONE_AUTHENTICATION=yes
- ETCD_NAME=etcd3
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_INITIAL_CLUSTER_STATE=new
volumes:
- etcd3_data:/bitnami/etcd |
运行docker-compose
1
2
3
4
5
6
7
8
9
10
11
12 |
[root@centos8 etcdtest] # tree
.
└── docker-compose.yml
0 directories, 1 file
[root@centos8 etcdtest] # docker-compose up -d
[+] Running 4 /4
⠿ Network etcdtest_etcd-net Created 0.1s
⠿ Container etcd3 Started 0.6s
⠿ Container etcd1 Started 0.7s
⠿ Container etcd2 Started 0.7s
[root@centos8 etcdtest] # |
检查搭建状态
查看节点启动情况
1
2
3
4
5 |
[root@centos8 etcdtest] # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89469f98491f bitnami /etcd :latest "/opt/bitnami/script…" 54 seconds ago Up 53 seconds 0.0.0.0:20004->2379 /tcp , :::20004->2379 /tcp , 0.0.0.0:20005->2380 /tcp , :::20005->2380 /tcp etcd3
5454f5a719a2 bitnami /etcd :latest "/opt/bitnami/script…" 54 seconds ago Up 53 seconds 0.0.0.0:20000->2379 /tcp , :::20000->2379 /tcp , 0.0.0.0:20001->2380 /tcp , :::20001->2380 /tcp etcd1
bf989f9512b5 bitnami /etcd :latest "/opt/bitnami/script…" 54 seconds ago Up 53 seconds 0.0.0.0:20002->2379 /tcp , :::20002->2379 /tcp , 0.0.0.0:20003->2380 /tcp , :::20003->2380 /tcp etcd2 |
查看挂载的数据卷
1
2
3
4
5 |
[root@centos8 etcdtest] # docker volume ls
DRIVER VOLUME NAME
local etcdtest_etcd1_data
local etcdtest_etcd2_data
local etcdtest_etcd3_data |
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
[root@centos8 etcdtest] # docker inspect etcd1
"Mounts" : [
{
"Type" : "volume" ,
"Name" : "etcdtest_etcd1_data" ,
"Source" : "/var/lib/docker/volumes/etcdtest_etcd1_data/_data" ,
"Destination" : "/bitnami/etcd" ,
"Driver" : "local" ,
"Mode" : "z" ,
"RW" : true ,
"Propagation" : ""
}
] |
测试节点
从etcd1写一个key
1
2
3 |
[root@centos8 etcdtest] # docker exec -it etcd1 bash
I have no name!@5454f5a719a2: /opt/bitnami/etcd $ etcdctl put name "i am wxf"
OK |
从etcd2读一个value
1
2
3
4 |
[wxf@centos8 ~]$ docker exec -it etcd2 bash
I have no name!@bf989f9512b5: /opt/bitnami/etcd $ etcdctl get name
name
i am wxf |
搭建成功!
Golang 与 etcd 简单交互
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 |
package main
import (
"context"
"fmt"
"go.etcd.io/etcd/client/v3"
"time"
)
func main() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"http://192.168.135.10:20000", "http://192.168.135.10:20002", "http://192.168.135.10:20004"},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Printf("connect to etcd failed, err:%v\\n", err)
return
}
defer cli.Close()
fmt.Println("connect to etcd success")
defer cli.Close()
go Watch(cli)
Create(cli)
Read(cli)
Delete(cli)
Update(cli)
select {}
}
func Watch(cli *clientv3.Client) {
rch := cli.Watch(context.Background(), "name") // type WatchChan <-chan WatchResponse
for wresp := range rch {
for _, ev := range wresp.Events {
fmt.Printf("Type: %s Key:%s Value:%s\\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
}
}
fmt.Println("out")
}
func Create(cli *clientv3.Client) {
// put
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
_, err := cli.Put(ctx, "name", "wxf")
cancel()
if err != nil {
fmt.Printf("put to etcd failed, err:%v\\n", err)
return
}
}
func Read(cli *clientv3.Client) {
//get
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
resp, err := cli.Get(ctx, "name")
cancel()
if err != nil {
fmt.Printf("get from etcd failed, err:%v\\n", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("Type: %s Key:%s Value:%s\\n", "READ", ev.Key, ev.Value)
}
}
func Update(cli *clientv3.Client) {
// put
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
_, err := cli.Put(ctx, "name", "xyy")
cancel()
if err != nil {
fmt.Printf("put to etcd failed, err:%v\\n", err)
return
}
}
func Delete(cli *clientv3.Client) {
//del
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
_, err := cli.Delete(ctx, "name")
cancel()
if err != nil {
fmt.Printf("delete from etcd failed, err:%v\\n", err)
return
}
} |
go run main.go
connect to etcd success
Type: PUT Key:name Value:wxf
Type: READ Key:name Value:wxf
Type: DELETE Key:name Value:
Type: PUT Key:name Value:xyy
Type: PUT Key:name Value:test for terminal
Type: PUT Key:name Value:test for terminal aabbccdd
I have no name!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "test for terminal"
OK
I have no name!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "test for terminal aabbccdd"
OK
到此这篇关于docker-compose部署etcd集群的实现步骤的文章就介绍到这了,更多相关docker-compose部署etcd集群内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!
原文链接:https://blog.csdn.net/qq_42956653/article/details/120856499
相关文章
- 服务器虚拟化技术深度科普 2025-05-27
- 服务器租用价格怎么计算?服务器租用多少钱一年? 2025-05-27
- 云服务器的“弹性”体现在哪些方面? 2025-05-27
- 刀片服务器是什么 刀片服务器的主要特点 2025-05-27
- 利用FTP和计划任务自动备份网站数据和数据库 2025-05-27
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-27 25
-
vmware 12 安装 mac os 10.12正式版的教程
2025-05-27 70 -
2025-05-27 81
-
美国 FBI 联手多国摧毁 Qakbot,全球最臭名昭著的僵尸网络之一被消灭
2025-05-26 108 -
2025-05-27 20