全部博文(51)
分类: 系统运维
2017-11-05 21:10:35
是一个开源的分布式键-值NoSQL(类RDBMS)数据库。它支持灵活的数据模式和存储模式,并且支持满足ACID特性的事务。其包括如下三层:
客户端层: 这一层包括带有Aerospike API的开源客户端库和能够感知数据在Aerospike集群中位置的追踪节点。
集群和数据分布层:这一层监控集群通讯并提供一些自动化功能,比如故障转移、数据复制和跨数据中心同步。
数据存储层:这一层负责在DRAM(动态随机存取存储器)和Flash(闪存)中存储数据。
Rhel6系统,rpm包安装方式
wget -O aerospike.tgz ''
tar -xvf aerospike.tgz cd aerospike-server-community-*-el6
./asinstall # 会安装当前目录下的rpm包
service aerospike start # 默认的配置文件在/etc/aerospike/aerospike.conf,日志文件在/var/log/aerospike/aerospike.log,根据logrotate每天切一次日志。
在配置文件中network区域下的heartbeat上下文中配置,有两种心跳模式:一种是基于tcp的mesh模式,一种是基于udp的multicast模式
mesh模式配置
单节点下只需指定mode和port
集群模式下还需指定mesh-seed-address-port
mesh-seed-address-port中指定集群中的其它节点,在其它节点中也应该有相应的配置,但并不是完全相同的配置,因为它们是互相发现的,并不一定要把所有的集群节点都配置到mesh-seed-address-port中。
multicast模式
如果是同一个集群,就配置相同的端口,如果是单节点,就配置一个独立的端口。但这种模式下需要交换机的一些配置,所以在我们的线上环境下不能支持mulitcast模式。
基于SSD的存储引擎
namespace {
memory-size G # Maximum memory allocation for primary
# and secondary indexes.
storage-engine device { # Configure the storage-engine to use persistence device /dev/ # raw device. Maximum size is 2 TiB
# device /dev/ # (optional) another raw device.
write-block-size 128K # adjust block size to make it efficient for SSDs.
}
}
整块SSD硬盘需要被格式化处理和相应的配置
n/ssd/ssd_setup.html
基于SSD数据在内存中
namespace {
memory-size G # Maximum memory allocation for data and
# primary and secondary indexes.
storage-engine device { # Configure the storage-engine to use
# persistence. Maximum size is 2 TiB
file /opt/aerospike/ # Location of data file on server.
# file /opt/aerospike/ # (optional) Location of data file on server.
filesize G # Max size of each file in GiB.
data-in-memory true # Indicates that all data should also be # in memory.
}
}
数据,主索引和次索引在内存中,并且数据同样会保存在磁盘上。
基于文件的single-bin模式
namespace {
memory-size G # Maximum memory allocation for data and
# primary and secondary indexes.
single-bin true # Required true by data-in-index.
data-in-index true # Enables in index integer store.
storage-engine device { # Configure the storage-engine to use
# persistence.
file /opt/aerospike/ # Location of data file on server.
# file /opt/aerospike/ # (optimal) Location of data file on server.
# device /dev/ # Optional alternative to using files.
filesize G # Max size of each file in GiB. Maximum size is 2TiB
data-in-memory true # Required true by data-in-index.
}
}
Namespace中只存在单个的bin(相当于RDBMS中的字段),能提供更好的性能及更少的内存使用。
数据在内存中无持久化
namespace {
memory-size G # Maximum memory allocation for data and primary and
# secondary indexes.
storage-engine memory # Configure the storage-engine to not use persistence.
}
数据在内存中,但是没有持久化到磁盘。
使用asinfo工具可以获取aerospike的当前配置信息以及动态的修改其配置。可以从以下链接里获取哪些配置是不能动态配置只能重启服务,而哪些配置又是可以的。
示例:
asinfo -v ‘logs’ #获取aerospike使用的日志文件路径
0:/var/log/aerospike/aerospike.log
asinfo -v 'log-set:id=0;fabric=debug' # 动态设置fabric上下文的日志级别
Ok
asinfo后面的-v参数指定了要执行的命令,参数的具体格式参考
docs/reference/info#
要移除一个节点,直接将其下线,因为有配置replication所以会有节点会接管其工作。
需要添加节点以达到扩容目的,只需在mesh模式(参照上面介绍)下,将mesh-seed-add
ress-port项配置为现有集群中的某个节点,因为其会自动发现并自动加进节点中。
当完成移除或扩容的时候,你可能用相关命令如asadm,asmonitor获取集群信息时,仍然显示的是旧集群信息,这时要使用命令asinfo -v "services-alumni-reset"(asadm -e “asinfo -v ‘services-alumni-reset’”)将信息重置即可更新。
备份
asbackup --node-list 1.2.3.4:3000,5.6.7.8:3000 --namespace test --directory backup_2015_08_24
备份1.2.3.4:3000,5.6.7.8:3000两个节点的test命名空间到backup_2015_08_24目录下
恢复
asrestore --host 1.2.3.4 --directory backup_2015_08_24 --namespace test,prod
恢复backup_2015_08_24目录下的命名空间test和prod到集群或单节点1.2.3.4:3000下
监控aerospike的一个web展示页面,提供社区版和企业版,可以监控aerospike的读写速度,统计信息,命名空间信息,集群信息等。企业版还可以在web页面下点击即可移除节点和添加节点。安装的时候需要安装python,ansible。
已经搭好的AMC
在中下载部署zabbix监控需要的模板
xml和脚本,导入模板并将脚本放在客户端中
脚本的使用方法
Usage:
-h host (default 127.0.0.1)
-p port (default 3000)
-U user (Enterprise only)
-P password (Enterprise only)
-s "statistic" (Eg: "free-pct-memory")
-n "namespace" (Eg: "namespace/test")
-d dummy
相关指标说明
available_pct代表集群目前可以使用的百分比
cluster_size代表集群现存的节点数目
hwm_breached代表集群使用率的警戒线,当此值为true时,应该考虑增加集群的容量。
stop_writes代表集群已经停止写了
evicted_objects代表当集群容量满后被删除的key
expired_objects代表由于过期被删除的key
objects代表集群现有的记录key数目
更多的指标说明参考
官方链接
现在的版本为3.10.2,集成多种功能命令
asadm
直接输入asadm进入交互模式,使用-e执行命令一次。
asadm -e ‘info network’ #查看集群的网络状态
asadm -e ‘show config’ #查看集群每个节点的配置文件信息
asadm -e ‘show config diff’ #显示集群每个节点配置文件不同的地方
show statistics namespace #显示namespace的统计信息
show statistics sets #显示sets的统计信息
show statistics bins #显示bins的统计信息
show statistics sindex #显示次索引的统计信息
show statistics service #显示服务状态统计信息
show latency #显示延迟统计信息,包括read,write,udf,writes_master,query,proxy等
(GMT时区修改,设置log-local-time true)
show distribution #显示ttl,object_size,eviction的统计信息
表明有10%的数据将会在346500s后过期,20%的数据会在346500s后过期
以字节为单位显示数据库中object大小分布情况
可以在show [option]命令后添加like,with等修饰来改变输出
如何获取集群的分区信息?
可以使用asadm的cluster pmap命令
asadm -e ‘cluster map’
却得到了这个错误信息,不知是否是因为版本的原因
用官方的信息
用asmonitor -e 'pmap test'的pmap命令
修改asmonitor,输出
如果不修改asmonitor也和asadm同样的错误
以上都可以使用watch命令实时监听,还可以使用asinfo命令
如何获取库中的key以及写入key?
写入key
ascli put
示例:
ascli put test test test '{"a": "A", "b": 1, "c": [1,2,3], "d": {"x": 4}}'
插入namespace为test,set为test,key为test,record为json格式的数据,其中key代表了bin的name,value代表bin的value
读取key
ascli get
示例:
$ ascli get test test test
{"a": "A", "b": 1, "c": [1,2,3], "d": {"x": 4}}
但是官方已经在3.9版本之后弃用ascli和cli工具,推荐使用aql工具
aql工具使用
官方链接
show namespaces #列出namespace
show sets #列出所有的set
show bins #列出所有的bin
explain select * from . where PK= #列出key的详细情况
SELECT * FROM [.] #查询namespace或set下所有记录(查询格式类似SQL)
INSERT INTO [.] (PK, ) VALUES (, ) #插入一条数据