硬盘:
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
一般启动时我们加上
numactl --interleave=all
在Linux上NUMA API支持四种内存分配策略:
缺省(default) - 总是在本地节点分配(分配在当前线程运行的节点上)
绑定(bind) - 分配到指定节点上
交织(interleave) - 在所有节点或者指定的节点上交织分配
优先(preferred) - 在指定节点上分配,失败则在其他节点上分配
绑定和优先的区别是,在指定节点上分配失败时(如无足够内存),绑定策略会报告分配失败,而优先策略会尝试在其他节点上进行分配。强制使用绑定有可能会导致前期的内存短缺,并引起大量换页。在libnuma库中,优先和绑定是组合在一起的。通过对线程调用uma_set_strict函数,可以在两种策略间切换。缺省的策略是更加普适的优先策略。
参考http://opsmysql.blog.51cto.com/2238445/1083431