有没有可能让一个写请求从一个slave直接传递给Redis中的master?
Is it possible to let a write request pass by a slave directly to the master in Redis?
我们需要一个可以复制到其他数据中心的内存中 key/value 存储。
这是我们的要求:
1.所有数据中心必须有相同的数据库(稍微重新同步是可以接受的,比如30-60秒)。我知道我们可以只有一个主服务器,这没问题。一个数据中心只有一个数据库会是master。但是如果主服务器挂掉了,那么我们就需要选举一个新的主服务器。
2.我们需要能够向任意一个slave节点发送写请求,它会直接发送给master节点。
我知道有一个Redis集群可以接受所有的写请求,但是它不适合我们,因为数据分布在节点之间(所以,所有数据中心的所有服务器都会处理不同的数据,但我们需要在所有数据中心拥有相同的数据,因为我们只有 5% 的写入和 95% 的读取)。
是否可以用Redis实现?
我错了。我发现它实际上可以用 Redis Cluster 来完成。我们必须创建一个主节点并将所有哈希槽分配给它。之后我们必须创建从节点并复制主节点。在这种情况下,我们将进行自动故障转移,所有节点都将保留相同的数据。
设置从节点。 IE。复制一个母版我们需要使用以下内容:
./redis-trib.rb add-node --slave --master-id {master_id} {master_ip}:{master_port} {slave_ip}:{slave_port}
或者我们可以添加一个新的空母版:
./redis-trib.rb add-node {any_node_ip_in_cluster}:{port} {new_node_ip}:{port}
然后转为slave:
redis {master_ip}:{master_port}> cluster replicate {master_id}
P.S。 Redis 要求至少有 3 个主节点,但这不是集群的硬性限制。我们仍然可以只有一个主节点,这完全没问题。
我们需要一个可以复制到其他数据中心的内存中 key/value 存储。
这是我们的要求:
1.所有数据中心必须有相同的数据库(稍微重新同步是可以接受的,比如30-60秒)。我知道我们可以只有一个主服务器,这没问题。一个数据中心只有一个数据库会是master。但是如果主服务器挂掉了,那么我们就需要选举一个新的主服务器。
2.我们需要能够向任意一个slave节点发送写请求,它会直接发送给master节点。
我知道有一个Redis集群可以接受所有的写请求,但是它不适合我们,因为数据分布在节点之间(所以,所有数据中心的所有服务器都会处理不同的数据,但我们需要在所有数据中心拥有相同的数据,因为我们只有 5% 的写入和 95% 的读取)。
是否可以用Redis实现?
我错了。我发现它实际上可以用 Redis Cluster 来完成。我们必须创建一个主节点并将所有哈希槽分配给它。之后我们必须创建从节点并复制主节点。在这种情况下,我们将进行自动故障转移,所有节点都将保留相同的数据。
设置从节点。 IE。复制一个母版我们需要使用以下内容:
./redis-trib.rb add-node --slave --master-id {master_id} {master_ip}:{master_port} {slave_ip}:{slave_port}
或者我们可以添加一个新的空母版:
./redis-trib.rb add-node {any_node_ip_in_cluster}:{port} {new_node_ip}:{port}
然后转为slave:
redis {master_ip}:{master_port}> cluster replicate {master_id}
P.S。 Redis 要求至少有 3 个主节点,但这不是集群的硬性限制。我们仍然可以只有一个主节点,这完全没问题。