《IPMP配置实例精品资料.doc》由会员分享,可在线阅读,更多相关《IPMP配置实例精品资料.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、北京华胜天成科技股份有限公司IPMP配置实例(v 1.0)作者宋定洲审核分类SUN主机和OS子类Solaris技术更新时间2024年3月10日关键字三个以上的关键字摘要IPMP的配置,介绍声明:本文部分内容来自Sun公司编号819-7058的文档。主要适用环境Solaris8 10/00及以后版本版本说明版本日期内容编写人V1.02007-3-09初稿宋定洲目 录版本说明2目 录21IPMP介绍32Solaris IPMP 的组件33IPMP的需求44配置IPMP44.1多网口多数据地址的IPMP组44.1.1规划44.1.2修改/etc/hosts44.1.3配置ce054.1.4配置ce1
2、54.1.5配置ce254.1.6启动后台守护进程54.1.7查看配置54.1.8修改配置文件64.2双网口单数据地址的IPMP组64.2.1修改/etc/hosts64.2.2配置ce074.2.3配置ce174.2.4启动后台守护进程74.2.5查看配置74.2.6修改配置文件74.3单网口IPMP组84.3.1命令配置84.3.2修改配置文件85配置目标系统(Target System)85.1使用命令行配置85.2使用脚本配置86关于IPMP的数据地址和测试地址的说明106.1数据地址106.2测试地址106.3示例106.4注意VCS中的配置101 IPMP介绍IPMP 为具有多个物
3、理接口的系统提供增强的可靠性、可用性和网络性能。有时,连接到该接口的物理接口或网络硬件可能会出现故障或者需要维护。过去,在这种情况下,系统便无法再通过与故障接口关联的任何IP 地址进行联系。并且,使用这些IP 地址与系统相连的任何现有连接都将被断开。通过IPMP,可以将一个或多个物理接口配置到IP 多路径组(IPMP 组)中。配置IPMP 后,系统将自动监视IPMP 组中的接口是否出现故障。如果组中的接口出现故障或者被移除以进行维护,则IPMP 自动迁移或故障转移故障接口的IP 地址。这些地址的接收者是故障接口的IPMP 组中的工作接口。IPMP 的故障转移功能可以保持连接并防止断开任何现有连
4、接。此外,通过自动在IPMP 组中的一组接口中分配网络通信流量,IPMP 提高了总体网络性能。此过程称为负荷分配。注意:如果需要将多个网口集合以增加网络带宽,例如将4个100Mbps网口集合已获得400Mbps带宽或将两个1Gbps网口集合已获得2Gbps带宽,需要单独购买安装Sun Trunking software它不包含在OS中。2 Solaris IPMP 的组件in.mpathd 守护进程/etc/default/mpathd 配置文件IPMP 配置的ifconfig 选项。3 IPMP的需求Solaris8 10/00及以后版本;每个网口具有各自不同的MAC address(loc
5、al-mac-address?=true)IPMP 组中的所有接口都必须具有相同的介质类型IPMP 组中的所有接口都必须位于同一IP 链路上同一IPMP group的所有IP address必须在同一子网;同一IPMP group的网口必须具有相同的不包含空格的在网络上唯一的IPMP group名称;同一子网中必须存在其他主机或可以访问的地址;4 配置IPMP可以用命令行和修改文件两种方式配置。使用命令行方式配置可以不用重启主机立即生效,但也需要修改文件使系统重启后配置依然有效。如果采用修改文件的方式配置则直接修改完文件后重启系统。4.1 多网口多数据地址的IPMP组4.1.1 规划现有三个网
6、口ce0,ce1,ce2ce0 IP 192.168.20.10 ,测试IP 192.168.20.11ce1 IP 192.168.20.20 ,测试IP 192.168.20.21ce2 IP 192.168.20.30 ,测试IP 192.168.20.31IPMP组 ipmpgroup4.1.2 修改/etc/hosts#vi /etc/hosts# Modifications made for IPMP192.168.20.10 host # Data address for ce0192.168.20.20 host-ce1 # Data address for ce1192.16
7、8.20.30 host-ce2 # Data address for ce2192.168.20.11 host-test # Test address for ce0192.168.20.21 ce1-test # Test address for ce1192.168.20.31 ce2-test # Test address for ce2注意:将所有IP地址写入hosts文件中有助于查看配置和修改配置文件,也为以后需要修改IP地址提供了方便。#ifconfig alo0: flags=1000849 mtu 8232 index 1inet 127.0.0.1 netmask ff0
8、00000 ce0: flags=1000843 mtu 1500 index 2inet 192.168.20.10 netmask ffffff00 broadcast 192.168.1.255ether 0:3:ba:c4:f4:8 4.1.3 配置ce0将ce0添加到IPMP组ipmpgroup 中#ifconfig ce0 group ipmpgroup配置测试IP#ifconfig ce0 addif 192.168.20.11 netmask + broadcast + -failover deprecated up4.1.4 配置ce1plumb ce1#ifconifg c
9、e1 plumb为ce1配置数据地址#ifconfig ce1 192.168.20.20 netmask + broadcast + up添加ce1到IPMP组#ifconfig ce1 group ipmpgroup配置测试IP#ifconfig ce1 addif 192.168.20.21 netmask + broadcast + -failover deprecated up4.1.5 配置ce2#ifconifg ce2 plumb#ifconfig ce2 192.168.20.30 netmask + broadcast + up#ifconfig ce2 group ipm
10、pgroup#ifconfig ce2 addif 192.168.20.31 netmask + broadcast + -failover deprecated up4.1.6 启动后台守护进程#/usr/sbin/in.mpathd4.1.7 查看配置#ifconfig alo0: flags=1000849 mtu 8232 index 1inet 127.0.0.1 netmask ff000000ce0: flags=1000843 mtu 1500 index 2inet 192.168.20.10 netmask ffffff00 broadcast 192.168.1.255
11、groupname ipmpgroupether 80:3:ba:c4:f4:8ce0:1: flags=9040843mtu 1500 index 2inet 192.168.20.11 netmask ffffff00 broadcast 192.168.1.255ce1: flags=1000843 mtu 1500 index 3inet 192.168.20.20 netmask ffffff00 broadcast 192.168.1.255groupname ipmpgroupether 0:3:ba:c4:f4:9ce1:1: flags=9040843 mtu 1500 in
12、dex 3inet 192.168.20.21 netmask ffffff00 broadcast 192.168.1.255ce2: flags=1000843 mtu 1500 index 4inet 192.168.20.30 netmask ffffff00 broadcast 192.168.1.255groupname ipmpgroupether 0:3:ba:c4:f4:10ce2:1: flags=9040843mtu 1500 index 4inet 192.168.20.31 netmask ffffff00 broadcast 192.168.1.2554.1.8 修
13、改配置文件#vi /etc/hostname.ce0host netmask + broadcast + group ipmpgroup up addif host-test netmask + broadcast + deprecated -failover up#vi /etc/hostname.ce1host-ce1 netmask + broadcast + group ipmpgroup up addif ce1-test netmask + broadcast + deprecated -failover up#vi /etc/hostname.ce2host-ce2 netmas
14、k + broadcast + group ipmpgroup up addif ce2-test netmask + broadcast + deprecated -failover up注意:配置文件是一行内容没有换行。4.2 双网口单数据地址的IPMP组这种配置是使用得较多的一种,SunCluster的CheckList所推荐的方法。4.2.1 修改/etc/hosts#vi /etc/hosts# Modifications made for IPMP192.168.20.10 host # Data address for ce0192.168.20.11 host-test # T
15、est address for ce0192.168.20.21 ce1-test # Test address for ce14.2.2 配置ce0#ifconfig ce0 group ipmpgroup#ifconfig ce0 addif 192.168.20.11 netmask + broadcast + -failover deprecated up4.2.3 配置ce1#ifconifg ce1 plumb#ifconfig ce1 group ipmpgroup配置测试IP#ifconfig ce1 192.168.20.21 netmask + broadcast + -f
16、ailover deprecated up注意:此处没有给ce1分配数据地址而是直接分配了测试地址。4.2.4 启动后台守护进程#/usr/sbin/in.mpathd4.2.5 查看配置#ifconfig alo0: flags=1000849 mtu 8232 index 1inet 127.0.0.1 netmask ff000000ce0: flags=1000843 mtu 1500 index 2inet 192.168.20.10 netmask ffffff00 broadcast 192.168.1.255groupname ipmpgroupether 80:3:ba:c4
17、:f4:8ce0:1: flags=9040843mtu 1500 index 2inet 192.168.20.11 netmask ffffff00 broadcast 192.168.1.255ce1: flags=9040843 mtu 1500 index 3inet 192.168.20.21 netmask ffffff00 broadcast 192.168.1.255groupname ipmpgroupether 80:3:ba:c4:f4:94.2.6 修改配置文件#vi /etc/hostname.ce0host netmask + broadcast + group
18、ipmpgroup up addif host-test netmask + broadcast + deprecated -failover up#vi /etc/hostname.ce1ce1-test netmask + broadcast + group ipmpgroup deprecated -failover up4.3 单网口IPMP组这种配置虽然不能进行故障转移但可以利用IPMP的特性来启用故障检测。4.3.1 命令配置# ifconfig ce0 -failover group ipmpgroup#/usr/sbin/in.mpathd4.3.2 修改配置文件#vi /et
19、c/hostname.ce0host netmask + broadcast + group ipmpgroup up5 配置目标系统(Target System)如果系统的defaultrouter不是100完全可靠,或者在IPMP组的子网中没有其它可与之通信的地址,那么IPMP组将发生故障所有网口将被至于field的状态,IP地址可以ping通但不能对外通信。因此针对缺省路由不可靠的情况需要为主机配置TargetSystem。5.1 使用命令行配置route add -host destination-IP gateway-IP -static例,#route add -host 192.
20、168.20.50 192.168.20.50 -static5.2 使用脚本配置脚本模板位于EIS-CD /cdrom/*/sun/tools/network/ S70staticroutes模板的注释行描述了脚本的使用方法,模板内容如下:# This script is not needed for most installations ! # # It MAY be needed for rare special customizations. In this case, # copy the script and edit the following example code to s
21、uit your needs. # Depending on your changes, this script overwrites Sun recommended default# values (To use the default values, you do not need this script). See Product# Documentation and SunSolve Infodocs for proper use first# Edit the following IPMP test TARGETS to suit your needs.# To install:#
22、1) cp S70staticroutes to /etc/rc2.d# 2) perform edits on the sript as required# 3) chmod 744 /etc/rc2.d/S70staticroutes# 4) chown root:sys /etc/rc2.d/S70staticroutes# 5) ln /etc/rc2.d/S70staticroutes /etc/init.d/staticroutes#TARGET1=172.20.20.110#TARGET2=172.20.20.120#TARGET3=172.20.20.130#TARGET4=1
23、72.20.20.140#TARGET5=172.20.20.150#TARGET6=172.20.20.160#TARGET7=172.20.20.170#TARGET8=172.20.20.180#TARGET9=172.20.20.190case $1 in start) /usr/bin/echo Adding static routes for IPMP .# /usr/sbin/route add host $TARGET1 $TARGET1# /usr/sbin/route add host $TARGET2 $TARGET2# /usr/sbin/route add host
24、$TARGET3 $TARGET3# /usr/sbin/route add host $TARGET4 $TARGET4# /usr/sbin/route add host $TARGET5 $TARGET5# /usr/sbin/route add host $TARGET6 $TARGET6# /usr/sbin/route add host $TARGET7 $TARGET7# /usr/sbin/route add host $TARGET8 $TARGET8# /usr/sbin/route add host $TARGET9 $TARGET9# /usr/sbin/route a
25、dd net x.x.x.x z.z.z.z ; stop) /usr/bin/echo Deleting static routes for IPMP .# /usr/sbin/route delete host $TARGET1 $TARGET1# /usr/sbin/route delete host $TARGET2 $TARGET2# /usr/sbin/route delete host $TARGET3 $TARGET3# /usr/sbin/route delete host $TARGET4 $TARGET4# /usr/sbin/route delete host $TAR
26、GET5 $TARGET5# /usr/sbin/route delete host $TARGET6 $TARGET6# /usr/sbin/route delete host $TARGET7 $TARGET7# /usr/sbin/route delete host $TARGET8 $TARGET8# /usr/sbin/route delete host $TARGET9 $TARGET9# /usr/sbin/route delete net x.x.x.x z.z.z.z ;esac6 关于IPMP的数据地址和测试地址的说明6.1 数据地址数据地址是在引导时指定给或通过ifcon
27、fig命令手动指定给NIC的接口的常规地址。即通常对外提供连接服务的地址,在IPMP组中是可以Failover的地址。6.2 测试地址测试地址是由in.mpathd 守护进程使用的特定于IPMP 的地址。是不可靠的地址,并且是不能Failover的。6.3 示例以使用较多的SunCluster中的配置为例,#vi /etc/hostname.ce0host netmask + broadcast + group ipmpgroup up addif host-test netmask + broadcast + deprecated -failover up#vi /etc/hostname.
28、ce1ce1-test netmask + broadcast + group ipmpgroup deprecated -failover up在hostname.ce0和hostname.ce1这两个文件中加粗的三个标记host、host-test、ce1-test,host对应的IP是数据地址,host-test和ce1-test对应的IP是测试地址。6.4 注意VCS中的配置如下一行是VCS4.1手册上的内容,前面的north-qfe0是测试地址后面的north是数据地址,如果细心就会发现测试地址后面会跟上deprecated和-failover两个参数,deprecated表示防止应
29、用程序使用该地址,-failover表示该地址不能failover。north-qfe0 netmask + broadcast + deprecated -failover up addif north netmask + broadcast + up附录资料:不需要的可以自行删除 libxml2应用实例Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c+、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。
30、功能还是相当强大的,相信满足一般用户需求没有任何问题。二、 Libxml2安装:一般如果在安装系统的时候选中了所有开发库和开发工具的话(Fedora Core系列下),应该不用安装,下面介绍一下手动安装: 1) 从xmlsoft站点或ftp(ftp.xmlsoft.org)站点下载libxml压缩包(libxml2-xxxx.tar.gz)2) 对压缩包进行解压缩 tar xvzf libxml2-xxxx.tar.gz3) 进入解压缩后的文件夹中运行 ./configure -prefix /home/user/myxml/xmlinst(此处为待安装的路径)或者直接使用 ./configu
31、re make make install 4) 添加路径 export PATH=/home/user/myxml/xmlinst/bin:$PATH 说明:为了结构清晰,最好将libxml2不安装在解压目录中。安装完成后就可以使用简单的代码解析XML文件,包括本地和远程的文件,但是在编码上有一些问题。Libxml默认只支持UTF8的编码,无论输入输出都是UTF-8,所以如果你解析完一个XML得到的结果都是UTF8的,如果需要输出GB2312或者其它编码,需要ICONV来做转码(生成UTF8编码的文件也可以用它做),如果系统中没有安装iconv的话,需要安装libiconv。 1) 下载lib
32、iconv压缩包(例如libiconv-1.11.tar.gz) 2) 对压缩包进行解压缩tar xvzf libiconv-1.11.tar.gz 3) 进入解压缩后的文件夹中运行 ./configure make make install三、关于XML:在开始研究 Libxml2 库之前,先了解一下XML的相关基础。XML 是一种基于文本的格式,它可用来创建能够通过各种语言和平台访问的结构化数据。它包括一系列类似 HTML 的标记,并以树型结构来对这些标记进行排列。例如,可参见清单 1 中介绍的简单文档。为了更清楚地显示 XML 的一般概念,下面是一个简化的XML文件。清单 1. 一个简单
33、的 XML 文件 root delete 10清单 1 中的第一行是 XML 声明,它告诉负责处理 XML 的应用程序,即解析器,将要处理的 XML 的版本。大部分的文件使用版本 1.0 编写,但也有少量的版本 1.1 的文件。它还定义了所使用的编码。大部分文件使用 UTF-8,但是,XML 设计用来集成各种语言中的数据,包括那些不使用英语字母的语言。接下来出现的是元素。一个元素以开始标记 开始(如 ),并以结束标记 结束(如 ),其中使用斜线 (/) 来区别于开始标记。元素是 Node 的一种类型。XML 文档对象模型 (DOM) 定义了几种不同的 Nodes 类型,包括:Elements(
34、如 files 或者 age)Attributes(如 units)Text(如 root 或者 10)元素可以具有子节点。例如,age 元素有一个子元素,即文本节点 10。XML 解析器可以利用这种父子结构来遍历文档,甚至修改文档的结构或内容。LibXML2 是这样的解析器中的其中一种,并且文中的示例应用程序正是使用这种结构来实现该目的。对于各种不同的环境,有许多不同的解析器和库。LibXML2 是用于 UNIX 环境的解析器和库中最好的一种,并且经过扩展,它提供了对几种脚本语言的支持,如 Perl 和 Python。四、Libxml2中的数据类型和函数一个函数库中可能有几百种数据类型以及几
35、千个函数,但是记住大师的话,90%的功能都是由30%的内容提供的。对于libxml2,我认为搞懂以下的数据类型和函数就足够了。1)内部字符类型xmlCharxmlChar是Libxml2中的字符类型,库中所有字符、字符串都是基于这个数据类型。事实上它的定义是:xmlstring.htypedef unsigned char xmlChar;使用unsigned char作为内部字符格式是考虑到它能很好适应UTF-8编码,而UTF-8编码正是libxml2的内部编码,其它格式的编码要转换为这个编码才能在libxml2中使用。还经常可以看到使用xmlChar*作为字符串类型,很多函数会返回一个动态
36、分配内存的xmlChar*变量,使用这样的函数时记得要手动删除内存。2) xmlChar相关函数如同标准c中的char类型一样,xmlChar也有动态内存分配、字符串操作等相关函数。例如xmlMalloc是动态分配内存的函数;xmlFree是配套的释放内存函数;xmlStrcmp是字符串比较函数等等。基本上xmlChar字符串相关函数都在xmlstring.h中定义;而动态内存分配函数在xmlmemory.h中定义。3)xmlChar*与其它类型之间的转换另外要注意,因为总是要在xmlChar*和char*之间进行类型转换,所以定义了一个宏BAD_CAST,其定义如下:xmlstring.h#
37、define BAD_CAST (xmlChar *)原则上来说,unsigned char和char之间进行强制类型转换是没有问题的。4)文档类型xmlDoc、指针xmlDocPtrxmlDoc是一个struct,保存了一个xml的相关信息,例如文件名、文档类型、子节点等等;xmlDocPtr等于xmlDoc*,它搞成这个样子总让人以为是智能指针,其实不是,要手动删除的。xmlNewDoc函数创建一个新的文档指针。xmlParseFile函数以默认方式读入一个UTF-8格式的文档,并返回文档指针。xmlReadFile函数读入一个带有某种编码的xml文档,并返回文档指针;细节见libxml2
38、参考手册。xmlFreeDoc释放文档指针。特别注意,当你调用xmlFreeDoc时,该文档所有包含的节点内存都被释放,所以一般来说不需要手动调用xmlFreeNode或者xmlFreeNodeList来释放动态分配的节点内存,除非你把该节点从文档中移除了。一般来说,一个文档中所有节点都应该动态分配,然后加入文档,最后调用xmlFreeDoc一次释放所有节点申请的动态内存,这也是为什么我们很少看见xmlNodeFree的原因。xmlSaveFile将文档以默认方式存入一个文件。xmlSaveFormatFileEnc可将文档以某种编码/格式存入一个文件中。5)节点类型xmlNode、指针xml
39、NodePtr节点应该是xml中最重要的元素了,xmlNode代表了xml文档中的一个节点,实现为一个struct,内容很丰富:tree.htypedef struct _xmlNode xmlNode;typedef xmlNode *xmlNodePtr;struct _xmlNode void *_private;/* application data */ xmlElementType type; /* type number, must be second ! */ const xmlChar *name; /* the name of the node, or the entity
40、 */ struct _xmlNode *children;/* parent-childs link */ struct _xmlNode *last; /* last child link */ struct _xmlNode *parent;/* child-parent link */ struct _xmlNode *next; /* next sibling link*/ struct _xmlNode *prev; /* previous sibling link*/ struct _xmlDoc*doc;/* the containing document */ /* End of common part */ xmlNs *ns; /* pointer to the associated namespace */ xmlChar *content; /* the content */ struct _xmlAttr *properties;/* properties list */ xmlNs *nsDef; /* namespace definitions on this node */ void *psvi;/* for type/PSVI informations */ unsigned short line; /* line number */ uns