本文作为《Couchbase生产部署最佳实践》的第二部分,重点描述部署Couchbase前需要对系统进行的参数调优,这些参数影响着Couchbase能否以最高性能运行。本文提供的参数设置仅作为基本参考,具体大小应结合实际情况考虑。
点击《Couchbase生产部署最佳实践》查看第一部分内容。
原文作者:Alex Ma, Justin Machiel, Asif Kazi
译者:hackergodness
如果想要原版英文内容,请在公众号中回复。
网络和内存
修改或添加/etc/sysctl.conf文件中以下配置:
# 增加keepalive的探测频率,更快发现和超时僵死连接。
net.ipv4.tcp_keepalive_intvl = 30
# 表示开启重用。允许将TIME-WAIT sockets重用于新的TCP连接,默认为0,表示关闭。
# 该配置对所有Couchbase协议来说是安全的。
net.ipv4.tcp_tw_reuse = 1
# 指导内核先最大限度使用物理内存,然后才是swap空间。
# 如果内核版本大于3.0,将该值设置为1
vm.swappiness = 0
# 将脏数据的最大内存使用限制为200MB,超过该值系统启动pdflush线程。
# 默认为系统内存的20%,此时一旦启动pdflush会将系统压垮。
vm.dirty_bytes = 209715200
# 该内核参数保存pdflush开始进行回写的最小脏内存数目,100MB
vm.dirty_background_bytes = 104857600
# 增加脏数据刷新到磁盘的速率,只有变脏时间超过一定限制的页,
# 才会在pdflush下次醒来后刷回磁盘,
# dirty_expire_centisecs用来控制过期时间
vm.dirty_expire_centisecs = 300
vm.dirty_writeback_centisecs = 100
# 增加系统中可以同时打开的文件数目
fs.file-max = 500000
# 禁用NUMA内存区域回收算法,以便减少读延时。
vm.zone_reclaim_mode = 0
保存好文件后,执行sysctl -p命令使设置生效。
文件系统
XFS是最适合Couchbase append-only这种文件结构的文件系统。我们推荐将所有Couchbase的卷都格式化成XFS。如果不行,就使用EXT4。
如果磁盘控制器上有电池备份单元(BBU),推荐禁用barriers以提高吞吐量。
Couchbase不依赖于文件访问时间,因此可以开启noatime选项来减少磁盘的IO。编辑/etc/fstab文件,使用以下选项对Couchbase数据挂载点(如果有)进行修改:
rw,noatime
User Limits
增加Couchbase可用的文件描述符,确保核心文件可以创建,将以下内容添加到/etc/security/limits.conf中:
couchbase soft nofile 131072
couchbase hard nofile 131072
couchbase hard core unlimited
Transparent Huge Pages (THP)
执行以下命令禁用THP:
$ sudo echo never > sys/kernel/mm/transparent_hugepage/enabled
$ sudo echo never > sys/kernel/mm/transparent_hugepage/defrag
将这些命令添加到/etc/rc.local里,使系统重启时持久化设置。
IO调度
默认的Red Hat Linux IO scheduler(CFQ)不太适合数据库随机读写访问模式。相比而言deadline调度更为合适,并且提供了更好的延迟保证。
执行以下命令将IO调度修改成deadline模式:
$ sudo echo deadline > /sys/block/<block device>/queue/scheduler
增加IO调度的对列深度后就可以通过提高顺序写入来减少IOPS。
将IO调度对列深度增加到1024:
$ sudo echo 1024 > /sys/block/<block device>/queue/nr_requests
将这些命令添加到/etc/rc.local里,使系统重启时持久化设置。