Cassandra有关系统参数九点优化

Cassandra不同于普通的应用程序,它是分布式数据库,它要大口吃内存,吃磁盘,吃CPU,所以机器要进行特殊的配置,以适应其需要。

第一:使用最新的64位的jdk8的最新发布版本。

第二:时钟同步,开启NTP服务,cassandra是分布式存储,就靠时间戳解决数据冲突,所以始终必须同步

第三:TCP参数设置

在低带宽环境下,防火墙会检测闲置的连接并关闭,为了保护节点之间,或者多个DC节点之间的连接,建议如下配置系统参数

sudo sysctl -w
net.ipv4.tcp_keepalive_time=60
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_intvl=10

设置这个就是可以快速的发现底层的TCP连接是否已经关闭,它间隔60秒开始探测3次,每次探测间隔10秒,也就是说最多在60+3*10=90秒内就可以检测到连接被中断。

为了支撑上千个数据库连接,还建议修改以下参数

sudo sysctl -w
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.rmem_default=16777216
net.core.wmem_default=16777216
net.core.optmem_max=40960
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216

为了让参数永久生效,记得把它们写入系统配置文件/etc/sysctl.conf里
第四:禁用CPU动态跳频功能。
最近的linux系统增加了一个新特性,就是可以动态调整CPU频率,就是在机器低负载的时候,可以降低CPU频率,以达到降低功耗的目的。

这种动态调频功能会影响cassandra数据库的吞吐量。建议禁用,让CPU一直维持恒定的频率输出,尽管这很耗电,但是保证你的数据库的吞吐量。

禁用方式:

for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
do
[ -f $CPUFREQ ] || continue
echo -n performance > $CPUFREQ
done

第五:禁用zone_reclaim_mode

官方建议禁用,这个是关于多核CPU使用NUMA架构,分别访问内存,内存回收方面的一个参数

这个参数的解释,可以参考:
http://linuxinsight.com/proc_sys_vm_zone_reclaim_mode.html

这里面有一句话,当你的机器用作文件服务器,或者你的大部分内存需要用于系统文件缓存的时候,你需要禁用这个功能。
我们的Cassandra就相当于文件服务器,它对IO是依赖的,它需要系统内存用于大量缓存DB文件。所以要禁用这个功能。

echo 0 > /proc/sys/vm/zone_reclaim_mode

Cassandra官方描述了如果不禁用这个参数带来的后果:

1、随机CPU尖峰带来时延增加,吞吐量增加。
2、程序假死,什么也不做。
3、一些突然发生又消失的莫名异常。
4、重启机器,可能在一段时间内不再出现异常。

第六:资源限制放开。

cassandra会使用很多内存,很多连接,很多文件,所以一律放开。

<cassandra_user> – memlock unlimited
<cassandra_user> – nofile 100000
<cassandra_user> – nproc 32768
<cassandra_user> – as unlimited

这个加入到/etc/security/limits.conf 里(不同操作系统,可能不同,后面不再注明)

vm.max_map_count = 1048575

这个加入到 /etc/sysctl.conf 里

第七: 禁用swap

关闭 sudo swapoff –all

修改 /etc/fstab. 去掉swap挂载。

swap文件内存交换区,当你的内存不够的时候,使用文件内存,这会让你的数据库卡成狗的,一律禁用。
第八:文件预
默认保持64k即可

echo 64 > /sys/class/block/{sda}/queue/read_ahead_kb

如果是ssd,设置为8k

echo 8 > /sys/class/block/{sda}/queue/read_ahead_kb

如果是ssd,还要设置下面的参数进行优化。

echo deadline > /sys/block/sda/queue/scheduler
#OR…
#echo noop > /sys/block/sda/queue/scheduler
touch /var/lock/subsys/local
echo 0 > /sys/class/block/sda/queue/rotational

第九:确保以上参数重启机器后仍然有效。

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *