Couchdb 为什么在增加max“u dbs”u open后,复制仍然会失败,并带有;增加最大开度;?
我们的应用程序使用CouchDB筛选复制在用户数据库和主数据库之间移动数据。随着用户数量的增加,复制开始失败,出现此消息Couchdb 为什么在增加max“u dbs”u open后,复制仍然会失败,并带有;增加最大开度;?,couchdb,Couchdb,我们的应用程序使用CouchDB筛选复制在用户数据库和主数据库之间移动数据。随着用户数量的增加,复制开始失败,出现此消息 Source and target databases out of sync. Try to increase max_dbs_open at both servers. 我们已经这样做了,将max_dbs_open的数量增加到了一个高得离谱的数字(10000),但是失败和消息保持不变。很明显,还有别的问题。有人知道这是什么吗?事实证明,增加max\u dbs\u ope
Source and target databases out of sync. Try to increase max_dbs_open at both servers.
我们已经这样做了,将max_dbs_open的数量增加到了一个高得离谱的数字(10000),但是失败和消息保持不变。很明显,还有别的问题。有人知道这是什么吗?事实证明,
增加max\u dbs\u open
的信息充其量只是一个部分答案,最坏的情况是误导。在我们的例子中,问题不在于打开的数据库的数量,而在于我们的许多复制所使用的HTTP连接的数量
每个复制可以使用min(worker\u进程+1,http\u连接)
其中worker\u进程
是分配给每个复制的工作进程数,http\u连接
是分配给每个复制的最大http连接数,如上所述
因此,使用的连接总数为
number of replications * min(worker_processes + 1, http_connections)
worker\u进程的默认值为4,http\u连接的默认值为20。如果有100个复制,则复制使用的HTTP连接总数为500。另一个设置,max_connections
,确定CouchDB服务器允许的最大HTTP连接数,如前所述。默认值为2048
在本例中,每个用户都有两个复制—一个从用户复制到主数据库,另一个从主数据库复制到用户。因此,在我们的例子中,使用默认设置,每次添加一个用户时,我们都会添加额外的10个HTTP连接,最终通过默认的max\u连接
由于我们的复制非常少,并且只有少量数据从用户移动到主机,从主机移动到用户,因此我们拨回了工作进程的数量
,http\u连接
,增加了最大连接数
,一切正常
更新
还有一些其他的发现
有必要在进程上提升ulimit,以允许它有更多的开放连接
创建复制过快也会导致问题。如果我回拨创建新复制的速度,这也有助于缓解问题。ymmv
对我来说,产生此错误是因为目标数据库通过GET/{targetDB}/
返回的“instanceStartTime”无效。此问题是因为每个用户数据库和主数据库的复制在两个不同的CouchDB进程之间引起的吗?我正试图做一些类似的事情,但是用户数据库和主数据库托管在同一台服务器上,所以我希望避免使用任何IPC。