部署
docker 部署
$ docker run -d \-p 8500:8500 \--name consul \--volume ./consul:/consul/data \-e CONSUL_BIND_INTERFACE='eth0' \consul:latest agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -bootstrap-expect=1
docker-compose 部署
docker-compose.yaml
version: '3.6'services:consul1:image: consul:latestcontainer_name: consul-1restart: alwaysports:- 8500:8500environment:- CONSUL_BIND_INTERFACE=eth0volumes:- ./data:/consul/datacommand: agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -bootstrap-expect 1
k8s 部署
consul-pod.yaml
kind: PodapiVersion: v1metadata:name: consulnamespace: hawkeyelabels:app: consulspec:containers:- name: container-q8zm1rimage: 'consul:latest'args:- agent- '-server'- '-ui'- '-bind=0.0.0.0'- '-client=0.0.0.0'- '-bootstrap-expect=1'ports:- name: http-1containerPort: 8500protocol: TCPresources:limits:cpu: 500mmemory: 1Girequests:cpu: 300mmemory: 500MiterminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: Always
参数解析
- -bootstrap-expect 表示是集群中服务器个数
- -ui 用web来管理consul
- -node 设置服务器节点名称
- -server 表示 server 模式
- -client 运行访问的终端地址
通过上面三种任意方式都可以完成快速部署,启动后日志输出如下
consul-1 | ==> Found address '172.23.0.2' for interface 'eth0', setting bind option...consul-1 | ==> Starting Consul agent...consul-1 | Version: '1.8.4'consul-1 | Node ID: 'b66e8b6c-eb0e-8ac7-ed56-289fca4508cf'consul-1 | Node name: '467c201ea1a1'consul-1 | Datacenter: 'dc1' (Segment: '<all>')consul-1 | Server: true (Bootstrap: true)consul-1 | Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)consul-1 | Cluster Addr: 172.23.0.2 (LAN: 8301, WAN: 8302)consul-1 | Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: falseconsul-1 |consul-1 | ==> Log data will now stream in as it occurs:
返回日志一些重要信息分析:
- Node name:节点名称
- Datacenter:默认数据中心
- Server:这指示代理是在服务器模式下还是在客户端模式下运行
- Client Addr:客户端到代理的接口地址,默认情况下仅版本本机
- Cluster Addr:集群中 consul 代理之间进行通信的地址和端口,并非集群中所有 consul 代理都必须使用相同的端口,但是所有其他节点都必须可以访问此地址
日志输出后,可以代开后端地址 : localhost:8500
退出
可以通过向进程发送中断信号(通常是 Ctrl-C从终端或运行kill -3 consul_pid),当客户端正常退出时,代理首先通知群集它打算离开群集。这样,其他集群成员会通知集群该节点已离开。当正常退出后,该服务器将会标记为 failed,如果要从集群中彻底删除服务,则需要使用 force-leave命令,只要服务代理不处于 alive,就可以将服务实例设置为 left 状态。
如果发送 kill -9 consul_pid 实现强制退出,则集群中其他节点将检测到这个节点已死亡,并且将它设置为 failed
生命周期
首次启动服务时,它不知道集群中的任何其他节点。要发现其对等方则它必须加入集群。这可以通过 join 命令或通过提供适当的配置以在启动时自动加入来完成。一旦节点加入,该信息就会发布到整个群集中,这意味着所有节点最终都将彼此了解。如果代理是服务器,则现有服务器将开始复制到新节点。
在网络故障的情况下,某些节点可能无法被其他节点访问。在这种情况下,无法访问的节点被标记为failed。
