一.Consul介绍

        Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

二.Consul功能

  1. 服务发现与注册:Consul 提供了服务发现和注册功能,允许服务在注册中心注册自己,并允许其他服务通过 Consul 查询到已注册的服务。这使得服务之间的通信和协作变得更加容易,同时支持动态添加和删除服务实例。
  2. 健康检查:Consul 具有健康检查机制,可以定期检查注册的服务实例的健康状态。如果服务实例发生故障或不可用,Consul 将从服务发现中移除该实例,确保客户端不会访问到不健康的服务。
  3. 分布式键值存储:Consul 提供了一个分布式的键值存储(Key-Value Store),允许开发人员存储和检索配置信息、元数据等。这使得微服务架构中的各个组件能够共享和访问共享数据。
  4. 多数据中心支持:Consul 支持多数据中心的部署,允许在不同地理位置或云环境中构建跨地域的分布式系统。多数据中心部署可以提高系统的可用性和容错性。
  5. 安全性:Consul 提供了一些安全功能,包括基于ACL(访问控制列表)的权限管理,以及对通信进行加密的支持,保护敏感数据和通信内容的安全性。
  6. 事件处理:Consul 具有事件处理功能,允许用户定义和触发事件,并通过 Consul 分发和处理事件。这使得系统可以根据事件的发生执行自动化的操作。

三.Consul调用流程

configmap查看历史版本 查看consul版本_docker

1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port;
2、Consul 接收到 Producer 的注册后,每隔 10s(默认)会向 Producer 发送一个健康检查的请求,检验 Producer 是否健康;
3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address;
4、该临时表每隔 10s 会更新,只包含有通过了健康检查的 Producer。

四.consul安装及使用

1.二进制安装consul

(1)下载安装包:consul_1.7.0_linux_amd64.zip 可以从consul官网https://www.consul.io/downloads.html进行下载就好(选择好OS和位数)

(2)将解压后的二进制文件consul 拷贝到/usr/local/bin 下

mv consul /usr/local/bin 
chmod +x /usr/local/bin/consul

(3)创建目录

mkdir -p /data/consul/config
mkdir -p /data/consul/data

(4)创建配置文件

   node_name和bind_addr 都是本机ip

cat > /data/consul/config/consul.json << EOF
{
"server": true,
"ui":true,
"datacenter": "dc1",
"data_dir": "/data/consul/data",
"node_name": "192.168.xxx.xxx",
"bootstrap_expect":1,
"client_addr": "0.0.0.0",
"bind_addr": "192.168.xxx.xxx"
}
EOF

(5)创建开机启动文件

cat > /usr/lib/systemd/system/consul.service << EOF
[Unit]
Description=consul server
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/consul agent -config-dir /data/consul/config/consul.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
设置开机启动
systemctl daemon-reload
systemctl enable consul.service
启动服务
systemctl start consul.service   
关闭服务
systemctl stop consul.service

2.docker 方式安装consul

(1)拉取最新镜像

docker pull consul

(2)创建挂载目录

mkdir -p /data/consul/

(3)运行consul 容器

docker run --name=consul --restart=always --privileged=true -p 5012:8500 -v /usr/local/consul/data:/data/consul -e CONSUL_BIND_INTERFACE=eth0 -d consul agent -server -client=0.0.0.0 -bootstrap -ui -node=1

这个命令用于在 Docker 中运行 Consul 容器,各个参数介绍如下:

  • docker run: 运行 Docker 容器的命令。
  • --name=consul: 指定容器的名称为 "consul"。
  • --restart=always: 设置容器总是在停止时自动重启。
  • --privileged=true: 授予容器特权,这允许容器访问主机的特权操作。
  • -p 5012:8500: 将容器内部的 8500 端口映射到主机的 5012 端口,这样外部可以通过主机的 5012 端口访问 Consul 的 Web UI 和 API。
  • -v /usr/local/consul/data:/data/consul: 将主机的 /usr/local/consul/data 目录挂载到容器内的 /data/consul 目录,用于持久化存储 Consul 的数据。
  • -e CONSUL_BIND_INTERFACE=eth0: 设置 Consul 绑定的网络接口为 eth0。
  • -d: 后台运行容器。
  • consul agent -server -client=0.0.0.0 -bootstrap -ui -node=1: 这部分是在容器中运行的 Consul 命令,其中各个参数的含义如下:
  • agent: 启动 Consul agent 模式。
  • -server: 将 Consul 设置为服务器模式。
  • -client=0.0.0.0: 设置 Consul 监听的客户端地址。
  • -bootstrap: 将该节点设置为集群的引导节点。
  • -ui: 启用 Consul 的 Web UI。
  • -node=1: 设置节点名称为 "1"。

      页面访问地址:http://主机ip:5012/ui/dc1/services