你好技术人员,
假设我们有一个(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
阅读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
我知道,与Network Load Balancing和Failover Clustering我们可以使被动服务的高可用性.但是活跃的应用呢?
示例:我的一个应用程序以固定间隔从外部资源检索一些内容.我想象了以下场景:
当我在思考解决方案#3时,我想知道应该是什么共同资源.我曾想过在数据库中创建一个表,我们可以用它来获取全局锁.
这是最好的解决方案吗?人们通常如何做到这一点?
顺便说一下,它是在Windows Server 2008上运行的C#.NET WCF应用程序
.net load-balancing high-availability failovercluster windows-server-2008
我将 Jedis Java 客户端用于 Redis,它非常棒。我分别使用了集群 (JedisCluster) 和高可用性 (JedisSentinelPool) 的功能。
这两种实现单独工作就像一个魅力,但它似乎不是一种同时使用两者的方法。
我希望在故障转移时自动提升高可用性,并在主站失败时自动发现其他主站(就像哨兵一样)。我知道 Redis-cluster 会自动进行故障转移,并且它还提供某种拓扑的自动发现。但是 Jedis-Cluster 似乎没有提供任何方法来处理自动故障转移并充分利用 Jedis 集群。
有没有办法用 JedisClient 实现自动故障转移?
JedisSentinel 和 JedisCluster 可以一起使用吗?
一些帖子表明这是不可能的:https : //groups.google.com/forum/#!topic/jedis_redis/HtDblX771bs
Jedis git 上关于此主题的文档有限。
使用HDFS或HFTP URI方案(例如hdfs://namenode/path/to/file),我可以访问HDFS集群而无需其XML配置文件.运行shell命令就像当它是非常方便的hdfs dfs -get,hadoop distcp或者像星火读取文件sc.hadoopFile(),因为我没有为所有相关的HDFS集群,那些代码可能会运行的所有节点复制和管理XML文件.
这种方法的一个缺点是我必须使用活动的NameNode的主机名,否则Hadoop会抛出一个抱怨NN处于待机状态的异常.
通常的解决方法是尝试一个,然后尝试另一个,如果捕获到任何异常,或直接连接到ZooKeeper并使用protobuf解析二进制数据.
与(例如)mysql的loadbalance URI或ZooKeeper的连接字符串相比,这两种方法都很麻烦,我可以用逗号分隔URI中的所有主机,驱动程序会自动找到要与之通信的节点.
假设我有主动和备用的namenode主机nn1和nn2.引用HDFS特定路径的最简单方法是:
hdfs,hadoop我希望Google提供有关Cloud Bigtable服务提供的持久性和可用性保证的指导.
到目前为止,我的理解是:
最小集群需要3个节点的事实表明,至少在区域内,数据非常耐用并且复制到3个节点.
然而,谷歌的回答是"Cloud Bigtable不会复制数据" - 与Cloud Bigtable主页上的引用直接相矛盾,该主页声称"它是使用复制存储策略构建的".那是哪个呢?它复制与否?如果是这样,保留了多少份?
群集只能在特定区域内设置的事实表明群集的可用性直接与该区域的可用性相关联.因此,如果我想拥有一个高度可用的基于Bigtable的数据存储,那么最佳做法是跨多个区域设置独立的集群并自己处理集群中的写入同步吗?
没有关于跨区域的Bigtable集群是否独立的信息.如果我要跨多个区域设置集群,并且一个区域出现故障,我们是否可以期望其他区域中的集群继续工作?或者是否存在一些潜在的单一故障点,甚至可能跨区域影响集群?
与针对这些细节非常具体的App Engine数据存储区相比,Cloud Bigtable文档相当缺乏 - 或者至少,我没有找到一个详细介绍这些方面的页面.
Cloud Bigtable文档在其他方面同样含糊不清,例如关于值的大小限制问题,文档指出单个值应保持低于"每个单元约10 MB"."~10 MB"究竟是什么意思?!我可以对10MB的限制进行硬编码并期望它始终有效,还是会根据未知因素每天变化?
无论如何,如果我听起来很激动,道歉.我真的很想使用Bigtable服务.但是,我和许多其他人一样,在能够投资之前需要了解它的耐久性/可用性方面.谢谢.
high-availability google-cloud-platform google-cloud-bigtable
首先,我尝试了 C# DNS 相关 SO 线程和其他互联网文章中的所有建议 - 弄乱ServicePointManager /ServicePoint 设置、通过 HTTP 标头设置自动请求连接关闭、更改连接租用时间 - 没有任何帮助。似乎所有这些设置都是为了修复长时间运行的进程(如 Web 服务)中的 DNS 问题。如果进程拥有自己的 DNS 缓存以最大程度地减少 DNS 查询或操作系统 DNS 缓存读取,这甚至是有意义的。但这不是我的情况。
我们的生产基础设施使用 HA(高可用性)DNS 在维护或功能问题期间交换服务器节点。它的构建方式是,在某些地方我们有多个 CNAME 记录,它们实际上指向同一个 HA A 记录,如下所示:
所有这些记录的 TTL 均为 60 秒。因此,当欧洲节点出现故障或维护时,A记录会切换到其他节点的IP地址。
然后我们有一个监控实用程序,每 5 分钟执行一次并使用 site1 和 site2。为了使其正常工作,两个名称必须指向同一个 DC,因为 DC 之间的数据同步不会那么快。由于两个 CNAME 实际上都链接到同一个具有短 TTL 的 A 记录,乍一看似乎不会出错。但事实证明它可以。
该实用程序是用适用于 .NET Framework 4.7.2 的 C# 编写的,并使用HttpClient 类向两个站点执行请求。是的,又是 他 …
hadoop ×2
hdfs ×2
.net ×1
architecture ×1
azure ×1
distributed ×1
dns ×1
hadoop2 ×1
high-traffic ×1
jedis ×1
redis ×1
redundancy ×1
solr ×1
transactions ×1
uri ×1