docker-compose部署etcd集群的实现步骤_docker

本文主要介绍了docker-compose部署etcd集群的实现步骤,文中通过示例代码介绍的非常详细

docker-compose部署etcd集群的实现步骤_docker

本文主要介绍了docker-compose部署etcd集群的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

目录

编写docker-compose.yml运行docker-compose检查搭建状态测试节点Golang 与 etcd 简单交互

编写docker-compose.yml

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

[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]#

检查搭建状态

查看节点启动情况

[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

查看挂载的数据卷

[root@centos8 etcdtest]# docker volume ls
DRIVER VOLUME NAME
local etcdtest_etcd1_data
local etcdtest_etcd2_data
local etcdtest_etcd3_data

[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

[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

[wxf@centos8 ~]$ docker exec -it etcd2 bash
I have no name!@bf989f9512b5:/opt/bitnami/etcd$ etcdctl get name
name
i am wxf

搭建成功!

Golang 与 etcd 简单交互

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集群内容请搜索3399IT网以前的文章或继续浏览下面的相关文章希望大家以后多多支持3399IT网!

本文为网络共享文章,如有侵权请联系邮箱485837881@qq.com

作者: cheems~

为您推荐

返回顶部