servicestack,google-compute-engine,sentinel,redis-sentinel,Redis,servicestack,Google Compute Engine,Sentinel,Redis Sentinel" /> servicestack,google-compute-engine,sentinel,redis-sentinel,Redis,servicestack,Google Compute Engine,Sentinel,Redis Sentinel" />

ServiceStack.Redis.Sentinel用法

ServiceStack.Redis.Sentinel用法,redis,servicestack,google-compute-engine,sentinel,redis-sentinel,Redis,servicestack,Google Compute Engine,Sentinel,Redis Sentinel,我正在运行一个许可版本的ServiceStack,并试图在Google云计算上安装sentinel群集 该集群基本上是GCE的点击部署redis解决方案-3服务器。这是我用来初始化的代码 var hosts = Settings.Redis.Host.Split(';'); var sentinel = new ServiceStack.Redis.RedisSentinel(hosts, "master"); redis = sentinel.Setup(); container.Regis

我正在运行一个许可版本的ServiceStack,并试图在Google云计算上安装sentinel群集

该集群基本上是GCE的点击部署redis解决方案-3服务器。这是我用来初始化的代码

var hosts = Settings.Redis.Host.Split(';');
var sentinel = new ServiceStack.Redis.RedisSentinel(hosts, "master");
redis = sentinel.Setup();

container.Register<IRedisClientsManager>(redis);
container.Register<ICacheClient>(redis.GetCacheClient());
var hosts=Settings.Redis.Host.Split(“;”);
var sentinel=new ServiceStack.Redis.RedisSentinel(主机,“主”);
redis=sentinel.Setup();
容器注册(redis);
Register(redis.GetCacheClient());
客户端工作正常-但一旦我关闭了一个redis实例,一切都乱七八糟。客户端抱怨无法连接到丢失的实例。此外,即使我将实例恢复,它仍处于只读模式,因此所有操作仍然失败。一旦你处于这种状态,似乎没有办法恢复


我做错什么了吗?RedSentinal客户端不知道谁是新的主机是什么原因吗?我提供了所有3个主机IP地址…

您应该只将Redis Sentinel服务器的主机提供给
RedisSentinel
,因为它从Sentinel主机获取其他主/从Redis服务器的活动列表

最近在最新的v4.0.37中添加了对RedisSentinel的一些更改,包括额外的日志记录和RedisSentinel事件回调。新的v4.0.37API如下所示:

var sentinel = new RedisSentinel(sentinelHost, masterName);
启动RedisSentinel将连接到Sentinel主机,并返回一个带有活动

var redisManager = sentinel.Start();
然后您可以在国际奥委会注册:

container.Register<IRedisClientsManager>(redisManager);
还可以通过配置以下各项来启用这些事件的日志记录:

另外还有一个显式的
FailoverToSentinelHosts()
,可用于强制
RedisSentinel
重新查找并故障切换到最新的主/从主机,例如:

var sentinelInfo = sentinel.FailoverToSentinelHosts();
新主机在返回的sentinelInfo中可用:

"Failed over to read/write: {0}, read-only: {1}".Print(
    sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);

@用户2069563“似乎没有提供任何弹性”的确切含义是什么?Redis的Sentinel维护活动的主/从主机,如果主主机出现故障,将自动选择一个从主机升级为主主机。
RedisSentinel
类侦听这些事件,并在发生这种情况时故障转移到使用从/主配置。我可能对Sentinel有一个根本性的误解,但实现您在这里针对4.0.37提供的功能似乎并不能为redis群集提供任何弹性。我认为关键是客户端可以连接到集群中的任何机器——第一台响应的机器将告诉客户端当前选择的主R/W节点。即使有了你回复中提到的设置,我仍然无法从一台机器故障中恢复,即使只是简单地将其恢复。安装程序()上出现“无法连接到sentinel”错误。很抱歉,我没有向SE发布太多内容,因此在我按enter键完成之前,我的评论已提交。基本上,问题仍然存在,如果我提供给RedisSentinel()的IP上的机器脱机,则应用程序无法连接到集群。让那台机器重新上线似乎并不能解决问题。我必须修改我的web.config来指定新选择的主机的IP。@user2069563(仍然未发布)与它只是监视现有的主/从实例,并在检测到主/从实例关闭时自动切换主/从实例相混淆。如果Sentinel主机本身出现故障,那么它将无法获取活动的redis主/从设备,但当Sentinel返回时,它应该会恢复,这是我在Thank you mythz中看到的行为-我认为您提供的功能是正常的,我希望在GCE中实现的功能超出Sentinel的范围。对于谷歌用户来说,这是一种利用Sentinel作为组件实现高可用性的潜在方法。我相信提供的SS wireup mythz将与此设置配合使用。
var sentinelInfo = sentinel.FailoverToSentinelHosts();
"Failed over to read/write: {0}, read-only: {1}".Print(
    sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);