从gearman的主页,他们提到运行多个作业服务器,因此如果作业服务器死亡,客户端可以选择一个新的作业服务器.鉴于下面的语句和图表,似乎作业服务器不会相互通信.
我们的问题是在作业服务器中排队的那些作业会发生什么?为这些服务器提供高可用性以确保作业不会因故障而中断的最佳做法是什么?
您可以运行多个作业服务器,并让客户端和工作人员连接到他们配置的第一个可用作业服务器.这样,如果一个作业服务器死亡,客户端和工作程序会自动故障转移到另一个作业服 您可能不希望运行太多作业服务器,但有两个或三个是冗余的好主意.

我有两台服务器正在侦听负载均衡器后面的TCP端口.负载均衡器可以检测来自客户端的TCP连接尝试是否失败,并在不删除该连接的情况下将其重试到第二个服务器.我希望能够在不丢弃单个客户端集合的情况下将这两个服务器中的任何一个用于维护.
我的服务器使用此代码处理客户端请求:
ServerSocketFactory ssf = ...
ServerSocket serverSocket = ssf.createServerSocket(60000);
try {
while (true) {
Socket socket = serverSocket.accept();
...// Do the processing
}
} catch (IOException e) {
...
}
...
Run Code Online (Sandbox Code Playgroud)
我最初的想法是添加一个布尔值,该布尔值将在应用程序关闭时设置,并serverSocket.accept()在等待处理和关闭所有现有连接时阻止新调用.但是,即使在serverSocket.accept()通话之前,也正在建立新的连接.这是我在Wireshark中看到的,如果我在该调用之前放置一个断点.
问题就在于,一旦我打电话serverSocket.close(),所有这些客户端连接都会被丢弃.我想要实现的是告诉ServerSocket停止接受所有新连接(即只为新连接发送RST或让它们超时)的一些方法,因此负载均衡器可以将它们重新路由到另一台服务器,但同时不会掉线任何已经建立的联系.
编辑:我正在寻找一些自动解决方案,每次我想更新应用程序时都不需要我更改任何负载均衡器或操作系统设置.
所以假设我有一个N大小的服务器阵列设置如下:
alt text http://www.terracotta.org/web/download/attachments/43909161/ServerArrayMirrorGroup.png
我有一个简单的JavaBean/POJO:
package example;
public class Person {
private OtherObject obj;
public void setObj(OtherObject theObj) {
synchronized (this) {
obj = theObj;
}
}
public OtherObject getObj() {
synchronized (this) {
return obj;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果其中一个客户端在TC根(数据结构)中的Person对象上调用Person.setObj(OtherObject),则该客户端上的synchronized块(在Person.setObj(OtherObject)中)是否保持:
1)在使用该Person.obj属性同步/更新N大小的服务器阵列中的所有N个服务器之前?
要么
2)直到"活动"服务器与更新的Person.obj属性同步?那么阵列中的其他(N-1)服务器是否尽可能同步?
要么
3)我在看的其他一些方法?
你好技术人员,
假设我们有一个(PHP)网站,每月有数百万访问者,我们在网站上运行SolR索引,托管了400万个文档.Solr在4个独立的服务器上运行,其中一个服务器是主服务器,另外三个服务器是复制的.
有可以被插入数以千计的文件到Solr中每5分钟.除此之外,用户还可以更新他们的帐户,这也应该触发solr更新.
我正在寻找一种安全的策略来快速安全地重建索引,而不会丢失任何文档.并有一个安全的增量/更新策略.我已经考虑过一个策略,我想与专家分享这些策略以听取他们的意见,以及我是否应该采用这种方法,或者他们是否可以提出一些(完全)不同的建议.
Solr DataImport
对于所有操作,我想使用一个数据导入处理程序.我想将数据和delta导入混合到一个配置文件中,如DataImportHandlerDeltaQueryViaFullImport.我们使用MySQL数据库作为数据源.
重建指数
为了重建索引,我有以下几点; 我们在'live'核心附近创建了一个名为'reindex'的新核心.使用dataimporthandler,我们完全重建整个文档集(400万个文档),总共需要1-2个小时.在实时索引上,仍然每分钟都有一些更新,插入和删除.
重建后大约需要1-2个小时,新指数仍然不再是最新的.为了缩短延迟,我们对新核心进行一次'delta'导入,以提交过去1-2小时内的所有更改.完成后进行核心交换.每分钟运行一次的正常"delta"导入处理程序将选择这个新核心.
提交对活核心的更新
为了保持我们的实时核心,我们每分钟都会运行delta导入.由于核心交换,reindex核心(现在是活核心)将被跟踪并保持最新状态.我猜这个索引延迟几分钟不应该是一个问题,因为dataimport.properties也会被交换掉?delta-import已超过这些延迟时间,但应该是可能的.
我希望你了解我的情况和我的策略,并建议我是否以正确的方式在你眼中做到这一点.另外我想知道是否有任何瓶颈我没有想到?我们正在运行Solr 1.4版.
我有一些问题,复制怎么样?如果主服务器交换核心,那么如何处理这个?
在交换时丢失文件有什么风险吗?
提前致谢!
architecture solr high-availability high-traffic dataimporthandler
我正在寻找一些关于如何集群ServiceMix解决方案的初始指针.基本上我需要的是:
从那以后,搜索信息让我很困惑
我的解决方案可能会有一些使用JMS队列相互通信的bundle.在这种情况下,我应该只有2个独立的ServiceMix实例(彼此不了解).这不是最简单的选择吗?我看到了对故障转移配置的一些支持(http://servicemix.apache.org/docs/4.5.x/users-guide/failover.html),但真正给予的好处是什么(我错过了什么)?此故障转移配置也无助于负载平衡,因为只有一个实例正在为请求提供服务.
failover load-balancing high-availability apache-camel apache-servicemix
阅读Apache Hadoop文档后,了解辅助节点和检查点节点的职责存在一些小问题
我很清楚Namenode的角色和职责:
- NameNode将对文件系统的修改存储为附加到本机文件系统文件的日志进行编辑.当NameNode启动时,它从图像文件fsimage读取HDFS状态,然后从编辑日志文件中应用编辑.然后它将新的HDFS状态写入fsimage并使用空的编辑文件开始正常操作.由于NameNode仅在启动期间合并fsimage和编辑文件,因此编辑日志文件可能会在繁忙的群集上随着时间的推移而变得非常大.较大的编辑文件的另一个副作用是下次重新启动NameNode需要更长的时间.
但是在理解辅助名称节点和检查点名称节点职责方面我有一点困惑.
Secondary NameNode:
- 辅助NameNode定期合并fsimage和编辑日志文件,并使编辑日志大小保持在限制范围内.它通常在与主NameNode不同的机器上运行,因为它的内存要求与主NameNode的顺序相同.
检查点节点:
- Checkpoint节点定期创建命名空间的检查点.它从活动的NameNode下载fsimage和编辑,在本地合并它们,并将新映像上传回活动的NameNode.Checkpoint节点通常在与NameNode不同的机器上运行,因为它的内存要求与NameNode的顺序相同.Checkpoint节点由配置文件中指定的节点上的bin/hdfs namenode -checkpoint启动.
似乎辅助namenode和Checkpoint节点之间的责任不明确.两者都在进行编辑.那么谁最终会修改?
另外,我在jira中创建了两个错误,以消除理解这些概念的模糊性.
issues.apache.org/jira/browse/HDFS-8913
issues.apache.org/jira/browse/HDFS-8914
Run Code Online (Sandbox Code Playgroud) 我正在研究Mesos框架来运行一些工作,这似乎是学习制作高可用系统的好机会.为此,我正在阅读有关分布式系统的一些内容,我犯了访问维基百科的错误.
有关段落是关于HA工程的原则:
可靠的交叉.在多线程系统中,交叉点本身往往成为单点故障.高可用性工程必须提供可靠的交叉.
我的google-fu教给我三件事:
1)音频交叉设备将单个输入分成多个输出
2)遗传算法使用交叉来组合解决方案
3)buzzwordy白皮书全部复制自这个维基百科文章:/
我的问题: 在这种情况下,"交叉点"是什么意思,为什么它是单点故障?
我正在努力想出一个实现Geo-Redundancy(2+数据中心)的解决方案,同时使用Service Fabric可靠的Actors/Services来管理状态.这里暗示地理复制是可能的
例如,如果您未进行地理复制并且整个群集位于一个数据中心,并且整个数据中心出现故障,则可能会发生这种情况.
但没有解释如何打开它.
有没有人知道这是ASF的计划功能还没有发布,或者它是否存在但尚未完全探索?
或者,当使用ASF的StateManager存储运行应用程序所需的状态时,是否有人有任何推荐的交叉DC弹性方法?
谢谢,亚历克斯
在我的职业生涯中,我一直致力于数据分析,BI工具等.我工作的大多数应用程序都是主要的只读应用程序.虽然我也曾在简单的CRUD应用程序上工作,但没有什么特别的交易.作为一名软件工程师,我觉得如果我不知道如何设计高度交易系统和数据库,如亚马逊,航空公司系统等的工作方式,我的学习中就会出现空白.我想请社区人士就这个问题提出一些资源,书籍或简单项目.在教授必要的理论的同时可以采用实践方法的东西.我知道这是一个主观问题,但我可以将最有用的答案标记为绿色.期待您的建议并感谢您的期待.
distributed database-design transactions high-availability distributed-transactions
使用Spark(1.6.1)独立主机,我需要在同一个spark master上运行多个应用程序.
所有申请在第一个申请后提交,始终保持'WAIT'状态.我还观察到,一个运行中包含所有核心工人的总和.我已经尝试过限制它,SPARK_EXECUTOR_CORES但是它用于纱线配置,而我正在运行的是"独立主机".我尝试在同一个主人上运行许多工作人员,但每次首次提交的申请都会消耗所有工人.
config high-availability apache-spark apache-spark-standalone
failover ×2
java ×2
apache-camel ×1
apache-spark ×1
architecture ×1
azure ×1
config ×1
distributed ×1
gearman ×1
hadoop ×1
hadoop2 ×1
hdfs ×1
high-traffic ×1
redundancy ×1
sockets ×1
solr ×1
tcp ×1
terracotta ×1
transactions ×1
worker ×1