Aerospike是什么
Aerospike是一个分布式可扩展的键-值NoSql数据库。它支持灵活的数据模式,并且支持acid。为以下3个目标构建:
- 弹性扩展
- 与传统数据库一样的可靠性
- 最小人工参与
特点
特点 | 描述 |
---|---|
可预见的高性能 | 99%的响应时间在1毫秒内,99.9可在5ms内 |
混合架构 | 索引存储在RAM中,数据存储在闪存/固态硬盘SSD上 |
群集感知客户端软件 | 客户端知晓数据存放的位置,通常通过一次单跳检索到数据 |
无热点 | 使用hash函数来确保数据均匀分布到所有可用节点 |
数据完整性 | 保持高度一致性 |
线性扩展 | 添加节点无需分片无需人工干预 |
跨数据中心支持 | |
提供API语言 | C/C++、JAVA、C#、Python、PHP、Go、Node.js、Perl、Ruby、Erlang |
架构
- 客户端层
- 带API的开源客户端和能够感知数据在集群中位置的追踪节点
- 群集和数据分布层
- 监控集群通信并提供自动化功能,故障转移、数据复制、跨数据中心数据同步
- 数据存储层
- 负责在DRAM和Flash中存储数据
-
内存、HDD、SSD混合存储
aerospike架构图.png
运行机制
aerospike运行机制图.png数据管理
- 包括类型列的键-值操作,比如自增这样的数据库内部操作
- 为实现高可用进行数据复制
- 基于行的回收策略
- 集群无缝升级
- SSD优化
- 跨数据中心复制
扩展
- bin中复杂数据类型,比如list、map,他们支持嵌套。
- 队列,字符串和数值类型的bin值可用被索引,可以通过相等或者范围进行搜索。
- 用户自定义函数,允许数据库执行应用程序代码实现扩展。
- 汇聚,通过用户自定义函数操作聚合。
- 大数据类型,bin包含的数据结构可以堆叠至1M到1G,list和map是最佳存储方式。
数据组织
采用无模式数据模型,允许动态添加新类型bin。
-
namespace
最顶层的容器,包含记录、索引、策略。策略决定namespace的行为,包括:数据如何存储:内存还是磁盘,存多少个副本,记录何时过期。 -
sets
记录属于set(逻辑容器)。set继承了包含它的namespace的策略。也可为set指定其他测策略。记录也可以不属于任何set。 -
records
行存贮,基本存储单元,记录通过namespace中定义唯一key来访问。记录的组成如下:
组成 | 描述 |
---|---|
key | hash值,hash的结构有可能存在重复的问题,类似于数据库,最多可设置32个。一个namespace可关联多块SSD,一块SSD只关联一个namespace,每个namespace下包含4096个分片 |
metadata | 记录的版本信息及过期时间 |
set | 类似于数据库表,一个namespace最多1023个set |
record | 类似数据库中的一条记录, 采用Schema-Less的方式 |
bin | 类似于数据库字段,支持Java基本数据类型:List、Map、Blob, 一个namespace下最多32767个bin |
层级图.jpg注:可以存储原始Key,Key结构体中有个acctKey,将WritePolicy.sendKey设置为true,则acctKey将被存储到一个bin中。
分布式查询
- 分散请求到所有节点
- 内存中的索引快速映射到主键
- 索引与各节点SSD上的数据协作来保证ACID并管理迁移
- 从所有SSD、DRAM并行读取记录
- 在各节点汇聚结果集
- 从所有节点整合结果集发送到客户端
数据分布
- Shared-nothing架构:节点对等,无单点故障。
- 利用智能分区算法,数据分布在各个节点上。
- 使用ripemd160算法,任意长度的key被哈希化为20位定长字符串,前12位组成分区ID。分区分布在集群节点中,每个节点大约存储1/N的数据。
备份还原
- 备份
asbackup -d bak20200606 -n namespace -d 导出需要保存的文件 -n namespace -s 导出的set -F 文件大小,超过时创建新文件
- 还原
asbackup -d bak20200606 -n namespace -d 导出需要保存的文件 -n namespace -s 导出的set -F 文件大小,超过时创建新文件
节点维护
移除节点
- 确认没有数据在迁移
asmonitor info
Migrates是(0,0)
- 停止要移除的节点
service aerospike stop
service aerospike status
- 更新其余节点配置 把移除节点的信息从配置文件中移除
sed -i '/x.x.x.x/d' /etc/aerospike/aerospike.conf
- 更新其余节点信息
asadm -e "asinfo -v 'tip-clear:host-port-list=x.x.x.x:3002'"
asadm -e "asinfo -v 'tip-clear:host-port-list=x.x.x.x:3002'"
Admin> asinfo -v 'dump-hb:verbose=true' --确认节点不在集群中
asinfo -v 'services-alumni-reset'
- 限制数据迁移速度
migrate-threads越大,对tps影响越大,建议在低峰期调大,重分布完成后恢复为1
asinfo -v 'set-config:context=service;migrate-threads=10'
本文档基于该文章整理而来
网友评论