搭建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过程记录。