您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

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

51自学网 2022-07-04 11:29:57
  网站维护

编写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.yml0 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 psCONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES89469f98491f   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   etcd35454f5a719a2   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   etcd1bf989f9512b5   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 lsDRIVER    VOLUME NAMElocal     etcdtest_etcd1_datalocal     etcdtest_etcd2_datalocal     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 bashI have no name!@5454f5a719a2:/opt/bitnami/etcd$ etcdctl put name "i am wxf"OK

从etcd2读一个value

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

搭建成功!

Golang 与 etcd 简单交互

package mainimport ( "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部署kafka的方法步骤
关于docker安装python3.8镜像的问题
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1