Apache Cassandra 以其可扩展性和容错分布式数据库系统而被人所熟知。 Cassandra 起源于 Facebook 最初创建于 Amazon Dynamo 和谷歌 BigTable 的一个项目,并从此成长为一个在苹果和 Netflix 等公司大量使用的开源系统。以下是一些 Cassandra 的关键属性:
拥有以上属性的 Cassandra 在中国之前的路走的不是很顺畅,几年前它还算是新兴产品,在稳定性和最佳实践上都没有有利的说服力,加之 Facebook 和 Twitter 等因考虑自己架构而放弃使用 Cassandra ,改用 HBase 等其他数据库,还有在中国关于 Cassandra 的文章本来就少,不了解它的人也更不会去尝试,种种原因使得之前国内使用 Cassandra 没有呈现火的趋势。
但近几年随着其版本提升,应用实践增多,先后有 Instagram 迁移到 Cassandra , Facebook 部分项目放在 Cassandra 上, Cassandra 2015 峰会上与会者人数超过 6000 人等事件,奥地利咨询公司 Solid IT 汇编的数据显示, 2015 年 Cassandra 是除 MongoDB 外最受欢迎的的 NoSQL 数据库,也是世界上增长速度第三快的数据库系统。
在 Apache Cassandra 的官网首页都写了现在全球已经有 1500 多个公司在使用:
Cassandra is in use at Constant Contact,CERN, Comcast, eBay, GitHub, GoDaddy,Hulu, Instagram, Intuit, Netflix, Reddit, The Weather Channel, and over 1500 more companies that have large, active data sets.
此外,专注于 Cassandra 的初创公司 DataStax 在 13 年获得了 4500 万美元的 D 轮融资,它的成功也代表着 Cassandra 巨大的市场空间,证明它能够处理大规模的在线应用程序,而且保证了性能的稳定性。
以上种种,促使众多软件开发者开始使用 Cassandra ,同样滋生的还有支持 Cassandra 性能监控的软件服务,例如国内的 Cloud Insight ,就支持监控 Cassandra ,显示下图等指标。
通过 Cloud Insight ,你可以抓取并可以进行分析的指标有很多,本文只介绍一部分,更多指标见 Cloud Insight Cassandra:
通过 Cloud Insight ,你可以监控以上指标,按照喜好分门别类的设置自定义仪表盘,并依照这些指标分别配置预警,查看其产生的事件流,想想也是很美嗒。
监视任何给定时间的查询速率,提供用户如何与 Cassandra 交互的图表。而且,由于 Cassandra 擅长处理大批量的写操作,所有你肯定要密切关注读取速率,警惕一些潜在问题或用户查询模式发生的显著变化。
Cassandra 很善于处理大量的写入操作,重点监控 Cassandra 写入指标,可以跟踪集群的总体活动水平,要留意任何异常尖峰或骤降,并对此进行进一步的调查。
Cassandra 的读操作通常比写操作慢得多,因为读取涉及更多的 I/O 。如果经常更新,那就可能跨越几个 SSTables ,增加了读取的等待时间。因此,读取延迟是一个非常重要的指标,尤其是如果 Cassandra 查询是一个面向用户应用的数据服务。慢读取可以指出硬件或数据模型的问题,或者需要调整的参数,如压缩策略。
Cassandra 的写操作通常远远快于读操作,因为写请求在被知道前只需要记录在内存中,并追加到一个持久的提交日志里就算成功。具体的延迟水平将取决于你的使用情况。长期的慢写入就是系统性问题,这时可能需要将磁盘升级为速度更快的固态硬盘或检查一致性设置,(例如,设置一致性 EACH_QUORUM
,则需要地理上相距很远的数据中心之间的通信)。写操作指标任何一个突然的变化,都可能有问题,如网络问题或者变化使用模式(例如,数据库插入的大小发生显著增加的情况)。
监测所使用的每个节点的磁盘可以提醒群集不平衡或资源约束。根据自己的 Cassandra 集群的使用和所选择的压缩策略,可以监视磁盘利用率,以确定什么时候应该增加更多的节点群集,以确保 Cassandra 总是有足够的空间来运行压实。
无论什么原因,当群集出现无法处理传入的请求流时,你需要立刻知道这个情况。一个窗口到出现潜在问题就会增加 Cassandra 抛出异常的数量,如超时异常,这反映了一个请求不完整的(但不是失败)处理 Cassandra 的数量。
另一种检测潜在问题是监测 Cassandra 的任务状态作为它的请求处理。 Cassandra 每种类型的任务(例如, ReadStage 任务)都有传入任务队列,并分配了一定数量的线程来执行这些任务。如果所有线程都在使用,任务将在队列等待可用线程。任何时刻任务的队列的数量由 pending tasks 指标显示。一旦挂起的任务队列已满, Cassandra 将把当前阻塞作为 currently blocked ,当然这些任务最终可能接受或执行。
想要监控 Cassandra ,首先你要安装 Cloud Insight 探针,注册账号,一键复制:
CI_LICENSE_KEY= bash -c "$(curl -L https://download.oneapm.com/oneapm_ci_agent/install_agent.sh)"
安装成功后在 web 上会有一个应用产生,接下来就是配置 Cassandra 监控, Cloud Insight 监控 Cassandra 是通过 JMX 来获取指标,详情见 JMX 远程监控,即首先要开启 JMX 监控,配置好 JMX 之后找到配置文件所在的目录,例如 Linux 系统,配置文件在 /etc/oneapm-ci-agent/conf.d
里,复制一份 cassandra.yaml
,配置文件中需要修改 host 和 port ( JMX 监控的端口),使 Cloud Insight Agent 可以与 Cassandra 通信:
instances:
- host: localhost
port: 7199
user: username
password: password
name: cassandra_instance
#trust_store_path: /path/to/trustStore.jks # Optional, should be set if ssl is enabled
#trust_store_password: password
#java_bin_path: /path/to/java #Optional, should be set if the agent cannot find your java executable
# List of metrics to be collected by the integration
init_config:
conf:
- include:
domain: org.apache.cassandra.db
attribute:
- BloomFilterDiskSpaceUsed
- BloomFilterFalsePositives
- BloomFilterFalseRatio
- Capacity
- CompressionRatio
- CompletedTasks
- ExceptionCount
- Hits
- RecentHitRate
- RowCacheRecentHitRate
- KeyCacheRecentHitRate
- LiveDiskSpaceUsed
- LiveSSTableCount
- Load
- MaxRowSize
- MeanRowSize
- MemtableColumnsCount
- MemtableDataSize
- MemtableSwitchCount
- MinRowSize
- ReadCount
- Requests
- Size
- TotalDiskSpaceUsed
- TotalReadLatencyMicros
- TotalWriteLatencyMicros
- UpdateInterval
- WriteCount
- PendingTasks
exclude:
keyspace: system
attribute:
- MinimumCompactionThreshold
- MaximumCompactionThreshold
- RowCacheKeysToSave
- KeyCacheSavePeriodInSeconds
- RowCacheSavePeriodInSeconds
- PendingTasks
- Scores
- RpcTimeout
- include:
domain: org.apache.cassandra.internal
attribute:
- ActiveCount
- CompletedTasks
- CurrentlyBlockedTasks
- TotalBlockedTasks
- include:
domain: org.apache.cassandra.net
attribute:
- TotalTimeouts
重启 Cloud Insight ,使配置生效。也可以通过执行 Info
命令,来验证配置是否成功:
sudo /etc/init.d/oneapm-ci-agent restart
sudo /etc/init.d/oneapm-ci-agent info
当出现以下信息,则代表安装成功:
Checks
======
[...]
cassandra
---------
- instance #0 [OK]
- Collected 8 metrics & 0 events
安装成功后,过 2 分钟你就可以看到 Cassandra 的指标数据,你可以通过自定义仪表盘设置你所关心的数据,可以监控每一个 Cassandra 关键指标。通过设置标签,对所有主机进行分组展示,也可以从炫酷的拓补图上看到哦。你还可以设定一个告警策略,一旦指标数据有异常,可以迅速让团队成员知道,例如请求吞吐量在很短的时间内下降到一定值就可以做一个报警策略。
如果你在使用 Cassandra (如果现在没有使用那就赶紧用起来),想要让关键指标可视化,能够自定义设置仪表盘,把你想看的指标放在一起;还可以设置告警,一旦数据有任何异常都可以通知团队成员,那当仁不让的要选 Cloud Insight 了。此外,使用它任何内部事件都会有事件流记录下来,例如报警策略的设置修改,关闭,开启,探针的启动等。功能如此强大,还不快来体验?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.