我在我的 java 应用程序中使用 Cassandra DB。我正在使用 Thrift 客户端从我的 java 应用程序连接 Cassandra。如果 Cassandra 磁盘已满,则意味着它会自动终止。因此,从我的 java 程序中,我找不到 Cassandra 停机的正确错误。
那么如何避免 Cassandra 的自动终止,或者他们有什么方法可以识别磁盘已满错误?
此外,我没有物理访问 cassandra 驱动器的权限。它在其他一些远程机器上运行。
磁盘错误和一般的硬件/系统错误通常不会在任何应用程序中正确处理。数据库应该只在这种情况下提供尽可能多的持久性,这是正确的行为 - 尽可能少地关闭和中断。
至于您的应用程序 - 如果您无法连接到数据库,那么导致错误的原因没有区别。你的应用程序无论如何都不会工作。
有一些特殊的工具可以监控你的机器,比如Nagios。如果您是该服务器的管理员,请使用此类应用程序。当磁盘被填满时,您将收到一封电子邮件或文本。使用这样的工具,不要通过实现数百行代码来处理随机和非常罕见的情况来打破敞开的大门。
设置对 Casandra 机器的 ssh 访问权限并使用一些 ssh 客户端(如JSch)从您的 Java 客户端运行df /casandra/drive
(如果是 Linux)或(如果是 Windows)。fsutil volume diskfree c:\casandra\drive
捕获简单的输出并解析以获得可用磁盘空间。这样,您的应用程序将监视那里正在发生的事情,并且如果存在磁盘空间不足的威胁,可能应该提醒用户并拒绝添加数据。
如果磁盘空间不足,您还可以使用标准监控工具或设置服务器端脚本来发送消息。但是,这不会阻止您的应用程序崩溃,您需要在看到磁盘空间不足后采取措施。