我正在尝试使用SignalR应用程序创建Redis消息总线故障转移方案.
首先,我们尝试了一个简单的硬件负载均衡器故障转移,它只监控两台Redis服务器.SignalR应用程序指向单个HLB端点.然后我失败了一台服务器,但无法成功通过第二台Redis服务器获取任何消息,而没有回收SignalR应用程序池.可能这是因为它需要向新的Redis消息总线发出设置命令.
从SignalR RC1开始,Microsoft.AspNet.SignalR.Redis.RedisMessageBus
使用Booksleeve RedisConnection()
连接到pub/sub的单个Redis.
我创建了一个新类,RedisMessageBusCluster()
它使用Booksleeve ConnectionUtils.Connect()
连接到Redis服务器集群中的一个.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using BookSleeve;
using Microsoft.AspNet.SignalR.Infrastructure;
namespace Microsoft.AspNet.SignalR.Redis
{
/// <summary>
/// WIP: Getting scaleout for Redis working
/// </summary>
public class RedisMessageBusCluster : ScaleoutMessageBus
{
private readonly int _db;
private readonly string[] _keys;
private RedisConnection _connection;
private RedisSubscriberConnection _channel;
private Task _connectTask;
private readonly TaskQueue _publishQueue = new TaskQueue();
public RedisMessageBusCluster(string serverList, int db, IEnumerable<string> keys, IDependencyResolver resolver) …
Run Code Online (Sandbox Code Playgroud) 有人可以提供一个简单(但不简单)的交易解释,应用于计算(即使从维基百科复制)?
有谁知道如何从T-SQL以编程方式确定SQL主动 - 被动故障转移群集的主动节点?
@@SERVERNAME
仅返回虚拟服务器名称,该名称与两个节点相同.
我不打算根据数据做出任何决定 - 我相信故障转移可以做到这一点 - 但我想将信息包含在事件日志中,以便我可以告诉事件发生时集群中的哪个节点处于活动状态,或帮助确定是否由于故障转移而出现异常.
我打算使用无共享架构和多版本并发控制来创建分布式数据库系统.冗余将通过异步复制实现(只要系统中的数据保持一致,就可以在发生故障时丢失一些最近的更改).对于每个数据库条目,一个节点具有主副本(仅该节点具有对其的写访问权),此外,一个或多个节点具有该条目的辅助副本以用于可伸缩性和冗余目的(辅助副本是只读的) .更新条目的主副本时,它会加上时间戳并异步发送到具有辅助副本的节点,以便最终获得最新版本的条目.具有主副本的节点可以随时更改 - 如果另一个节点需要写入该条目,它将请求主副本的当前所有者为该节点提供该条目的主副本的所有权,
最近我一直在考虑当集群中的节点发生故障时该怎么做,以及用于故障转移的策略.这是一些问题.我希望你能知道至少其中一些的可用替代品.
我正在寻找一个提供最基本的群集要求的库.希望这个库与完整的状态复制解决方案(ZooKeeper)分离,因为状态复制要求非常小.
Hadoop权威指南说 -
每个Namenode都运行一个轻量级故障转移控制器进程,其工作是监视其Namenode的故障(使用简单的心跳机制),并在namenode失败时触发故障转移.
为什么namenode可以运行某些东西来检测自己的失败?
谁向谁发送心跳?
这个过程在哪里运行?
它如何检测namenode失败?
它向谁通知过渡?
Redis看起来确实是一款内置复制和惊人速度的绝佳产品.经过测试后,感觉就像是2010年memcached的替代品.
但是,由于通常使用memcached时,会使用一致的散列来均匀地在池中的服务器上分布数据.如果池中的某个服务器出现故障并且无法访问,则会以透明方式处理它,只会丢失丢失的密钥并将其均匀分布到池中剩余的可用服务器上.
另一方面,Redis还内置了分片,但另一个真正有趣的功能叫做自动复制.由于这一点,在狗屎击中风扇的情况下利用从属服务器时,可以大大提高数据的可用性.
但是,我还没有找到任何好的解决方案来处理将redis服务器的状态更改为自动成为新主服务器或通过任何其他方式自动处理Redis故障转移.
怎么可以这样做?对此有什么合适的方法?
这是我的场景(由我的前任设计):
两台Apache服务器为许多混合后端Web服务器(Apache,IIS,Tomcat等)提供反向代理服务.有些网站我们有多个后端Web服务器,在这种情况下,我们会做类似的事情:
<Proxy balancer://www.example.com>
BalancerMember http://192.168.1.40:80
BalancerMember http://192.168.1.41:80
</Proxy>
<VirtualHost *:80>
ServerName www.example.com:80
CustomLog /var/log/apache2/www.example.com.log combined
<Location />
Order allow,deny
Allow from all
ProxyPass balancer://www.example.com/
ProxyPassReverse balancer://www.example.com/
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,我在代理服务器的配置中有一个站点(www.example.com),并且该站点被代理到两个后端服务器192.168.1.40和.41中的一个或另一个.
我正在对此进行评估以确保我们对所有Web服务都具有容错能力(出于这个原因,我已经将两个反向代理服务器放入共享IP群集中),并且我想确保负载 - 平衡的后端服务器也具有容错能力.但是我无法弄清楚mod_proxy_balancer模块中是否内置了后端故障检测(以及避免故障后端服务器的逻辑)......
因此,如果192.168.202.40发生故障,Apache会检测到这一点(我会理解它是否首先需要一个失败的请求)并自动将所有请求路由到另一个后端192.168.202.41?或者它会继续在失败的后端和操作后端之间平衡请求吗?
我在mod_proxy和mod_proxy_balancer的Apache文档中找到了一些线索,似乎表明可以检测到故障("maxattempts =放弃之前的最大故障转移尝试次数.","failonstatus =单个或以逗号分隔的HTTP列表状态代码.如果设置,当后端返回列表中的任何状态代码时,这将强制工作人员进入错误状态."),但经过几天的搜索,我发现没有确凿的说法肯定它会(或在至少"应该")检测后端故障和恢复.
我会说大多数搜索结果使用AJP协议将流量传递给后端服务器,这显然支持故障检测 - 但我的后端是Apache,IIS,Tomcat和其他人的混合物,我就是相当肯定他们中的许多人不支持AJP.它们也是Windows 2k3/2k8和Linux(主要是Ubuntu Lucid)盒子的混合体,运行各种不同的应用程序,具有各种不同的要求,因此像Backhand和LVS这样的附加模块对我来说不是一个选择.
我还试图通过创建一个像这样的新测试站点来实验测试这个功能:
<Proxy balancer://test.example.com>
BalancerMember http://192.168.1.40:80
BalancerMember http://192.168.1.200:80
</Proxy>
<VirtualHost *:80>
ServerName test.example.com:80
CustomLog /var/log/apache2/test.example.com.log combined
LogLevel debug
<Location />
Order allow,deny
Allow from all
ProxyPass balancer://test.example.com/
ProxyPassReverse balancer://test.example.com/
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
其中192.168.1.200是未运行任何Web服务器的虚假地址,用于模拟后端故障.对于一堆不同的客户端机器,测试站点没有问题,但即使将LogLevel设置为调试,我也没有看到任何记录,表明它检测到其中一个后端服务器已关闭......我想100%确定我可以在不影响生产站点的情况下将负载均衡的后端用于维护(当然一次一个).
阅读完这个问题后,我想提出更多问题:
failover hadoop hadoop-yarn apache-spark apache-spark-standalone
我们的开发团队目前正在考虑将我们的搜索系统迁移到Apache Solr,我们非常感谢有关设置的一些建议.我们正在索引大约两亿个数据库行.我们全天增加了大约十万个新行.这些新数据库行必须在收到后的两分钟内进行搜索.
我们不希望索引使搜索者陷入困境,因此我们的想法是在复制设置中让不同的计算机上运行两个Solr服务器.第一个Solr实例将是索引器.它将使用DataImportHandler索引增量并启用自动提交以防止过热的提交率.索引优化将在预定期间进行.第二个Solr实例(从属)将成为主要搜索器,并将其索引存储在RAIDed固态驱动器上.
我们关注的是故障转移.我们的搜索是关键任务.如果主要搜索者因任何原因而失败,我们的搜索服务将自动将查询分流到索引器节点.但索引同样重要.如果索引器死了,我们需要热备故障转移.是否有推荐的方法在Solr复制中自动执行主节点故障转移?我已经开始研究ZooKeeper,但我不确定这是否是最好的方法.
failover ×10
apache ×2
database ×2
hadoop ×2
algorithm ×1
apache-spark ×1
backup ×1
booksleeve ×1
c# ×1
concurrency ×1
detection ×1
distributed ×1
hadoop-yarn ×1
hadoop2 ×1
hdfs ×1
java ×1
namenode ×1
nosql ×1
redis ×1
replication ×1
signalr ×1
solr ×1
sql-server ×1
t-sql ×1
theory ×1
transactions ×1