etcdローカル手動テストクラスタおよびmember操作

34805 ワード

クラスタ構築


次は同じサーバのみで3つのメンバーノードのオープンを行います.
ノード1
./etcd --name cd0 --initial-advertise-peer-urls http://127.0.0.1:2380 --listen-peer-urls http://127.0.0.1:2380 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster cd0=http://127.0.0.1:2380,cd1=http://127.0.0.1:2480,cd2=http://127.0.0.1:2580 --initial-cluster-state new

ノード2
./etcd --name cd1 --initial-advertise-peer-urls http://127.0.0.1:2480 --listen-peer-urls http://127.0.0.1:2480 --listen-client-urls http://127.0.0.1:2479 --advertise-client-urls http://127.0.0.1:2479 --initial-cluster-token etcd-cluster-1 --initial-cluster cd0=http://127.0.0.1:2380,cd1=http://127.0.0.1:2480,cd2=http://127.0.0.1:2580 --initial-cluster-state new

ノード3
./etcd --name cd2 --initial-advertise-peer-urls http://127.0.0.1:2580 --listen-peer-urls http://127.0.0.1:2580 --listen-client-urls http://127.0.0.1:2579 --advertise-client-urls http://127.0.0.1:2579 --initial-cluster-token etcd-cluster-1 --initial-cluster cd0=http://127.0.0.1:2380,cd1=http://127.0.0.1:2480,cd2=http://127.0.0.1:2580 --initial-cluster-state new

クエリーメンバーリスト

export ETCDCTL_API=3
ENDPOINTS=127.0.0.1:2379,127.0.0.1:2479,127.0.0.1:2579

./etcdctl --endpoints=$ENDPOINTS member list

実行結果:
98f0c6bf64240842, started, cd2, http://127.0.0.1:2580, http://127.0.0.1:2579
bf9071f4639c75cc, started, cd0, http://127.0.0.1:2380, http://127.0.0.1:2379
e3ba87c3b4858ef1, started, cd1, http://127.0.0.1:2480, http://127.0.0.1:2479

メンバーノードの追加


member add追加ノード
./etcdctl --endpoints=$ENDPOINTS member add cd3 --peer-urls=http://127.0.0.1:2180
Member b9057cfdc8ff17ce added to cluster 9da8cd75487bd6dc

実行結果:
ETCD_NAME="cd3"
ETCD_INITIAL_CLUSTER="cd2=http://127.0.0.1:2580,cd3=http://127.0.0.1:2180,cd0=http://127.0.0.1:2380,cd1=http://127.0.0.1:2480"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://127.0.0.1:2180"
ETCD_INITIAL_CLUSTER_STATE="existing"

メンバーノードリスト情報のクエリー
./etcdctl --endpoints=$ENDPOINTS member list

実行結果:
98f0c6bf64240842, started, cd2, http://127.0.0.1:2580, http://127.0.0.1:2579
b9057cfdc8ff17ce, unstarted, , http://127.0.0.1:2180, 
bf9071f4639c75cc, started, cd0, http://127.0.0.1:2380, http://127.0.0.1:2379
e3ba87c3b4858ef1, started, cd1, http://127.0.0.1:2480, http://127.0.0.1:2479

クエリの結果、http://127.0.0.1:2180のステータスがunstartedであることがわかります.
新しいノードの起動
./etcd --name cd3 --listen-client-urls http://127.0.0.1:2179 --advertise-client-urls http://127.0.0.1:2179 --listen-peer-urls http://127.0.0.1:2180 --initial-advertise-peer-urls http://127.0.0.1:2180 --initial-cluster-state existing --initial-cluster cd2=http://127.0.0.1:2580,cd0=http://127.0.0.1:2380,cd3=http://127.0.0.1:2180,cd1=http://127.0.0.1:2480 --initial-cluster-token etcd-cluster-1

メンバーノードリスト情報のクエリー
./etcdctl --endpoints=$ENDPOINTS member list

実行結果:
98f0c6bf64240842, started, cd2, http://127.0.0.1:2580, http://127.0.0.1:2579
b9057cfdc8ff17ce, started, cd3, http://127.0.0.1:2180, http://127.0.0.1:2179
bf9071f4639c75cc, started, cd0, http://127.0.0.1:2380, http://127.0.0.1:2379
e3ba87c3b4858ef1, started, cd1, http://127.0.0.1:2480, http://127.0.0.1:2479

メンバーの削除

./etcdctl --endpoints=$ENDPOINTS member remove b9057cfdc8ff17ce

実行結果:
Member b9057cfdc8ff17ce removed from cluster 9da8cd75487bd6dc

メンバーノードリスト情報のクエリー
./etcdctl --endpoints=$ENDPOINTS member list

実行結果:
98f0c6bf64240842, started, cd2, http://127.0.0.1:2580, http://127.0.0.1:2579
bf9071f4639c75cc, started, cd0, http://127.0.0.1:2380, http://127.0.0.1:2379
e3ba87c3b4858ef1, started, cd1, http://127.0.0.1:2480, http://127.0.0.1:2479

コードはmemberの管理を実現する


ノードの追加

func addMember(cli *clientv3.Client)  {
    peerURLs := []string{"http://127.0.0.1:2180"}

    mresp, err := cli.MemberAdd(context.Background(), peerURLs)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("added member.PeerURLs:", mresp.Member.PeerURLs)
    resp, err := cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("  members:", resp.Members)
}

ノードの追加を実行するには、ターミナル起動ノードサーバを開く必要があります.
./etcd --name cd3 --listen-client-urls http://127.0.0.1:2179 --advertise-client-urls http://127.0.0.1:2179 --listen-peer-urls http://127.0.0.1:2180 --initial-advertise-peer-urls http://127.0.0.1:2180 --initial-cluster-state existing --initial-cluster cd2=http://127.0.0.1:2580,cd0=http://127.0.0.1:2380,cd3=http://127.0.0.1:2180,cd1=http://127.0.0.1:2480 --initial-cluster-token etcd-cluster-1

起動に失敗した場合は、cd 3の情報を削除する必要があります.

ノードの削除

//  
func delMember (cli *clientv3.Client, memberId uint64) {

    resp, err := cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }

    _, err = cli.MemberRemove(context.Background(), memberId)
    if err != nil {
        log.Fatal(err)
    }

    resp, err = cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("  members:", resp.Members)
}

すべてのコード

package main

import (
    "github.com/coreos/etcd/clientv3"
    "log"
    "fmt"
    "context"
    "time"
)
var (
    dialTimeout    = 5 * time.Second
    requestTimeout = 2 * time.Second
    endpoints      = []string{"127.0.0.1:2379"}
)
func main()  {

    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   endpoints,
        DialTimeout: dialTimeout,
    })
    if err != nil {
        log.Fatal(err)
    }
    defer cli.Close()

    resp, err := cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("members:", resp.Members)


    // member
    //addMember(cli)


    //  
    //delMember(cli,uint64(7438291228984697304))

}

func addMember(cli *clientv3.Client)  {
    peerURLs := []string{"http://127.0.0.1:2180"}

    mresp, err := cli.MemberAdd(context.Background(), peerURLs)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("added member.PeerURLs:", mresp.Member.PeerURLs)
    resp, err := cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("  members:", resp.Members)
}

//  
func delMember (cli *clientv3.Client, memberId uint64) {

    resp, err := cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }

    _, err = cli.MemberRemove(context.Background(), memberId)
    if err != nil {
        log.Fatal(err)
    }

    resp, err = cli.MemberList(context.Background())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("  members:", resp.Members)
}