我打算创建一个高可用的 Redis 集群。在阅读了许多关于构建 Redis 集群的文章后,我很困惑。那么究竟是什么
Redis Sentinel Master1 Slave1 Slave2 集群的进一步问题:
关于 Redis 多节点分片集群的更多问题:
我不确定这两个解决方案是否是唯一的解决方案。希望你们能帮助我理解Redis的架构。抱歉问了这么多问题。
我有 3 个哨兵正在监视三个 redis 节点。我四处搜索,文档似乎不清楚如何最好地升级这种类型的配置。我目前使用的是 3.0.6 版,我想升级到最新的 5.0.5。我对围绕此的程序有几个问题。
升级两个大版本可以吗?我在我们的临时环境中这样做了,它似乎很好。我们使用非常基本的 redis 功能,并且版本之间没有重大变化。
顺序重要吗?我应该先升级所有的哨兵然后说redis节点,还是应该在验证redis平面后最后说哨兵平面?我应该一次做一个哨兵/redis 节点吗?
对此的任何建议或经验将不胜感激。
我们有一个redis集群,其中有一个由三个哨兵进程管理的主服务器和一个从服务器,还有一个附加的远程从服务器,托管在不同的数据中心中,以便在主服务器和从计算机发生故障时进行透明的故障转移和数据保存。
可能会发生暂时性错误,仅使主Redis进程崩溃,在这种情况下,我们希望看到从属进程被提升为主控,而远程从属被重新控制为主控。但是,哨兵似乎也可以很容易地将远程从属升级为主机,并且我们还没有找到防止这种情况的方法。
有什么方法可以将特定的从属计算机标记为不可升级,以便在发生故障转移时,哨兵将不会尝试使其成为主机?
我们有一个使用 Redis Sentinel(3 哨兵 1 主 1 从)的应用程序。我们根本不需要复制。如何关闭复制?
我有3台运行Redis和Sentinel的服务器。所有实例都在配置中
requirepass XXX
masterauth XXX
Run Code Online (Sandbox Code Playgroud)
我可以使用redis-cli连接到redis服务器,但是如果尝试连接到哨兵,则无法进行身份验证。
root@ip-:/usr/lib/nagios/plugins# redis-cli -p 26379
127.0.0.1:26379> AUTH xxx
(error) ERR unknown command 'AUTH'
127.0.0.1:26379>
Run Code Online (Sandbox Code Playgroud)
如果我使用相同的命令,但带有redis端口,则可以使用。
最好的谢谢
我正在使用 Redis 分布式缓存,其故障转移模式与哈希数据分布合并。我的配置是:
Sentinel1 Sentinel4
Master1 Master2
Sentinel2 Sentinel5
Slave1 Slave2
Sentinel3 Sentinel6
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我需要使用哨兵访问主缓存。
我要指出哪一点?
我想我必须在 ConnectionMultiplexer 的配置中注册所有哨兵点。
我可以使用以下代码将我的客户端连接到哨兵:
var options = new ConfigurationOptions()
{
CommandMap = CommandMap.Sentinel,
EndPoints = { { IP, Port } },
AllowAdmin = true,
TieBreaker = "",
ServiceName = ServiceName,
SyncTimeout = 5000,
AbortOnConnectFail = true,
Ssl = false
};
var connection = ConnectionMultiplexer.Connect(options, Console.Out);
return connection;
Run Code Online (Sandbox Code Playgroud)
一旦获得连接,我需要使用标准 Redis 方法(如 SetString 和 getString)访问缓存数据库...所以
db = conn.getDatabase();
db.getString(key);
db.setString(key, value);
Run Code Online (Sandbox Code Playgroud)
此时我收到一条错误消息,指出“此操作已在命令映射中禁用,无法使用:SETEX”或 GET。
我想应该有一种方法可以询问哨兵与当前主机的连接,但我没有找到很多有用的代码示例。有人可以帮我吗?
我正在尝试使用 JedisSentinelPool 连接到 Redis Sentinel
private static final JedisSentinelPool pool = new JedisSentinelPool("mymaster", getSentinels());
private static Set<String> getSentinels(){
Set<String> mysentinels = new HashSet<>();
mysentinels.add(new HostAndPort("localhost", 26379).toString());
return mysentinels;
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
导致:redis.clients.jedis.exceptions.JedisConnectionException:所有哨兵都已关闭,无法确定 mymaster master 正在哪里运行...
但是,我可以看到我的哨兵正在运行。所以参考这篇文章: https: //github.com/luin/ioredis/issues/64 我在我的redis主服务器上尝试了以下命令
./redis-cli -h redis-1 -p 26379
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
无法连接到位于 redis-1:26379 的 Redis:提供了节点名或服务名,或未知
这里有什么问题呢?
我正在尝试使用 ioredis 连接到 docker 下的哨兵服务,该服务需要在我的配置中输入密码。这是我的代码:
sentinels: [
{ host: "192.168.0.35", port: 26379 }
],
name: "redismaster",
sentinelPassword: "sentinelPassword",
sentinelRetryStrategy: function(times) {
// reconnect after
return Math.max(times * 100, 3000);
}
});
Run Code Online (Sandbox Code Playgroud)
但它没有成功。这是激活 DEBUG=ioredis 时的日志:
2020-02-07T18:06:10.091Z ioredis:redis status[192.168.0.35:26379]: [empty] -> connecting
2020-02-07T18:06:10.093Z ioredis:redis queue command[192.168.0.35:26379]: 0 -> sentinel([ 'get-master-addr-by-name', 'redismaster' ])
2020-02-07T18:06:10.096Z ioredis:redis status[192.168.0.35:26379]: connecting -> connect
2020-02-07T18:06:10.097Z ioredis:redis write command[192.168.0.35:26379]: 0 -> auth([ 'thisis1SentinElP@sSwOrd' ])
2020-02-07T18:06:10.097Z ioredis:redis status[192.168.0.35:26379]: connect -> ready
2020-02-07T18:06:10.097Z ioredis:connection send 1 commands in offline queue
2020-02-07T18:06:10.098Z …Run Code Online (Sandbox Code Playgroud) 我如何告诉 celery 我在 redis 上寻找的服务名称?我正在尝试使用 Celery 4 中的内置 Sentinel 支持。我正在传递一个按文档中所述配置的代理 URL :sentinel://0.0.0.0:26379
但是 redis 似乎抱怨没有通过 service_name:
File "/usr/local/lib/python2.7/dist-packages/redis/sentinel.py", line 222, in discover_master
raise MasterNotFoundError("No master found for %r" % (service_name,))
OperationalError: No master found for None
Run Code Online (Sandbox Code Playgroud)
是否可以使用此 URL 格式传递 service_name ?我试过了
sentinel://0.0.0.0:26379/my_service
sentinel://0.0.0.0:26379/0/my_service
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于连接 URL 的文档——我找到了redis-sentinel-URL,但我没有看到它包含在 redis 包中,所以我什至不确定它是否被 redis 使用。
我有一个 redis 哨兵配置,其中有一个主服务器、两个从服务器和 3 个正在运行的哨兵。我注意到,在某些时候,哨兵可能会切换主站,选举其中一个从站作为主站。这会给作为独立客户端连接到主节点的应用程序带来问题(我正在努力更改代码以使用哨兵)。我想知道是否可以通过连接到哨兵客户端(即通过“ ”)来切换主redis-cli服务器
有人可以告诉我是否有可以用来切换主IP的命令吗?
redis ×10
redis-sentinel ×10
c# ×1
caching ×1
celery ×1
docker ×1
ioredis ×1
node-redis ×1
node.js ×1
sentinel ×1