etcd单机部署单、多实例

一、单实例etcd

1、启动etcd服务

首先下载对应的etcd,然后进行解压:

[root@localhost software]# tar -xzvf etcd-v3.3.10-linux-amd64.tar.gz -C /project/opt/

查看etcd server版本:

[root@localhost etcd-v3.3.10-linux-amd64]# ./etcd --version
etcd Version: 3.3.10
Git SHA: 27fc7e2
Go Version: go1.10.4
Go OS/Arch: linux/amd64

启动etcd服务:

[root@localhost etcd-v3.3.10-linux-amd64]# ./etcd
2021-02-11 20:02:00.850358 I | etcdmain: etcd Version: 3.3.10
2021-02-11 20:02:00.850419 I | etcdmain: Git SHA: 27fc7e2
...
2021-02-11 20:02:02.176710 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!

可以看到etcd默认启动在2379端口上。

2、客户端测试

重新开一个终端,进行客户端测试。

  •  写入键值对
# 通过put添加{foo:bar}键值对
[root@localhost etcd-v3.3.10-linux-amd64]# ETCDCTL_API=3 ./etcdctl --endpoints=localhost:2379 put foo bar
OK
  • 读取键值
# 通过get读取键值
[root@localhost etcd-v3.3.10-linux-amd64]# ETCDCTL_API=3 ./etcdctl --endpoints=localhost:2379 get foo 
foo
bar

二、多实例etcd

1、配置与启动

如何单机启动多实例etcd,etcd server默认使用2380监听集群中其它server的请求,但是如果启动多个实例就需要监听不同的端口。如果单价创建三个实例,其目录如下:

# etcd_cluster目录如下结构
[root@localhost etcd_cluster]# tree
.
├── etcd1
│   ├── conf.yml
│   └── data
├── etcd2
│   ├── conf.yml
│   └── data
└── etcd3
    ├── conf.yml
    └── data

6 directories, 3 files

然后为三个实例各自创建三个配置文件:

  • etcd1配置文件conf.yml
name: etcd1
data-dir: /project/opt/etcd_cluster/etcd1/data
listen-client-urls: http://127.0.0.1:12379
advertise-client-urls: http://127.0.0.1:12379
listen-peer-urls: http://127.0.0.1:12380
initial-advertise-peer-urls: http://127.0.0.1:12380
initial-cluster: etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
  • etcd2配置文件conf.yml
name: etcd2
data-dir: /project/opt/etcd_cluster/etcd2/data
listen-client-urls: http://127.0.0.1:22379
advertise-client-urls: http://127.0.0.1:22379
listen-peer-urls: http://127.0.0.1:22380
initial-advertise-peer-urls: http://127.0.0.1:22380
initial-cluster: etcd1=http://127.0.0.1:12380,etcd2=http://127.0.0.1:22380,etcd3=http://127.0.0.1:32380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new
  • etcd3配置文件conf.yml
name: etcd3
data-dir: /project/opt/etcd_cluster/etcd3/data
listen-client-urls: http://192.168.159.130:32379
advertise-client-urls: http://192.168.159.130:32379
listen-peer-urls: http://192.168.159.130:32380
initial-advertise-peer-urls: http://192.168.159.130:32380
initial-cluster: etcd1=http://192.168.159.130:12380,etcd2=http://192.168.159.130:22380,etcd3=http://192.168.159.130:32380
initial-cluster-token: etcd-cluster-1
initial-cluster-state: new

注意:配置文件中键值之间是有空格的。

此时可以通过etcd命令进行启动:

# 启动第一个实例
[root@localhost etcd-v3.3.10-linux-amd64]# ./etcd --config-file=/project/opt/etcd_cluster/etcd1/conf.yml

# 启动第二个实例
[root@localhost etcd-v3.3.10-linux-amd64]# ./etcd --config-file=/project/opt/etcd_cluster/etcd2/conf.yml

# 启动第三个实例
[root@localhost etcd-v3.3.10-linux-amd64]# ./etcd --config-file=/project/opt/etcd_cluster/etcd3/conf.yml

查看集群状态:

[root@localhost etcd-v3.3.10-linux-amd64]# ./etcdctl --endpoints http://127.0.0.1:12379,http://127.0.0.1:22379,http://127.0.0.1:32379 member list
883d459774f37cba: name=etcd2 peerURLs=http://192.168.159.130:22380 clientURLs= isLeader=false
aa9a2cb7a887f51b: name=etcd1 peerURLs=http://192.168.159.130:12380 clientURLs=http://127.0.0.1:12379 isLeader=true
aab0ded7be6d8b05: name=etcd3 peerURLs=http://192.168.159.130:32380 clientURLs=http://192.168.159.130:32379 isLeader=false

2、客户端测试

  • 写入数据

选择任意节点向集群写入数据。比如etcd1实例:

[root@localhost etcd-v3.3.10-linux-amd64]# ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:12379 put foo bar
OK
  • 容灾能力

如果关闭etcd2实例,不影响数据的正常读写:

[root@localhost etcd-v3.3.10-linux-amd64]# ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:12379 put fo ba
OK

 

上一篇:Etcd v3备份与恢复


下一篇:关于etcd的工作原理和术语