网络通信模型基本以及Linux下高可用/Bonding的概念和用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信模型基本以及Linux下高可用/Bonding的概念和用法相关的知识,希望对你有一定的参考价值。
网络基本原理
Bonging网卡绑定
1.网络基本原理
在现有的学习阶段,如果你测试网络通与不通基本都是通过ping命令(生产环境中为了防止攻击几乎所有的服务器都禁掉了PING),不过很多时候都并不清楚这个命令到底在背后执行什么操作,那好吧,往下看就对了
1.1路由/路由器:路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。(此条来自百度百科)通俗一点讲,就是发生网络请求的时候,路由就是实现“怎么找路”的功能
1.2网关:网关是默认的数据出口。如果你的数据不知道往哪里走的话,那么他会去默认网关那里报道。路由器包含许多这样的网关,其中之一是默认网关。也就是说数据到了路由器以后,如果不知道自己下一步该怎么走了,那么他会去默认网关那里去报道
图示:
图中以route1为例,PC1若要跟PC2通信,则一定要走route1/2/3,但是现在这三个路由器都不知道该怎么走,因为路由器内部要有“路由条目”这个路由条目就是记录着“从哪里来的数据包要传递到哪里去,这个过程从哪里走”这样的信息,所以
(1)route1配置路由条目:由route1到PC2的“路线”
route add -net 4.4.4.0/24 gw 2.2.2.252
(3)route1配置路由条目:由route1到route3的“路线”
route add -net 3.3.3.0/24 gw 2.2.2.252
同理,每一个路由器(route)都要配置对应的“目标地址和经过的网关条目”
上图中以route1 为例写了两个路由条目,这是最简单的网络通信模型,当然,现实生活中或者生产环境中显然不会有如此简单的路由,可能路由有好多个,路由下面还有交换机等等。难道每多一个路由或者 主机就要增加一个路由条目吗?
显然这是不现实的,其次,路由条目过多也会造成通信效率降低的问题,所以这个路由条目可以简化
图中,route1两个条目虽然目的地不是一个,但是这两个条目都是同方向的,都是从左右的,所以可以简写成:
route add -net default gw 2.2.2.252
查看路由条目:
route -n
有添加就有删除,只需要把对应的“add”换成“del”即可
图中示例可以解释为“去往PC2方向的所有路由都执行这个条目,指定网关为2.2.2.252”
路由条目简化,则需要查找的范围就变小了,效率自然就高了
上述“小实验”是在VMware虚拟机上,用五台虚拟机实现,如果是克隆的虚拟机则需要注意网卡配置文件名称和MAC地址的问题
网卡配置文件目录:
/etc/sysconfig/network-scripts
名为“ifcfg-”的文件即为网卡配置文件,说到网卡配置文件,那就来简单看一下吧:
DEVICE=eth1 #设备名称,就是ifconfig命令列表里面设备的名称 TYPE=Ethernet #类型为以太网 UUID=9b86924e-c19c-46fc-8fb7-ab2239fb22cb #系统中设备的唯一标识 ONBOOT=yes #是否开机启动 NM_CONTROLLED=yes #是否启用NetworkManager管理工具(centos6 中建议为“no”,否则设置静态IP时很容易被此服务改掉成DHCP) BOOTPROTO=dhcp #做网卡绑定的时候常用,DHCP或者STATIC类型,不指定的话容易出现访问受限的问题 HWADDR=00:0C:29:E6:8B:2D #MAC地址,全球唯一的设备标识 PREFIX=16 #子网掩码
如果需要设置指定的静态IP则在上述内容中加一项“IPADDR=XXX.XXX.XXX.XXX”并且指定BOOTPROTO为static
当然了,网卡配置方面的命令还是很多的,类似于ifconfig/netstat(点击查看命令详解)都是很久以前的命令集了,只是由于习惯大部分人还在使用
很多时候网卡服务重启时很多功能并不会生效,这时候需要卸载/重装网卡驱动模块
查询网卡模块名称:
ethtool -i eth0 #eth0为ifconfig命令查询出来的网卡名
卸载:
modprobe -r pcnet32 #pcnet32为上一条命令查询出来的结果
装载:
modprobe pcnet32 #上一条命令去掉-r即可
2.Bonding
2.1 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能,有很多优势。
bonding技术是linux系统内核层面实现的,它是一个内核模块(驱动)。使用它需要系统有这个模块, 我们可以modinfo命令查看下这个模块的信息, 一般来说都支持
通俗来讲就是:把两块或者多块实体物理网卡通过Bonding虚拟成一块网卡,并赋予一个IP地址,能承载更多地数据流量,并且在高可用方面有很大作用,其中一块出了故障可以由其他网卡代劳,当然,这个过程或多或少有个时间间隔,没明确最大限度能允许这个过程的执行时间有多少,但是可以肯定的是如果数据流量大,Bonding里面处理故障比较慢是一定会丢包的,不过这个刷新时间间隔太短、太快又会过多的占用系统资源,所以这个时间点自己掌握此外(这个时间通过Bonding配置文件里面的miimon选项赋值控制,单位是ms),在实现负载均衡方面也有很大的本事,某一块网卡流量太大,通过Bonding可以分担一部分或大部分
1.Mode 0 (balance-rr)轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
2.Mode 1 (active-backup)活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。 为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
3.Mode 3 (broadcast)广播策略:在所有的slave接口上传送所有的报文,提供容错能力
4.active-backup、 balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如: Cisco 交换机需要在模式 0、 2 和 3 中使用EtherChannel,但在模式4中需要LACP和 EtherChannel
2.2Bonding配置文件
2.2.1创建bonding文件
vim /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BONDING_OPTS="mode=1 miimon=100" #mode1模式/每隔100ms刷新一次 IPADDR=XXX.XXX.XXX.XXX PREFIX=24 #子网掩码
2.2.2 配置物理网卡与bond0的关系
DEVICE=eth3 #要配置的网卡名称 MASTER=bond0 #网卡属于哪个bond0 SLAVES=yes #隶属关系是否开启(yes即为bond0可以管理这块网卡,no则反)
*同理设置另一块或多块网卡为此配置形式
2.2.3 在Centos6中,建议关闭NetworkManager管理工具
/etc/init.d/NetworkManager stop
重启网络服务:
/etc/init.d/network restart #或者执行 :service network restart
查看bond0的状态:
cat /proc/net/bonding
查看bond0的工作模式:
cat /sys/class/net/bond0
总结bonding:
实际生产环境中,bonding可能不止两三块网卡,因为服务器需要稳定、高可用,保证不丢包才是根本,所以会有很多网卡组成bond,这个过程中,应用层是感受不到网卡的变动的,只要miiimon的值不太大、刷新频率不要太慢,就不会丢包,就发现不了什么,所以还是很好的一种解决网卡出故障时保证系统正常运转的措施。
以上是关于网络通信模型基本以及Linux下高可用/Bonding的概念和用法的主要内容,如果未能解决你的问题,请参考以下文章