camellia: java.io.IOException: Connection reset by peer
Module: camellia-redis-proxy Version: 1.2.14 Content:
Hi there,
I just wanted to say thanks so much for the dev work to bring this proxy and I have a question, I wonder if there is anything wrong in my configuration since I couldn’t figure out the reason I get these errors when I run start.sh
_________ .__ .__ .__
\_ ___ \_____ _____ ____ | | | | |__|____
/ \ \/\__ \ / \_/ __ \| | | | | \__ \
\ \____/ __ \| Y Y \ ___/| |_| |_| |/ __ \_
\______ (____ /__|_| /\___ >____/____/__(____ /
\/ \/ \/ \/ \/
:: Camellia-Redis-Proxy-Server :: (1.2.14)
2023-08-18 17:52:51,654 INFO main c.n.n.c.r.p.b.Application:50 - Starting Application on server.zakaria.website with PID 92124 (/root/camellia-redis-proxy-1.2.14/BOOT-INF/classes started by root in /root/camellia-redis-proxy-1.2.14)
2023-08-18 17:52:51,666 INFO main c.n.n.c.r.p.b.Application:654 - No active profile set, falling back to default profiles: default
2023-08-18 17:52:51,788 INFO main o.s.c.a.AnnotationConfigApplicationContext:592 - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2f410acf: startup date [Fri Aug 18 17:52:51 UTC 2023]; root of context hierarchy
2023-08-18 17:52:52,981 INFO main c.n.n.c.r.p.p.DefaultBeanFactory:41 - try init com.netease.nim.camellia.redis.proxy.command.DefaultQueueFactory
2023-08-18 17:52:52,981 INFO main c.n.n.c.r.p.p.DefaultBeanFactory:43 - init com.netease.nim.camellia.redis.proxy.command.DefaultQueueFactory success
2023-08-18 17:52:53,005 INFO main c.n.n.c.r.p.p.DefaultBeanFactory:41 - try init com.netease.nim.camellia.redis.proxy.conf.FileBasedProxyDynamicConfLoader
2023-08-18 17:52:53,006 INFO main c.n.n.c.r.p.p.DefaultBeanFactory:43 - init com.netease.nim.camellia.redis.proxy.conf.FileBasedProxyDynamicConfLoader success
2023-08-18 17:52:53,010 INFO main c.n.n.c.r.p.c.ProxyDynamicConf:72 - ProxyDynamicConf updated, conf.size = 14, conf = {proxy.frontend.tls.key.file=rediskey.pem, proxy.frontend.tls.cert.file.path=/etc/redis/cert/redis.pem, proxy.frontend.tls.cert.file=redis.pem, proxy.frontend.tls.ca.cert.file=ca.pem, proxy.upstream.tls.cert.file=client.pem, proxy.upstream.tls.key.file=clientkey.pem, proxy.upstream.tls.ca.cert.file.path=/etc/redis/cert/ca.pem, proxy.frontend.tls.key.file.path=/etc/redis/cert/rediskey.pem, proxy.frontend.tls.ca.cert.file.path=/etc/redis/cert/ca.pem, proxy.upstream.tls.cert.file.path=/etc/redis/cert/client.pem, proxy.upstream.tls.config=[{"resource":"redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384","ca.cert.file.path":"/etc/redis/cert/ca.pem","cert.file.path":"/etc/redis/cert/client.pem","key.file.path":"/etc/redis/cert/clientkey.pem"}], proxy.upstream.tls.key.file.path=/etc/redis/cert/clientkey.pem, proxy.cluster.mode.nodes=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384, proxy.upstream.tls.ca.cert.file=ca.pem}
2023-08-18 17:52:53,027 INFO main c.n.n.c.r.p.c.ProxyDynamicConf:52 - ProxyDynamicConf init, loader = com.netease.nim.camellia.redis.proxy.conf.FileBasedProxyDynamicConfLoader, reloadIntervalSeconds = 600
2023-08-18 17:52:53,032 INFO main c.n.n.c.r.p.u.c.RedisConnectionHub:92 - RedisConnectionHub, connectTimeoutMillis = 1000, heartbeatIntervalSeconds = 60, heartbeatTimeoutMillis = 10000
2023-08-18 17:52:53,035 INFO main c.n.n.c.r.p.u.c.RedisConnectionHub:107 - RedisConnectionHub, failCountThreshold = 5, failBanMillis = 5000
2023-08-18 17:52:53,036 INFO main c.n.n.c.r.p.u.c.RedisConnectionHub:111 - RedisConnectionHub, closeIdleConnection = true, checkIdleConnectionThresholdSeconds = 600, closeIdleConnectionDelaySeconds = 60
2023-08-18 17:52:53,037 INFO main c.n.n.c.r.p.u.c.RedisConnectionHub:122 - RedisConnectionHub, so_keepalive = true, tcp_no_delay = true, tcp_quick_ack = false, so_rcvbuf = 10485760, so_sndbuf = 10485760, write_buffer_water_mark_Low = 131072, write_buffer_water_mark_high = 524288
2023-08-18 17:52:53,038 INFO main c.n.n.c.r.p.p.DefaultBeanFactory:41 - try init com.netease.nim.camellia.redis.proxy.tls.upstream.DefaultProxyUpstreamTlsProvider
2023-08-18 17:52:53,039 INFO main c.n.n.c.r.p.p.DefaultBeanFactory:43 - init com.netease.nim.camellia.redis.proxy.tls.upstream.DefaultProxyUpstreamTlsProvider success
2023-08-18 17:52:53,167 WARN main c.n.n.c.r.p.t.u.DefaultProxyUpstreamTlsProvider:78 - illegal upstream ssl config, tls disable, resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,169 INFO main c.n.n.c.r.p.u.c.RedisConnectionHub:129 - RedisConnectionHub, ProxyUpstreamTlsProvider = com.netease.nim.camellia.redis.proxy.tls.upstream.DefaultProxyUpstreamTlsProvider, init = true
2023-08-18 17:52:53,189 INFO main c.n.n.c.r.p.u.u.ScheduledResourceChecker:32 - ScheduledResourceChecker start, intervalSeconds = 5
2023-08-18 17:52:53,189 INFO main c.n.n.c.r.p.u.UpstreamRedisClientTemplateFactory:206 - CamelliaRedisProxy init, type = LOCAL
2023-08-18 17:52:53,213 INFO main c.n.n.c.r.p.u.UpstreamRedisClientTemplate:78 - UpstreamRedisClientTemplate multiWriteMode init, bid = -1, bgroup = local, multiWriteMode = FIRST_RESOURCE_ONLY
2023-08-18 17:52:53,271 INFO main c.n.n.c.r.p.u.c.RedisConnection:141 - RedisConnection[@127.0.0.1:6383][id=1] try connect...
2023-08-18 17:52:53,454 INFO main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:382 - tryRenew, connection = RedisConnection[@127.0.0.1:6383][id=1], resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,468 INFO camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:152 - RedisConnection[@127.0.0.1:6383][id=1] connect success
2023-08-18 17:52:53,472 INFO camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:430 - RedisConnection[@127.0.0.1:6383][id=1] send `PING` command
2023-08-18 17:52:53,524 WARN camellia-redis-connection-7-1 i.n.c.DefaultChannelPipeline:1152 - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:254)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,526 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:146 - RedisConnection[@127.0.0.1:6383][id=1] disconnect
2023-08-18 17:52:53,527 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:471 - RedisConnection[@127.0.0.1:6383][id=1] stopping, grace = false
2023-08-18 17:52:53,530 ERROR camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:443 - RedisConnection[@127.0.0.1:6383][id=1] send `PING` command fail, reply = ERR proxy upstream connection not available
2023-08-18 17:52:53,531 ERROR camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:395 - RedisConnection[@127.0.0.1:6383][id=1] initialize fail
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ping fail
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.ping(RedisConnection.java:444)
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.initialize(RedisConnection.java:367)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,538 ERROR main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:386 - tryRenew error, host = 127.0.0.1, port = 6383, resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ERR proxy upstream connection not available
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.clusterNodes(RedisClusterSlotInfo.java:439)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.tryRenew(RedisClusterSlotInfo.java:384)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.renew(RedisClusterSlotInfo.java:278)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.renew0(RedisClusterClient.java:113)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.start(RedisClusterClient.java:96)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.lambda$get$2(UpstreamRedisClientFactory.java:77)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:74)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:240)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.update(UpstreamRedisClientTemplate.java:662)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:122)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:94)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.initLocal(UpstreamRedisClientTemplateFactory.java:234)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.init(UpstreamRedisClientTemplateFactory.java:208)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.<init>(UpstreamRedisClientTemplateFactory.java:58)
at com.netease.nim.camellia.redis.proxy.util.ConfigInitUtil.initUpstreamClientTemplateFactory(ConfigInitUtil.java:27)
at com.netease.nim.camellia.redis.proxy.command.CommandInvoker.<init>(CommandInvoker.java:37)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration.redisProxyBoot(CamelliaRedisProxyConfiguration.java:67)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.CGLIB$redisProxyBoot$3(<generated>)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3$$FastClassBySpringCGLIB$$e15a182b.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.redisProxyBoot(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.netease.nim.camellia.redis.proxy.bootstrap.Application.main(Application.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2023-08-18 17:52:53,540 ERROR camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:498 - RedisConnection[@127.0.0.1:6383][id=1] stopped, pendingCommands = 1, cachedCommands = 1 return NOT_AVAILABLE
2023-08-18 17:52:53,540 INFO main c.n.n.c.r.p.u.c.RedisConnection:141 - RedisConnection[@127.0.0.1:6381][id=2] try connect...
2023-08-18 17:52:53,543 INFO main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:382 - tryRenew, connection = RedisConnection[@127.0.0.1:6381][id=2], resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,556 INFO camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:152 - RedisConnection[@127.0.0.1:6381][id=2] connect success
2023-08-18 17:52:53,557 INFO camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:430 - RedisConnection[@127.0.0.1:6381][id=2] send `PING` command
2023-08-18 17:52:53,560 WARN camellia-redis-connection-7-1 i.n.c.DefaultChannelPipeline:1152 - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:254)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,560 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:146 - RedisConnection[@127.0.0.1:6381][id=2] disconnect
2023-08-18 17:52:53,560 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:471 - RedisConnection[@127.0.0.1:6381][id=2] stopping, grace = false
2023-08-18 17:52:53,561 ERROR main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:386 - tryRenew error, host = 127.0.0.1, port = 6381, resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ERR proxy upstream connection not available
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.clusterNodes(RedisClusterSlotInfo.java:439)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.tryRenew(RedisClusterSlotInfo.java:384)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.renew(RedisClusterSlotInfo.java:278)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.renew0(RedisClusterClient.java:113)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.start(RedisClusterClient.java:96)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.lambda$get$2(UpstreamRedisClientFactory.java:77)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:74)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:240)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.update(UpstreamRedisClientTemplate.java:662)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:122)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:94)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.initLocal(UpstreamRedisClientTemplateFactory.java:234)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.init(UpstreamRedisClientTemplateFactory.java:208)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.<init>(UpstreamRedisClientTemplateFactory.java:58)
at com.netease.nim.camellia.redis.proxy.util.ConfigInitUtil.initUpstreamClientTemplateFactory(ConfigInitUtil.java:27)
at com.netease.nim.camellia.redis.proxy.command.CommandInvoker.<init>(CommandInvoker.java:37)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration.redisProxyBoot(CamelliaRedisProxyConfiguration.java:67)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.CGLIB$redisProxyBoot$3(<generated>)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3$$FastClassBySpringCGLIB$$e15a182b.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.redisProxyBoot(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.netease.nim.camellia.redis.proxy.bootstrap.Application.main(Application.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2023-08-18 17:52:53,562 INFO main c.n.n.c.r.p.u.c.RedisConnection:141 - RedisConnection[@127.0.0.1:6384][id=3] try connect...
2023-08-18 17:52:53,564 INFO main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:382 - tryRenew, connection = RedisConnection[@127.0.0.1:6384][id=3], resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,561 ERROR camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:498 - RedisConnection[@127.0.0.1:6381][id=2] stopped, pendingCommands = 1, cachedCommands = 1 return NOT_AVAILABLE
2023-08-18 17:52:53,565 INFO camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:152 - RedisConnection[@127.0.0.1:6384][id=3] connect success
2023-08-18 17:52:53,568 INFO camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:430 - RedisConnection[@127.0.0.1:6384][id=3] send `PING` command
2023-08-18 17:52:53,572 ERROR camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:443 - RedisConnection[@127.0.0.1:6381][id=2] send `PING` command fail, reply = ERR proxy upstream connection not available
2023-08-18 17:52:53,571 WARN camellia-redis-connection-7-1 i.n.c.DefaultChannelPipeline:1152 - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:254)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,572 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:146 - RedisConnection[@127.0.0.1:6384][id=3] disconnect
2023-08-18 17:52:53,572 ERROR camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:395 - RedisConnection[@127.0.0.1:6381][id=2] initialize fail
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ping fail
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.ping(RedisConnection.java:444)
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.initialize(RedisConnection.java:367)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,573 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:471 - RedisConnection[@127.0.0.1:6384][id=3] stopping, grace = false
2023-08-18 17:52:53,573 ERROR camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:443 - RedisConnection[@127.0.0.1:6384][id=3] send `PING` command fail, reply = ERR proxy upstream connection not available
2023-08-18 17:52:53,573 ERROR camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:395 - RedisConnection[@127.0.0.1:6384][id=3] initialize fail
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ping fail
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.ping(RedisConnection.java:444)
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.initialize(RedisConnection.java:367)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,574 ERROR main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:386 - tryRenew error, host = 127.0.0.1, port = 6384, resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ERR proxy upstream connection not available
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.clusterNodes(RedisClusterSlotInfo.java:439)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.tryRenew(RedisClusterSlotInfo.java:384)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.renew(RedisClusterSlotInfo.java:278)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.renew0(RedisClusterClient.java:113)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.start(RedisClusterClient.java:96)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.lambda$get$2(UpstreamRedisClientFactory.java:77)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:74)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:240)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.update(UpstreamRedisClientTemplate.java:662)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:122)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:94)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.initLocal(UpstreamRedisClientTemplateFactory.java:234)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.init(UpstreamRedisClientTemplateFactory.java:208)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.<init>(UpstreamRedisClientTemplateFactory.java:58)
at com.netease.nim.camellia.redis.proxy.util.ConfigInitUtil.initUpstreamClientTemplateFactory(ConfigInitUtil.java:27)
at com.netease.nim.camellia.redis.proxy.command.CommandInvoker.<init>(CommandInvoker.java:37)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration.redisProxyBoot(CamelliaRedisProxyConfiguration.java:67)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.CGLIB$redisProxyBoot$3(<generated>)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3$$FastClassBySpringCGLIB$$e15a182b.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.redisProxyBoot(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.netease.nim.camellia.redis.proxy.bootstrap.Application.main(Application.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2023-08-18 17:52:53,575 INFO main c.n.n.c.r.p.u.c.RedisConnection:141 - RedisConnection[@127.0.0.1:6380][id=4] try connect...
2023-08-18 17:52:53,576 INFO main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:382 - tryRenew, connection = RedisConnection[@127.0.0.1:6380][id=4], resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,576 ERROR camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:498 - RedisConnection[@127.0.0.1:6384][id=3] stopped, pendingCommands = 1, cachedCommands = 1 return NOT_AVAILABLE
2023-08-18 17:52:53,579 INFO camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:152 - RedisConnection[@127.0.0.1:6380][id=4] connect success
2023-08-18 17:52:53,579 INFO camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:430 - RedisConnection[@127.0.0.1:6380][id=4] send `PING` command
2023-08-18 17:52:53,581 WARN camellia-redis-connection-7-1 i.n.c.DefaultChannelPipeline:1152 - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:254)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,583 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:146 - RedisConnection[@127.0.0.1:6380][id=4] disconnect
2023-08-18 17:52:53,585 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:471 - RedisConnection[@127.0.0.1:6380][id=4] stopping, grace = false
2023-08-18 17:52:53,586 ERROR camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:443 - RedisConnection[@127.0.0.1:6380][id=4] send `PING` command fail, reply = ERR proxy upstream connection not available
2023-08-18 17:52:53,586 ERROR camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:395 - RedisConnection[@127.0.0.1:6380][id=4] initialize fail
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ping fail
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.ping(RedisConnection.java:444)
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.initialize(RedisConnection.java:367)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,587 ERROR main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:386 - tryRenew error, host = 127.0.0.1, port = 6380, resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ERR proxy upstream connection not available
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.clusterNodes(RedisClusterSlotInfo.java:439)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.tryRenew(RedisClusterSlotInfo.java:384)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.renew(RedisClusterSlotInfo.java:278)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.renew0(RedisClusterClient.java:113)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.start(RedisClusterClient.java:96)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.lambda$get$2(UpstreamRedisClientFactory.java:77)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:74)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:240)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.update(UpstreamRedisClientTemplate.java:662)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:122)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:94)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.initLocal(UpstreamRedisClientTemplateFactory.java:234)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.init(UpstreamRedisClientTemplateFactory.java:208)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.<init>(UpstreamRedisClientTemplateFactory.java:58)
at com.netease.nim.camellia.redis.proxy.util.ConfigInitUtil.initUpstreamClientTemplateFactory(ConfigInitUtil.java:27)
at com.netease.nim.camellia.redis.proxy.command.CommandInvoker.<init>(CommandInvoker.java:37)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration.redisProxyBoot(CamelliaRedisProxyConfiguration.java:67)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.CGLIB$redisProxyBoot$3(<generated>)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3$$FastClassBySpringCGLIB$$e15a182b.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.redisProxyBoot(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.netease.nim.camellia.redis.proxy.bootstrap.Application.main(Application.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2023-08-18 17:52:53,588 INFO main c.n.n.c.r.p.u.c.RedisConnection:141 - RedisConnection[@127.0.0.1:6382][id=5] try connect...
2023-08-18 17:52:53,589 INFO main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:382 - tryRenew, connection = RedisConnection[@127.0.0.1:6382][id=5], resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,589 ERROR camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:498 - RedisConnection[@127.0.0.1:6380][id=4] stopped, pendingCommands = 1, cachedCommands = 1 return NOT_AVAILABLE
2023-08-18 17:52:53,590 INFO camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:152 - RedisConnection[@127.0.0.1:6382][id=5] connect success
2023-08-18 17:52:53,590 INFO camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:430 - RedisConnection[@127.0.0.1:6382][id=5] send `PING` command
2023-08-18 17:52:53,592 WARN camellia-redis-connection-7-1 i.n.c.DefaultChannelPipeline:1152 - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:254)
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132)
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:357)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,593 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:146 - RedisConnection[@127.0.0.1:6382][id=5] disconnect
2023-08-18 17:52:53,593 WARN camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:471 - RedisConnection[@127.0.0.1:6382][id=5] stopping, grace = false
2023-08-18 17:52:53,593 ERROR camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:443 - RedisConnection[@127.0.0.1:6382][id=5] send `PING` command fail, reply = ERR proxy upstream connection not available
2023-08-18 17:52:53,594 ERROR camellia-redis-connection-initialize-8-1 c.n.n.c.r.p.u.c.RedisConnection:395 - RedisConnection[@127.0.0.1:6382][id=5] initialize fail
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ping fail
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.ping(RedisConnection.java:444)
at com.netease.nim.camellia.redis.proxy.upstream.connection.RedisConnection.initialize(RedisConnection.java:367)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
2023-08-18 17:52:53,595 ERROR main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:386 - tryRenew error, host = 127.0.0.1, port = 6382, resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
com.netease.nim.camellia.redis.base.exception.CamelliaRedisException: ERR proxy upstream connection not available
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.clusterNodes(RedisClusterSlotInfo.java:439)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.tryRenew(RedisClusterSlotInfo.java:384)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterSlotInfo.renew(RedisClusterSlotInfo.java:278)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.renew0(RedisClusterClient.java:113)
at com.netease.nim.camellia.redis.proxy.upstream.cluster.RedisClusterClient.start(RedisClusterClient.java:96)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.lambda$get$2(UpstreamRedisClientFactory.java:77)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:74)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientFactory$Default.get(UpstreamRedisClientFactory.java:240)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.update(UpstreamRedisClientTemplate.java:662)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:122)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplate.<init>(UpstreamRedisClientTemplate.java:94)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.initLocal(UpstreamRedisClientTemplateFactory.java:234)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.init(UpstreamRedisClientTemplateFactory.java:208)
at com.netease.nim.camellia.redis.proxy.upstream.UpstreamRedisClientTemplateFactory.<init>(UpstreamRedisClientTemplateFactory.java:58)
at com.netease.nim.camellia.redis.proxy.util.ConfigInitUtil.initUpstreamClientTemplateFactory(ConfigInitUtil.java:27)
at com.netease.nim.camellia.redis.proxy.command.CommandInvoker.<init>(CommandInvoker.java:37)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration.redisProxyBoot(CamelliaRedisProxyConfiguration.java:67)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.CGLIB$redisProxyBoot$3(<generated>)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3$$FastClassBySpringCGLIB$$e15a182b.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)
at com.netease.nim.camellia.redis.proxy.springboot.CamelliaRedisProxyConfiguration$$EnhancerBySpringCGLIB$$9cb61bc3.redisProxyBoot(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:881)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.netease.nim.camellia.redis.proxy.bootstrap.Application.main(Application.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
2023-08-18 17:52:53,596 INFO main c.n.n.c.r.p.u.c.RedisConnection:141 - RedisConnection[@127.0.0.1:6379][id=6] try connect...
2023-08-18 17:52:53,596 INFO main c.n.n.c.r.p.u.c.RedisClusterSlotInfo:382 - tryRenew, connection = RedisConnection[@127.0.0.1:6379][id=6], resource = redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
2023-08-18 17:52:53,597 ERROR camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:498 - RedisConnection[@127.0.0.1:6382][id=5] stopped, pendingCommands = 1, cachedCommands = 1 return NOT_AVAILABLE
2023-08-18 17:52:53,599 INFO camellia-redis-connection-7-1 c.n.n.c.r.p.u.c.RedisConnection:152 - RedisConnection[@127.0.0.1:6379][id=6] connect success
2023-08-18 17:52:53,599 INFO camellia-redis-connection-initialize-8-2 c.n.n.c.r.p.u.c.RedisConnection:430 - RedisConnection[@127.0.0.1:6379][id=6] send `PING` command
I checked redis cluster log and I get this error whenever I run start.sh
34824:S 18 Aug 2023 17:52:53.601 # Error accepting a client connection: error:0A00010B:SSL routines::wrong version number
These are my configurations:-
application.yml
server:
port: 7619
spring:
application:
name: camellia-redis-proxy-server
camellia-redis-proxy:
cluster-mode-enable: true
cport: 76190
tls-port: 6379
proxy-frontend-tls-provider-class-name: com.netease.nim.camellia.redis.proxy.tls.frontend.DefaultProxyFrontendTlsProvider
password: mypassword
transpond:
local:
resource: redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
redis-conf:
proxy-upstream-tls-provider-class-name: com.netease.nim.camellia.redis.proxy.tls.upstream.DefaultProxyUpstreamTlsProvider
camellia-redis-proxy.properties
proxy.cluster.mode.nodes=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
proxy.frontend.tls.ca.cert.file=ca.pem
proxy.frontend.tls.ca.cert.file.path=/etc/redis/cert/ca.pem
proxy.frontend.tls.cert.file=redis.pem
proxy.frontend.tls.cert.file.path=/etc/redis/cert/redis.pem
proxy.frontend.tls.key.file=rediskey.pem
proxy.frontend.tls.key.file.path=/etc/redis/cert/rediskey.pem
proxy.upstream.tls.ca.cert.file=ca.pem
proxy.upstream.tls.ca.cert.file.path=/etc/redis/cert/ca.pem
proxy.upstream.tls.cert.file=client.pem
proxy.upstream.tls.cert.file.path=/etc/redis/cert/client.pem
proxy.upstream.tls.key.file=clientkey.pem
proxy.upstream.tls.key.file.path=/etc/redis/cert/clientkey.pem
proxy.upstream.tls.config=[{"resource":"redis-cluster://@127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384","ca.cert.file.path":"/etc/redis/cert/ca.pem","cert.file.path":"/etc/redis/cert/client.pem","key.file.path":"/etc/redis/cert/clientkey.pem"}]
Looking forward for any hint, @caojiajun with thanks.
Zakaria.
About this issue
- Original URL
- State: closed
- Created 10 months ago
- Comments: 25 (9 by maintainers)
your
application.ymlseems wrong indent, redis-conf is the child node of transpondhttps://github.com/netease-im/camellia/blob/master/docs/redis-proxy/quickstart/build-snapshot-package.md
thank you for your testing!
you can create a PR to add it to quick_start documents, thank you very much!
the ssl bug has fixed in #133
#131 #132 these two new features, could you pls create PR to support it?
my fault, it’s a bug SSL bidirectional authentication not effective in 1.2.14 i will fix it in v1.2.15
in v1.2.14, you can use
info clientsto get client connect num#132 camellia-redis-proxy supprt client list command to get proxy client info #131 camellia-redis-proxy support proxy_protocol to get real client ip in 4-layer-proxy
if using haproxy before camellia-redis-proxy, from the perspective of proxy, client-ip is haproxy-ip rather than real client ip, unless camellia-redis-proxy support
proxy-protocol, which currently not supportedyou should setting no-tls-port to 0 to disabled it, no-tls-port priority higher than tls-port
https://redis.io/commands/client-list/this command?you want this command resp return the clients of proxy or clients of upstream redis?
if client access proxy as a standalone redis:
cluster-mode-enableshould setting falseproxy.cluster.mode.nodes=xxxshould delete in configthis is frontend:
cluster-mode-enable:truemeans multi proxy nodes disguised as a redis clusterproxy.cluster.mode.nodes=xxxmeans the proxy nodes list to proxy discovery each other.tls-portmeans client access proxy in tls connectproxy-frontend-tls-provider-class-namemeans the frontend tls providerproxy.frontend.tls.xxxxxxconfigs means the frontend tls configthis is upstream/backend:
resourcedefine the upstream redis addr, supportredis://redis-sentinel://redis-cluster://andrediss://rediss-sentinel://rediss-cluster://proxy-upstream-tls-provider-class-namemeans the provider of upstream tlsproxy.upstream.tls.xxxxmeans the config of upstream tlsyou should config upstream resource in
rediss-cluster://xxxinstead ofredis-cluster://xxxhttps://github.com/netease-im/camellia/blob/master/docs/redis-proxy/auth/redis-resources.md
https://github.com/netease-im/camellia/blob/master/camellia-redis-base/src/main/java/com/netease/nim/camellia/redis/base/resource/RedisType.java