ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Spring Cloud开发实践(五): Consul - 服务注册的另一个选择
[打印本页]
作者:
惊落一身雪
时间:
2023-5-18 00:25
标题:
Spring Cloud开发实践(五): Consul - 服务注册的另一个选择
目录
Spring Cloud开发实践(一): 简介和根模块
Spring Cloud开发实践(二): Eureka服务和接口定义
Spring Cloud开发实践(三): 接口实现和下游调用
Spring Cloud开发实践(四): Docker部署
Spring Cloud开发实践(五): Consul - 服务注册的另一个选择
关于 Consul
HashiCorp Consul 是微服务网络解决方案之一, 用于管理跨网络和多云环境服务之间的安全网络连接, 提供服务发现, 服务网格, 流量管理和自动更新. 可以单独部署, 也可以分布式部署.
Consul 的特点
CP(强一致性),使用Raft复制状态
服务可以通过任意Server注册, 通过 Raft 仲裁
内建安全通信选项
一致性提供锁定和集群协调
带配置功能, 健康检查, Lock, KV, ACL
通过 DNS 支持非 REST 节点, 允许更多类型资源连接
使用 Go 语言编写, 启动资源消耗小, 只需要50-60MB内存, 相对比 Nacos 默认配置512M, 启动需要600M以上内存.
脚本化配置, 对容器部署方式更友好
安装
下载地址
https://developer.hashicorp.com/consul/downloads
, 根据自己的系统选择对应的二进制文件, 对应 Linux AMD64 的, 文件还不小, 50MB, 解压后只有一个可执行文件, 127MB, 将其放到 /opt/consul/ 目录, 并将owner改为 root:root
运行 Agent
Consul 的运行形式就是 Agent, 可以运行为 server 或 client 模式. Agent 的启动命令格式为
consul agent <options>
复制代码
具体的命令参数可以通过consul agent <options>--help查看, 常用的参数
-bind= 用于cluster通信的地址
-client= 用于client访问的地址, 包含 RPC, DNS, HTTP, HTTPS, gRPC (if configured).
-config-dir= 配置文件所在目录, 读取所有 .json 后缀的文件作为配置, 可以指定多次
-config-file= 配置文件路径, 可以指定多次
-data-dir= 指定agent状态数据存储目录
-dev 以开发模式启动
-log-file= 指定日志文件路径
-log-json 使用JSON格式记录日志
-log-level= 日志级别
-log-rotate-bytes= 日志文件字节数约束
-log-rotate-duration= 日志文件时间跨度
-log-rotate-max-files= 日志保留的文件数
-node= 指定本节点名称, 在 Cluster 内必须唯一
-node-id= 指定Node ID, 默认为自动生成并记录到 data-dir
-retry-join= 启动时尝试加入的 Agent 地址
-server 服务器模式
-ui 启用内建的静态Web UI界面
-ui-content-path= UI界面地址, 默认为 /ui/
开发模式
用-dev参数可以快速创建一个开发模式的server, 数据不保存, Node ID随机生成, Node name使用当前的hostname, 监听 127.0.0.1, 可以看下面的控制台输出, HTTP等服务使用的是127.0.0.1地址, 只能从本机访问
$ consul agent <options>-dev==> Starting Consul agent... Version: '1.15.2' Build Date: '2023-03-30 17:51:19 +0000 UTC' Node ID: 'ab2e7536-867a-c12f-5bd6-8a825b31af90' Node name: 'centos7001' Datacenter: 'dc1' (Segment: '') Server: true (Bootstrap: false) Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Gossip Encryption: false Auto-Encrypt-TLS: false HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2 gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2 Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2==> Log data will now stream in as it occurs:2023-05-17T06:31:23.337Z [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.ab2e7536-867a-c12f-5bd6-8a825b31af90/server.dc1 from= to=
复制代码
如果在远程服务器上运行, 需要加上-client参数, 指定服务器网口IP地址, 这样就可以从本地访问
http://192.168.11.22:8500
的 Web控制台了
consul agent <options>-dev -client=192.168.11.22
复制代码
在另一个终端窗口中, 可以通过consul members命令查看节点, 如果不加-http-addr参数, 默认访问本地127.0.0.1
$ consul members -http-addr=http://192.168.11.22:8500
Node Address Status Type Build Protocol DC Partition Segment
centos7001 127.0.0.1:8301 alive server 1.15.2 2 dc1 default <all>
复制代码
通过consul leave停止consul服务
$ consul leave -http-addr=http://192.168.11.22:8500
Graceful leave complete
复制代码
单Server模式
如果不使用-dev, 就要手工指定一些参数, 否则启动会有错误
consul agent <options>-ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22
复制代码
去掉了 -dev 参数, 增加了三个新参数,
-ui 开启 8500 端口的 web 控制台, 这个不是必须的
-server 和 -bootstrap-expect=1 一起使用, 前者表示用server模式启动, 后者表示只有一台服务器, 可以立即产生leader, 也必须指定. 如果不指定后者, consul会一直等待 leader 的产生
集群模式
集群模式下, 每个 Datacenter 必须至少有一台 server. 建议是3或5台, 单server在宕机时会造成数据丢失. 其它 Agent 运行为 client 模式.
下面以一台Server, 一台Client为例说明
在 11.22 主机上运行 Server
consul agent <options>-ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22
复制代码
在 11.23 主机上运行 Client, 并 Join 到 11.22
consul agent <options>-ui -data-dir=./data -client=192.168.11.23 -bind=192.168.11.23 -retry-join=192.168.11.22
复制代码
Join 成功后, 在两边的控制台上会显示相应信息. 这时候通过consul members可以看到两个Node:
/opt/consul/consul members -http-addr=http://192.168.11.22:8500
Node Address Status Type Build Protocol DC Partition Segment
centos7001 192.168.11.22:8301 alive server 1.15.2 2 dc1 default <all>
54120-nc01 192.168.11.23:8301 alive client 1.6.1 2 dc1 default <default>
复制代码
后台运行
不留日志
nohup /opt/consul/consul agent <options>-ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >/dev/null 2>&1 &
复制代码
日志输出到文件
nohup /opt/consul/consul agent <options>-ui -server -bootstrap-expect=1 -data-dir=./consul-data -client=192.168.11.22 -bind=192.168.11.22 >path/to/log/consul.log 2>&1 &
复制代码
这样consul会在后台运行, 需要用 consul leave 退出
参考
Eureka vs Consul
https://gist.github.com/StevenACoffman/de394d6511a387ada9ab988e33be8583
Get Started: Consul Agent
https://developer.hashicorp.com/consul/docs/agent
Consul建立集群
https://book-consul-guide.vnzmi.com/06_setup_cluster.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4