我使用“redis-trib create”共同创建了一个redis集群,我有几个关于redis-cluster的问题:
我正在尝试查找有关如何配置和使用具有客户端一致性散列的Lettuce Redis 客户端的参考资料。
这种分片方法在Jedis 客户端的ShardedJedis 中实现,并在Redis 分区文档中进行了描述。
方法的简短描述:我们有一个环境有多个独立的 Redis 进程/节点,没有使用 Redis Cluster 或 Sentinel 的任何基于服务器的请求路由,客户端通过应用哈希函数 (key -> node_id) 在客户端。
生菜是否支持这种开箱即用的集群/分片?如果是,如何配置它以使用客户端散列?
我有4个节点,3个是主节点,其中1个是从节点.我试图添加一个简单的字符串set foo bar,但每当我这样做,我得到这个错误:
(error) CLUSTERDOWN The cluster is down
Run Code Online (Sandbox Code Playgroud)
以下是我的群集信息
127.0.0.1:7000cluster info
cluster_state:fail
cluster_slots_assigned:11
cluster_slots_ok:11
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:4
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:3
cluster_stats_messages_sent:9262
cluster_stats_messages_received:9160
Run Code Online (Sandbox Code Playgroud)
我使用的是Redis-x64-3.0.503.请让我知道如何解决这个问题
群集节点:
87982f22cf8fb12c1247a74a2c26cdd1b84a3b88 192.168.2.32:7000 slave bc1c56ef4598fb4ef9d26c804c5fabd462415f71 1492000375488 1492000374508 3 connected
9527ba919a8dcfaeb33d25ef805e0f679276dc8d 192.168.2.35:7000 master - 1492000375488 1492000374508 2 connected 16380
ff999fd6cbe0e843d1a49f7bbac1cb759c3a2d47 192.168.2.33:7000 master - 1492000375488 1492000374508 0 connected 16381
bc1c56ef4598fb4ef9d26c804c5fabd462415f71 127.0.0.1:7000 myself,master - 0 0 3 connected 1-8 16383
Run Code Online (Sandbox Code Playgroud) 我试图删除 redis master 和 slave 上的所有键,但是当我执行flushall或flushdb从redis-climaster 上执行时,它只删除 master 上的键,反之亦然,如果我删除 slave 上的键,它只会删除 slave 上的键。
我应该使用什么命令来删除 master 和 slave(s) 上的所有密钥?
我需要为此启用集群支持吗?因为现在它在我的设置中被禁用。
还有一个问题,为什么在 usingflushall或flushdbfrom 的情况下没有复制redis-cli?
我使用以下命令启动了我的 redis docker 容器:
docker run --privileged=true -p 6379:6379 --name TestRedis -d redis
Run Code Online (Sandbox Code Playgroud)
当我尝试在集群模式下从 Spring Redis 使用它时,出现错误:
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR This instance has cluster support disabled
at redis.clients.jedis.Protocol.processError(Protocol.java:127)
at redis.clients.jedis.Protocol.process(Protocol.java:161)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.java:285)
at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:291)
at redis.clients.jedis.Jedis.clusterSlots(Jedis.java:3376)
at redis.clients.jedis.JedisClusterInfoCache.discoverClusterNodesAndSlots(JedisClusterInfoCache.java:54)
at redis.clients.jedis.JedisClusterConnectionHandler.initializeSlotsCache(JedisClusterConnectionHandler.java:39)
at redis.clients.jedis.JedisClusterConnectionHandler.<init>(JedisClusterConnectionHandler.java:17)
at redis.clients.jedis.JedisSlotBasedConnectionHandler.<init>(JedisSlotBasedConnectionHandler.java:20)
at redis.clients.jedis.JedisSlotBasedConnectionHandler.<init>(JedisSlotBasedConnectionHandler.java:15)
at redis.clients.jedis.BinaryJedisCluster.<init>(BinaryJedisCluster.java:41)
at redis.clients.jedis.JedisCluster.<init>(JedisCluster.java:83)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createCluster(JedisConnectionFactory.java:306)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createCluster(JedisConnectionFactory.java:280)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.afterPropertiesSet(JedisConnectionFactory.java:241)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 110 common frames omitted
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能使其以集群方式运行?
我打算创建一个高可用的 Redis 集群。在阅读了许多关于构建 Redis 集群的文章后,我很困惑。那么究竟是什么
Redis Sentinel Master1 Slave1 Slave2 集群的进一步问题:
关于 Redis 多节点分片集群的更多问题:
我不确定这两个解决方案是否是唯一的解决方案。希望你们能帮助我理解Redis的架构。抱歉问了这么多问题。
我想在基于 docker 的环境中创建 Redis 集群,任何支持复制并允许我使用 docker-compose 创建集群的 docker 基础镜像都会有所帮助。
我们正在寻找一个可以支持索引的内存数据库中的开源.
用例是我们有很多项目会在很大程度上增长.每个项目都有一些我们需要查询的字段.目前,我们将数据存储在应用程序的内存中.但是随着数据的增加,我们必须考虑分发/分片数据库.
我们已经看了几个选项
可以使用 Redis集群,但它没有索引或SQL查询等概念.
Apache Ignite既可以在内存中,也可以分发,也可以提供SQL查询.但是,问题是ignite会将所有查询激活到所有主节点,因此最终结果将比这些查询中最慢的结果慢.这似乎是一个问题,因为许多节点中的非执行/慢节点可能会真正减慢应用程序的速度.进一步点燃,从主服务器完成读取并且不使用从服务器,因此难以扩展查询.增加节点将产生负面影响,因为查询的数量将增加,甚至会更慢.
我们对其他解决方案持开放态度,但想知道多查询是否会成为一个问题(如hazelcast).
对于我们的用例,理想的解决方案是内存数据库,其索引可以通过增加从站的数量来读取.使其分布/分片将导致多个查询,我们不情愿,因为一个错误的节点可能会降低整个系统的速度.
环境:Redis 集群
你好。我的要求是:
查找value-B 想到key-A (过程是使用key-A 查找value-A,value-A == key-B,使用key-B 查找value-B )
我的lua看起来像这样:
[root@ml-208 redis]# cat x-userid-tag.lua
local f3=redis.call('HGET',KEYS[1],'1'); local f4=redis.call('HGET',f3,'1') ; return f4;
Run Code Online (Sandbox Code Playgroud)
我的redis命令:
./bin/redis-cli -c -h 192.168.33.203 -p 6000 --eval ./x-userid-tag.lua 0C559F3FEF368A8B53DE69C267423F0E
错误消息:(错误)ERR 运行脚本时出错(调用 f_9bd20ba85f7bcc8ee1f6b55c4158bfa93eba2221):@user_script:2:@user_script:2:Lua 脚本尝试访问集群节点中的非本地密钥
我在集群数据库(本地)上使用 Redis。我正在尝试该MULTI命令,但似乎不起作用。单独的命令有效,我可以看到碎片如何移动。
为了工作我还应该做些什么吗MULTI?该文档不清楚它是否应该起作用。https://redis.io/topics/cluster-spec
在下面的示例中,我仅设置各个键(注意 port=cluster 如何更改),然后尝试使用多重命令。该命令在EXEC调用之前执行
127.0.0.1:30001> set a 1
-> Redirected to slot [15495] located at 127.0.0.1:30003
OK
127.0.0.1:30003> set b 2
-> Redirected to slot [3300] located at 127.0.0.1:30001
OK
127.0.0.1:30001> MULTI
OK
127.0.0.1:30001> HSET c f val
-> Redirected to slot [7365] located at 127.0.0.1:30002
(integer) 1
127.0.0.1:30002> HSET c f2 val2
(integer) 1
127.0.0.1:30002> EXEC
(error) ERR EXEC without MULTI
127.0.0.1:30002> HGET c f
"val"
127.0.0.1:30002>
Run Code Online (Sandbox Code Playgroud)