国内关于Cassandra的比较详细的资料还是太少,以下是根据国外的一些资料翻译总结的内容,大家有需要可以参考参考!
还没写完,我会边写边上传!
Cassandra集群部署规划
在规划正式生产环境中的Cassandra集群部署时,首先必须考虑计划存储的数据量,以及前端主要应用系统常态情况及极值情况下的负载(读/写)压力。
硬件选择:
对任何应用系统而言,合理的硬件资源选择往往意味着在内存、CPU、硬盘、网络这4项基础资源中通盘考虑并获取一个最佳的配置平衡。
内存:
Cassandra节点拥有越多的内存,集群的读取性能越优秀。更多的内存允许更大的缓存大小,同时也能减少磁盘I /
O读。更多的内存也允许设置更大的内存表(memtables)来存储最近的读取的数据,这将有效减少在一次读过程中扫描及读取的文件(索引文件、
SSTable文件等)。在正式生产环境中单节点采用8GB~16GB是普遍现象,建议最低不低于4GB内存,目前有部分生产集群采用32GB或更高的内
存配置。理想的内存配置往往取决于频繁读取中的数据流大小。
CPU:
在实际应用Cassandra集群的系统中,“写频繁”的应用往往在达到内存的处理极限之前其CPU已经不堪重负了。Cassandra的高并发特性决定
了其将直接受益于更多的处理器数量。目前,拥有8个CPU内核的节点通常能提供最好的性价比。而在虚拟服务平台上,我们可以考虑使用云服务提供商,他们往
往拥有密度更高的处理器单元,能提供更强大的处理能力。(比如纽约时报就租用亚马逊的云服务平台来处理所有历史报纸的扫描件的解析存储工作)。
硬盘:
选择硬盘的两个重要依据是:容量
(有多少数据要存储)及I/O
(读写吞吐率)。存储方面的优化将有效减少昂贵的SATA硬盘数量,并能够通过扩展节点来增强集群的存储能力及I/O性能(当然这往往也意味着更多的内存投入)。
固态硬盘(SSDs)也是Cassandra集群的一个有效替代选择。基于SSDs,并配合Cassandra的“顺序流”的写模式将能极大降低对写入效率的不良影响。
Cassandra通过两个操作将数据持久化到硬盘中:它首先先将“写入数据”附加到内存中的Commit
Log中,并周期性的将内存中的数据顺序刷新到硬盘,写入SSTable(列簇数据的存储文件)中。强烈推荐为CommitLog和SSTables文件
采用不同的磁盘存储。CommitLog并不需要太多的存储空间,但其能有有效平衡你的写入负载压力。数据目录不仅要满足存储持久数据的要求,同时也要有
足够的吞吐率以满足可以意料到的数据“读取”压力、数据“写入”和压缩的I/O需求。
Cassandra在运行后台的数据压缩及数据修复操作时,硬盘利用率往往会临时增长到实际数据目录容积的2倍多。因此,建议在每个节点中实际使用的容量不要超过磁盘最大容量的50%。
同时考虑磁盘故障影响及数据冗余需求,有两个合适的搭配方式:
-
存储采用RAID0,通过Cassandra的数据备份机制来解决硬盘故障的影响。一旦某个节点的磁盘出现故障,我们可以通过Cassandra的修复操作来自动找回失去的数据。
-
存储采用RAID10,这样可以通过纯粹硬件上的水平扩展来解决单个磁盘的故障,这样可以关闭Cassandra的自动备份操作。
如果在磁盘存储方面由足够的投资,推荐采用RAID10,这样可以减少Cassandra副本备份策略所带来的额外存储操作,减少网络负载。反之,则推荐采用RAID0。
网络:
Cassandra是一个分布式数据存储平台,它基于网络来处理读/写请求,同时通过网络来进行节点间的数据备份。Cassandra对副本数据的选择策略是,同机架上节点的优先于不同机架上的节点。同个数据中心的节点优于不同数据中心的节点。
Cassandra使用如下端口,在实际生产环境中如果存在防火墙,必须确保同一集群中的节点可以通过这些端口互相访问。
端口号
|
描述
|
7000
|
Cassandra内部节点间的通信端口
|
9160
|
Thrift客户端访问端口
|
7199
|
JMX的监控端口(早期版本是8080)
|
容量规划
本节所介绍的方法可以作为在Cassandra集群中进行数据容积估算的参考。为了更好的估算,我们首先要对我们在Cassandra中所操作的数据有一
个客观全面的了解。同时我们也需要知道我们准备在cassandra中如何构建数据的存储模型(列簇的划分、行集、每行多少列,等等…)
可用磁盘容量计算
计算你的Cassandra集群节点们能管理多大的数据量,同时计算每个节点的可用磁盘容量,并将所有节点的容量进行叠加。要谨记,在实际生产集群
中,Commit Log和实际数据目录(datadirectories)务必被存储在不同的磁盘上。以下公式可以用于存储最小可用容量的估算。
让我们首先计算我们的磁盘的原始容量:
原始容积
=硬盘大小*硬盘数量
算上硬盘格式化所需的文件系统开销及我们所使用的磁盘阵列的层级模式,比如,假设我们使用的是RAID10模式,则容积计算公式如下:
(原始容积* 0.9) / 2 = 数据可用的磁盘空间
在日常操作中,Cassandra进行数据压缩和修复操作都需要消耗一定的磁盘空间,为了平衡性能要求和集群稳定性,强烈推荐你给你的磁盘空间留出一定的余地,仅使用少于50%的可用磁盘空间,时刻记住这一点,我们可以采用如下公式计算实际使用的空间:
数据可用的磁盘空间* 0.5 = 实际使用的磁盘空间
用户数据规模计算
和所有的存储系统类似,原始数据一旦进入Cassandra中存储,由于存储开销的影响,其存储容积往往要大于原始数据大小。一般来说,入库后将膨胀到原
始大小的两倍。具体膨胀多少还依赖于系统所使用的字符集及,以下内容可以用于磁盘存储数据的估算(内存临时数据的容量计算不在本节讨论范围中)。
列开销
-
每一个列在Cassandra中占用15个字节的开销。因为列簇(Column
Family)中的每一行都可以拥有大量不同的列及不同的列名,每一列的元数据都需要被存储起来。对于counter
columns及被设置了生命周期的columns,还需要额外的8字节的定义开销(共23字节的额外开销)。因此计算一个正常列的开销的公式如下:
column总长度 = column名称长度 + column值长度 + 15字节
行开销
- 和列类似,每一行也需要占用23字节的开销。
主键索引开销
- 每个列簇同样包含一个行集的主键索引,在我们拥有大量“窄行”的情况下,主键索引尤其重要(不用遍历整个数据集),采用以下公式可以大概估算主键索引所占用的空间:
主键索引 = 行总数 * (32 + 主键大小的均值)
复制开销
– 备份策略中的复制数因子在磁盘容量使用方面扮演了一个重要角色。如果复制数因子为1,则系统没有额外的复制开销(集群中只有一份数据),一旦复制数因子大于1,可以用如下公式计算复制开销:
复制开销 = 总数据大小 * (复制数因子 - 1)
节点配置选择的合理选择
规划Cassandra集群配置的一个主要工作就是理解并合理设置各个节点的配置参数。本小节将解释针对单节点、多节点、多数据中心而言,在集群中可以采用哪些部署配置。
本节所提及的配置属性均可在cassandra.yaml
这个配置文件中找到,每个集群节点均必须在启动前进行正确的配置。
存储设定:
缺省情况下,每个节点的数据存储路径被设置为/var/lib/cassandra。在实际生产集群部署中,, 我们必须修改commitlog_directory
和data_file_directories
这两个参数所指定的路径,以保证日志文件目录和数据文件目录在不同的磁盘存储中。
Gossip设定:
Gossip设置用来指定集群中节点的通信模式及节点如何被集群所识别。
属性
|
描述
|
cluster_name
|
节点所在集群名称
|
listen_address
|
Cassandra集群中的其它节点连接到本节点的IP地址或主机名. 必须从localhost修改为本主机所对应的公共IP。
|
seeds
|
用逗号分隔的种子节点IP列表。每个节点此值都必须一致。在多数据中心中,每个数据中心至少必须有一个节点在此列表中。
|
storage_port
|
内部节点通信端口(默认为7000),对每个节点都必须一致。
|
initial_token
|
这个值直接决定了本节点所负责的数据范围(采用一致性hash进行计算),也可以不设置,有系统自动指定,并可以定期采用Cassandra定期进行load blance以达到平均存储的目的(详细可以参考RingRange)。
|
清除节点的Gossip状态
每个节点都可以自动缓存Gossip状态信息,并在下次重启中自动加载,而不必等待Gossip服务的回复。可以在
cassandra-env.sh
脚本文件中添加如下定义来强制清除缓存中的Gossip状态:
-Dcassandra.load_ring_state=false
cassandra-env.sh文件一般位于/usr/share/cassandra目录或 $CASSANDRA_HOME/conf目录中。
分区器设置:
在实际生产环境中,我们要确保集群中的每个节点存储的数据量大体相等,这就是所谓的“负载平衡”。这种功能是通过在每个节点中配置分区器(partitioner)并正确合理的设置initial_token的值来实现的。
强烈推荐在所有集群中采用RandomPartitioner分区器(同时它也是默认配置),基于此配置,集群中的每个节点都会被分配一个0~2**127的hash值。
对于所有节点都在同一个数据中心的Cassandra集群而言,我们可以在集群中的节点总数中换分范围来获得token值。在多数据中心的部署中,每个数据中心必须单独考虑负载平衡。多数据中心及单数据中心的不同tokens值的分配方式可以在Calculating Tokens
中获得详细信息。
Snitch设置:
Snitch能够帮助你获取你在网络拓扑结构中所处的位置。它直接影响副本放置的位置以及副本间的请求路由。endpoint_snitch属性将配置节点的Snitch属性。所有节点的Snitch配置都必须一致。
对于单数据中心的集群而言,使用SimpleSnitch策略即可满足要求。但如果我们将在未来将我们的集群扩展为多机架多数据中心的话,一开始就设置每个节点所在的机架及数据中心会让事情更简单一些。
配置PropertyFileSnitch
PropertyFileSnitch要求我们在
cassandra-topology.properties
配置文件中定义每个节点的详细网络信息。
如下内容是此文件的一个配置实例,其中表示共有两个数据中心,每个数据中包含了两个机架,同时包含一个第三方逻辑数据中心用以进行数据复制分析。
# 数据中心1
175.56.12.105=DC1:RAC1
175.50.13.200=DC1:RAC1
175.54.35.197=DC1:RAC1
120.53.24.101=DC1:RAC2
120.55.16.200=DC1:RAC2
120.57.102.103=DC1:RAC2
# 数据中心2
110.56.12.120=DC2:RAC1
110.50.13.201=DC2:RAC1
110.54.35.184=DC2:RAC1
50.33.23.120=DC2:RAC2
50.45.14.220=DC2:RAC2
50.17.10.203=DC2:RAC2
# Analytics Replication Group
172.106.12.120=DC3:RAC1
172.106.12.121=DC3:RAC1
172.106.12.122=DC3:RAC1
# default for unknown nodes
default=DC3:RAC1
|
在以上的snitch配置中,你可以任意定义你的数据中心和机架的名称。但必须确保cassandra-topology.properties配置文件中的名称和你在keyspace strategy_options定义中所用的名称是一致的。
分享到:
相关推荐
#### 三、Cassandra集群部署规划详解 在规划Cassandra集群部署时,首要考虑的是预期存储的数据量以及前端应用系统的负载压力。合理的硬件配置对于实现高效稳定的集群至关重要。 - **内存**:充足的内存是Cassandra...
Kubernetes上的可扩展Cassandra部署:在此代码中,我们提供了在Kubernetes上部署多节点可扩展Cassandra集群的完整路线图。 Cassandra知道它正在集群管理器中运行,并使用此集群管理基础结构来帮助实现该应用程序。 ...
- 自动化集群部署:Cassandra-Operator可以自动创建和配置Cassandra Pod,设置持久卷存储以确保数据持久化。 - 扩展与缩容:当需要增加或减少节点时,Operator可以自动处理,无需手动干预。 - 故障检测与恢复:...
docker-cassandra-群集使用docker的Cassandra的基本集群脚本。 尽管您可以将其启动到docker-machine集群上,但这是为本地开发而设计的。 如果您确实踏上了那趟旅程,请特别注意compose yaml中的端口规格。 它可能...
CQL(Cassandra Query Language)的使用,其架构的理解,内部通信机制,故障检测与恢复,数据分布和复制,分区器,网络拓扑策略(Snitches),客户端请求处理,集群部署规划,硬件选择,亚马逊EC2集群规划,反模式,...
在"一组Cassandra工具,用于备份、恢复、监控、修复和管理Apache Cassandra Datastax集群_Jinj.zip"这个压缩包中,我们可能找到了一系列实用的工具,这些工具可以帮助管理员更有效地管理和维护Cassandra集群。...
了解这些配置参数对部署和优化Cassandra集群至关重要。 首先,cluster_name参数定义了集群的名称,这有助于防止不同逻辑集群中的机器相互加入,确保集群间的数据隔离。 num_tokens参数指定了随机分配给每个节点的...
他们可以从中获得关于Cassandra集群部署、故障转移、备份、修复和其他高级主题的深入指导。《MASTERING_APACHE_CASSANDRA_3X_THIRD_EDITION.pdf》也适合那些希望学习如何使数据库在不断扩展的数据集和不断增长的用户...
包括用ansible管理ec2 cassandra集群。这个项目的目标是创建ami、vagrant box和docker基映像,可以用来部署cassandra。,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
在描述中提到的“超过150个食谱”,意味着这本书涵盖了广泛的主题,从基础的Cassandra集群部署到高级的性能调优技巧。这些食谱既包括对数据模型设计的指导,也包括对于如何调整和优化现有部署的深入见解。 书中的...
盐-cassandra-formula将这些手动步骤自动化,使部署和管理Cassandra集群变得简单。它使用Salt的状态树(state tree)定义了Cassandra的配置,通过SLS(State SLS)文件将配置和执行命令封装成易于管理和复用的形式。...
CCM(Cassandra集群管理器) 在本地主机上创建,启动和删除Apache Cassandra集群的脚本/库。 ccm和ccmlib的目标是使在本地机器上轻松创建,管理和销毁小型Cassandra群集变得容易。 它旨在测试Cassandra集群。 指向...
在集群部署规划方面,文档介绍了如何在基于RHEL和Debian的系统上安装Cassandra 3.0,包括从二进制tar包安装、无需root权限配置、卸载旧版本以及在云提供商上的安装。另外,文档还推荐了在Linux和Windows系统上的生产...
nodetool则提供了一些用于管理和监控Cassandra集群的命令。 对于开发人员,Cassandra提供了一个简单的Java编程接口Thrift,可以用来在Java应用程序中访问Cassandra。Thrift接口的工作流程通常包括准备工作、数据库...
10. **监控和运维**:部署完成后,还需要考虑监控和日志管理,确保Cassandra集群健康运行。可以集成Prometheus、Grafana等工具进行性能监控,使用Logstash、ELK Stack等处理日志。 总的来说,“terraform-cassandra...
Cassandra最初源自Facebook,并借鉴了Google BigTable面向列的存储模型和Amazon Dynamo的分布式哈希表(P2P)特性,旨在提供高度的性能、可扩展性、容错和简单的部署方式。 2. **Cassandra的历史和概述**:Cassandra...
此外,Cassandra支持多数据中心部署,每个数据中心可以独立运行,同时通过复制机制保持数据的一致性,这对于构建全球分布式的高可用系统至关重要。 ### 关键知识点二:Cassandra数据模型 Cassandra的数据模型基于...