您好,欢迎访问三七文档
Couchbase权威指南节点和集群Couchbase服务器可以单独运行,也可以作为集群运行。在Couchbase集群里,运行一个或多个Couchbase实例。集群里所有节点是相等的,提供相同的功能和信息,没有层次结构或者拓扑的概念,也没有主节点、从节点之分。整个集群共享每个独立节点的信息,每个节点负责对数据的一部分进行响应。集群是水平扩展的。要增加集群的容量,你只需加多一个节点。节点间没有父子关系或者层次结构。这意味着Couchbase在存储容量和性能方面,都可以做到线性扩容。集群管理集群里的每个节点包含了集群管理器组件。集群管理器负责下述行为:集群管理节点管理节点监控可管理的RESTAPI统计报表实时日志Multitenancy访问安全BucketsCouchbase使用命名buckets提供数据管理服务,buckets是独立的虚拟数据容器。一个bucket就是Couchbase服务器集群里的一逻辑组物理资源,它可以被集群里的多个客户端应用使用。buckets提供安全的机制来组织、管理、分析数据存储资源。Couchbase提供两种核心类型的buckets,如下描述。Couchbase根据bucket类型来提供运行时的统计报告。Couchbase类型:提供高可用和动态重配置的分布式数据存储,提供持久化存储和复制服务。这种bucket也100%兼容Memcached协议。Memcached类型:提供直接寻址的、分布式的、内存型的文本缓存。这种bucket被设计来作为关系型数据库的补充—缓存经常查询的数据,从而减少对数据库的查询量,提高性能。不同的bucket类型提供不同的核心功能。Couchbase类型的bucket提供一种高可用、动态重配置、分布式的数据存储,在集群的节点发生故障时,它允许集群自我修复,并继续提供服务。Couchbasebucket的特有功能持久性:数据单元异步从内存写往磁盘,防范服务重启或较小的故障发生时数据丢失。持久性属性是在bucket级设置的。复制:对couchbase类型的bucket,可以配置数据复制的份数。集群里的每个节点既保存活跃的数据,又保存数据副本。假如某个节点挂了,数据副本可以提升为活跃的容器,从而继续提供高可用服务。重新组织:集群里的数据可以重新组织和分布,从而动态增加或删除bucket和服务器。bucket容积改变:couchbase类型的bucket可以动态调整容积,在应用需要时它们的大小可以被改变。buckets可以用来隔离单个应用程序提供多租户,或隔离数据类型,以提高性能和可视性。couchbase服务器允许你配置不同的端口来访问不同的buckets,每个bucket都可以设置密码验证。Smartclient客户端通过使用couchbase的管理RESTAPI,自动发现集群结构的改变。这点保证了客户端应用可以无间断的从正确节点上访问所需数据。couchbase服务器允许你在生产环境里混合使用不同类型的buckets。内存和磁盘配额是基于bucket配置的,所以资源使用可以跨集群管理。配额可以在运行时修改,使得管理员能随时重新分配资源。vBuckets一个vBucket定义为couchbase集群里key空间的一个子集的拥有者。通过使用vBuckets,信息在集群里分发更有效。vBucket系统被用于分布式数据,以及支持多节点间的数据复制。客户端在访问bucket里的数据时,是与存储了该数据的vBucket所在的集群节点进行通信。这种直接访问方式允许客户端与数据节点直接通信,而无需使用代理或重定向架构。其结果是从逻辑分区数据里抽象了物理拓扑,保证了couchbase的弹性服务。这种架构也不同于memcached所用的方法,memcached使用客户端key哈希,从预定义的列表里选取服务器。这要求维护一份服务器的活跃列表,并指定哈希算法例如Ketama,以在拓扑里维护数据一致性。vBucket架构也比传统的RDBMS系统使用的数据分区更灵活。vBuckets并非面向用户的组件,但它们是couchbase服务器里非常重要的组件,是至关重要的可用性和弹性服务的支承。每个文档ID属于一个vBucket。有一个映射函数用来计算给定的文档属于哪个vBucket。在couchbase服务器里,该映射函数是个哈希函数,它取文档ID作为输入,输出vBucket标识符。一旦定位了vBucket标识符,会继续从一个表里查找该vBucket位于哪个服务器上。这个表包含每行一个vBucket,vBucket与它的宿主主机成对出现。位于该表里的服务器通常服务了多个vBuckets。内存数据Couchbase架构包含了一个内置的cache层。这种机制允许非常快速的响应时间,因为数据是直接写往内存的,并且读的时候,也是从内存返回数据给客户端。这种设计的效果,提供了一个内置的cache层作为系统操作的中央部分延伸。客户端接口与内存数据打交道,它将信息写往Couchbase的内存;返回的数据也是从内存里获取,或者先从磁盘加载到内存,再返回给客户端。这种处理方式保证了最佳性能。为了提高性能,你应该给每个节点分配最大数量的可用内存。内存跨集群汇总起来以供使用。这点与其他数据库系统的设计不同,其他数据库的处理方式是,信息写往数据库,然后要么有一个独立的cache层,要么依赖于操作系统的cache机制,把经常使用的信息放在内存以供访问。EjectionEjection是和Couchbasebuckets一起使用的机制,它的作用是从内存里删除数据,给活跃的、更频繁使用的数据让出空间,它是cache系统的核心部分。Ejection自动执行,它联合磁盘持久存储系统,保证内存里的数据已经持久写往磁盘,从而安全的删除。该系统确保内存存储的数据在删除前,已经写往磁盘,在下次客户端需要时,它又可以从磁盘加载到内存。Ejection的核心作用是让系统能够保持经常使用的数据驻留在内存,并且在客户端需要从磁盘加载数据时,它能重新在内存里分配空间。对于Couchbasebuckets,数据永不删除,除非客户端明确的删除文档,或者文档已到达过期时间。而ejection机制在从内存里删除数据时,会保存数据的副本到磁盘上。Expiration每个存在Couchbase里的文档有一个可选的过期时间(expiration)。默认是没有过期时间(例如,数据永久存储)。过期时间可用来设置数据的生命周期,系统自动从数据库里删除过期的数据。在数据存储时,由用户指定文档的过期时间。在数据更新时,过期时间可以同步被更新,还可以通过couchbase协议手工更新。过期时间可以是相对时间(例如60秒),也可以是绝对时间(例如2012年12月31日中午12点)。使用过期时间的典型场景是Websession。假如用户停止了活动,你希望session里的数据自动删除。通过设置expiration,session数据会过期并且自动删除,从而释放内存和磁盘给其他数据使用。EvictionEviction是针对memcachedbuckets从内存里完全删除数据的过程。memcached使用一种LRU(最少近期使用)算法来从系统里完全删除不再使用的数据。在memcachedbucket里,LRU数据会完全删除以释放空间,因为memcachedbuckets没有持久化存储。磁盘存储为了提高性能,Couchbase倾向于在内存里存储数据和提供服务。然而,很难保证有足够的资源可以做到这点。比较常见的做法是把经常使用的工作数据存放在内存,并且快速响应给客户端。除了尽可能多的存放数据在内存外,couchbase也保存数据到磁盘。磁盘持久性允许更容易的备份/恢复操作,也允许数据量增大到超过内置cache层的容量。Couchbase自动在内存和磁盘间转移数据(在后台异步执行),保持经常使用的数据在内存,不经常使用的数据在磁盘。couchbase经常监控客户端访问的信息,让活跃的数据保留在cache层内。将数据从cache里删除,腾出空间给更活跃信息使用的过程叫做ejection(前面的章节已描述)。通过couchbase集群里每个bucket的预先设定的阈值来决定何时执行ejection.使用磁盘存储引发的问题是,客户端在请求文档ID时,必须知道信息是否存在。couchbase使用元数据结构来解决这个问题。元数据里存储了数据库里每个文档的信息,并且元数据位于内存里。这意味着假如文档ID无效,服务器可以立刻返回”documentIDnotfound”消息。当然,如果文档有效,那么要么从内存里立刻返回,要么先从磁盘读取到内存再返回(从磁盘读会产生延时,或者导致超时)。转移数据到磁盘的过程是异步的。在couchbase提供服务的同时,数据在后台异步转移到磁盘。如果并发写往数据库的量很大,客户端可能收到服务器内存临时不够的通知,直到更多数据转移到磁盘,内存有剩余为止。类似的,假如couchbase需要从磁盘加载数据回内存,这个过程也是在后台发生的,后台进程从队列里读取请求,然后从磁盘读取数据装载回内存。客户端一直等待,直到数据加载到内存,然后返回给客户端。这种异步机制以及使用队列的方式,使得读写处理非常快,从而消除了典型的负载和性能尖峰,这通常是造成RDBMS性能不稳定的原因。热启动当couchbase重启,或者执行备份恢复的启动时,它进入热启动的状态。热启动从磁盘加载数据到内存,从而让数据对客户端可用。在服务请求之前,热启动必须完成。根据数据库容量和配置的不同,以及存储数据数量的不同,热启动可能要花费一定的时间来完成。Rebalancing数据在couchbase里的存储方式是通过vBucket结构提供的分布式机制来实现的。假如你想扩展或收缩couchbase集群,这时存储在vBuckets里的信息需要在集群节点间重新分布,并且对应的vBucket映射表也需要更新来适应新的结构。这个过程叫做rebalancing.在集群的存储结构改变时,rebalancing必须手工执行。rebalance进程重新对存储信息的vBuckets进行分配,在集群节点间物理的转移数据,以匹配新的结构。Rebalancing过程可以在集群运行并正常服务请求时执行。数据在后台进行转移,客户端的读和写仍然针对当前存在的结构,直到转移完成,系统会更新vBucket映射表,并将结果通知smartclients和Moxiproxy(它们是couchbase的客户端)。其结果是整个集群的分布式数据重新分配,数据在整个数据库里均衡分布,并兼顾了支持系统运转的数据和数据副本的数量。副本和复制除了集群里的分布式数据外,couchbase还可以在集群里创建数据副本。这些副本也与vBucket结构协调工作,各个vBucket的数据副本在整个集群里分布。分布式副本跟核心数据的处理方式一样,而副本的存在可以防止集群里的单点故障。集群里的副本复制是完全点对点的,数据在节点间直接交换,没有拓扑、层次或主从关系。客户端将数据写往一个节点时,数据被存在vBucket里,同时使用TAB系统分发到一个或多个副本vBucket.在集群里的一个节点发生故障时,副本vBucket被激活,用来代替故障节点的vBuckets进行工作。这个过程秒完成,因为副本是在原始数据创建的同时就创建了,不会临时执行拷贝;副本vBucket已经持有数据在那里,坐等被激活。副本vBucket激活后,会更新系统的映射表,以便客户端直接与新的vBucket结构通信。副本的配置是基于每个bucket的。根据数据安全层次的不同,你可以对不同的bucket配置不同数量的副本。请注意,只有在集群里的机器数量足够时,副本才可能被激活。例如,你配置了一个bucket保持3个副本,只有在集群里有4个节点时,副本才会激活。一个bucket的副本数量,在bucket创建后不允许再修改。Failover数据的副本在整个集群里分布。对于couchbase类型的bucke
本文标题:cbase权威指南
链接地址:https://www.777doc.com/doc-2903593 .html