我最近一直在阅读Paxos论文,FLP定理等,并为一个项目评估Apache Zookeeper.我也一直在通过Chubby(谷歌的分布式锁定服务)以及可在线获得的各种文献.我对Zookeeper的基本用法是为分布式系统实现复制和一般协调.
我只是想知道,Zookeeper或像分布式锁定系统这样的Chubby带来的具体优势是什么.基本上我只是想知道为什么我不能只使用MySQL NDB集群.我一直听说MySQL有很多复制问题.我希望有一些关于这个主题的更多经验可能会对它有所了解.
提前致谢..
简单列出我的要求:
java mysql replication database-replication apache-zookeeper
我的慢查询日志中包含如下条目:
# Query_time: 1.016361 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
SET timestamp=1273826821;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我猜这个set timestamp命令是通过复制发出的,但我不明白如何set timestamp才能接管一秒钟.有关如何解决此问题的任何想法?
我目前正面临SOLR的问题(更确切地说是奴隶复制),在花了很多时间在网上阅读后,我发现自己不得不要求一些启示.
- Solr的索引规模是否有一些限制?
在处理单个主服务器时,何时决定使用多核或多索引?是否有任何迹象表明何时达到一定的索引大小,建议进行分区?
- 从主站到从站复制段时是否有最大大小?
复制时,当从属设备无法下载内容并将其编入索引时,是否存在段大小限制?当有大量流量要检索信息和要复制的大量新文档时,奴隶无法复制的阈值是多少.
更事实的是,这里是导致我提出这些问题的背景:我们想要索引相当数量的文档,但是当数量达到十几万时,奴隶就无法处理它并开始无法复制SnapPull错误.文档由几个文本字段组成(名称,类型,描述,...大约10个其他字段,最多20个字符).
我们有一个主服务器和两个从主服务器复制数据的从服务器.
这是我第一次使用Solr(我通常在使用spring,hibernate的webapps上工作......但没有使用Solr),所以我不确定如何解决这个问题.
我们的想法是暂时向主服务器添加多个核心,并从每个核心复制一个从服务器.这是正确的方法吗?
如果是,我们如何确定所需的核心数量?现在我们只是试着看看它的行为和调整,如果有必要,但我想知道是否有任何最佳实践或某些基准已经针对这个特定主题.
对于具有此平均大小的此数量的文档,需要x核心或索引...
感谢您对我如何处理大量平均大小的文档的任何帮助!
这是从属设备尝试复制时抛出的错误的副本:
ERROR [org.apache.solr.handler.ReplicationHandler] - <SnapPull failed >
org.apache.solr.common.SolrException: Index fetch failed :
at org.apache.solr.handler.SnapPuller.fetchLatestIndex(SnapPuller.java:329)
at org.apache.solr.handler.ReplicationHandler.doFetch(ReplicationHandler.java:264)
at org.apache.solr.handler.SnapPuller$1.run(SnapPuller.java:159)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.RuntimeException: java.io.IOException: read past EOF
at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1068)
at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:418)
at org.apache.solr.handler.SnapPuller.doCommit(SnapPuller.java:467)
at org.apache.solr.handler.SnapPuller.fetchLatestIndex(SnapPuller.java:319)
... 11 more
Caused by: java.io.IOException: read past EOF …Run Code Online (Sandbox Code Playgroud) 我有一个使用'主/从复制'的数据库设置.我有一个主人和(至少)一个奴隶,可能是ℕ奴隶.为简单起见,我将讨论一个主设备,一个从设备,因为确定使用哪个从设备包括一些与手头实际问题无关的业务逻辑.
这是设置的示意图(带有ℕ奴隶):
在应用程序(目前使用Dapper)中,我有以下简化的代码:
abstract class BaseRepo
{
private readonly string _readconn;
private readonly string _writeconn;
public BaseRepo(string readConnection, string writeConnection)
{
_readconn = readConnection; //Actually IEnumerable<string> for ? slaves
_writeconn = writeConnection;
}
private SqlConnection GetOpenConnection(string cnstring)
{
var c = new SqlConnection(cnstring);
c.Open();
return c;
}
public SqlConnection GetOpenReadConnection()
{
return this.GetOpenConnection(_readconn);
// Actually we use some business-logic to determine *which* of the slaves to use
}
public SqlConnection GetOpenWriteConnection()
{
return this.GetOpenConnection(_writeconn); …Run Code Online (Sandbox Code Playgroud) 我有一个小型数据库,大约50mb.它是一个复制到远程服务器的主人.我注意到relay-bin文件总数超过5GB.删除它们是否安全?
我无法找到问题的答案.
我有2个mysql服务器.
现在我想添加另一个Slave服务器,但我在该服务器上运行其他网站.
我可以复制一个数据库吗?
我有MyISAM表的Mysql主从复制.所有更新都在主站上完成,选择在主站或从站上完成.
看来我们在进行某些更新时可能需要手动锁定几个表.虽然此写锁定在表上,但锁定表上不会发生任何选择.但奴隶呢?锁是否会传播出来?
假设我有table_A和table_B.我在主服务器上的table_A和table_B上启动锁定并开始执行更新.此时没有其他连接可以读取主机上的table_A和table_B吗?但是,如果此时另一个连接试图从一个奴隶读取表格,他们可以这样做吗?
我有一个矩阵,并寻找一种有效的方法来复制它n次(其中n是数据集中观察的数量).例如,如果我有一个矩阵A.
A <- matrix(1:15, nrow=3)
然后我想要一个表格的输出
rbind(A, A, A, ...) #n times.
显然,有许多方法来构造这样的大矩阵,例如使用for循环apply或类似的函数.然而,对"矩阵复制 - 函数"的调用发生在我的优化算法的核心,在我的程序的一次运行中它被称为数万次.因此,循环,应用类型的函数和类似的东西都不够有效.(这样的解决方案基本上意味着n上的循环执行了数万次,这显然是低效的.)我已经尝试使用普通rep函数,但还没有找到一种方法来排列rep矩阵的输出所需格式.
该解决方案
do.call("rbind", replicate(n, A, simplify=F))
效率太低,因为rbind在这种情况下经常使用.(然后,我的程序总运行时间的大约30%用于执行rbinds.)
有谁知道更好的解决方案?
我们有一个主从复制配置如下.
在主人:
postgresql.conf 复制配置如下(为简洁起见,注释行):
max_wal_senders = 1
wal_keep_segments = 8
Run Code Online (Sandbox Code Playgroud)
在奴隶上:
与postgresql.conf主人相同.recovery.conf看起来像这样:
standby_mode = 'on'
primary_conninfo = 'host=master1 port=5432 user=replication password=replication'
trigger_file = '/tmp/postgresql.trigger.5432'
Run Code Online (Sandbox Code Playgroud)
在最初设置时,我们执行了一些简单的测试并确认复制正常.但是,当我们进行初始数据加载时,只有一些数据进入了从属.
Slave的日志现在填充了如下所示的消息:
< 2015-01-23 23:59:47.241 EST >LOG: started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:47.241 EST >FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000000F00000052 has already been removed
< 2015-01-23 23:59:52.259 EST >LOG: started streaming WAL from primary at F/52000000 on timeline …Run Code Online (Sandbox Code Playgroud) 如何从kubernetes节点删除所有内容?
内容包括部署,副本集等.我试图单独删除deplyoments.但kubrenetes再次重现了所有豆荚.
有没有办法删除节点中存在的所有副本集?
replication ×10
mysql ×5
c# ×1
containers ×1
java ×1
kubernetes ×1
locks ×1
master ×1
matrix ×1
myisam ×1
performance ×1
postgresql ×1
r ×1
redhat ×1
slave ×1
solr ×1
sql-server ×1