为了让Couchbase集群获得最优性能,需要确保集群大小的正确分配,不能仅满足当前的工作负载,还要考虑维护、业务增长趋势和高峰负载。一般来说,推荐给集群预留一定的净上空间来适应容量上的异常毛刺和集群中的硬件故障。
下文概述的通用最佳实践比较典型,请查看附录了解更多的配置细节,我们将在后续文章中给出,请积极关注:
系统、硬件
裸机(bare metal)安装总能获得最佳性能。虚拟化会增加开销,减少各方面的整体资源效率,如操作系统、磁盘I/O、网络性能、CPU。
永远使用本地磁盘存储(节点间无共享架构)。使用SAN不光会导致单点故障,还会导致资源竞争。
如果你必须使用虚拟化架构,你仍然可以用专用的本地存储替代逻辑虚拟化磁盘来提高性能。
系统级
生产上只使用64位操作系统。
Linux上部署,其内核版本应该大于
2.6.32-504.12.2
来避免已知的内核缺陷。在这里查看支持平台所有列表。
内存
最少保留
10%
的系统内存用于内核进程和页面缓存。其余内存应分配给Bucket和Index quotas。在BIOS中禁止非一致性内存访问(
NUMA
)。
磁盘、卷设计
一切顺利的话,SSD要优于机械盘,更优于网络块设备(
iSCSI
或EBS
)。注意的是NFS
不支持。从性能角度来看,等价容量前提下(RAID 0 或 RAID 10 而不是 RAID 5),多并行设备要优于单块硬盘,例如 4块256GB SSDs要比单个1TB的SSD磁盘快,就因为并行I/O通道变多了。
为了性能,要给每个索引和数据配置独立的磁盘卷来隔离I/O。更快的磁盘应该给索引。
CPU
最小4核
每10,000 ops/s吞吐量 一个bucket对应 +1 核
每个视图文档或者GSI索引对应 +1 核
每个XDCR流对应 +1 核
调优索引节点上的
IRQ affinity
来减少IRQ竞争。Linux上有个脚本可以自动完成该操作。
网络
Couchbase只会使用一个网络接口。如果多个接口可用,需要进行接口绑定。
在相同VLAN内部署Couchbase节点。
消除集群节点间的路由跨界(
router hops
)消除客户端和集群间的路由跨界(
router hops
)
Couchbase
生产环境中
Data
,Index
和Query
服务应该部署在不同的服务器上。最低限度,Data
和Index
应该隔离在不同的卷上来防止资源竞争。配置数据的Bucket尽可能少,推荐上限是一个集群5个buckets。
分配所有可用的集群quota内存给buckets和索引。如果需要,可用减少Bucket quota分配来容纳额外的buckets。
在Couchbase指导下在Bucket上使用Value Eviction。
确保所有buckets上的Flush被禁用。
启用内置的告警功能,配置发送到监控中。
启用
auto-failover
,设置120秒超时时间。一旦网络稳定性确定了,这个值还可以再减少。如果发现IO竞争。在非高峰时间窗口进行压缩。
确保部署视图后生产环境上的开发设计文档被移除。
生产环境中删除默认的bucket。
虚拟化环境的考虑
查看http://support.couchbase.com/entries/26790124-Virtualization-Considerations