aerospike入门

Aerospike

一、NoSql

NoSQL(Not Only Sql),泛指非关系型的数据库。传统项目网站访问量一般不大,单机版数据库就很不错, 随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

常见NoSql有: Redis(K-V)、MongoDB(文本)、HBase(海量数据)、Cassandra(阿帕奇)、Memcached(K-V)

今天说的Aerospike和Redis一样都是开源的非关系型数据库,在性能表现上都非常优秀,但深挖还是有所区别。

  • 从性能上来看,二者都是用C写的,Redis是单线程的,只支持内存方式,Aerospike是多线程的,支持内存+SSD+HDD的存储方式。
  • 从数据存储上来看,二者都支持多种数据结构和操作,Redis的API是以数据结构为中心的,应用程序必须知道Redis节点且每节点最多有2的32次方个key,Aerospike所有操作都不是预定义的,应用程序不需要知道节点,每个名称空间最多有2^160个键。
  • 从持久化方面来看,二者都支持持久化,Redis支持RDB和AOF,Aerospike本身支持内存+SSD模式,也结构化日志文件系统,且支持热重启。
  • 从数据同步上来看,Redis需要主从手动配置,是异步复制方式,各节点完全是主或从节点。Aerospike主从自动分配,是同步复制方式,各节点既是主节点又是从节点。
  • 从数据分片上来看,Redis需要应用程序分片,Aerospike支持自动分片,分区被分配给节点且自动平衡各节点数据。
  • 从集群方式来看,Redis需要手动或脚本的方式形成集群,Aerospike基于组播自动集群,集群变化时自动重新平衡且重新平衡过程中允许的读/写操作。此外Aerospike自身还提供监控台,用于监视集群的活动。

二、Aerospike的安装

Aerospike安装包百度网盘地址_提取码:4lcr

上传安装包到服务器,进行解压,解压命令

#解压
[root@localhost application]# tar -zxvf aerospike-server-community-4.3.1.14-el7.tgz 
#重命名,纯属个人习惯
[root@localhost application]# mv aerospike-server-community-4.3.1.14-el7 myas
#进入目录
[root@localhost application]# cd myas/
#执行安装文件
[root@localhost myas]# ./asinstall 

aerospike入门_第1张图片

先不用修改配置文件直接启动

aerospike入门_第2张图片

三、配置

配置文件所在目录/etc/aerospike/aerospike.conf

[root@localhost myas]# vim /etc/aerospike/aerospike.conf 

aerospike入门_第3张图片

aerospike入门_第4张图片

通过asadm命令查看as的信息

aerospike入门_第5张图片

同时,aerospike还支持简单sql语句,只不过as里边叫aql

aerospike入门_第6张图片

四、集群配置

其实我自己理解到的Aerospike和redis,根据他们比较其实as更突出的是他的运维成本低和高可用。相比于redis他的集群搭建更简单(同一网段自动形成集群),真正做到了高可用,同时智能负载均衡,redis搭建集群时需要ruby脚本,虽然默认是能进行了分区但是不智能。redis无论哨兵模式还是高可用集群都是需要选取master,会导致一定时间的不可用,而as集群节点发生变化时不影响读写。

as集群配置:同时启动两台虚拟机,在一个网段,全都安装之后修改配置文件如下:主要是network块里的heartbeat 之后分别重启两台as服务器。

service {
        user root
        group root
        pidfile /var/run/aerospike/asd.pid
        paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1.
        proto-fd-max 15000
}
logging {
        file /var/log/aerospike/aerospike.log {
                context any info
        }
}
network {
        service {
                address 0.0.0.0
                port 3000
                access-address 192.168.2.12 3002
        }

#       heartbeat {
#               mode mesh  #单播方式配置集群
#               address 192.168.2.12
#               port 3002
#               mesh-seed-address-port 192.168.2.12 3002
#               mesh-seed-address-port 192.168.2.11 3002
#               interval 150
#               timeout 10
#       }
        heartbeat {
                mode multicast  #广播方式配置集群
                #监控心跳的地址和端口号
                multicast-group 239.1.99.222  #两个as的广播地址相同
                port 9918
                # To use unicast-mesh heartbeats, remove the 3 lines above, and see
                # aerospike_mesh.conf for alternative.
                #mesh-seed-address-port 192.168.2.11 3000
                interval 150
                timeout 10
        }
        fabric {
                port 3001
        }
        info {
                port 3003
        }
}
namespace test {
        replication-factor 2
        memory-size 4G
        default-ttl 30d # 30 days, use 0 to never expire/evict.

        storage-engine memory
}
namespace bar {
        replication-factor 2
        memory-size 4G
        default-ttl 30d # 30 days, use 0 to never expire/evict.

        storage-engine memory

        # To use file storage backing, comment out the line above and use the
        # following lines instead.
#       storage-engine device {
#               file /opt/aerospike/data/bar.dat
#               filesize 16G
#               data-in-memory true # Store data in memory in addition to file.
#       }
}

aerospike入门_第7张图片

在一个as中通过aql语句 INSERT INTO test.set_fir(PK,uid,uname) VALUES (‘key’,1,‘Aerospike’);

在另外一个查看 select * from test;能够查到

aerospike入门_第8张图片

insert时报Error: (11) AEROSPIKE_ERR_CLUSTER,说明两边namespace配置不一致,受社区版限制,namespace配置智能配置两个。

如果启动成功集群没形成是因为防火墙没关的原因。

aerospike入门_第9张图片

推荐也试试单播方式进行集群。

附:配置文件详解

#调整参数和进程所有者
service {
	user root
	group root
	pidfile /var/run/aerospike/asd.pid
	paxos-single-replica-limit 1 # 副本数自动减少到1的节点数
	#service-threads 20 # 4.7+应为vCPU数量的5倍,并且至少有一个SSD名称空间,否则为vCPU数量
	proto-fd-max 15000
}
#配置日志记录及日志轮换
logging {
	# 日志文件必须是绝对路径,不会自动建目录,需要已有的目录
	file /var/log/aerospike/aerospike.log {
        	context any info
    	}	
}
#用于配置集群内和应用程序节点通讯
network {
	#工具/应用程序通信协议,应用、工具、远程XDR通过此端口访问AS集群
	service {
		address 0.0.0.0 #服务正在侦听的NIC的IP
		port 3000	#服务正在监听的端口
		access-address 192.168.2.11  #访问该服务的客户端的IP地址
	}

#        heartbeat {
#                mode mesh   #基于单播,即基于TCP的
#                address 192.168.2.11   #本机加入集群,用于发送心跳的IP和端口
#                port 3002
#                mesh-seed-address-port 192.168.2.12 3002  #集群中的组件
#                mesh-seed-address-port 192.168.2.11 3002  #自己也要加进去
#		interval 150
#		timeout 10
#        }

	#集群心跳端口,用来构建和维护集群
	heartbeat {
		mode multicast #使用多播发送心跳,基于UDP的
		multicast-group 239.1.99.222 # 公网组播地址
		#address 192.168.1.100       # 将本机加入集群,用于发送心跳和绑定交换矩阵端口的NIC的IP,不配也行
		port 9918                    # 组播端口	
		interval 150		     # 心跳间隔的毫秒数
		timeout 10		     # 节点超时等待的时间数 毫秒
	}
	#集群内部通讯、备份等操作用此端口
	fabric {
		port 3001 # 集群内通信端口(迁移,复制等)
	}
	#管理员telnet控制台协议
	info {
		port 3003 # 纯文本telnet管理端口。
	}
}
#定义名称空间记录策略和存储引擎,只用内存的方式
namespace test {
	replication-factor 2 #复制因子
	memory-size 4G
	default-ttl 30d # 过期时间30天,使用0永不过期
	storage-engine memory
}
namespace suaf {
	replication-factor 2
	memory-size 4G
	default-ttl 30d 
	storage-engine memory
}
#SSD+索引
#namespace bar_ssd { 
#    memory-size 4G                # 主索引和辅助索引的最大内存分配
# 警告-定义的原始分区设备中的遗留数据将被擦除。
# 这些分区不能被文件系统挂载。
    # storage-engine device {       #配置存储引擎以使用持久性添加原始设备。最大大小为2 TiB
 	# 	device /dev/sdb3  
	 #      device /dev/sdc3  
	 #      device /dev/sdd3   
	 #      device /dev/sde3 
	 #      # 下面的2行针对SSD进行了优化。
	 #      heduler-mode noop
	 #      write-block-size 128K #调整块大小以使其有效用于SSD。
	 #      }
#}
#HDD机械硬盘就不考虑,慢
##HDD及内存混合存储方案
#namespace bar_hdd_mem {
#    memory-size 4G                # 主索引和辅助索引的最大内存分配
#    single-bin true                 #索引数据必须为true。
#    data-in-index true              #在索引整数存储中启用。
#    #配置存储引擎使用持久性
#    storage-engine device {
#          file /opt/aerospike/data1  #服务器上数据文件的位置。
#          file /opt/aerospike/data2  #服务器上数据文件的位置。
#          # device /dev/sdb3          #使用文件的可选替代方法。
#          filesize 16G                #每个文件的最大大小GB,接近这个值将不再写入数据。最大大小为2TiB
#          data-in-memory true           #设置data-in-memory设置为true,开启内存存储机制
#	}
#}

你可能感兴趣的:(nosql,运维,负载均衡,redis)