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