标签: redis-cluster

如何设置redis集群主从?

我使用“redis-trib create”共同创建了一个redis集群,我有几个关于redis-cluster的问题:

  1. redis-trib 可以明确设置哪个主机是主,哪个主机是从吗?或任何其他方式这样做;
  2. 如何设置集群认证密码;
  3. 设置 maxmemory 时,集群如何工作?一个主机是否达到最大内存限制然后将数据存储到另一个主机?

redis-cluster

3
推荐指数
1
解决办法
4061
查看次数

如何使用客户端一致性哈希与 Lettuce Redis 客户端

我正在尝试查找有关如何配置和使用具有客户端一致性散列的Lettuce Redis 客户端的参考资料。

这种分片方法在Jedis 客户端的ShardedJedis 中实现,并在Redis 分区文档中进行了描述。

方法的简短描述:我们有一个环境有多个独立的 Redis 进程/节点,没有使用 Redis Cluster 或 Sentinel 的任何基于服务器的请求路由,客户端通过应用哈希函数 (key -> node_id) 在客户端。

生菜是否支持这种开箱即用的集群/分片?如果是,如何配置它以使用客户端散列?

java redis lettuce redis-cluster

3
推荐指数
1
解决办法
1050
查看次数

无法向Redis群集添加值 - 群集已关闭

我有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)

cluster-computing redis redis-cluster

3
推荐指数
1
解决办法
4123
查看次数

[REDIS]:如何删除主从上的所有密钥?

我试图删除 redis master 和 slave 上的所有键,但是当我执行flushallflushdbredis-climaster 上执行时,它只删除 master 上的键,反之亦然,如果我删除 slave 上的键,它只会删除 slave 上的键。

我应该使用什么命令来删除 master 和 slave(s) 上的所有密钥?

我需要为此启用集群支持吗?因为现在它在我的设置中被禁用。

还有一个问题,为什么在 usingflushallflushdbfrom 的情况下没有复制redis-cli

redis redis-cli redis-cluster

3
推荐指数
1
解决办法
8043
查看次数

如何在集群模式下运行 docker redis?

我使用以下命令启动了我的 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)

我需要做什么才能使其以集群方式运行?

java redis docker redis-cluster

3
推荐指数
2
解决办法
7394
查看次数

Sentinel和Cluster的Redis优势

我打算创建一个高可用的 Redis 集群。在阅读了许多关于构建 Redis 集群的文章后,我很困惑。那么究竟是什么

  • Redis Sentinel Master1 Slave1 Slave2 集群的优势?作为 Redis 多节点分片集群是否更可靠?
  • Redis 多节点分片集群的优势?作为Redis Sentinel Master1 Slave1 Slave2集群是否更可靠?

Redis Sentinel Master1 Slave1 Slave2 集群的进一步问题:

  • 当我有 1 个 Master 和两个 Slave 并且流量越来越高时,这个集群会变小,我怎样才能使集群变大?

关于 Redis 多节点分片集群的更多问题:

  • 为什么有这么多在单个实例上但在不同端口上运行集群的演示?这对我来说毫无意义。
  • 当我有一个包含 4 个主节点和 4 个副本的集群时,应用程序或客户端如何确保写入集群?当 Master1 和 Slave1 都快死了但我的应用程序总是写入 Master1 的 IP 时,它将不再工作。有哪些解决方案可以很好地实现分片集群,使其可供应用程序使用单个 IP 和端口找到它?保活?代理?
  • 当我使用例如 Keepalived 进行 4 主设置时 - 这不会取消不同的主吗?
  • 此外,我需要了解为什么多节点集群仅适用于在内存可用时需要写入更多数据的解决方案。为什么?对我来说,多主设置听起来不错,可以扩展。
  • 当集群未处于缓存模式时,分片集群设置不支持多键操作是否正确?

我不确定这两个解决方案是否是唯一的解决方案。希望你们能帮助我理解Redis的架构。抱歉问了这么多问题。

redis redis-sentinel redis-cluster

3
推荐指数
1
解决办法
2684
查看次数

如何在基于 docker 的环境中创建 redis-cluster

我想在基于 docker 的环境中创建 Redis 集群,任何支持复制并允许我使用 docker-compose 创建集群的 docker 基础镜像都会有所帮助。

docker redis-cluster

3
推荐指数
2
解决办法
6719
查看次数

在索引的内存数据库中寻找一个开源

我们正在寻找一个可以支持索引的内存数据库中的开源.

用例是我们有很多项目会在很大程度上增长.每个项目都有一些我们需要查询的字段.目前,我们将数据存储在应用程序的内存中.但是随着数据的增加,我们必须考虑分发/分片数据库.

我们已经看了几个选项

  1. 可以使用 Redis集群,但它没有索引或SQL查询等概念.

  2. Apache Ignite既可以在内存中,也可以分发,也可以提供SQL查询.但是,问题是ignite会将所有查询激活到所有主节点,因此最终结果将比这些查询中最慢的结果慢.这似乎是一个问题,因为许多节点中的非执行/慢节点可能会真正减慢应用程序的速度.进一步点燃,从主服务器完成读取并且不使用从服务器,因此难以扩展查询.增加节点将产生负面影响,因为查询的数量将增加,甚至会更慢.

  3. Cassandra - 可以使用cassandra中的内存中选项,但似乎每个节点的表的最大大小可以是1 GB.如果我们的表超过1 GB,我们将不得不求助于分区,这将导致cassandra进行多次查询(每个节点一个),这是一个问题(与点燃相同).不确定是否可以通过增加从属数量来扩展cassandra内存表中的读取.

我们对其他解决方案持开放态度,但想知道多查询是否会成为一个问题(如hazelcast).

对于我们的用例,理想的解决方案是内存数据库,其索引可以通过增加从站的数量来读取.使其分布/分片将导致多个查询,我们不情愿,因为一个错误的节点可能会降低整个系统的速度.

cassandra in-memory-database hazelcast ignite redis-cluster

2
推荐指数
2
解决办法
1096
查看次数

Lua 脚本尝试访问集群节点中的非本地密钥

环境: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 脚本尝试访问集群节点中的非本地密钥

lua redis redis-cluster

2
推荐指数
1
解决办法
5169
查看次数

MULTI 应该在 Redis 集群上工作吗?

我在集群数据库(本地)上使用 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)

redis redis-cluster

2
推荐指数
1
解决办法
1145
查看次数