选择consul 主要是为了后续的 service mesh 做基础和铺垫,与eureka 最大的不同点在于,数据信息存放的位置不同,eureka是存在客户端节点,consul则是存放在了服务器节点,至于网上大多数说的 cap ,eureka是基于ap,consul是基于cp,默认模式下确实是这样的区别,但是consul 支持三种模式,默认模式(选举期间与选举之后上一任leader还可以读,但不能写),严格数据统一模式(上一代leader也不能读,选举期间集群不可用)和第三种支持每个节点都能读写的模式
文中图片就不上传了,只是效果图,官网都有的。
consul 部署架构
consul 服务节点 需要单独下载部署。 spring cloud 集成了客户端发现discovery client 功能。
consul 下载:
官网选择对应操作系统下载二进制压缩包:https://www.consul.io/downloads.html
解压后可获取可执行的consul 文件, 将该文件拷贝至 PATH指定目录如 /usr/local/bin。
启动 consul
调试阶段启动dev开发模式,在终端执行
consul agent -dev
启动成功后默认web UI 访问端口为 8500
在web UI 可查看注册到consul 的客户端节点信息 以及consul 服务节点信息。
spring cloud consul 集成
工程 pom.xml 引入集成 jar 包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
引入 spring-boot-starter-actuator 主要是consul 对客户端节点的健康检查需要调用actuator中的 /actuator/health 接口。
在启动类中增加注解 @EnableDiscoveryClient
@EnableDiscoveryClient
@EnableSwagger2
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
使用consul 需要配置服务名称与consul 服务节点地址信息和健康检查间隔等信息。
# tomcat配置
server:
port: 7080
# 服务名称
spring:
application:
name: order-server
cloud:
# consul server地址
consul:
host: localhost
port: 8500
# 健康检查 一定要配置 结合 spring-boot-starter-actuator 使用
discovery:
health-check-path: /actuator/health
health-check-interval: 10s
完成上述设置,启动服务,可在web ui 中查看是否注册成功。还可配合 spring cloud feign 组件实现服务指间调度。
consul cluster 生产环境部署
# -server -bootstrap-expect 该命令是自荐模式 等待其他成员加入
consul agent -data-dir /opt/data -node=xxx.xxx.001 -bind=0.0.0.0 -datacenter = dc1 -ui -client=xx.xx.xx -server -bootstrap-expect 3
consul agent -data-dir /opt/data -node=xxx.xxx.002 -bind=0.0.0.0 -datacenter = dc1 -ui -client=xx.xx.xx -join=xxx.xxx.001
consul agent -data-dir /opt/data -node=xxx.xxx.003 -bind=0.0.0.0 -datacenter = dc1 -ui -client=xx.xx.xx -join=xxx.xxx.001
consul members
# 可以查看 集群成员
更多命令可查看官网进行查询: https://www.consul.io/docs/agent/options.html