mongoDB 系统选择部分小结

硬盘:

primary及secondary都选择SSD,备库能选SAS就别选SATA,具体情况看同步的速度,如果同步真跟不上,那还必须上SSD;

raid方面,趋向于home分区做radi10,数据分区做raid5;为什么raid5?这个跟业务有关!

内存:

作为数据库服务器,内存必须得大方点,特别是mongo这种对内存严重依赖的服务器,至少保证热数据和索引常驻内存,推介选择48G或以上;

CPU:

mongodb基本都是选择64位的了,很少还在用32位的服务器;

是不是越多越好?mysql肯定是越多越好,特别是innodb对CPU的核数严重依赖,但是到了32核以上依赖会逐步趋于平缓,mongodb对CPU依赖不是很明显。开超线程没什么作用;在mysql开过超线程,作用不大;

内核选择:

选择2.6以上

文件系统:

数据分区选择ext4或者xfs,大多数情况选择ext4

网卡:

服务器网卡至少千兆或者以上;

挂载参数选择:

禁止文件系统更新读取次数统计 noatime

默认情况下,Linux ext2/ext3 文件系统在文件被访问、创建、修改等的时候记录下了文件的一些时间戳,比如:文件创建时间、最近一次修改时间和最近一次访问时间。因为系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)将会显著提高磁盘 IO 的效率、提升文件系统的性能;

最后修改

/dev/hda9 /data ext4 defaults 0 2

改成

/dev/hda9 /data ext4 defaults,noatime,nodiratime 0 2



nodiratime和noat

重新挂载,在系统出错或重新更新参数时很有用 remount

 此partition为异步写入(async) async

mount -o noatime -o nodiratime -o remount /dev/sda3  /data


系统文件句柄数调整:

设置最大打开文件描述符

*              soft   nofile          65535

*              hard   nofile          65535

调整堆栈大小

*              soft   stack           1024

*              hard   stack           1024


2.5以后的linux内核在进程调度,内存管理等方面对NUMA系统做了大量优化,具体可以参考http://hi.baidu.com/bagsbaby/item/e879072e5b2a8d0f43634a63

一般启动时我们加上

numactl --interleave=all

在Linux上NUMA API支持四种内存分配策略:

缺省(default) -  总是在本地节点分配(分配在当前线程运行的节点上)

绑定(bind) -  分配到指定节点上

交织(interleave) -  在所有节点或者指定的节点上交织分配

优先(preferred) -  在指定节点上分配,失败则在其他节点上分配

 

绑定和优先的区别是,在指定节点上分配失败时(如无足够内存),绑定策略会报告分配失败,而优先策略会尝试在其他节点上进行分配。强制使用绑定有可能会导致前期的内存短缺,并引起大量换页。在libnuma库中,优先和绑定是组合在一起的。通过对线程调用uma_set_strict函数,可以在两种策略间切换。缺省的策略是更加普适的优先策略。


参考http://opsmysql.blog.51cto.com/2238445/1083431


 


你可能感兴趣的:(mongoDB 系统选择部分小结)