2013-01-15 30 views
4

我在我的java应用程序中使用Cassandra DB。我使用Thrift客户端从我的Java应用程序连接Cassandra。如果Cassandra磁盘已满,则会自动终止。所以从我的Java程序中,我找不到为什么Cassandra停机的错误。如果磁盘中没有空间,Cassandra会终止

那么如何避免卡桑德拉的自动终止,或者他们的任何方式来识别磁盘满错误?

另外我没有物理访问cassandra驱动器。它运行在其他一些远程机器上。

回答

3

磁盘错误和一般的硬件/系统错误不是通常在任何应用程序中正确处理。数据库应该只在这种情况下提供尽可能多的耐久性,并且这是正确的行为 - 尽可能少地关闭和中断。

至于您的应用程序 - 如果无法连接到数据库,导致错误的原因没有区别。无论如何,你的应用程序无法使用。

有专门的工具可以监控您的机器,即Nagios。如果您是该服务器的管理员,请使用此类应用程序。当磁盘被填满时,您将收到一封电子邮件或文本。使用这样的工具,不要通过实施几百行代码来处理随机和非常罕见的情况,从而打开一扇敞开的大门。

+0

大多数应用程序正在处理磁盘空间异常。他们投掷的solr示例“磁盘空间不足”错误。但抛出错误仍然solr运行。就像那样,我们可以在Cassandra中做任何事情而无需停止服务。有任何选项可用吗? – SANN3

+0

另外我在很多系统中运行更多Cassandra。所以使用第三方工具很难监控所有的服务。如果服务停止意味着应用程序无法正常工作,但用户不知道确切原因。如果他知道原因,那么只有修复它才能知道。 – SANN3

+0

这些工具完全是*用于监控多个系统的目的!你甚至检查了我在答案中发布的链接吗?严重的是,不要重新发明轮子! – Dariusz

1

设置ssh访问Casandra机器,并使用一些ssh客户端(如JSch)从您的Java客户端运行df /casandra/drive(如果Linux)或fsutil volume diskfree c:\casandra\drive(如果是Windows)。捕获简单的输出并解析以获得可用磁盘空间。这样,您的应用程序将监视那里发生的情况,并且可能应该提醒用户,并在磁盘空间不足的情况下拒绝添加数据。

如果磁盘空间不足,也可以使用标准监视工具或设置服务器端脚本发送消息。但是,这不会阻止应用程序崩溃,您需要在看到磁盘空间不足后采取措施。

+0

我从许多系统运行许多Cassandra服务。因此,对于我需要运行第三方工具的每个系统来说,其难以实施也难以添加新的服务。 – SANN3

+0

我以某种方式假定你已经可以ssh进入这些系统。 – h22