网络通信模型基本以及Linux下高可用/Bonding的概念和用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信模型基本以及Linux下高可用/Bonding的概念和用法相关的知识,希望对你有一定的参考价值。

  1. 网络基本原理

  2. 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的概念和用法的主要内容,如果未能解决你的问题,请参考以下文章

怎么解决在window下高并发TCP请求端口被占用有关问题

Centos下高可用主从同步DNS服务部署

IO模型以及多路复用基本原理

高并发场景下高可靠高可用微服务架构设计与实现

整理网络编程篇

Linux下高cpu解决方案(转载)