Consul配置持久化

为了确保Consul的Key/Value数据能够持久化存储,我们需要在Consul的配置文件中指定数据目录 (data_dir)。这样可以确保数据在Consul重启或节点故障后不会丢失。

为什么要持久化配置

  1. 数据持久性:确保配置和服务信息在Consul重启或节点故障后依然存在,不会丢失。
  2. 高可用性:通过持久化存储,可以结合Consul的多数据中心和集群机制,实现高可用性和数据冗余。
  3. 数据一致性:使用持久化存储结合Consul的Raft协议,保证数据的一致性和可靠性。
  4. consul存储特性:默认基于内存的存储

如何实现持久化配置

1. 启动Consul服务器并启用持久化存储

首先,确保Consul服务器已启动并运行。可以通过配置文件或命令行参数指定数据目录,使Consul将Key/Value数据持久化到磁盘上。

使用配置文件启动

创建一个Consul配置文件(如consul.json),内容如下:

{
  "bootstrap_expect": 1,
  "server": true,
  "node_name": "consul-server",
  "datacenter": "dc1",
  "data_dir": "/usr/local/consul/Repository",
  "log_level": "INFO",
  "enable_syslog": true,
  "bind_addr": "127.0.0.1",
  "advertise_addr": "127.0.0.1",
  "client_addr": "0.0.0.0",
  "ui": true
}

使用配置文件启动Consul:

consul agent -config-file=consul.json

如果你已经将consul服务注册到systemctl中

systemctl restart consul

使用命令行参数启动

也可以直接使用命令行参数启动Consul并指定数据目录:

consul agent -server -data-dir=/usr/local/consul/Repository -bootstrap-expect=1 -node=consul-server -datacenter=dc1 -bind=127.0.0.1 -advertise=127.0.0.1 -client=0.0.0.0 -ui

2. 存储和获取Key/Value数据

使用Consul的命令行工具或HTTP API来存储和获取Key/Value数据。

存储数据

consul kv put config/payment-service/application.yml "$(cat application.yml)"

获取数据

consul kv get config/payment-service/application.yml

3. 配置Spring项目从Consul获取配置

在Spring项目中,配置 bootstrap.yml 文件,以便应用在启动时能够连接到Consul,并从中获取配置。

创建 bootstrap.yml

spring:
  application:
    name: cloud-payment-service

  cloud:
    consul:
      host: localhost
      port: 8500
      config:
        enabled: true
        prefix: config/payment-service
        default-context: application
        profile-separator: '-'
        format: YAML
        data-key: data

4. 添加Spring Cloud Consul依赖

在Spring Boot项目的 pom.xml 文件中添加Spring Cloud Consul的依赖:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

5. 动态配置刷新

启用Spring Cloud Consul的动态配置刷新功能:

spring:
  cloud:
    consul:
      config:
        watch:
          enabled: true
          wait-time: 30s # 将轮询时间调整为30秒

总结

通过上述配置和步骤,Consul的Key/Value数据可以持久化存储在磁盘上,以确保数据的持久性和高可用性。Spring项目可以通过Spring Cloud Consul从Consul中获取并动态刷新配置,从而实现配置的集中管理和灵活更新。

更多详细信息可以参考 Key/Value 官方文档