etcd

etcd是CoreOS团队发起,主要用于管理配置信息和服务发现(Service Discovery)的项目。目标是构建一个高可用的分布式键值(key-value)数据库。

 

etcd设计时重点考虑如下四点:

1.简单:定义良好、面向用户的API。

2.安全:支持HTTPS方式访问。

3.快速:支持并发10k/s的写操作。

4.可靠:支持分布式结构,基于Raft的一致性算法。

 

使用etcd可以在多个节点上启动多个实例,并添加它们为一个集群。同一个集群中的etcd实例将会保持彼此信息的一致性。

 

安装:

etcd是基于Go实现的,可以下载源码编译,也可以直接下载二进制文件,或者直接在Docker里面使用。下面演示下二进制和docker的方式:

二进制文件位置:https://github.com/etcd-io/etcd/releases

etcd_第1张图片

 

所有设备几乎都支持了。很全:

下载:
curl -L https://github.com/etcd-io/etcd/releases/download/v3.4.0/etcd-v3.4.0-linux-amd64.tar.gz -o etcd-v3.4.0-linux-amd64.tar.gz





解压:

tar xzvf etcd-v3.4.0-linux-amd64.tar.gz



cd etcd-v3.4.0-linux-amd64



看到两个重要文件 etcd(服务主文件) 和 etcdctl(命令行客户端),其他的是文档。

 

etcd_第2张图片

拷贝到bin目录下:

sudo cp etcd* /usr/local/bin/

 

执行etcd

etcd_第3张图片

默认2379端口处理客户端请求,2380端口用于集群成员的通信。

接下来可以用etcdctl测试设置 testkey:”helloworld”,检查etcd服务是否启动成功。

看下成员列表

ETCDCTL_API=3 etcdctl member list

设置key-val

ETCDCTL_API=3 etcdctl put testkey "hello world"

获取key-val

ETCDCTL_API=3 etcdctl get testkey

 

etcd_第4张图片

两个地方要说明:

  1. ETCDCTL_API=3 指明要用版本3的API来执行命令,为了防止兼容性问题,建议全部指定固定版本3。
  2. 需要开两个命令窗口,一个是执行etcd,把这个服务跑起来。如果是不执行etcd的话直接操作etcdctl肯定是不行的:

etcd_第5张图片

Docker镜像方式运行

docker run \

 -p 2379:2379 \

 -p 2380:2380 \

 --name etcd-gcr-v3.4.0 \

 quay.io/coreos/etcd:v3.4.0 \

 /usr/local/bin/etcd \

 --name s1 \

 --listen-client-urls http://0.0.0.0:2379 \

 --advertise-client-urls http://0.0.0.0:2379 \

 --listen-peer-urls http://0.0.0.0:2380 \

 --initial-advertise-peer-urls http://0.0.0.0:2380 \

 --initial-cluster s1=http://0.0.0.0:2380 \

 --initial-cluster-token tkn \

 --initial-cluster-state new \

 --log-level info \

 --logger zap \

 --log-outputs stderr

 

然后就跑起来了,这个时候可以尝试登陆容器里面或者直接在本地(这块好好理解下(端口已经映射出来了)),直接跟上面那个实验一样测试一次:

etcd_第6张图片

 

但是这里注意一个问题,就是上面创建镜像的时候我没有指定文件挂载和数据库路径。书中的例子跑不起来的,因为新版本的docker在挂载的时候如果没有那个目录,是不会给创建的会报错。真正实际使用的时候,千万千万要记得把库路径挂载出来,数据不要存在容器里。要存在宿主机上。

 

macOS上就直接这样

brew install etcd

etcd

etcdctl member list

......

 

 

下面是一个比较笨的集群部署方式(之后我会整理另一个方便的)

分别用三台docker机器:

分别执行:(对应换成自己的IP)

docker run \

 -p 2379:2379 \

 -p 2380:2380 \

 --name etcd-gcr-v3.4.0 \

 quay.io/coreos/etcd:v3.4.0 \

 /usr/local/bin/etcd \

 --name node1 \

 --listen-client-urls http://0.0.0.0:2379 \

 --advertise-client-urls http://192.168.0.102:2379 \

 --listen-peer-urls http://0.0.0.0:2380 \

 --initial-advertise-peer-urls http://192.168.0.102:2380 \

 --initial-cluster node1=http://192.168.0.102:2380,node2=http://192.168.0.105:2380,node3=http://192.168.0.106:2380 \

 --initial-cluster-token tkn \

 --initial-cluster-state new \

 --log-level info \

 --logger zap \

 --log-outputs stderr





docker run \

 -p 2379:2379 \

 -p 2380:2380 \

 --name etcd-gcr-v3.4.0 \

 quay.io/coreos/etcd:v3.4.0 \

 /usr/local/bin/etcd \

 --name node2 \

 --listen-client-urls http://0.0.0.0:2379 \

 --advertise-client-urls http://192.168.0.105:2379 \

 --listen-peer-urls http://0.0.0.0:2380 \

 --initial-advertise-peer-urls http://192.168.0.105:2380 \

 --initial-cluster node1=http://192.168.0.102:2380,node2=http://192.168.0.105:2380,node3=http://192.168.0.106:2380 \

 --initial-cluster-token tkn \

 --initial-cluster-state new \

 --log-level info \

 --logger zap \

 --log-outputs stderr





docker run \

 -p 2379:2379 \

 -p 2380:2380 \

 --name etcd-gcr-v3.4.0 \

 quay.io/coreos/etcd:v3.4.0 \

 /usr/local/bin/etcd \

 --name node3 \

 --listen-client-urls http://0.0.0.0:2379 \

 --advertise-client-urls http://192.168.0.106:2379 \

 --listen-peer-urls http://0.0.0.0:2380 \

 --initial-advertise-peer-urls http://192.168.0.106:2380 \

 --initial-cluster node1=http://192.168.0.102:2380,node2=http://192.168.0.105:2380,node3=http://192.168.0.106:2380 \

 --initial-cluster-token tkn \

 --initial-cluster-state new \

 --log-level info \

 --logger zap \

 --log-outputs stderr

 

然后随便找一台机器执行:

ETCDCTL_API=3 etcdctl member list

etcd_第7张图片

 

然后换台机器执行

ETCDCTL_API=3 etcdctl put testkey "hello world"

在继续换一台机器执行

 

ETCDCTL_API=3 etcdctl get testkey

OK集群相关先到这,明天我继续整理etcd集群相关。上面这些还不够。

你可能感兴趣的:(架构师之路,k8s)