Skip to content

Latest commit

 

History

History
175 lines (135 loc) · 4.62 KB

File metadata and controls

175 lines (135 loc) · 4.62 KB

关于redis-proxy初始化

初始化

server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  transpond:
    type: local
    local:
      type: simple
      resource: redis-cluster://@127.0.0.1:6379,127.0.0.1:6378,127.0.0.1:6377

如上配置下,redis-proxy在启动时会尝试初始化到redis-cluster://@127.0.0.1:6379,127.0.0.1:6378,127.0.0.1:6377的连接,主要是为了获取redis-cluster的初始拓扑信息,并开启定时刷新拓扑的定时任务,redis-cluster-slaves资源类型也是类似的

如果配置的是redis-sentinelredis-sentinel-slaves类型的后端,则会从sentinel节点获取master/slave的信息,并开启针对主从切换的监听(实时监听+定时刷新)

如果配置的是redis-proxiesredis-proxies-discovery类型的后端,则会从本地或者注册中心获取节点列表,并开启针对节点变更的监听(实时监听+定时刷新)

如果配置的是redis类型的后端,则没有其他逻辑

如果上述初始化流程失败,则proxy进程启动失败(但是进程不会退出)

如果不希望执行上述初始化逻辑,则可以开启延迟初始化,则初始化逻辑会在proxy收到第一个来自客户端的命令时执行(可能导致客户端的第一个命令请求变慢)

开启延迟初始化的方法:

server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  config:
    "upstream.lazy.init.enable": true
  transpond:
    type: local
    local:
      type: simple
      resource: redis-cluster://@127.0.0.1:6379,127.0.0.1:6378,127.0.0.1:6377

也可以在camellia-redis-proxy.properties里配置:

upstream.lazy.init.enable=true

预热

在开启初始化的前提下,redis-proxy启动时默认会新建对所有后端redis节点的连接,并发送ping命令(用于检查和预热),如果失败,则proxy进程启动失败(但是进程不会退出)

redis-cluster类型的后端,会发送ping给所有master节点

redis-cluster-slaves类型的后端,会发送ping给所有master节点和slave节点(取决于参数)

redis-sentinel类型的后端,会发送ping给所有master节点

redis-sentinel-slaves类型的后端,会发送ping给所有master节点和slave节点(取决于参数)

redis-proxiesredis-proxies-discovery类型的后端,会发送ping给所有节点

如果不希望启动时发送ping进行预热和检查,则可以如下方式关闭:

server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  transpond:
    type: local
    local:
      type: simple
      resource: redis-cluster://@127.0.0.1:6379,127.0.0.1:6378,127.0.0.1:6377
    redis-conf:
      preheat: false

多租户场景

对于开启多租户的proxy,初始化逻辑略有不同(remote和custom)

server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  transpond:
    type: remote
    remote:
      url: http://127.0.0.1:8080
      check-interval-millis: 5000
      dynamic: true
      bid: 1
      bgroup: default
server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  transpond:
    type: custom
    custom:
      proxy-route-conf-updater-class-name: com.netease.nim.camellia.redis.proxy.route.DynamicConfProxyRouteConfUpdater
      dynamic: true
      bid: 1
      bgroup: default
      reload-interval-millis: 600000

上述两种配置下(remote和custom),只有bid=1,bgroup=default的路由中的redis地址,会被初始化和预热,其他bid/bgroup的路由需要等来自客户端的请求后才会初始化

server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  transpond:
    type: remote
    remote:
      url: http://127.0.0.1:8080
      check-interval-millis: 5000
      dynamic: true
server:
  port: 6380
spring:
  application:
    name: camellia-redis-proxy-server

camellia-redis-proxy:
  password: pass123
  transpond:
    type: custom
    custom:
      proxy-route-conf-updater-class-name: com.netease.nim.camellia.redis.proxy.route.DynamicConfProxyRouteConfUpdater
      dynamic: true
      reload-interval-millis: 600000

上述两种配置下(remote和custom),因为没有配置初始的bid/bgroup,没有一个路由的redis地址会被初始化和预热