本文共 7240 字,大约阅读时间需要 24 分钟。
1 2 3 4 5 6 7 | node1 192.168.56.173 node2 192.168.56.174 node3 192.168.56.200 node* 为主机名称 [root@node1 ~] # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@node1 ~] # |
1 2 3 4 5 | https: //github .com /coreos/etcd/releases/download/v3 .0.15 /etcd-v3 .0.15-linux-amd64. tar .gz tar xf etcd-v3.0.15-linux-amd64. tar .gz cd etcd-v3.0.15-linux-amd64 cp etcd /usr/bin/ cp etcdctl /usr/bin/ |
192.168.56.173(node1)
cat /etc/systemd/system/etcd2.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [Unit] Description=etcd2.service [Service] Type=notify TimeoutStartSec=0 Restart=always ExecStartPre=- /usr/bin/mkdir -p /data/etcd2 ExecStart= /usr/bin/etcd \ --data- dir /data/etcd2 \ --name etcd0 \ --advertise-client-urls http: //192 .168.56.173:2379,http: //192 .168.56.173:4001 \ --listen-client-urls http: //0 .0.0.0:2379,http: //0 .0.0.0:4001 \ --initial-advertise-peer-urls http: //192 .168.56.173:2380 \ --listen-peer-urls http: //0 .0.0.0:2380 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster etcd0=http: //192 .168.56.173:2380,etcd1=http: //192 .168.56.174:2380,etcd2=http: //192 .168.56.200:2380 [Install] WantedBy=multi-user.target |
1 2 3 4 | # 设置服务自启动 systemctl enable /etc/systemd/system/etcd2 .service # 启动etcd1 (先不要做 三个节点都部署完毕 在分别启动 否则启动会hang) systemctl restart etcd2.service |
192.168.56.174(node2)
[root@node2 ~]# cat /etc/systemd/system/etcd2.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [Unit] Description=etcd2.service [Service] Type=notify TimeoutStartSec=0 Restart=always ExecStartPre=- /usr/bin/mkdir -p /data/etcd2 ExecStart= /usr/bin/etcd \ --data- dir /data/etcd2 \ --name etcd1 \ --advertise-client-urls http: //192 .168.56.174:2379,http: //192 .168.56.174:4001 \ --listen-client-urls http: //0 .0.0.0:2379,http: //0 .0.0.0:4001 \ --initial-advertise-peer-urls http: //192 .168.56.174:2380 \ --listen-peer-urls http: //0 .0.0.0:2380 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster etcd0=http: //192 .168.56.173:2380,etcd1=http: //192 .168.56.174:2380,etcd2=http: //192 .168.56.200:2380 [Install] WantedBy=multi-user.target |
1 2 3 4 | # 设置服务自启动 systemctl enable /etc/systemd/system/etcd2 .service # 启动etcd2 (先不要做 三个节点都部署完毕 在分别启动 否则启动会hang) systemctl restart etcd2.service |
192.168.56.200(node2)
[root@node3~]# cat /etc/systemd/system/etcd2.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@node3 ~] # cat /etc/systemd/system/etcd2.service [Unit] Description=etcd2.service [Service] Type=notify TimeoutStartSec=0 Restart=always ExecStartPre=- /usr/bin/mkdir -p /data/etcd2 ExecStart= /usr/bin/etcd \ --data- dir /data/etcd2 \ --name etcd2 \ --advertise-client-urls http: //192 .168.56.200:2379,http: //192 .168.56.200:4001 \ --listen-client-urls http: //0 .0.0.0:2379,http: //0 .0.0.0:4001 \ --initial-advertise-peer-urls http: //192 .168.56.200:2380 \ --listen-peer-urls http: //0 .0.0.0:2380 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster etcd0=http: //192 .168.56.173:2380,etcd1=http: //192 .168.56.174:2380,etcd2=http: //192 .168.56.200:2380 [Install] WantedBy=multi-user.target |
1 2 3 4 | # 设置服务自启动 systemctl enable /etc/systemd/system/etcd2 .service # 启动etcd3 (先不要做 三个节点都部署完毕 在分别启动 否则启动会hang) systemctl restart etcd2.service |
备注:启动的方式一个一个启动 否则systemctl restart etcd2.service 会hang住
查看状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@node3 ~] # systemctl status etcd2.service ● etcd2.service Loaded: loaded ( /etc/systemd/system/etcd2 .service; enabled; vendor preset: disabled) Active: active (running) since Sat 2017-09-02 23:43:59 CST; 10min ago Process: 2673 ExecStartPre= /usr/bin/mkdir -p /data/etcd2 (code=exited, status=0 /SUCCESS ) Main PID: 2675 (etcd) CGroup: /system .slice /etcd2 .service └─2675 /usr/bin/etcd --data- dir /data/etcd2 --name etcd2 --advertise-client-urls http: //192 .168.56.200:2379,http: //192 .168.56.200:4001 --listen-client-urls http: //0 .0.0.0:2379,http: //0 .0.0.0:4001... Sep 02 23:44:45 node3 etcd[2675]: established a TCP streaming connection with peer e37f661be0f0e44a (stream Message reader) Sep 02 23:44:45 node3 etcd[2675]: established a TCP streaming connection with peer 161efc88633d5fd4 (stream MsgApp v2 reader) Sep 02 23:44:45 node3 etcd[2675]: established a TCP streaming connection with peer 161efc88633d5fd4 (stream Message reader) Sep 02 23:44:45 node3 etcd[2675]: closed an existing TCP streaming connection with peer 161efc88633d5fd4 (stream Message writer) Sep 02 23:44:45 node3 etcd[2675]: established a TCP streaming connection with peer 161efc88633d5fd4 (stream Message writer) Sep 02 23:44:46 node3 etcd[2675]: 52aafe548d51c9ea [term: 25] received a MsgVote message with higher term from e37f661be0f0e44a [term: 26] Sep 02 23:44:46 node3 etcd[2675]: 52aafe548d51c9ea became follower at term 26 Sep 02 23:44:46 node3 etcd[2675]: 52aafe548d51c9ea [logterm: 20, index: 623, vote: 0] voted for e37f661be0f0e44a [logterm: 20, index: 623] at term 26 Sep 02 23:44:46 node3 etcd[2675]: 52aafe548d51c9ea [term: 26] ignored a MsgVote message with lower term from 161efc88633d5fd4 [term: 24] Sep 02 23:44:46 node3 etcd[2675]: raft.node: 52aafe548d51c9ea elected leader e37f661be0f0e44a at term 26 [root@node3 ~] # |
1 2 3 4 5 6 7 8 9 10 11 | [root@node3 ~] # netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 869 /sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1132 /master tcp6 0 0 :::2379 :::* LISTEN 2675 /etcd tcp6 0 0 :::2380 :::* LISTEN 2675 /etcd tcp6 0 0 :::22 :::* LISTEN 869 /sshd tcp6 0 0 ::1:25 :::* LISTEN 1132 /master tcp6 0 0 :::4001 :::* LISTEN 2675 /etcd [root@node3 ~] # |
查看相关主体的状态
1 2 3 4 5 | [root@node1 etcd-v3.0.15-linux-amd64] # etcdctl member list 161efc88633d5fd4: name=etcd0 peerURLs=http: //192 .168.56.173:2380 clientURLs=http: //192 .168.56.173:2379,http: //192 .168.56.173:4001 isLeader= false 52aafe548d51c9ea: name=etcd2 peerURLs=http: //192 .168.56.200:2380 clientURLs=http: //192 .168.56.200:2379,http: //192 .168.56.200:4001 isLeader= false e37f661be0f0e44a: name=etcd1 peerURLs=http: //192 .168.56.174:2380 clientURLs=http: //192 .168.56.174:2379,http: //192 .168.56.174:4001 isLeader= true [root@node1 etcd-v3.0.15-linux-amd64] # |
集群的状态监控(可以结合zabbix做监控)
1 2 3 4 5 6 | [root@node1 etcd-v3.0.15-linux-amd64] # etcdctl cluster-health member 161efc88633d5fd4 is healthy: got healthy result from http: //192 .168.56.173:2379 member 52aafe548d51c9ea is healthy: got healthy result from http: //192 .168.56.200:2379 member e37f661be0f0e44a is healthy: got healthy result from http: //192 .168.56.174:2379 cluster is healthy [root@node1 etcd-v3.0.15-linux-amd64] # |
etcd基本操作
1 2 3 4 5 6 7 8 9 | [root@node1 ~] # etcdctl set testkey "hello world" hello world [root@node1 ~] # etcdctl get testkey hello world [root@node1 ~] # curl -L http://localhost:2379/v2/keys/testkey { "action" : "get" , "node" :{ "key" : "/testkey" , "value" : "hello world" , "modifiedIndex" :11, "createdIndex" :11}} [root@node1 ~] # curl -L http://192.168.56.173:2379/v2/keys/testkey { "action" : "get" , "node" :{ "key" : "/testkey" , "value" : "hello world" , "modifiedIndex" :11, "createdIndex" :11}} [root@node1 ~] # |