Linux下VS/DR+heartbeat+ldirectory 实现高可用负载均衡服务
系统环境CentOS 5.4:
# uname -r
2.6.18-128.el5
IP分配:
client eth0 10.10.10.10
ldrictory eth1 10.10.10.1
eth0 192.168.77.222
realserver1 eth0 192.168.77.221
realserver2 eth0 192.168.77.225
LVS简介:
开发者:
章文嵩(博士) 个人主页:http://zh.linuxvirtualserver.org
三种模式:
VS/NAT VS/DR VS/TUN
十种算法:
Fixed echeduling(rr wrr dh sh)===========静态调度方法
1. 轮叫 Round-robin (RR)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,
而不管服务器上实际的连接数和系统负载。
2. 加权轮叫 Weithted round-robin (WRR)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更
多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值
3. 目标地址散列 Destination hashing (DH)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器
是可用的且未超载,将请求发送到该服务器,否则返回空。
4. 源地址散列 Source hash (SH)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可
用的且未超载,将请求发送到该服务器,否则返回空。
Dynamic Scheduling (lc wlc sed nq lblc lblcr)======================动态调度方法
其算法是:活动链接数x256+非活动链接数 将client请求分给数值小的服务器。
1. 最少链接 Least-connect (LC)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近
的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
2. 加权最少链接 Weighted least-connection (WLC) (Default)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器
将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3. 最短期望连接Shortest Expected delay(SED)
对wlc的改进,在wlc算法的基础上给权重值加一,主要用来针对某个服务器活动链接数值为0情况
4. 从不排队Never Quene(NQ)
基于SED算法的改进,不排队
5. 基于局部性的最少链接locality-based least-connection (LBLC)
基于局部的最少连接
6. 带复制的基于局部性最少链接 Locality-Based Least Connectionswith Replication (LBLCR)
三种IP负载均衡技术的优缺点比较:
杂项 VS/NAT VS/TUN VS/DR
服务器操作系统 任意 支持隧道 多数(支持Non-arp )
服务器网络 私有网络 局域网/广域网 局域网
服务器数目(100M网络) 10-20 100 多(100)
服务器网关 负载均衡器 自己的路由 自己的路由
效率 一般 高 最高
查看ip_vs模块:
检测系统是否已经加载lvs模块,默认在2.6.*以上的版本中已经加载了lvs模块。
可以用modprobe -l命令查看,如果没有的话需对内核打补丁,或者升级内核到2.6.18以上
# modprobe -l | grep ip_vs
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
我们额外还需要下载ipvs管理工具ipvsadm
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.25.tar.gz
安装ipvsadm
## ln -sv /usr/src/kernels/2.6.18-128.el5-i686/ /usr/src/linux =====一定要做,不然报错,
详细请看README
# tar -zxvf ipvsadm-1.25.tar.gz
# make && make install
NAT模式:
架构图:
directory配置:
[root@node1 ~]# service iptables stop ========================保险期间realserver,ldirectory防火墙均需关闭,
因为iptables和ipvsadm公用netfilter,会冲突
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: mangle [ OK ]
Unloading iptables modules: [ OK ]
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ipvsadm -C
# ipvsadm -A -t 10.10.10.1:80 -s wrr
# ipvsadm -a -t 10.10.10.1:80 -r 192.168.77.221:80 -w 1 -m
# ipvsadm -a -t 10.10.10.1:80 -r 192.168.77.225:80 -w 3 -m -m表示nat模式一定要加,默认是DR模式
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.10.1:80 wrr
-> 192.168.77.225:80 Masq 3 0 0
-> 192.168.77.221:80 Masq 1 0 0 Masq 会是route
realserver配置:
1.安装web服务,保证web正常访问
2.realserver需将网关指向directory即可
测试:
在client上 http://10.10.10.1 测试
DR模式:
这里我们将HA和HL放到一块来做,即:VS/DR+heartbeat高可用负载均衡的实现
架构图:
开始之前我们需要提到几个概念和注意的问题:
1.arp隐藏
2.为什么网上所有的VS/DR配置文档中,rip vip dip都是在一个网段中(我暂时没有找到,那位找到的请一定给我个网址,ths)
++++++++++++++++++++++++++++++++++++++++++++++++++++
1.arp隐藏的原理
在LVS的DR模式下,有一个必须要处理的问题就是real server上的ARP响应问题。其实,这个问题不只是LVS,其他的L4 Switch方案比如Foundry的ServerIron,也需要设置real server上的ARP响应。因为这是这种方案的结构决定的。
根据LVS官方说明,在LVS 的DR模式下,前端的director接收到用户请求以后,director根据后端real server的负载情况,动态地选择一台real server,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出的real server的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的real server,所以被选出来的那台real server肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。
从上边的LVS DR工作原理可以看到一个客户端计算机发送一个ARP广播到LVS-DR集群,因为Director和集群节点(真实服务器1)都是连接到相同的网络上的,它们都会接收到ARP广播“是谁的VIP1?”,这个时候我们希望的是只有前端的director来对用户进行响应,其他real server不应该响应用户直接的ARP包。(参考下边两幅引用51cto网站的图)
因此必须对real server进行一定的处理,使其不响应VIP接口上的ARP请求。在2.6系列的内核中,采用的方式是设置arp_announce和arp_ignore这两个内核参数。
arp_ignore=1,系统只回答目的IP为是本地IP的包。也就是对广播包不做响应。
arp_announce=2,系统忽略IP包的源地址(source address),而根据目标主机(target host),选择本地地址。
而且凡是能收到对VIP ARP广播报文的网口,都需要设置。设置的方法是修改/etc/sysctl.conf文件
永久的:
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
或
临时:
echo 1 > /proc/sys/net/ipv4/cconf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/cconf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/cconf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/cconf/lall/arp_announce
参数的具体含义:
arp_announce : INTEGER
默认为0
对网络接口上本地IP地址发出的ARP回应作出相应级别的限制:
确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 - (默认) 在任意网络接口上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP 不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送
all/ 和{interface}/ 下两者同时比较,取较大一个值生效.
提高约束级别有益于从指定的目标接受应答,而降低级别可以给予更多的arp查询者以反馈信息(关于arp代理这一段我普遍翻译地不好,去啃一下tcp/ip bible的卷一,然后再翻译吧)
arp_ignore : INTEGER
默认为0
定义对目标地址为本地IP的ARP询问不同的应答模式
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到来自10.1.1.2这样地址发起的对10.1.1.1 的arp查询也会回应--而原本这个请求该是出现在eth1上,也该有eth1回应的)
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到来自10.1.1.2这样地址发起的对192.168.0.1的查询会回答,而对10.1.1.1 的arp查询不会回应)
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内(比如 eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到来自10.1.1.2这样地址发起的对192.168.0.1 的查询不会回答,而对192.168.0.2发起的对192.168.0.1的arp查询会回应)
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应(do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied 翻译地似乎不好,这个我的去问问人)
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询
all/ 和{interface}/ 下两者同时比较,取较大一个值生效.
2.rip vip dip都是在一个网段中,其实没有必要,因为linux内核默认是不转发源IP是自己的包,我们需要打forward_shared补丁包,
遗憾的是我没有坚持下来,呵呵,带日后有时间了再杀他一回。呵呵
参考文章:
http://www.cnblogs.com/ljkeke/archive/2009/02/17/1392693.html
可以在调度器上使用DR方式,真实服务器使用私有地址并在逻辑设备上配置虚拟IP地址,用调度器作网关访问公网。
但是,linux内核发行版基本上不支持 share_forward和rp_filter选项,它不会转发源IP是自已的包,所以要打
forward_shared补丁和使用那两个选项来实现包的转发。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
directory配置: 两台配置基本一样
安装heartbeat:
http://www.ultramonkey.org/download/heartbeat/2.1.3/heartbeat-2.1.3.tar.gz
http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/STABLE-3.0.3.tar.bz2 这个貌似很新,但是我一直没有下载成功过
http://down.51cto.com/download.php?do=attachment&aid=107685&k=c8469a3d5830e56e6cd13060a0ed7816&t=1281434320
我用的是第三个链接(解压缩后是八个包),因为第一个是源代码包,中间编译过程会因为系统的不同出现不同的需求和错误,
很是麻烦。如果链接失败的话,可以给我留言,我邮件给诸位
# ls
heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm
# yum localinstall ./*.rpm
# rpm -qa | grep heartbeat
heartbeat-2.1.4-9.el5
heartbeat-devel-2.1.4-9.el5
heartbeat-ldirectord-2.1.4-9.el5
heartbeat-pils-2.1.4-10.el5
heartbeat-gui-2.1.4-9.el5
heartbeat-stonith-2.1.4-10.el5
# pwd
/etc/ha.d ==================主目录
# ls
apphbd.cf COPYING.LGPL GettingStarted.txt hb_report.html README startstop
authkeys DirectoryMap.txt ha.cf hb_report.txt Requirements.html
AUTHORS faqntips.html HardwareGuide.html heartbeat_api.html Requirements.txt
ChangeLog faqntips.txt HardwareGuide.txt heartbeat_api.txt rsync.html
COPYING GettingStarted.html haresources logd.cf rsync.txt
# cp /usr/share/doc/heartbeat-2.1.4/authkeys ha.cf haresources /etc/ha.d/
# service heartbeat start
#echo -ne "auth1\n1 sha1" >> authkeys
#dd if=/dev/urandom bs=512 count=1 | openssl md5 >> authkeys
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000372942 seconds, 1.4 MB/s
我们可以看到里面新增了两行
#vim /etc/ha.d/authkeys
auth1
1 sha1 9e43d13a84f2b9ea486516d709e748b5
# vim ha.cf =============开启如下行,具体含义如下
debugfile /var/log/ha-debug
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth1
auto_failback on
node node1.example.com
node node2.example.com
# vim haresources ===========声明主节点和虚拟ip地址
node1.example.com 192.168.77.250 httpd
#chmod 600 Authkeys
配置ha.cf
这个配置文件告诉heartbeat 使用的是什么介质和如何配置它们。ha.cf 包含你将到的所有的选项,内容如下:
serial /dev/ttyS0
使用串口heartbeat - 如果你不使用串口heartbeat, 你必须选择其它的介质,比如以太网bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 为其它的串口设备。
watchdog /dev/watchdog
可选项:watchdog功能提供 了一种方法能让系统在出现故障无法提供"heartbeat"时,仍然具有最小的功能,能在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停 止心跳后能够重新恢复心跳。如果你想使用该特性,你必须在内核中装入"softdog" 内核模块用来生成实际的设备文件。想要达到这个目的, 首先输入 "insmod softdog" 加载模块。然后,输入"grep misc /proc/devices" 注意显示的数字 (should be 10).然后, 输入"cat /proc/misc | grep watchdog" 注意输出显示出的数字(should be 130)。现在你可以生成设备文件使用如下命令:"mknod /dev/watchdog c 10 130" 。
bcast eth1
指定使用的广播heartbeat 的网络接口eth1(修改为eth0, eth2, 或你所使用的接口)
keepalive 2
设置心跳间隔时间为2两秒。
warntime 10
在日志中发出最后心跳"late heartbeat" 前的警告时间设定。
deadtime 30
在30秒后明确该节点的死亡。
initdead 120
在一些配置中,节点重启后需要花一些时间启动网络。这个时间与"deadtime"不同,要单独对待。 至少是标准死亡时间的两倍。
hopfudge 1
可选项: 用于环状拓扑结构,在集群中总共跳跃节点的数量。
baud 19200
串口波特率的设定(bps).
udpport 694
bcast和ucast通讯使用的端口号694 。这是缺省值,官方IANA 使用标准端口号。
nice_failback on
可选项:对那些熟悉Tru64 Unix, 心跳活动就像是"favored member"模式。主节点获取所有资源直到它宕机,同时备份节点启用。一旦主节点重新开始工作, 它将从备份节点重新获取所有资源。这个选项用来防止主节点失效后重新又获得集群资源。
node linuxha1.linux-ha.org
强制选项:通过`uname -n`命令显示出的集群中的机器名。
node linuxha2.linux-ha.org
强制选项:通过`uname -n`命令显示出的集群中的机器名。
respawnuseridcmd
可选项:列出可以被spawned 和监控的命令。例如:To spawn ccm 后台进程,可以增加如下内容:
respawn hacluster /usr/lib/heartbeat/ccm
通知heartbeat 重新以可信任userid身份运行(在我们的例子中是hacluster) 同时监视该进程的"健康"状况,如果进程死掉,重启它。例如ipfail, 内容如下:
respawn hacluster /usr/lib/heartbeat/ipfail
NOTE: 如果进程以退出代码100死掉, 这个进程将不会respawned。
pingping1.linux-ha.orgping2.linux-ha.org ....
可选项:指定ping 的节点。 这些节点不是集群中的节点。它们用来检测网络的连接性,以便运行一些像ipfail的模块。
2.6.5.2. 配置 haresources
一旦你配置好了ha.cf文件,下面就需要设置haresources文件,这个文件指定集群所提供的服务以及谁是缺省的主节点。注意,该配置文件在所有节点应该是相同的。
在我们的例子中,我们的HA集群提供的是负载均衡服务(LVS)和服务监控服务(Ldirectord)。这里集群的IP(虚拟)地址是必须配置的,不要在haresources文件以外的地方配置该IP地址。所以我们应该添加如下一行:
linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www ldirectord::mail
::前的表示服务脚本名称(IPaddr),你可以在目录/etc/ha.d/resource.d下找到一个脚本名叫 Ipaddr,后面的表示输入的参数。
Heartbeat 会在下面的路径搜索同名的启动脚本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
这里的服务脚本的使用是符合Init标准语法,所以你可以在这里通过Heartbeat方便地运行、停止/etc/rc.d/init.d下标准的服务后台进程。
2.6.5.3. 配置 Authkeys
配置加密认证算法,有三种算法:CRC, md5,sha1。你会问我们应该用哪种呢?
如果你的heartbeat 运行在一个安全的网络,例如CAT5交叉线,你可以用CRC,从资源开销上来说,这是最节省开销的。如果网络是不可靠的,而且你也不是一个网络安全痴狂者 或者你十分关心CPU资源的最小开销,就用md5,最后如果你关心的是安全而不是CPU资源的开销,那么建议你使用sha1,你将会得到最佳的安全度,很难被***所破解。
格式如下:auth <number><number> <authmethod> [<authkey>]
例: /etc/ha.d/authkeys
使用sha1
auth 1
1 sha1 key-for-sha1-any-text-you-want
使用md5
auth 1
1 sha1 key-for-md5-any-text-you-want
使用CRC
auth 2
2 crc
设置调度算法:
# ipvsadm -C
# ipvsadm -A -t 192.168.77.250:80 -s wrr
# ipvsadm -a -t 192.168.77.250:80 -r 192.168.77.221:80 -w 1 -g
# ipvsadm -a -t 192.168.77.250:80 -r 192.168.77.225:80 -w 3 -g
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.77.250:80 wrr
-> 192.168.77.225:80 Route 3 0 0
-> 192.168.77.221:80 Route 1 0 0
这里需要注意的是:
1.一定确保每个ldirectoty的hosts文件中都有其他directory的名称解析,(或者建DNS服务一也可,强烈的不建议哈)
不然ldirectory会找不到其他的ldriectory调度器
2.Nat模式需要开启ip_forward=1路由功能,而在DR模式中是不需要开启IP_forward功能的,除非是因为有特别要求
# hostname
node1.example.com 另外一台为node2.example.com
# cat /etc/hosts ====================两台directory hosts文件中需声明,并作相应配置
192.168.0.1 node1.example.com node1
192.168.77.222 node1.example.com node1
192.168.0.2 node2.example.com node2
192.168.77.220 node2.example.com node2
realserver配置:
#service httpd stop ============证实web服务是由heartbeat控制的,而非realserver自身了
# echo 1 > /proc/sys/net/ipv4/cconf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/cconf/lo/arp_announce
# echo 1 > /proc/sys/net/ipv4/cconf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/cconf/lall/arp_announce
# ifconfig lo:0 192.168.77.250 broadcast 192.168.77.250 netmask 255.255.255.255 up
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.77.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.77.222 0.0.0.0 UG 0 0 0 eth0
# route add -host 192.168.77.250 dev lo:0
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.77.250 0.0.0.0 255.255.255.255 UH 0 0 0 lo
192.168.77.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.77.222 0.0.0.0 UG 0 0 0 eth0
测试:
1.在client测试 http://192.168.77.250 会轮显两台realserver的web内容(建议将两台web的内容设置不一样,以便于区别)
2.关掉master directory,网页依然可以正常访问,在辅助directory上执行
#ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.77.250:80 wrr
-> 192.168.77.225:80 Route 3 0 0
-> 192.168.77.221:80 Route 1 0 0
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:FF:42:84
inet addr:192.168.77.220 Bcast:192.168.77.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feff:4284/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:140116 errors:0 dropped:0 overruns:0 frame:0
TX packets:23633 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:18547910 (17.6 MiB) TX bytes:2062186 (1.9 MiB)
Interrupt:67 Base address:0x2000
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:FF:42:84
inet addr:192.168.77.250 Bcast:192.168.77.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:FF:42:8E
inet addr:192.168.7.220 Bcast:192.168.7.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:70991 errors:0 dropped:0 overruns:0 frame:0
TX packets:10549 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10854575 (10.3 MiB) TX bytes:2693378 (2.5 MiB)
Interrupt:75 Base address:0x2080
我们会发现虚拟IP地址192.168.77.250:80会自动添加过来
转载于:https://blog.51cto.com/fengzhilinux/373716