标签: mnesia

RabbitMQ(beam.smp)和高CPU /内存负载问题

我有一个debian盒用芹菜和rabbitmq运行任务大约一年.最近我注意到任务没有被处理,所以我登录系统,发现芹菜无法连接到rabbitmq.我重新启动了rabbitmq-server,尽管芹菜不再抱怨它现在没有执行新的任务.奇怪的是,rabbitmq正在疯狂地吞噬cpu和内存资源.重新启动服务器无法解决问题.花了几个小时在网上寻找解决方案后无济于事我决定重建服务器.

我用Debian 7.5,rabbitmq 2.8.4,芹菜3.1.13(Cipater)重建了新的服务器.大约一个小时左右,一切都工作得很好,直到芹菜开始再次抱怨它无法连接到rabbitmq!

[2014-08-06 05:17:21,036: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.
Trying again in 6.00 seconds...
Run Code Online (Sandbox Code Playgroud)

我重新启动了rabbitmq service rabbitmq-server start和同样的问题:

rabbitmq开始再次膨胀,不断冲击cpu并慢慢接管所有ram并交换:

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
21823 rabbitmq  20   0  908m 488m 3900 S 731.2 49.4   9:44.74 beam.smp
Run Code Online (Sandbox Code Playgroud)

结果rabbitmqctl status如下:

Status of node 'rabbit@li370-61' ...
[{pid,21823},
 {running_applications,[{rabbit,"RabbitMQ","2.8.4"},
                        {os_mon,"CPO  CXC 138 46","2.2.9"},
                        {sasl,"SASL  CXC 138 11","2.2.1"},
                        {mnesia,"MNESIA  CXC 138 12","4.7"},
                        {stdlib,"ERTS  CXC 138 10","1.18.1"},
                        {kernel,"ERTS  CXC …
Run Code Online (Sandbox Code Playgroud)

erlang debian mnesia rabbitmq celery

47
推荐指数
2
解决办法
7万
查看次数

从mnesia cluster(scheme)中删除not_exist_already节点

当我得到时,我在mnesia集群数据中有一个坏节点(它不存在):

> mnesia:system_info(db_nodes)
[bad@node, ...]
Run Code Online (Sandbox Code Playgroud)

如何从群集中删除它?

我试过了:

> mnesia:del_table_copy(scheme, bad@node).
{aborted,{not_active,"All replicas on diskfull nodes are not active yet"...
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我该如何解决?

更新.在从架构中删除节点之前,我们需要在其上停止mnesia

erlang mnesia

39
推荐指数
1
解决办法
2129
查看次数

Mnesia数据库的存储容量是多少?

有些地方国家2GB期间.有些地方表示它取决于节点数量.

erlang mnesia

30
推荐指数
3
解决办法
9761
查看次数

如何将节点添加到mnesia集群?

我是erlang和mnesia新手..

如何将新的disc_only_copies节点添加到已具有架构的mnesia数据库中?

谢谢

erlang mnesia

21
推荐指数
1
解决办法
8909
查看次数

在线mnesia从网络分区恢复

是否可以从mnesia集群中的网络分区恢复而无需重新启动任何涉及的节点?如果是这样,那怎么办呢?

我特别感兴趣的是:

  • 如何使用标准OTP mnesia(v4.4.7)
  • 什么自定义代码,如果任何人需要编写以实现这一点(例如订阅mnesia running_paritioned_network事件,确定新的master,从非master到master合并记录,从新master强制加载表,清除运行的parititioned网络事件 - 将非常感谢示例代码.
  • 或者,mnesia明确地不支持在线恢复,并且要求重新启动属于非主分区的节点.

虽然我很欣赏一般分布式系统理论的指针,但在这个问题上,我只对erlang/OTP mnesia感兴趣.

erlang mnesia

19
推荐指数
1
解决办法
3564
查看次数

生产中的非常大的Mnesia表

我们使用Mnesia作为非常大的系统的主数据库.Mnesia Fragmented Tables在测试期间表现良好.系统有大约15个表,每个表在2个站点(节点)上复制,每个表都是高度分散的.在测试阶段(主要关注可用性,效率和负载测试),我们接受了Mnesia的复杂结构的许多优点将为我们做,因为我们在服务之上运行的所有应用程序都是Erlang/OTP应用程序.我们运行Yaws 1.91作为主WebServer.

为了有效地配置分段表中,我们使用了一些谁已经在大型系统中使用Mnesia的引用:
它们是:Mnesia的一年后博客,博客的第2部分,其次是即使在这里,关于散列.这些博客文章帮助我们在这里和那里进行了微调,以获得更好的性能.

现在,问题.Mnesia有表格大小限制,是的,我们同意.但是,在任何地方都没有提到对片段数量的限制.出于性能原因,并且为了满足大数据的需要,有多少片段会让mnesia"好"?

在我们的一些表中,我们有64个片段.与n_disc_only_copies集到集群中的节点的数量,使得每个节点具有每片段的副本.如果给定节点瞬间无法触及,这有助于我们解决mnesia写入失败的问题.同样在上面的博客中,他建议the number of fragments should be a power of 2,这个声明(他说)是从mnesia记录的散列方式进行调查的.然而,我们需要对此进行更多的解释,以及在这里讨论两种权力:2,4,16,32,64,128,......?

该系统适用于HP Proliant G6,包含Intel处理器(2个处理器,每个4核,每个核心2.4 GHz速度,8 MB高速缓存),20 GB RAM大小,1.5 TB磁盘空间.现在,我们可以使用其中的两台高功率机器.应该在两者之间复制系统数据库.每个服务器运行Solaris 10,64位.

什么数量的碎片可能会使mnesia的表现开始降级?如果我们将给定表的片段数从64增加到128,这样可以吗?65536个片段(2 ^ 16)怎么样?我们如何通过使用碎片来扩展我们的mnesia以利用Terabyte空间?

请提供问题的答案,您可以提供有关可能增强系统的任何其他参数的建议.

注意:所有要保存数百万条记录的表都是按disc_only_copies类型创建的,因此没有RAM问题.对于我们运行的少数RAM表,RAM就足够了.其他DBMS(如MySQL Cluster和CouchDB)也将包含数据,并且与我们的Mnesia DBMS使用相同的硬件.MySQL Cluster在两个服务器上复制(每个服务器包含两个NDB节点,一个MySQL服务器),管理节点位于不同的主机上.

database erlang solaris yaws mnesia

19
推荐指数
1
解决办法
6911
查看次数

备份/恢复mnesia数据库的正确方法是什么?

警告:背景信息很长.如果您认为在背景信息之前需要问题,请跳到底部.欣赏这将要采取的时间!

我一直在网上(阅读谷歌),我没有找到一个好的答案.是的,在erlang.org网站上有很多关于Mnesia文档的链接和参考,但即使这些链接也受到版本的影响.

因此,在最简单的情况下,您当前连接的节点()与表集的所有者相同,那么备份/恢复将起作用.例如:

$ erl -sname mydatabase

> mnesia:start().
> mnesia:create_schema(...).
> mnesia:create_table(...).
> mnesia:backup("/tmp/backup.bup").
> mnesia:restore("/tmp/backup.bup", [{default_op, recreate_tables}]).
Run Code Online (Sandbox Code Playgroud)

嘿,这很棒!

但是,如果数据库实际上是在远程接口上的远程节点()或远程节点()上运行,那么您必须以这种方式启动备份:

$ erl -sname mydbadmin

> rpc:call(mydatabase@host, mnesia, backup, ["/tmp/backup.bup"]).
> rpc:call(mydatabase@host, mnesia, restore, ["/tmp/backup.bup", [{default_op, recreate_tables}]]).
Run Code Online (Sandbox Code Playgroud)

当然这也很简单.现在这里是棘手的事情....

  • 假设您正在进行每日备份.你的mnesia数据库服务器死了,你被迫更换硬件.如果要按原样恢复数据库,则需要使用与以前相同的名称命名新硬件,并且还需要将节点命名为相同.
  • 如果要更改硬件和/或节点的名称()...或者要在其他计算机上还原,则需要执行node_change过程.(在这里和mnesia文档中描述)

但事情变得复杂了.虽然我的熟人是erlang和mnesia专家,他们认为mnesia的复制存在严重缺陷,你不应该使用它(目前我还没有其他替代方案,你有什么机会实现更好的版本;不是可能)

所以你有两个节点()复制ram和基于光盘的表.您一直在使用默认的BackupMod维护使用标准备份定期备份数据库的策略.有一天,经理会要求您验证备份.只有当您尝试还原数据库时,才会获得:

{atomic,[]}
Run Code Online (Sandbox Code Playgroud)

根据文档,这意味着没有错误......但是没有表格被恢复.

不想跑你记住,节点()和主机名必须匹配,以便您更改主机名和-sname参数去那里数据被备份的计算机匹配change_node程序.但是这次你得到一个奇怪的错误:

{aborted,{'EXIT',{aborted,{bad_commit,{missing_lock,mydatabase@otherhost}}}}}
Run Code Online (Sandbox Code Playgroud)

仍然不想运行change_node过程我快速克隆恢复我的服务器,以便我有两个类似的机器.然后我恰当地命名以匹配生产服务器.然后我开始恢复过程.找到了!我现在在还原服务器上有真正的工作数据.

我想说这是路的尽头......但我还没有问过一个问题,而且问题的重点......所以这就是它?

问题:如果我想恢复从复制的mnesia节点集群中获取的备份,如何修改文件(类似于change_node过程),以便忽略其他节点或从备份中删除?

问题略有不同:如何在单个节点()上恢复复制多节点()mnesia数据库?

backup erlang mnesia restore

14
推荐指数
1
解决办法
5984
查看次数

如何监测mnesia负荷?

mnesia overloaded主要使用async_dirty查询和ram_copies表时有时会收到错误消息.因此,要了解发生了什么,我想获得有关mnesia状态的更多信息,例如每秒查询数或查询队列的大小.我搜索了很多,发现了两种可能的方法.

第一个是mnesia:system_info可以返回当前事务列表的函数.但它似乎无法提供有关非事务性查询的信息.

第二个是订阅mnesia事件,但是使用这种方式需要一些活动的后台处理以及手动订阅每个表事件.

是否有更好的方法来获取此信息?

erlang monitoring mnesia

14
推荐指数
1
解决办法
749
查看次数

如何重命名运行mnesia数据库的节点

我在machine1上创建了一个Mnesia数据库/ Schema.该节点名为mypl @ machine1.然后我将所有文件移动到machine2,因为machine1崩溃了.只要代码运行时名称为"mypl @ machine1",一切运行正常.显然这有点令人担忧,因为它现在在machine2上运行.

如果我使用节点名称"mypl @ machine2"启动Erlang,则Mnesia数据库显示为空.

如何将Mnesia数据库中的节点从machine1重命名为machine2?

erlang mnesia

13
推荐指数
1
解决办法
4155
查看次数

如何从/到mnesia备份/恢复单个表?

我有一些带disc_only_copies类型的大表.现在我需要将短节点名称更改为long但不能使用RAM限制...

我可以部分使用备份/恢复数据库(逐个表)吗?

erlang mnesia

13
推荐指数
1
解决办法
895
查看次数

标签 统计

erlang ×10

mnesia ×10

backup ×1

celery ×1

database ×1

debian ×1

monitoring ×1

rabbitmq ×1

restore ×1

solaris ×1

yaws ×1