consul discover service
This project is maintained by wangfakang
consul集群搭建和服务发现:
consul做服务发现的列子:
由于机器资源有限,使用的docker进行搭建的consul集群.
启动三个docker,然后执行consul:
下面我们搭建三个consul的集群:
docker1:
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=10.209.70.221 -dc=dc1
docker2:
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=10.209.70.222 -dc=dc1
docker3:
consul agent -data-dir /tmp/consul -node=n3 -bind=10.209.70.223 -dc=dc1
上述就简单的启动了三个consul agent,前面两个是以server模式运行的,最后是以client方式运行的.
现在在任意一台机器上执行consul members 只会有自己的相关信息,此时他们彼此还是独立的.
此时还要在docker1上执行consul join 10.209.70.222 此时就把docker1上的consul加入到了docker中形成了一个简单的集群.
此时在执行docker1上consul members 就会看到docker上的consul信息.当然在这个时候就会出现选举的流程.
最后在docker3上的consul执行consul join 10.209.70.222 然后在任意一台docker上执行consul members就会看到其他两docker上的consul信息了.
到这里就简单的搭建了一个consul集群.
consul进行服务注册提供了两种方式(http api以及配置文件指定),在这里我们使用配置文件的方式:
分二步:
1.在/etc/consuld/下建立一个service.json写入下面内容:
{"service": {"name": "web", "tags": ["master"], "port": 80,
"check": {"http": "http://127.0.0.1:80", "interval": "10s"}}}
上面的含义是:注册了一个服务名称是web,然后写上相应的ip及port,并且增加了一个健康检查check.
2.进行启动consul指定-config-dir
consul agent -data-dir /tmp/consul -node=n1 -bind=10.209.70.221 -dc=dc1 -config-dir=/etc/consuld/
注意此时consul会不断的进行报错,因为有进行了健康检查,此时我在docker1上启动了一个nginx服务端口是80,就会停止报错.
(热注册)技巧:
如果在启动过后进行服务注册,在相应的配置文件下写好要注册的内容,然后给agent发送一个SIGHUP信号即可,这样允许你在升级服务时,而不会产生agent宕机时间或者服务不可达.或者通过HTTP API接口来动态的增加、删除、修改服务.
在二服务注册的基础上,在注册一个服务(在docke2上注册同样的服务),测试在docker3上执行:
服务发现也有两种方式:http api和dns方式:
此时我们在docker1上的consul执行:
dig @127.0.0.1 -p 8600 web.service.consul SRV 此时会看到另外两个docker下的web服务,SRV主要是查看port.
此时如果把docker2上的web服务nginx给stop调此时在执行:
dig @127.0.0.1 -p 8600 web.service.consul SRV 这时就没有docker2上的web服务了.
注意:
http api和dns方式查询服务的最大区别就是dns方式可以根据服务check的实时状态动态调整available服务节点列表.
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流