consul 是一种用于服务发现、配置和分布式一致性的开源工具和平台。它由 hashicorp 公司开发和维护,旨在简化构建和维护分布式系统的任务。
consul 提供了许多功能,包括:
-
服务发现:consul允许服务注册和发现。当服务启动时,它可以向consul注册自己的位置和元数据。其他服务可以通过consul查询来发现特定服务的位置,从而轻松实现服务之间的通信。
-
健康检查:consul可以周期性地对服务进行健康检查,以确保它们正常工作。如果服务不再健康,则consul可以自动将其标记为不可用,并将流量路由到其他健康的实例。
-
kv存储:consul包含一个分布式键/值存储系统,可以用于配置、功能标志和其他临时数据的存储。
-
多数据中心支持:consul支持多数据中心集群,允许在不同地理位置部署多个consul集群,并在它们之间进行通信和同步。
-
一致性保证:consul使用raft协议来确保数据的一致性和高可用性。它能够在节点故障或网络分区时继续正常运行。
-
dns接口:consul提供了一个dns接口,允许使用域名进行服务发现,而无需依赖专门的服务发现库。
总的来说,consul是一个强大的工具,可以帮助开发人员和运维人员构建和管理可靠的分布式系统,简化了服务发现、配置管理和系统监控等任务。
下载安装consul
选择对应linux 安装consul
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/rhel/hashicorp.repo sudo yum -y install consul
国内加速阿里云consul v1.18.0备份
验证
$ consul version consul v1.18.0 revision 349cec17 build date 2024-02-26t22:05:50z protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
单机启动
consul agent -dev -client=0.0.0.0
在运行consul代理时,你可以通过一些参数来优化命令。这些参数可以帮助你更好地配置consul:
-
指定数据中心:使用
-datacenter
参数可以指定consul代理所属的数据中心。例如,-datacenter=mydc
。 -
指定节点名称:使用
-node
参数可以指定consul代理的节点名称。例如,-node=myagent
。 -
开启ui界面:使用
-ui
参数可以启动consul的web ui界面,方便可视化管理。例如,-ui
。 -
指定日志级别:使用
-log-level
参数可以指定consul代理的日志级别。例如,-log-level=info
。 -
开启grpc api:使用
-grpc
参数可以开启consul的grpc api,允许使用grpc接口与consul进行交互。例如,-grpc
。 -
指定绑定地址:使用
-bind
参数可以指定consul代理绑定的地址。例如,-bind=192.168.1.100
。 -
禁用dns缓存:使用
-disable-host-node-id
参数可以禁用consul的dns缓存。例如,-disable-host-node-id
。
综合使用这些参数,你可以优化你的consul代理命令,使其更适合你的环境和需求。例如:
consul agent -dev -client=0.0.0.0 -datacenter=mydc -node=myagent -ui -log-level=info -grpc -bind=192.168.1.100 -disable-host-node-id
这个命令将启动一个绑定到所有接口的consul代理,使用名为mydc
的数据中心,节点名称为myagent
,开启了web ui界面、grpc api,并设置了日志级别为info
。
集群部署
要列出 rpm 安装 consul 后所产生的文件,可以使用以下命令
# 查看yum下载安装consul rpm -ql consul /etc/consul.d/consul.env /etc/consul.d/consul.hcl /usr/bin/consul /usr/lib/systemd/system/consul.service
这些文件的功能介绍如下:
-
/etc/consul.d/consul.env
: 这个文件通常用于设置 consul 运行时的环境变量。环境变量可以影响 consul 的行为,例如设置日志级别、数据目录路径等。在这个文件中,你可以配置一些 consul 运行时所需的环境变量。 -
/etc/consul.d/consul.hcl
: 这是 consul 的主要配置文件。在这个文件中,你可以配置 consul 的各种选项,包括集群配置、数据中心、节点名称、绑定地址、广告地址、加入集群的地址、监听端口、日志设置等。通过编辑这个文件,你可以定制 consul 的行为和功能。 -
/usr/bin/consul
: 这是 consul 的可执行文件。通过执行这个文件,你可以启动 consul agent,并根据配置文件中的设置来运行 consul。 -
/usr/lib/systemd/system/consul.service
: 这是 consul 的 systemd 服务单元文件。它定义了 consul 作为 systemd 服务的配置,包括服务的启动方式、依赖关系等。通过 systemd,你可以使用systemctl
命令来管理 consul 服务的启动、停止、重启等操作。
这些文件是安装 consul 包后在系统上生成的关键文件,用于配置和管理 consul 的运行。通过修改配置文件,你可以调整 consul 的行为,使其适应特定的需求和环境。
编辑consul配置文件
以下是根据配置内容的重要性和功能进行分组,并添加了注释和适当的配置选项的配置文件示例:
vim /etc/consul.d/consul.hcl
配置文件名为consul.hcl,而 json 是另一种格式,通常使用 .json 扩展名。如果你要使用 hcl(hashicorp configuration language)格式,你可以像下面这样编辑:
# consul 配置文件 # 数据中心设置 datacenter = "dc1" # 节点名称设置(注意:不可重名) node_name = "consul-36" # 数据目录设置 data_dir = "/opt/consul" # 日志级别设置(可选值:trace, debug, info, warn, err) log_level = "err" # 绑定地址设置(监听所有 ipv6 地址和所有 ipv4 地址) bind_addr = "[::]" bind_addr = "0.0.0.0" # 广播自己地址给集群访问(用于集群内部通信) advertise_addr = "192.168.3.36" # 加入集群的地址列表(需要提供至少一个已知的集群节点地址,:8301默认端口可省略) retry_join = ["192.168.3.39:8301", "192.168.3.53", "192.168.3.54"] # 用于指定 consul agent 在启动时尝试通过加入集群节点。 start_join = ["192.168.3.39", "192.168.3.53", "192.168.3.54"] # 服务节点设置(是否为服务器节点) server = true # 这会告诉consul在引导期间等待2个服务器节点就绪,然后再引导整个集群。 bootstrap_expect = 2 # 加密设置(consul keygen 生成的用于集群网络通信的加密) encrypt = "kuzz6x4oqhuvxeu+an1ehl4dvgep8jk4ltflclq2dvq=" # 客户端地址设置(用于监听客户端请求的地址) client_addr = "0.0.0.0" # ui 配置(用于启用内置的 web ui) ui_config { enabled = true content_path = "/ui/" #可自定义路径 } # 默认端口设置 ports { # http api 端口(默认值:8500)与 consul 进行交互,包括服务注册、ui、健康检查等 http = 8500 # dns 端口(默认值:8600)用于提供 dns 查询服务,允许客户端通过 dns 协议来查询服务实例的地址 dns = 8600 # serf lan 端口(默认值:8301)局域网内进行集群节点间的通信 serf_lan = 8301 # serf wan 端口(默认值:8302) 广域网(wan)内进行集群节点间的通信,用于跨数据中心的通信 serf_wan = 8302 # 服务器 rpc 端口(默认值:8300)服务器节点之间进行 rpc 通信 server = 8300 }
这个配置文件根据不同的功能进行了分组,并添加了注释以说明各个配置项的作用和用法。
# 启动 consul agent -config-file=/etc/consul.d
consul 会在这个目录中寻找配置文件并加载。
常用命令
以下是一些常用的 consul 集群管理命令:
- 启动 consul agent:
consul agent -config-file=<config_file>
这个命令用于启动 consul agent,并指定配置文件。
- 加入集群:
consul join <address>
这个命令用于将当前节点加入到 consul 集群中,<address>
是一个已存在的集群节点的地址。
- 离开集群:
consul leave
这个命令用于将当前节点从 consul 集群中移除。
- 查看集群节点:
consul members
这个命令用于查看当前 consul 集群中的成员节点列表。
- 查看 leader:
consul operator raft list-peers
这个命令用于列出当前的 consul 集群中的领导者节点。
- 手动推选 leader:
consul operator raft promote <node_id>
这个命令用于手动推选指定节点为 consul 集群的领导者。
- 重启集群节点:
consul reload
这个命令用于重新加载 consul 配置文件并重启 consul agent。
- 查看服务列表:
consul catalog services
这个命令用于列出所有在 consul 中注册的服务。
- 注册服务:
consul services register <service.json>
这个命令用于注册一个新的服务到 consul 中,<service.json>
是包含服务定义的 json 文件。
- 移除服务:
consul services deregister <service_id>
这个命令用于从 consul 中移除一个已注册的服务,<service_id>
是服务的唯一标识符。
这些命令可以帮助你管理和维护 consul 集群,确保其正常运行并满足你的需求。
发表评论