Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167871
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-11 10:24
文章分类

全部博文(51)

文章存档

2018年(3)

2017年(22)

2016年(9)

2015年(17)

我的朋友

分类: 系统运维

2017-11-05 21:10:35

1.Aerospike介绍

是一个开源的分布式键-值NoSQL(类RDBMS)数据库。它支持灵活的数据模式和存储模式,并且支持满足ACID特性的事务。其包括如下三层:

客户端层: 这一层包括带有Aerospike API的开源客户端库和能够感知数据在Aerospike集群中位置的追踪节点。

集群和数据分布层:这一层监控集群通讯并提供一些自动化功能,比如故障转移、数据复制和跨数据中心同步。

数据存储层:这一层负责在DRAM(动态随机存取存储器)和Flash(闪存)中存储数据。

2.Aerospike安装

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每天切一次日志。

3.单节点与集群模式的配置

在配置文件中network区域下的heartbeat上下文中配置,有两种心跳模式:一种是基于tcp的mesh模式,一种是基于udp的multicast模式

mesh模式配置

单节点下只需指定mode和port


集群模式下还需指定mesh-seed-address-port


mesh-seed-address-port中指定集群中的其它节点,在其它节点中也应该有相应的配置,但并不是完全相同的配置,因为它们是互相发现的,并不一定要把所有的集群节点都配置到mesh-seed-address-port中。

multicast模式

如果是同一个集群,就配置相同的端口,如果是单节点,就配置一个独立的端口。但这种模式下需要交换机的一些配置,所以在我们的线上环境下不能支持mulitcast模式。

4.aerospike存储模式配置

基于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.

}

数据在内存中,但是没有持久化到磁盘。

5.aerospike动态配置

使用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#

6.集群的扩容

要移除一个节点,直接将其下线,因为有配置replication所以会有节点会接管其工作。

需要添加节点以达到扩容目的,只需在mesh模式(参照上面介绍)下,将mesh-seed-add

ress-port项配置为现有集群中的某个节点,因为其会自动发现并自动加进节点中。

当完成移除或扩容的时候,你可能用相关命令如asadm,asmonitor获取集群信息时,仍然显示的是旧集群信息,这时要使用命令asinfo -v "services-alumni-reset"(asadm -e “asinfo -v ‘services-alumni-reset’”)将信息重置即可更新。

7.aerospike备份与恢复

备份

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下

8.AMC ( aerospike管理控制平台 )

监控aerospike的一个web展示页面,提供社区版和企业版,可以监控aerospike的读写速度,统计信息,命名空间信息,集群信息等。企业版还可以在web页面下点击即可移除节点和添加节点。安装的时候需要安装python,ansible。 

已经搭好的AMC 


9.监控部署

在中下载部署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数目

更多的指标说明参考

10.aerospike工具介绍

官方链接

现在的版本为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 (, )  #插入一条数据

阅读(4263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~