Cassandra 是什么?

Apache Cassandra 以其可扩展性和容错分布式数据库系统而被人所熟知。Cassandra 起源于Facebook 最初创建于 Amazon Dynamo 和谷歌 BigTable 的一个项目,并从此成长为一个在苹果和 Netflix 等公司大量使用的开源系统。以下是一些 Cassandra 的关键属性:

  • 高扩展性和高可用性(Cassandra 集群是分散的,因此没有单点故障)
  • 可以近似线性的(集群扩大一倍,吞吐量扩大2倍)
  • 非常高的写入吞吐量和良好的读取吞吐量
  • 可调节的一致性和对复制的支持
  • 自然容纳(例如,时间序列数据)

拥有以上属性的 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 ,你可以抓取并可以进行分析的指标有很多,本文只介绍一部分,更多指标见 Cloud Insight Cassandra

  • 吞吐量,尤其是读写请求
  • 延迟,尤其是读写延迟
  • 磁盘使用情况,尤其是每个节点上的磁盘空间
  • 异常报错和超出,尤其是异常报错

通过 Cloud Insight ,你可以监控以上指标,按照喜好分门别类的设置自定义仪表盘,并依照这些指标分别配置预警,查看其产生的事件流,想想也是很美嗒。

吞吐量

  • cassandra.db.write_count
  • cassandra.db.write_operations
  • cassandra.db.read_operations

监视任何给定时间的查询速率,提供用户如何与 Cassandra 交互的图表。而且,由于 Cassandra 擅长处理大批量的写操作,所有你肯定要密切关注读取速率,警惕一些潜在问题或用户查询模式发生的显著变化。

Cassandra 很善于处理大量的写入操作,重点监控 Cassandra 写入指标,可以跟踪集群的总体活动水平,要留意任何异常尖峰或骤降,并对此进行进一步的调查。

延迟

  • cassandra.db.recent_read_latency_micros
  • cassandra.db.recent_write_latency_micros
  • cassandra.db.total_range_latency_micros
  • cassandra.db.total_read_latency_micros
  • cassandra.db.total_write_latency_micros

Cassandra 的读操作通常比写操作慢得多,因为读取涉及更多的 I/O。如果经常更新,那就可能跨越几个 SSTables,增加了读取的等待时间。因此,读取延迟是一个非常重要的指标,尤其是如果 Cassandra 查询是一个面向用户应用的数据服务。慢读取可以指出硬件或数据模型的问题,或者需要调整的参数,如压缩策略。

Cassandra 的写操作通常远远快于读操作,因为写请求在被知道前只需要记录在内存中,并追加到一个持久的提交日志里就算成功。具体的延迟水平将取决于你的使用情况。长期的慢写入就是系统性问题,这时可能需要将磁盘升级为速度更快的固态硬盘或检查一致性设置,(例如,设置一致性 EACH_QUORUM,则需要地理上相距很远的数据中心之间的通信)。写操作指标任何一个突然的变化,都可能有问题,如网络问题或者变化使用模式(例如,数据库插入的大小发生显著增加的情况)。

磁盘

  • cassandra.db.load
  • cassandra.db.total_disk_space_used

监测所使用的每个节点的磁盘可以提醒群集不平衡或资源约束。根据自己的 Cassandra 集群的使用和所选择的压缩策略,可以监视磁盘利用率,以确定什么时候应该增加更多的节点群集,以确保 Cassandra 总是有足够的空间来运行压实。

异常报错和超出

  • cassandra.db.exception_count
  • cassandra.internal.currently_blocked_tasks
  • cassandra.internal.total_blocked_tasks

无论什么原因,当群集出现无法处理传入的请求流时,你需要立刻知道这个情况。一个窗口到出现潜在问题就会增加 Cassandra 抛出异常的数量,如超时异常,这反映了一个请求不完整的(但不是失败)处理 Cassandra 的数量。

另一种检测潜在问题是监测 Cassandra 的任务状态作为它的请求处理。Cassandra 每种类型的任务(例如,ReadStage 任务)都有传入任务队列,并分配了一定数量的线程来执行这些任务。如果所有线程都在使用,任务将在队列等待可用线程。任何时刻任务的队列的数量由 pending tasks 指标显示。一旦挂起的任务队列已满,Cassandra 将把当前阻塞作为 currently blocked,当然这些任务最终可能接受或执行。

如何监控 Cassandra

想要监控 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 了。此外,使用它任何内部事件都会有事件流记录下来,例如报警策略的设置修改,关闭,开启,探针的启动等。功能如此强大,还不快来体验?

Cloud Insight 现在已经支持监控 Cassandra 啦!的更多相关文章

  1. 如何使用 Cloud Insight SDK 实现 Druid 监控?

    Druid 简介与用途 首先说明,这里所说的 Druid 并不是阿里巴巴的数据库连接池项目,而是 Eric Tschetter 创立的一个开源的分布式实时处理系统,希望为烧钱的大数据处理,提供一种更廉 ...

  2. Cloud Insight 仪表盘上线 | 全面监控 Redis

    OneAPM 作为应用性能领域的新兴领军企业,近期发布了重量级新产品-- Cloud Insight 数据管理平台,用它能够监控所有基础组件,并通过 tag 标签对数据进行管理. 近日,Cloud I ...

  3. 如何监控业务的响应速度?Cloud Insight SDK 实践分享

    一直在说 Cloud Insight 是数据聚合平台,可以用 SDK 和 API 实现业务监控,如今不拿出点实践人们恐怕是不能信服.那今天本文就先简单介绍一下 SDK 可以应用在哪些方面,再举个真实用 ...

  4. 极客范:如何使用 Cloud Insight 来监控闭路电视?

    最近新上线支持 Windows 系统及其组件 监控功能的 Cloud Insight,在系统监控领域基本囊括了对所有主流和部分非主流平台的支持.但是这还不够,Cloud Insight 可不仅仅是一个 ...

  5. Docker 监控- Prometheus VS Cloud Insight

    如今,越来越多的公司开始使用 Docker 了,2 / 3 的公司在尝试了 Docker 后最终使用了它.为了能够更精确的分配每个容器能使用的资源,我们想要实时获取容器运行时使用资源的情况,怎样对 D ...

  6. 如何监控 Tomcat?Zabbix 与 Cloud Insight 对比

    JVM 监控工具有很多,像命令 jstat,jmap,jstack,jinfo 可以根据不同需求查看不同的系统信息,还有图像化界面 jconsole,都是很方便的工具.这些可以参考 JAVA自带监控工 ...

  7. 使用 Cloud Insight SDK 监控北京空气质量!

    现在越来越多的 App 都开始有广告了.特别是空气质量监测,和天气类的 App,广告还是蛮多的,眼花缭乱,真是够了. 最近刚好在用一款系统监控工具 Cloud Insight,它提供的 SDK 可以把 ...

  8. Supervisor 管理进程,Cloud Insight 监控进程,完美!

    Supervisor 是由 Python 语言编写.基于 linux 操作系统的一款服务器管理工具,用于监控服务器的运行,发现问题能立即自动预警及自动重启等. Cloud Insight 是一款次世代 ...

  9. Cloud Insight支持阿里云一键接入了,so what?

    前几天 Cloud Insight 上线了一个新功能,考虑到目前只作为公测,所以只是是悄悄地加了一个接入项,希望你看完这偏文章会有兴趣体验一下. 相信体验过的用户(目前还是个位数)第一感受应该是:这个 ...

随机推荐

  1. html 笔记

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. mysql mac 上启动

    launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist 中内容: <string>/usr/local/o ...

  3. Prepare a Nexus Maven private repository

    1. port nat mapping #ssh VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port_5002 ...

  4. 转:通过API获取和创建 Oracle GL Account Code Combination ID’s (CCID’s)的几种方法汇总

    1] FND_FLEX_EXT.GET_COMBINATION_ID: This API Finds combination_id for given set of key flexfield seg ...

  5. Unity3D 之3D游戏入门Hello world(一)

    这几天开始玩Unity3D 有关3D的内容了,去年开始玩过一段时间的2D制作,不过因为年初找工作,所以放了一段时间, 现在再捡起来发现忘的已经差不多了,只能再从头开始,所以就从3D开始算了.下面是3D ...

  6. linux下apache-tomcat的安装

    一.JDK安装 1.安装JDK软件包 本例使用的JDK安装包为jdk-6u19-linux-x64.bin,该包是一个编译好的二进制可执行程序包,只需要执行即可安装. 首先进入存放JDK安装包的目录( ...

  7. WebSocket 实战

    http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/ 本文介绍了 HTML5 WebSocket 的由来,运作机制及客户端和服务端的 AP ...

  8. ibatis调存储过程返回游标

    http://blog.sina.com.cn/s/blog_6f3ca78f01010pmj.html iBatic调用与JAVA调用很类似,只是JAVA把参数的注册放到了类里面,而iBatis把参 ...

  9. 广告系统中weak-and算法原理及编码验证

    wand(weak and)算法基本思路 一般搜索的query比较短,但如果query比较长,如是一段文本,需要搜索相似的文本,这时候一般就需要wand算法,该算法在广告系统中有比较成熟的应 该,主要 ...

  10. html调用applet

    1.相同目录下 <applet code="*.class" width=250 height=50> </applet> 指定applet类名称,appl ...