部署
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:latest
container_name: consul-1
restart: always
ports:
- 8500:8500
environment:
- CONSUL_BIND_INTERFACE=eth0
volumes:
- ./data:/consul/data
command: agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -bootstrap-expect 1
k8s 部署
consul-pod.yaml
kind: Pod
apiVersion: v1
metadata:
name: consul
namespace: hawkeye
labels:
app: consul
spec:
containers:
- name: container-q8zm1r
image: 'consul:latest'
args:
- agent
- '-server'
- '-ui'
- '-bind=0.0.0.0'
- '-client=0.0.0.0'
- '-bootstrap-expect=1'
ports:
- name: http-1
containerPort: 8500
protocol: TCP
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 300m
memory: 500Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
restartPolicy: 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: false
consul-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
。