Skip to content

网关双中心配置

ehcache缓存配置

网关从3.4.6开始之前的版本用到本地缓存是ehcache,3.4.6之后的版本使用的Caffeine ehcache中多个节点的缓存同步配置如下:

xml
<!-- 网关多节点集群配置 -->
<!-- 多节点之间的缓存需要添加如上的配置,在rmiUrls中添加其余节点的ip和本地缓存的端口,后面在跟上所要同步的缓存块的名称,如果需要同步多个节点中间使用“|”隔开,注意:每个ip:port+ 缓存块名称后面没有“/” -->
<cacheManagerPeerProviderFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
        properties="peerDiscovery=manual,peerDiscovery=manual,rmiUrls=//127.0.0.1:11112/route|127.0.0.1:11113/route"/>

        <!--本地缓存的配置,port可指定本地缓存的端口-->
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost,port=11111,socketTimeoutMillis=2000"/>

        <!-- 指定的命名空间route -->
        <!--timeToLiveSeconds 缓存自创建日期起至失效时的间隔时间-->
        <!--timeToIdleSeconds:缓存创建以后,最后一次访问缓存的日期至失效之时的时间间隔-->
<cache
name="route"
eternal="false"
maxElementsInMemory="100"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="0"
timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU"/>

eureka配置

配置示例中,dc01代表中心1,dc02代表中心2

中心1配置示例

yaml
eureka:
  instance:
    hostname: ${hostname:localhost}
    prefer-ip-address: true
    lease-expiration-duration-in-seconds: 15 #服务过期时间
    lease-renewal-interval-in-seconds: 5 #服务刷新时间,每5s心跳一次
    metadata-map:
      #本服务地区
      zone: dc01
  client:
    #是否注册至eureka
    register-with-eureka: true
    #是否获取注册表
    fetch-registry: true
    #优先选择本zone服务
    prefer-same-zone-eureka: true
    #区域
    region: changshu
    #可用地区
    availability-zones:
      #区域下的可用地区
      changshu: dc01,dc02
    #地区对应的url
    service-url:
      dc01: http://192.168.164.179:9527/eureka/
      dc02: http://192.168.164.180:9527/eureka/
    healthcheck:
      enabled: false
    eurekaServiceUrlPollIntervalSeconds: 60
    #设置拉取服务注册信息时间
    registry-fetch-interval-seconds: 5

中心2配置示例

yaml
eureka:
  instance:
    hostname: ${hostname:localhost}
    prefer-ip-address: true
    lease-expiration-duration-in-seconds: 15 #服务过期时间
    lease-renewal-interval-in-seconds: 5 #服务刷新时间,每5s心跳一次
    metadata-map:
      #本服务地区
      zone: dc02
  client:
    #是否注册至eureka
    register-with-eureka: true
    #是否获取注册表
    fetch-registry: true
    #优先选择本zone服务
    prefer-same-zone-eureka: true
    #区域
    region: changshu
    #可用地区
    availability-zones:
      #区域下的可用地区
      changshu: dc01,dc02
    #地区对应的url
    service-url:
      dc01: http://192.168.164.179:9527/eureka/
      dc02: http://192.168.164.180:9527/eureka/
    healthcheck:
      enabled: false
    eurekaServiceUrlPollIntervalSeconds: 60
    #设置拉取服务注册信息时间
    registry-fetch-interval-seconds: 5

redis配置

网关的redis主要用于限流令牌桶的计算的存储。

每一个中心的redis配置应该一致,每个中心默认都会使用redis01,当配置了多中心限流,并且配置的中心与redis02的id相同时,才会使用redis02进行多中心限流。

yaml
gateway:
  discovery: eureka
  doubleCenter:
    enable: true #是否启用双中心
  redis:
    redis01:
      id: dc01 #默认redis, 非双中心模式下只需配置redis01即可。
      database: 0
      lettuce:
        pool:
          max-idle: 10
          max-active: 1000
          max-wait: 1000ms
          min-idle: 5
      timeout: 100000ms
      #      cluster:
      #        nodes: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381
      host: 192.168.164.179
      port: 6379
    redis02:
      id: dc02 #双中心的另一个redis, 此处要确保另一个中心的zone名称与此处一致
      database: 0
      lettuce:
        pool:
          max-idle: 10
          max-active: 1000
          max-wait: 1000ms
          min-idle: 5
      timeout: 100000ms
      #      cluster:
      #        nodes: 127.0.0.1:7379,127.0.0.1:7380,127.0.0.1:7381
      host: 192.168.164.180
      port: 6379