赞
踩
因Cassandra采用了许多容错机制。由于Cassandra是无主的,类似区块链去中心化设计,所以不存在单点故障。可以做到在不停机情况下滚动升级。这是因为Cassandra可以支持多个节点的临时失效(取决于群集大小),对整个群集的性能影响可以忽略不计。
Cassandra提供LOCAL和REMOTE模式,支持多地域容灾。Cassandra允许您将数据复制到其他数据中心,并在多个地域保留多副本。除了作为强大的灾难恢复和业务连续性保障之外,这有助于满足许多监管,离线分析等要求,参考在线文档。
Cassandra提供强大QPS能力,多个节点可以轻松达到10W/TPS。
以cassandra 3.3.x安装为例,描述cassandra集群搭建过程,先将cassandra 3.3.x解压到Linux服务器目录/appuser/cassandra 3.3.x
以三节点集群为例:192.168.0.1,192.168.0.2,192.168.0.3,并选192.168.0.1为种子节点。
需要SUN提供的JDK1.8,java -version查看JDK版本,注意不是OpenJDK
vi ~/.bash_profile
CASSANDRA_HOME=/appuser/cassandra 3.3.x
并在path后面加上
:$CASSANDRA_HOME/bin
执行:source ~/.bash_profile 让其配置生效
验证生效:echo $CASSANDRA_HOME
(1)vi /etc/sysctl.conf 配置网络缓冲区和虚拟内存
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_wmem=8192436600873200
net.ipv4.tcp_rmem=32768436600873200
net.ipv4.tcp_mem=94500000 91500000 92700000
net.ipv4.tcp_max_orphans=3276800
net.ipv4.tcp_fin_timeout=30
vm.swappiness=5
vm.max_map_count=1048575
(2)vi /etc/security/limits.conf 配置资源限制
*-memlock unlimited
*- nofile 1048575
*-nproc 1048575
*-as unlimited
(3)vi /etc/security/limits.d/90-nproc.conf 配置文件打开数
*-nproc 32768
让配置生效:
执行sysctl -p
cd $CASSANDRA_HOME
cd conf
注意:使用8cores环境,后面加空格然后在添加参数
vi cassandra.yaml
cluster_name: 'xx-cluster' #集群名称,每个节点相同 hinted_handoff_throttle_in_kb: 32768 max_hints_file_size_in_mb: 256 index_summary_capacity_in_mb: 1024 batchlog_replay_throttle_in_kb: 32768 authenticator: PasswordAuthenticator authorizer: CassandraAuthorizer seeds: "192.168.0.1" #种子节点--注:集群启动时每个节点需配置相同的种子IP地址 listen_address: "192.168.0.1" #本机实际IP地址 rpc_address: "192.168.0.1" #RPC服务,本机实际IP地址 seed_provider: -seeds: "192.168.0.1" data_file_directories: /odsdata/data #元数据路径 commitlog_directory: /odsdata/logs #日志存放目录 saved_caches_directory: /odsdata/caches #缓存存放目录 hints_directory: /odsdata/hints #提示文件存放目录 row_cache_size_in_mb: 1536 row_cache_sava_period: 1000 row_cache_keys_to_save: 0 concurrent_compactors: 8 concurrent_reads: 32 concurrent_writes: 64 concurrent_counter_writes: 32 file_cache_size_in_mb: 1024 #注意tombstone会撑爆缓存,应根据数据量适当调整,或避免大表出现tombstone row_cache_save_period: 1000 memtable_heap_space_in_mb: 3072 memtable_offheap_space_in_mb: 3072 memtable_allocation_type: offheap_buffers #如果是offheap可能会导致垃圾回收耗死cpu暴涨 memtable_flush_writers: 8 auto_snapshot: false compaction_throughput_mb_per_sec: 256 read_request_timeout_in_ms: 30000 dynamic_snith_reset_interval_in_ms: 10000 #datax数据抽取配置很重要 batch_size_warn_threshold_in_kb: 5000 batch_size_fail_threshold_in_kb: 100000 read_request_timeout_in_ms: 20000
#CMS Setting禁用CMS垃圾回收器,使用G1垃圾回收器,以下以主机内存为16G的参数调优为例:
-Xms10G
-Xmx10G
-XX:+UseG1GC
-XX:G1RSetUpdatingPauseTimePercent=5
-XX:MAXGCPauseMillis=500
-XX:InitiatingHeapOccupancyPercent=75
-XX:ParallelGCThreads=16
-XX:ConcGCThreads=16 #默认为Parallel的1/4,设置相同减少STW
-XX:+AlwaysPreTouch
-XX:-UseBiasedLocking #禁用偏向锁
#其他Print参数保持不变
-Xloggc: /appuser/cassandra/gc.log #以实际地址为准
启动时,先启动种子节点,然后再启动其他节点。
cd ${CASSANDRA_HOME}/bin
./cassandra &
(1)、创建用户
create user
cassuser with password
‘cass123!’ superuser
; #创建用户cassusergrand all on keyspace
casskeyspace to
cassuser; #授权casskeyspace给cassuser用户alter user
cassandra with password
‘cass123!’; #更改用户cassandra的密码create keyspace if not exists
casskeyspace with durable writes =true and replication {‘class’: ‘org.apache.cassandra.locator.SimpleStrategy’, ‘replication_factor’: ‘3’}sstable压缩方式选择
如何选择创建表,往往需要对读写场景进行分析
,针对不同场景,压缩选择方式不仅相同,具体参考官方文档说明。
(1)SizeTieredCompactionStrategy(默认)
数据量达到阈值
才进行压缩,Cassandra在内存数据达到一定大小时,会将数据排序写入磁盘生成一个sstable文件块,所以会提高写速度。
写入密集型
工作负载。(2)LeveledCompactionStrategy
各层无重复数据,检索速度快
:同一层的各个sstable之间不会有重复的数据。所以在某一层和它上一层的数据块进行合并时,可以明确的知道某个key值处在哪个数据块
中,可以一个数据块一个数据块的合并,合并后生成新块就丢掉老块。
读取密集型
工作负载。(3)DateTieredCompactionStrategy
适合时间序列数据
,存储在对所有数据使用默认 TTL 的表中。比 DateTieredCompactionStrategy (DTCS) 更简单的配置,后者已被弃用而支持 TWCS。./nodetool status #查看集群总体状态
./nodetool tpsstats #查看集群总体各个阶段的性能
./nodetool cfsstats tbs.mkt_info |head -7 #查看集群读写延迟,超过1s重点关注
#tbs.mkt_info表示: k e y s p a c e . {keyspace}. keyspace.{table}
./bin/cqlsh 进入cqlsh控制台
1、describe keyspaces; 2、describe types; #可以查询SELECT * FROM tb; 3、describe tables #进入keyspace 4、user keyspace #进行数据查询,并将结果导出到日志 5、bin/cqlsh -e `SELECT id,title FROM t_videos;` >output.txt #从文件导入,指定分隔符或表头 6、copy myspace.mytable(col1,col2,col3) from '/path/to/import.dat' with delimiter=',' copy myspace.mytable(col1,col2,col3) from '/path/to/import.dat' with delimiter=',' and header=true #导出表到文件 7、copy myspace.mytable(col1,col2,col3) to'/path/to/export.dat' with delimiter=',' copy myspace.mytable(col1,col2,col3) to'/path/to/export.dat' with delimiter=',' and header=true #清空表,类似mysql delete from tableName; 8、truncate tableName #执行文件内脚本,针对一些权限限制严的场景(比如:银行) 9、./cqlsh IP 9042 -ucass -pcass123! -f ddl.sql
./bin/sstableloader -d 192.168.0.1,192.168.0.2,192.168.0.3 -u cassuser -pw cass123! -t 10 -cph 100 casskeyspace/test_dt_sstable
其中集群地址:192.168.0.1,192.168.0.2,192.168.0.3
生成的文件目录:casskeyspace/test_dt_sstable
限制流量-t:M/bps
每个节点建立连接数:-cph
进入cassandra/tools工具目录
详细请参考官方文档详细说明,这里只对如下参数做一点说明:
gc_grace_seconds :数据被标记为墓碑(删除标记)后几秒钟,然后才有资格进行垃圾收集。默认值:864000(10 天)。默认值允许 Cassandra 在删除之前最大化一致性。建议对创建表都进行设定,以防墓碑不断增长导致预警
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。