网众多镜像如何做到真正读写分离。

NxD的硬盘子系统选择思路
网众一直在推荐3(SATA)读3(SAS)写,为什么会有这种推荐值呢?其实并未有强有力的理论根据,全都来源于实践……这种选择是一种性价比较高的方案。
所有做无盘的人都在说要读写分离,这个倒是绝对正确的。无论是硬盘还是阵列卡,象绝大数人一样,不能分心做两件事情,或者说专心做一件事情的时候是效率最高的时候。读和写的时候磁头所做的事情不太一样,虽然盘片本身还是一样傻乎乎地转。特别是在NxD中这个更为突出,因为在网吧行业我们一直推广Linux+物理硬盘,这个物理硬盘在逻辑上是直接挂接到客户端机器上,它是NTFS分区!而每个用户的临时文件则是写在Linux的XFS分区上,所以对NxD Linux来讲,读盘是NTFS分区(非Linux原生),写盘是XFS分区(SGI 出品)。各位,现在你知道我为什么要杀他(大话西游看多了,总是会莫名其妙地乱想)……各位,现在你知道为什么网众不推荐用映像了吗?因为通常映像文件没有办法放到读阵列上去,Linux其实不认识母盘(NTFS)上的文件。。。。。所以映像文件一般是放在写阵列上,这样就违反了读写分离的原则了[/color]。(难道就没有两全其美的办法吗?有,车到山前必有路,本文会介绍如何把映像文件做到读阵列上去,且听我慢慢道来。)
一.硬盘的选择:
由于游戏越来越多,SAS盘虽然速度快,但是大容量SAS毕竟比大容量SATA贵得多。从性价比来看,读盘还是需要使用SATA的大肚子来撑门面。那为什么写盘要推荐使用SAS呢?因为写盘不需要象读盘那么大的容量,使用73G,146G的SAS完全可以做到速度和容量的完美结合。(***XP32位最大支持2T的分区***)
由于SATA的单兆价格越来越低,到处都有单块1T的SATA,且相当的便宜;所以有用户在问,2块1T和3块500G应该如何选择啊?……在这个时候我们要把握一个原则,三个臭皮匠胜过一个诸葛亮,3块500G或者4块500G(容量上考虑)一定胜过2块1T。
同样,4块SAS组成回写一定好过3块SAS(前提是口袋里的银子也比较多。)
————————————————————————————————————
所以NxD推荐的标准硬盘子系统为:3SATA读3SAS写,3SATA读4SAS写(再多性价比就未必好了)
当然如果在和别人抢单的时候,你完全可以依靠网众的卓越性能,用全SATA把别人先吓跑,但要当心,SATA可能在一两年性能下降得比较厉害一些。当然如果你有一堆内存则又是另外一回事了,网众的缓存和Linux的缓存一起把这些内存完全利用起来,可以降低硬盘的损耗。
————————————————————————————————————————————
有兄弟说,咱不差钱,给咱先来两筐硬盘。
%&%##¥%%&,先不说有没有这么多接口,都接上了,NxD也不会跑得飞起来啊!那网众对有钱的主就不能支持一下吗?
能!把你的内存统统换成最大容量的,Linux就这个好处,我们可以盲目地增加内存。咱先上两筐内存就好了。内存增加上去之后,对那些用windows做服务器的人也是个障碍。
友情提示:Intel和AMD现在都把内存控制器做到cpu里去了,所以后期的双路主板如果要支持所有内存插槽的话,可能要上两个cpu哦。比如网众鑫昊翔的Z8NA-D6/netzone,如果只有一个U,那么只能插那个U控制的三个内存槽……如果你一个cpu插了四根4G的,就只能看到12G了,因为另外一根4G是没cpu管的孩子。
二.映像如何做到读阵列中去:(这种做法有个意外的好处,windows系统和游戏分离,可能以后会变成网众的推荐做法,非常的方便。)
如果网吧只有一种配置,可以使用单物理硬盘启动所有机器就按以前的做法;下面提出的方法稍复杂一些,但也是放之四海而皆准的办法。
一句话描述:就是把原来的物理硬盘分成两个部分,一部分用来放镜像,一部分用来放置游戏。
对于读阵列,我们一般是在bios下建硬阵列,到dos或者windows下去ghost启动分区和游戏。但是在Linux 中,SATA进去一般是散盘,进去再组MD软阵列;而SAS硬阵列进Linux之后一般都只能看到一个硬盘,进去不用再组MD。
如果是要把映像做到读阵列中去,系统大概就只能用上传的了,游戏则在客户端GHOST
A)3SAS硬阵列…


在我的测试系统中,用一个300G的SATA(/dev/sda)做了Linux系统,sdb是三个73G的SAS组成的硬阵列,大家可以看到,/dev/sdb是204.0G,它就是我在bios中组的硬阵列
我们先用cfdisk /dev/sdb把它分两个linux数据区




上图和dos下的fdisk其实是很象的,New是新建一个分区,按下之后如下图


我们创建一个Primary分区,大小为50G,大略的数字




大家在上图中可以看到一个sdb1,是Primary的Linux 50001.48M的分区。
同样把剩下的部分再做一个Primary的Linux分区出来如下图:


记得要按上图中的Write哦,按了Write之后,才会把你刚才的分区动作真正写入硬盘。按Write之后,它会要求你输入yes/no,输入yes确定。写完之后,按Q退出cfdisk。


回到网众系统配置工具中,按一下刷新,我们可以看到/dev/sdb下多出来两个分区:/dev/sdb1和/dev/sdb2,大小分别为46.6GB以及157.4GB。
重要:/dev/sdb1我们将用来存放映像,而/dev/sdb2再组成软阵列用来作为物理硬盘。
一. 映像存放:我们直接在“网众系统配置工具”中选中/dev/sdb1,格式化,挂载到/mnt/image(当然这个image目录你要在/mnt下先建好)


Mount之后的图:


二.物理硬盘:(规定:我们现在的物理硬盘只用来做游戏盘)
下图很关键,请注意:

上图中,我只选择了/dev/sdb2来创建linux软阵列/dev/md1,这是Linux允许的,结果如下图:


感谢上帝,我们有一个可以用来做“NxD物理磁盘”的软阵列!!!!
我们在NxD IO管理器中创建一个hd_md的物理磁盘,使用我们刚刚创建的/dev/md1如下图




这个hd_md软阵列有两种用法:A)只用来装游戏(建议) B)第一个分区装系统,后面再分区来装游戏。(由于cfdisk会破坏mbr,所以不推荐,当然对Linux很熟悉的同学完全可以这样用)


上图中我做的md1就分了两个区,第一个区是10G的临时盘,因为网众快车会需要一个这样的盘….第二个区用来存放游戏。
有用户会问,你这个分区是如何做出来的?是用cfdisk分区出来的吗?答案是NO,我是用一个独立的映像+md1做为应用盘到客户端超级去对md1这个盘做分区,也就是在windows下操作完成的。为什么不在Linux下直接分区操作呢?因为我发现有时候cfdisk会把windows的mbr写坏。关键:创建微软的分区的动作尽量不要在Linux下进行,当然如果只放游戏是不用考虑mbr了。
我们来做上传动作,上传完之后可以超级工作站进去把盘符都修正一下。
客户端选择加载磁盘之后我们看到如下图:


磁盘0是放在读阵列的前面50G中的一个映像,名字是another。
磁盘1是/dev/md1这个软阵列,我分了两个区,一个是临时盘,一个做游戏区
大家要了解,现在我的系统里D和E都是空的,并未有游戏,那如何把游戏拷贝进去呢?开超级工作站,在客户端直接把游戏ghost进D盘和E盘。B)3SATA软阵列或者3SAS软阵列(SATA和SAS都可以做MD阵列)其实这和上面的硬阵列/dev/sdb并无本质差别
最重要的事情是如何把读阵列上的映像存储分区和物理存储分区做出来。
我仍然用刚才的服务器来举例,不过这次我没有将SAS组成硬阵列,所以我们可以看到现在有三个SAS盘列出如/dev/sdb, /dev/sdc,/dev/sdd:


我们对sdb, sdc, sdd分别使用cfdisk分区,都在头上做一个20G的分区来,结果如下图


/dev/sdb分成了/dev/sdb1, /dev/sdb2……
[b]
关键:我们把/dev/sdb1, /dev/sdc1, /dev/sdd1组成/dev/md1,并格式化挂载到/mnt/image,结果如下图[/b]


现在,映像存放的地方做好了!!!我们来看物理硬盘如何做。其实一样简单,把/dev/sdb2, /dev/sdc2, /dev/sdd2组成一个md阵列:/dev/md2,如下图。。。


有了/dev/md2,那接着怎么办呢?大哥,和我们用硬阵列时做出来/dev/md1一样处理了。。。我就不赘述了。
三.如果你觉得上面的做法麻烦,也可以尝试用另外一个SSD,把所有映像挂在里面,这也是个极好的方法,毕竟SSD的速度是比较快的。或者另外挂一个SAS或者SATA……越来越没志气了,总而言之,就是一定要把读写分享开,尽量不要把映像放在回写阵列上。
后记:这些做法说简单它也很简单,说复杂它就很复杂,所有的工具其实都已经在手边了,只是我们有没有用心去想如何利用。这篇文章写得很凌乱,不知道大家看懂没?不大象我的疯格……
Tips:如果想进windows或者某个游戏快一点,在进入超级工作站之后,把那个游戏玩一遍,然后退出,放置个2分钟。。。保存超级工作站之后,你会发现进这个游戏快得和驴似的。象传说中的CrossFire,就可以用这种方式来处理。所以你可以找一些玩得最多的游戏,在超级工作站下进一遍,然后退出游戏过个2分钟再保存超级工作站。