docker Consul
Posted 歆瑶的小房子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker Consul相关的知识,希望对你有一定的参考价值。
Consul提供的一些关键特性
•service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务
•health checking:健康检测使consul可以快速的警告在集群中的操作。和服务发现的集成,可以防止请求转发到故障的服务上面
•key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作
consul安装
* Consul 下载地址:https://www.consul.io/downloads.html
* Github地址:https://github.com/hashicorp/consul
* 码云地址:https://gitee.com/mirrors/consul
下载、解压就得到一个可执行文件consul(通过go编译为二进制文件)
将这个文件移动到全局变量环境中
$ sudo mv consul /usr/local/bin/
consul对外提供的端口,不同的端口有不同的作用,
Consul-启动服务
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -bind=192.168.169.150 -ui -client=0.0.0.0
参数含义:
agent
-server表示启动的是一个服务
-bootstrap-expect 1 表示等待多少个节点再启动,这里1个,就是自己一个就
启动了
-node=texun_1 就是给consul服务起个别名为ali_1
-bind=172.17.114.76 绑定内网ip
-data-dir /opt/data1 数据存储目录为/opt/data1
-ui 启动默认ui界面
-client consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服
务,默认是127.0.0.1,可指定允许客户端使用什么ip去访问
Consul-api常用命令
注册服务:
curl -X PUT -d "ID":"order_1","Name":"order","Tags":["xdp-\\/core.order"],"Address":"192.168.232.201","Port":18307,"Check":"name":"order_1.check","tcp":"192.168.232.201:18307","interval":"10s","timeout":"2s" http://192.168.232.204:8550/v1/agent/service/register
查询服务:
curl http://192.168.232.204:8550/v1/health/service/order?dc=xdp_dc&passing=true
dc : 表示数据中心是xdp_dc (存储信息记录)
passing : 表示健康检测是通过的
查询所有服务:
curl http://192.168.232.204:8550/v1/agent/services?dc=xdp_dc
注销服务:
curl -X PUT http://192.168.232.204:8550/v1/agent/service/deregister/order_1?dc=xdp_dc
查询所有k/v:
curl http://192.168.232.204:8550/v1/kv/?recurse
添加key/value :
curl -X PUT -d test http://192.168.232.204:8550/v1/kv/abc/key1
key: abc/key1
value:test
修改k/v:
curl -X PUT -d test666 http://192.168.232.204:8550/v1/kv/abc/key1
删除key:
curl -X DELETE http://192.168.232.204:8550/v1/kv/abc/key1
docker 安装consul
下载consul镜像docker pull consul:1.4.4
#创建自定义网段
[root@localhost docker]# docker network create --subnet=172.200.7.0/100 mynetwork
d8c3c71a6b4d4dcaf348830c97c5b489626a1a6f3627419d395d99e16852caad
创建容器#启动第1个Server节点,集群要求要有3个Server,将容器8500端口映射到主机8900端口,同时开启管理界面
docker run -d
-p 8510:8500 //配置端口映射
-v/docker/consul/data/server1:/consul/data //配置文件夹映射 没有则自动创建
-v/docker/consul/conf/server1:/consul/config //配置文件夹映射
-e CONSUL_BIND_INTERFACE=eth0 //配置使用网络
--network=mynetwork //配置网络
--ip 172.200.7.6 //自定义指定ip地址
--privileged=true --name=consul_server1 consul:1.4.4 //配置自启动 别名
agent -server -bootstrap-expect=3 //配置服务节点3个
-ui -node=consul1.4.4_server_public_2 //配置web页面
-client=0.0.0.0 //配置客户端响应
-data-dir /consul/data //配置consul存储地址
-config-dir /consul/config //配置文件存储地址
-datacenter=xdp_dc //数据中心名称
具体执行的命令 必须输入成一行
[root@localhost config]# docker run -d -p 8510:8500 -v/docker/consul/data/server1:/consul/data -v/docker/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.6 --privileged=true --name=consul_server1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul1.4.4_server_public_2 -client=0.0.0.0 -data-dir /consul/data -config-dir /consul/config -datacenter=xdp_dc
1be16c0c0314449c5c6729d72480b606a19bfeeba7e952926d8c1104e4e60c4e
[root@localhost config]#
[root@localhost config]# docker run -d -p 8520:8500 -v /docker/consul/data/server2:/consul/data -v /docker/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.7 --privileged=true --name=consul_server_2 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_public_3 -client=0.0.0.0 -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
0773aee815d29e4f03d41a2f4fb52291d97fe957bff5480ed68bc48e6cfa8071
[root@localhost config]#
[root@localhost config]# docker run -d -p 8530:8500 -v /docker/consul/data/server3:/consul/data -v /docker/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.8 --privileged=true --name=consul_server_3 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_public_4 -client=0.0.0.0 -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
6bbf455ed8c7a335031615109635dc2b6cb28003fe4c94e2ffb1e5764a64ac80
查询是否已经配置固定ip地址
[root@localhost config]# docker inspect consul_server1 | grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.200.7.6",
5台server节点 2台client节点docker run -d -p 8510:8500 -v /docker/consul/data/server1:/consul/data -v /docker/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.6 --privileged=true --name=consul_server1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul1.4.4_server_1 -client=0.0.0.0 -data-dir /consul/data -config-dir /consul/config -datacenter=consul_data
docker run -d -p 8520:8500 -v /docker/consul/data/server2:/consul/data -v /docker/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.7 --privileged=true --name=consul_server2 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_2 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8530:8500 -v /docker/consul/data/server3:/consul/data -v /docker/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.8 --privileged=true --name=consul_server3 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_3 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8540:8500 -v /docker/consul/data/server4:/consul/data -v /docker/consul/conf/server4:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.9 --privileged=true --name=consul_server4 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_4 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8550:8500 -v /docker/consul/data/server5:/consul/data -v /docker/consul/conf/server5:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.10 --privileged=true --name=consul_server5 consul:1.4.4 agent -server -ui -node=consul1.4.4_server_5 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8610:8500 -v /docker/consul/data/client1:/consul/data -v /docker/consul/conf/client1:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.100 --privileged=true --name=consul_client1 consul:1.4.4 agent -ui -node=consul1.4.4_client_1 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
docker run -d -p 8620:8500 -v /docker/consul/data/client2:/consul/data -v /docker/consul/conf/client2:/consul/config -e CONSUL_BIND_INTERFACE=eth0 --network=mynetwork --ip 172.200.7.101 --privileged=true --name=consul_client2 consul:1.4.4 agent -ui -node=consul1.4.4_client_2 -client=0.0.0.0 -datacenter=consul_data -data-dir /consul/data -config-dir /consul/config -join=172.200.7.6
如果出现以下效果 则按照成功
安装consul模板
# 1. 解压缩$ unzip consul-template_0.26.0_linux_386.zip#将执行文件(解压缩之后的文件夹),复制到/usr/local/bin文件夹下 cp consul-template /usr/local/bin # 2. 设置环境变量,输入命令: vim /etc/profile # 3. 将这里的代码添加到 profile 文件末尾(这里覆盖之前consul的配置) # Consul export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME; # 4. 执行命令使环境变量生效 source /etc/profile # 5. 验证软件是否安装成功 consul-template -v
Consul-template 实战配置文件生成
实战步骤:
1. Consul-template 定义模板文件: find_address.tpl#创建模板1be16c0c0314:/consul/config/tpl# pwd /consul/config/tpl 1be16c0c0314:/consul/config/tpl# vi find_address.tpl 1be16c0c0314:/consul/config/tpl# more find_address.tpl key "/hashicorp/street_address" touch find_address.tpl #定义模板内容项 key "/hashicorp/street_address"
2. consul-template读取KV数据,用于渲染生成配置文件#运行consul-template命令,同时指定要使用的模板和需要更新的文件:consul-template -template "find_address.tpl:hashicorp_address.conf"
注: consul-template 命令会持续运行,可使用 CTRL+c 可以停止其运行。新开一个新终端,使用命令
行指令将数据写入Consul
3. 根据 consul kv 之类 用来往consul的KV键值对中存入数据数据$ consul kv put hashicorp/street_address "127.0.0.1:8080"Success! Data written to: hashicorp/street_address #查看hashicorp_address.conf 文件来确保有数据写入文件 cat /consul/config/tpl/hashicorp_address.conf 127.0.0.1:8080
4. 想要动态更新模板的值
再次 采用kv指令,
consul kv put hashicorp/street_address "127.0.0.1:11000" 更新
hashicorp/street_address 值,可以看到该文件立即更新。有啥用? 比如用户可以用相同的过程来
更新HAProxy负载均衡器配置。
个人解释:模板文件位置:/consul/config/tpl模板文件名可以自定义 :需要在第二步执行命令是 将模板文件名以及需要更新的文件都指定好就行 consul-template -template "模板文件名:需输出的配置文件名称"
模板文件内容中的key :指的是需要到consul中的kv对应的键名 将值保持到上一步的“配置文件名称”中
具体的consul的kv 需要通过接口调用写入数据
以上是关于docker Consul的主要内容,如果未能解决你的问题,请参考以下文章