集群机制
一致性哈希(数据一致性)
Token
Range
Partitoner
Gossip协议(流言,无中心获取领导者)
用于在环内节点之间传播状态信息
周期运行,每次在环中随机挑选一个对象节点,发起会话
每次会话传送三条消息
Phi增量故障检测算法
Snitch(机架感知)
复制策略
Cassandra的数据存储
1) commit log: 保存对数据库的DML操作。记录的是操作动作,不是数据(redo)
· 进行写操作时,首先要写commit log
· 只有操作被写入 commit log 的数据,才算写入成功
· 当发生掉电,实例崩溃等问题的时候,可以使用commit log 进行回复
memtable:
· 数据操作成功写入到 commit log后,就开始写入内存中的memtable
· memtable中的数据达到一定阈值后,就开始写入硬盘中的 SSTable,然后内存中重新建立一个memtable接收下一批数据
· 上述刷写过程是非阻塞的
· 查询时先查询memtable
SSTable:
· 起源于Google的Bigtable
· 墓碑: 删除数据并不是物理删除,实际上打删除标记,软删除
· 压紧: 对用户透明,数据库自己控制。(墓碑打标记行删除 / 重建索引)
· Bloomfilter(布隆过滤器):相比其他的数据结构,Bloom Filter再空间和时间方面都有巨大的优势,Bloom Filter存储空间和插入/查询时间都是常数。另外,Hash函数相互之间没有关系,方便由硬件并行实现,Bloom Filter不需要存储元素本身,再某些对保密要求非常严格的场合有优势。
2) data:
3) saved_caches:
集群配置
安装JAVA环境
部署Cassandra安装包
修改Cassandra配置文件,设置集群名
规划IP地址,设置作为seed的IP
决定snitch
Cassandra还可以支持多数据中心集群
修改其它可能的配置
启动Cassandra并加入集群
安装过程: 节点1
一、安装JAVA
二、设置JAVA_HOME环境变量
三、解压Cassandra安装包
四、创建/var/lib/cassandra和/var/log/cassandra目录并改变属主,如果目录已经存在先进行清理
五、修改配置文件 conf/cassandra.yaml
cluster_name: 'cluster01'
num_tokens: 256
seeds: "192.168.1.100" --种子机
listen_address: 192.168.1.100
rpc_address: 192.168.1.100
rpc_port: 9160
rpc_keepalive: true
endpoint_snitch: SimpleSnitch --假设所有服务器都在一个机架
六、启动Cassandra
安装过程:节点2
一、安装过程与节点1类似
二、修改配置文件略有不同
三、Seeds写节点1的IP
四、启动节点2
副本放置策略
简单策略
旧网络拓扑策略(机架感知设定)
网络拓扑策略 (用户自己设定)
Snitch(指定机架结构)
· Simple Snitch:通过IP地址判断
· PropertyFileSnitch: 指定IP属于哪个数据中心,哪个机架
副本因子
创建keyspace时候指定
create keyspace excelsior with replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
create keyspace "Excalibur" with replication = {'class':'NetworkTopologyStrategy','dc1':3,'dc2':2};