docker Consul
  XfPMQymCuSBu 2023年11月12日 20 0

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 需要通过接口调用写入数据
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  xqA0sOKuvLcb   2023年11月22日   18   0   0 redisDockerredisdocker
  bifOjSxj34Bv   2023年12月07日   22   0   0 nginxDockerdockernginx
XfPMQymCuSBu
作者其他文章 更多
最新推荐 更多