logo

鱼肚的博客

Don't Repeat Yourself

搭建Consul KV存储

Consul是一个使用广泛的服务发现、kv存储的应用。

近期因工作需要,我搭建了一个简单的consul,在这里记录下过程。

第一步,使用consul官方镜像

consul官方提供了一个docker镜像,这里我直接使用它作为基础镜像

1FROM consul:1.8.3

consul镜像中提供了 consul 的可执行文件,也内置了 /consul/data 等目录结构,不过这里我没有使用默认地址,改成了自定义的路径。

consul既可以作为server模式启动,也可以作为client模式启动。因为我这里只启动一个实例,所以选择的是server模式。

第二步,添加配置文件

添加server.json文件

1{
2	"ui": true,
3	"server": true,
4	"dns_config": {
5		"allow_stale": false
6	}
7}

ui字段控制是否启用图形界面。Consul内置了一套UI,打开此选项即可以看到。

再添加一个agent.json配置文件:

1{
2    "client_addr": "0.0.0.0",
3    "data_dir": "/var/lib/consul",
4    "leave_on_terminate": true,
5    "dns_config": {
6        "allow_stale": true,
7        "max_stale": "1s"
8    }
9}

这里我选择了 /var/lib/consul作为数据存储目录,代替默认的/consul/data

然后,修改Dockerfile,应用这两个配置文件

1FROM consul:1.8.4
2
3RUN mkdir -p /etc/consul.d/
4
5COPY agent.json /etc/consul.d/
6COPY server.json /etc/consul.d/

这里我也没有使用默认的配置目录/consul/config,换成了自定义目录/etc/consul.d

第三步,修改启动命令

因为我对consul还不太熟悉,命令记不清楚,所以选择在Dockerfile中固定写好配置。

1FROM consul:1.8.4
2
3RUN mkdir -p /etc/consul.d/
4
5COPY agent.json /etc/consul.d/
6COPY server.json /etc/consul.d/
7
8ENTRYPOINT ["consul", "agent", "-server", "-bootstrap", "-config-dir=/etc/consul.d/"]

这个entrypoint配置中,打开了 server 开关、bootstrap开关,同时设置了自定义配置目录。

这三步完成之后,就可以启动容器查看了。consul默认使用的 8500 端口提供UI服务,所以使用

1docker build . -t myconsul
2docker run -p 8500:8500 myconsul

之后,即可访问 localhost:8500/ui/ 访问到consul提供的UI页面。

最后,设置固定存储

consul的固定存储位置即为配置文件中的 data_dir,默认是/consul/data,我改成了/var/lib/consul

要使此存储固定下来,就需要用到Docker的volume。

这里我使用的是简单的文件系统映射:

1docker build . -t myconsul
2docker run -p 8500:8500 -v /data/consul:/var/lib/consul myconsul

即将本地的 /data/consul映射到容器内的/var/lib/consul目录。

测试

安装完成之后,打开localhost:8500,切换到KV标签,添加一些数据。

然后本地安装consul命令,如在macOS中可使用brew install consul,然后使用如下的命令测试:

1consul kv get --http-addr localhost /my-key

以上就是这次搭建Consul过程记录。