无交换机情况下的集群互联

机房有3台服务器,需要搭建一个小型集群,用于做大数据实验。
现在的条件如下:
1. 共3台服务器,每台服务器上有4个1G网络接口。
2. 只给了一个外网IP,用于接入互联网。
3. 一台8口100M家用路由器(-_-)。
目的如下:
1. 要3台服务器能够相互通信,并且通信的带宽要尽量大,因为是做大数据的实验。
2. 要3台服务器能同时上网。
 
现在有两种较直接的方案:
 
1. 3台机器接到路由器+路由器接入外网
这是传统的小局域网模式,这样3台机器互联以及上网的目的都可以达到,但小路由器的带宽和性能,根本无法胜任大数据量的传输。虽然两两间的带宽可以达到10MB/s,但当机器间同时传输数据时,平均带宽就很小了。况且,每台机器上都有4个网络接口,没有被充分利用。
 
2. 3台机器接到路由器+1台机器接入外网+网络代理
与第一种方案相比,这种方案将master节点直接接入外网,并在其上安装网络代理程序,其他节点都通过master节点上网,整个集群的出外网的带宽都增大了。
 
以上两种方案,仅仅满足了互联和同时上网的要求,而性能则达不到做大数据的要求。
主要瓶颈是机器间互联的带宽太小,受限于不给力的小路由器。
机器上的接口本来是1G的,接到 100M网络中实在是浪费,于是决定尝试机器间直连的方式。
 
最终的方案
 
机器A接入外网,在后台,3台机器之间两两直连。
 
 
总体上看,机器之间都是直接通信的,数据传输无需额外的转发,非常适合大数据环境,而只有在上网时,机器B和C才需要经过A的转发。
下面我们详细说明:
 
1. 3台机器的互联
连接方式及网络配置如下:
可以看到,所有eth的IP都配置成static的,并且每台机器的两个eth都配置成相同的IP,这并不会造成冲突,相反,还使得机器之间可以通过唯一的IP进行通信,减少后面配置Hadoop集群时的负担。
配置完IP之后,还需要在各机器上配置路由规则,指定目的IP与eth的对应关系。如在机器B上,配置目的地址为192.168.1.21的出口为eth1,目的地址为192.168.1.23的出口为eth2。
至此,3台机器的互联完成了。
 
2. 3台机器的上网
将机器A直接接入外网,并作为其他两台机器的网关,其他两台机器出内网的数据包都经过机器A转发,从而实现3台机器同时上网。
这需要通过两步来实现:
首先需要将机器A配置成路由器,通过内核的ip forwarding功能即可实现。
然后,配置机器B和C,指定其网关为机器A的内网IP即192.168.1.21,这样,在机器B和C上,出内网的数据包,都会发送给机器A。机器A在收到来自B或C的出内网数据包时,会将数据包转发到外网。
 
 
Appendix 1.
如何配置Linux软路由?
由于机器A作为其他节点的网关,所以需要将该节点配置成软路由器,这通过以下两步实现:
首先开启内核的ip forwarding支持
echo 1 > /proc/sys/net/ipv4/ip_forward
vim /etc/sysctl.conf配置net.ipv4.ip_forward=1
最后配置转发规则
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -o eth0 -j MASQUERADE
使得所有来自192.168.1.0/24网段,且目的地址不是内网的数据包,都经过NAT处理,并通过eth0端口转发出去。
 
Appendix 2.
如何添加路由规则?
三台机器之间相互通信,需要指定目的IP和出口的对应关系,这样数据包才能从正确的端口发送出去,从而被目的机器接收。
在机器A上执行
route add -host 192.168.1.22 dev eth1
route add -host 192.168.1.23 dev eth2
在机器B上执行
route add -host 192.168.1.21 dev eth1
route add -host 192.168.1.23 dev eth2
在机器C上执行
route add -host 192.168.1.21 dev eth1
route add -host 192.168.1.22 dev eth2
 
Appendix 3.
这里简单介绍一下直通线和交叉线。
常用的网线有双绞线、同轴电缆、光纤等几种。
双绞线是目前最常用的网线,它由8根不同颜色的线分成4对绞合在一起,成对扭绞的作用是尽可能减少电磁辐射与外部电磁干扰的影响。
双绞线的两端都有RJ45型的插头,就是我们通常说的水晶头。相应的,在网络设备上就有RJ45型的接口,与RJ45插头相匹配。
RJ45插头/接口有8个引脚,每个引脚的定义不同,分为数据发送端,数据接收端等几种。
 
由于网络设备类型的不同,RJ45接口就有两种类型:一种是DTE(Data Terminal Equipment),数据终端设备,也就是PC等终端设备。另一种是DCE(Data Circuit-terminating Equipment),数据通信设备,也就是路由器,交换机,modem等通信设备。
两种RJ45接口的区别就是引脚的定义不同。
下图所示是DTE类型的引脚定义
 
下图则是DCE类型的引脚定义
可以看出两种接口的数据发送和接收引脚正好相反,因此,在DTE设备和DCE设备之间,直接将引脚一一对连,就可以实现通信。
而在同类型的设备之间,如DTE与DTE之间,直接将引脚一一对连,是无法通信的,试想两个数据发送端相连,都发送谁来接收呢?
于是,双绞线的RJ45插头就有了两种布线的顺序,也就是T568A与T568B。
T568A中8根线与插头引脚的对应关系如下:
File:RJ-45 TIA-568A Left.png
T568B中8根线与插头引脚的对应关系如下:
File:RJ-45 TIA-568B Left.png
可以看出T568B插头就是将T568A的1,2号线与3,6号线的顺序交换了,与DTE和DCE的性质一样。
于是,两端都是T568A插头的双绞线,就是直通线,用于不同类型的设备之间互联,而一端是T568A插头另一端是T568B插头的双绞线,就是交叉线,用于相同类型的设备之间互联。
 
可以看出,两种网线的存在,并且之间不兼容,导致了搭建网络的混乱。
幸运的是,目前大多数网络设备都提供了Auto MDI/MDI-X功能,即自动翻转,能够自动识别和翻转引脚的功能。
这样,无论是何种设备之间互联,无论使用的何种双绞线,具备Auto MDI/MDI-X功能的网卡或网络设备都能自动适配引脚功能,实现通信。
posted @ 2013-10-12 14:06  使命召唤  阅读(1147)  评论(0编辑  收藏  举报