小知识:docker-compose部署etcd集群的实现步骤

目录 编写dockercompose.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集群内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_42956653/article/details/120856499

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:关于docker安装python3.8镜像的问题

2023-3-14 23:28:24

建站知识

小知识:docker部署kafka的方法步骤

2023-3-14 23:43:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索