在aix上,我们可以将oracle SGA pin在内存中,防止这部分内存交换。所以,通过pin住oracle SGA,能带来很大的性能好处。
如果想要正确的pin住内存,涉及到2个OS内核参数与一个oracle init参数:
1、aix参数v_pinshm=1,默认是0,表示aix将支持pin住内存,设置方法为
#vmo -p -o v_pinshm=1
2、aix参数maxpin%=内存百分比,默认80%,表示支持的最大的可pin住内存的比例,设置方法为
#vmo -p -o maxpin%=90
3、oracle参数LOCK_SGA=true,表示oracle将使用这部分被pin住的内存,其实就是告诉oracle使用另外一种内存调用方法。
因为这部分pin住的内存不仅仅是oracle在使用,aix内核也可能需要用到这部分内存,所以,我们不能设置SGA超过如下2个公式的范围:
1、SGA < 总内存*(maxpin%-10%),如果是默认值,则SGA不能超过总内存的70%
2、OS的pin住内存的总量(稳定运行时的总量,会随SGA大小而变化) < 总内存*(maxpin%-5%),如果是默认值,则pin住的内存总量,不能超过总内存的75%
至于Oracle的SGA总量,可以通过如下命令查看
- SQL> select sum(value)/1024/1024/1024 "SIZE(G)" from v$SGA;
-
- SIZE(G)
- ----------
- 71.2681394
至于被pin住的内存总量,可以通过OS的命令svmon来查看
#svmon -G
size inuse free pin virtual
memory 27394048 23520958 3873090 20424376 20884173
pg space 16777216 41932
......
注意,以上pin住的部分,是表示4k大小的页面个数(没有使用大页的情况下),那么,折算成内存大小则是20424376*4/1024/1024=77.91G。
那么,如果采用默认的maxpin%设置(80%),我们将需要多大的物理内存呢?
公式1:物理内存 = 71.27/0.7 = 102G
公式2:物理内存 = 77.91/0.75 = 104G
在两者里面取大值,表示我们至少需要104G的物理内存,再去掉其它转换消耗,固定消耗,购买内存起码需要108G。
关于以上2个公式,我还想补充说明一下,在5.2的早些版本中,只需要满足公式1即可,如果实际设置的SGA内存超过了公式1的范围,其实OS也只pin住maxpin%-10%的内存,其它的没有pin住的内存,可能会导致交换的发生,最多是影响性能。
但是,aix 5.2以后的一些版本以及aix 5.3版本,因为不同page size的出现(如64K的page size的大量使用),如果不符合以上的两个公式,最严重的后果就是会导致OS被hang住,其实也就是aix的一个新的psm后台进程,一个负责页面转换的进程,当发现内存不够的时候,会直接杀掉运行的进程。
够狠,也够烂。
这个问题最早应当是gototop发现的,那已经是很多年以前的事情了,不过,一直到现在,这个问题其实没有最终解决,所以,这个补丁还是不得不一直打下去。bug描述:
# Bugs resolved by this patch in conjunction with APAR IY49415:
# -------------------------------------------------------------
# 3028673: ORACLE ON AIX DOES NOT SHARE MANY CONST STRUCTS - PER
# PROCESS MEMORY OVERHEAD
更详细的信息可以参考metalink Note:259983.1,其实在早先的aix 4.3以及5.1上,当时的解决方案是:
$AIXTHREAD_SCOPE=S; export AIXTHREAD_SCOPE
$NUM_SPAREVP=1; export NUM_SPAREVP
但是,从aix 5.2开始,以上解决方案不再有效,所以,为了解决这个问题,aix 5.2推出了一个APAR IY49415,在aix 5.3中是查不到这个APAR信息的,但是不表示aix 5.3不支持,而是因为aix 5.3已经完全包含进去了。
AIX 5.2#instfix -a -ivk IY49415
IY49415 Abstract: read-only reloc linking/loading support
IY49415 Symptom Text:
Programs having large amounts of read-only address constants
(compared to our competitors binaries of the same programs),
consume excessive amounts of memory under AIX since it has no
support to place address constants in read-only memory (text).
----------------------------
Fileset bos.64bit:5.2.0.12 is applied on the system.
Fileset bos.mp:5.2.0.18 is applied on the system.
Fileset bos.mp64:5.2.0.18 is applied on the system.
Fileset bos.rte.bind_cmds:5.2.0.13 is applied on the system.
Fileset bos.up:5.2.0.18 is applied on the system.
All filesets for IY49415 were found.
在有该APAR的aix 5.2系统上,或者所有的aix 5.3系统上,oracle推出了一个patch 3028673。打这个patch的方法也很奇怪,不是传统的Opatch方式去打,而是重新relink一个新的Oracle可执行文件,最终目的是通过直接修改源文件,使得oracle的多个进程之间可以共享一部分原来不能共享的资源,这部分资源大致占用1M多的空间。所以,该patch可以使得每个oracle进程降低1M多一点的内存使用,如果在进程特别多,而内存又比较紧张的系统上,这个patch还是非常有效果的。relink的方法为:
Relink the oracle binary
~~~~~~~~~~~~~~~~~~~~~~~~
1 save your current version of $ORACLE_HOME/oracle
2 create a working directory $ORACLE_HOME/relink
3 cd to $ORACLE_HOME/relink
4 unzip the relinking package
5 link $ORACLE_HOME/bin/oracle to ./oracle0
6 run the script ./genscript to generate some required files and scripts
7 run ./relink.sh to generate the new oracle binary oracle0.new.$$
8 copy oracle0.new.$$ to $ORACLE_HOME/bin/oracle and verify that the
permissions match the original oracle binary.
另外,需要特别注意的是,patch中描述为
# Patch Special Instructions
# ---------------------------
# This patch is for AIX 5.2 systems only.
#
# It is valid for all 920* AIX 5.2 systems.
这个是因为当时还没有aix 5.3系统,其实,实际上所有oracle 920系统+aix 5.2/5.3都可以使用这个patch,以下是使用前后的对照表,注意SIZE列,补丁前与补丁后基本相差1M多,如果有1000个进程,就可以节约1-2G的内存使用。
补丁前$ps gx|grep oracle
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
483436 - A 199:48 12 4804 25876 xx 49801 21136 0.5 0.0 oracletb
602170 - A 198:55 0 4804 25940 xx 49801 21136 0.5 0.0 oracletb
610420 - A 209:55 6 4844 25980 xx 49801 21136 0.5 0.0 oracletb
630988 - A 145:18 9 4860 25932 xx 49801 21136 0.4 0.0 oracletb
639154 - A 199:59 10 4828 25900 xx 49801 21136 0.5 0.0 oracletb
643276 - A 191:42 4 4792 25864 xx 49801 21136 0.5 0.0 oracletb
651494 - A 193:13 6 4844 25916 xx 49801 21136 0.5 0.0 oracletb
671756 - A 204:38 10 4776 25848 xx 49801 21136 0.5 0.0 oracletb
……
补丁后$ps gv|grep oracle
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
639170 - A 0:01 3 3036 77100 xx 50917 74064 0.1 0.0 oracletb
643300 - A 0:00 0 3012 77076 xx 50917 74064 0.0 0.0 oracletb
651514 - A 0:03 1 3196 77196 xx 50917 74064 0.1 0.0 oracletb
671762 - A 0:05 2 3120 77184 xx 50917 74064 0.2 0.0 oracletb
675850 - A 0:04 0 3120 77120 xx 50917 74064 0.2 0.0 oracletb
680040 - A 0:06 0 3120 77184 xx 50917 74064 0.2 0.0 oracletb
688218 - A 0:05 0 3116 77180 xx 50917 74064 0.2 0.0 oracletb
700614 - A 0:09 2 3120 77120 xx 50917 74064 0.2 0.0 oracletb
……
最近的几台机器,安装了5305,结果,还在测试阶段,就被折腾死了,严重身心疲惫ing,还不知道能否顺利上线。
#oslevel -s
5300-05-CSP
先是在大内存使用的情况下(108G),如SGA开到一定程度(约总内存的73%左右),OS就会莫名其妙的HANG住,什么命令都执行不了,查到后来,查到一个文档,说默认情况下,SGA内存总量不能超过总内存的70%。如果要超过70%,必须修改maxpin%内核参数,该参数默认80%,但是SGA总量只能是maxpin%-10%。以前一直以为只要不超过maxpin%就可以了,看样子还是错了,不过要错也只是在5.3上错了,5.2上我是设置过SGA总量超过maxpin%-10%的。
然后又发现topas很不听话,磁盘busy%老是0%,修改chdev -l sys0 -a iostat=’true’后还发现时好是坏,后来才知道,有些chdev的修改虽然显示成功了,但是实际没有修改成功,所以导致lsattr -El sys0与pstat -T的结果居然有差异,我晕,解决办法就是多修改几次,修改成功后(也就是这两个命令的结果统一之后)重新起一下,再狂晕。
最后发现,OS严重不稳定,如反复测试Oracle数据库的连接数,发现有一台机器的oracle连接数到200多一点就连接不进去了,client端报ORA-12500错误。想啊想不出什么理由,分析起来还好象还是与OS的内存有关系,于是重新起一下OS,没有做任何修改,这次连4000多个进程进去没有任何错误了。
IBM把dump分析了这么长时间,也没有分析出一个结果,严重鄙视。AIX开发的版本一个比一个差,更是鄙视。。。
神啊,救救我吧,就算我RPWT,也不至于比流云(blue_prince)还差吧。看样子,在上线之前,真的要去灵隐寺了,有人陪我一起去吗?
一、配置NFS Server
首先需要启动NFS Server,可以通过smit nfs–> Network File System (NFS) –>Configure NFS on This System启动或者停止nfs服务组。
可以通过lssrc -g nfs查看nfs的服务情况
#lssrc -g nfs
Subsystem Group PID Status
biod nfs 712706 active
nfsd nfs 635260 active
rpc.mountd nfs 462932 active
rpc.lockd nfs 639418 active
rpc.statd nfs 757914 active
nfsrgyd nfs inoperative
gssd nfs inoperative
当然,以上也可以通过startsrc -g nfs与stopsrc -g nfs启动与停止该服务组子系统。每当系统启动时,/etc/rc.nfs运行exportfs命令来读取服务器上的/etc/exports文件,然后告诉内核要导出哪些目录与对应的权限。然后rpc.mountd和以上守护进程由/etc/rc.nfs启动。
/etc/exports指定了nfs server要导出的目录与权限,该文件内容如下,如
#more /etc/exports
/u01/logs -sec=sys:krb5p:krb5i:krb5:dh:none,rw,access=host_name
注意:这里的access一定要写机器名,其机器名对应的ip在/etc/hosts中体现出来
用exportfs可以导出该目录,如:
#/usr/sbin/exportfs -a
#/usr/sbin/exportfs
/u01/logs -sec=sys:krb5p:krb5i:krb5:dh:none,rw,access=host_name
关于更多的exportfs的用法,可以查看相关帮助,另外,/etc/xtab则与/ext/exports有一样的格式,运行exportfs的时候,/etc/xtab将被更新,这样可以临时导出一个目录而不更新exports文件。
关于/etc/exports的更新,也可以用smit nfs–>Network File System (NFS) –>Add a Directory to Exports List或者是Change / Show Attributes of an Exported Directory来实现,如
#smit chnfsexp
* Pathname of directory to export /u01/logs
Anonymous UID [-2]
Public filesystem? [no]
* Change export now, system restart or both both
Pathname of alternate exports file []
Allow access by NFS versions []
External name of directory (NFS V4 access only) []
Referral locations (NFS V4 access only) []
Replica locations []
Ensure primary hostname in replica list yes
Allow delegations? []
Security method [sys,krb5p,krb5i,krb5,dh,none]
Mode to export directory [read-write]
Hostname list. If exported read-mostly []
Hosts & netgroups allowed client access [host_name1,host_name2]
Hosts allowed root access []
验证服务器中上的 /etc/exports 文件是否列出客户机要安装的文件系统名称以及该文件系统是否已导出。输入以下命令进行操作:
#showmount -e server_name
该命令在NFS Server/client上都可以正常运行,列出了由 server_name 当前导出的所有文件系统。
二、配置 nfs client
nfs的client配置比较简单,需要portmap服务正常即可。
#lssrc -s portmap
Subsystem Group PID Status
portmap portmap 225506 active
关于mount的信息,是写在/etc/filesystems中的,如
#more /etc/filesystems
......
/mydisk:
dev = "/disk1"
vfs = nfs
nodename = dbbak
mount = false
type = nfs3
options = soft,intr,retry=2,rsize=32768,wsize=32768,timeo=300,proto=tcp
account = false
......
其中nodename指定了服务器的名字,其对应的ip在/etc/hosts中体现,dev指定了服务器的export出来的目录。
关于更多的options的设置,可以查阅更多的nfs的文档。
其详细信息,也可以在smit中获得,如smit nfs–>Network File System (NFS) –>Add a File System for Mounting或者是Change / Show Attributes of an NFS File System。如
#smit chnfsmnt
* PATHNAME of mount point /mydisk
* PATHNAME of Remote Directory [/disk1]
* HOST where remote directory resides [dbbak]
Mount type NAME [nfs3]
* Use SECURE mount option? no
* Remount file system now, both
update /etc/filesystems or both?
* /etc/filesystems entry will mount the directory no
on system RESTART.
* MODE for this NFS file system read-write
* ATTEMPT mount in background or foreground? foreground
NUMBER of times to attempt mount [2]
Buffer SIZE for read [32768]
Buffer SIZE for writes [32768]
NFS TIMEOUT. In tenths of a second [300]
NFS version for this NFS file system any
Transport protocol to use tcp
Internet port NUMBER for server []
* Allow execution of SUID and sgid programs yes
in this file system?
* Allow DEVICE access via this mount? yes
* Server supports long DEVICE NUMBERS? yes
* Mount file system soft or hard soft
验证 mountd、portmap 和 nfsd 守护程序正在 NFS 服务器上运行,请在客户机 shell 提示符下输入以下命令:
#/usr/bin/rpcinfo -u server_name mount
#/usr/bin/rpcinfo -u server_name portmap
#/usr/bin/rpcinfo -u server_name nfs
如果守护程序在服务器运行,会返回以下响应:
program 100005 version 1 ready and waiting
program 100000 version 2 ready and waiting
program 100003 version 2 ready and waiting
程序号分别与命令对应,如前例中所示。如果没有返回类似的响应,请在服务器控制台上登录服务器并按照获取 NFS 守护程序的当前状态中的指示信息检查守护程序的状态。
#showmount -e server_name
该命令列出了由 server_name 当前导出的所有文件系统。
注意:如果在AIX上mount linux的nfs文件系统,可能需要特殊执行:
#nfso -o nfs_use_reserved_ports=1
这里说到了路由,我就必须简单的介绍一下路由的作用,在TCP/IP网络中,当一个数据包从一个计算机传送到另外一个计算机的时候,这两个计算机可能是毫无关系的IP地址,但是,发送数据包的源计算机怎么知道通过正确的“道路”来发送这个数据包呢,这个就是路由的作用了。对路由的简单描述可以为,是一个预定好的IP地址,可能是一台路由器或者是一台有路由功能的计算机,能告诉你连接目标地址(或子网)的正确路径,路由目标一般有主机、子网以及默认之分。如果一个目标地址(或者是子网)没有特定的指定路由,则使用默认的路由(也就是我们说的网关)。
通常情况下,如果没有任何路由(包括默认网关),这个时候,只能通过广播方式访问同一个网段的计算机,而通过路由,则可能可以访问全世界任何计算机(只要他们网络相通,有正确的Ip地址以及路由指向),当然,还要它允许你访问。从一个IP地址到另外一个IP地址,可能会经过多层路由,如第一个路由器可能只是把信息传递个下一个路由器,而下一个路由器则把信息传向更下一层路由器,一直达到目标为止。通过unix/linux的traceroute或者是windows的tracert,我们就可以正确的知道路由的路径:
C:>tracert -d 71.5.7.191
Tracing route to 71.5.7.191 over a maximum of 30 hops
1 * * * Request timed out.
2 16 ms 16 ms 16 ms 220.191.142.165
3 17 ms 17 ms 17 ms 61.130.125.73
4 20 ms 21 ms 21 ms 61.130.126.149
5 41 ms * 41 ms 202.97.43.177
6 40 ms 41 ms 42 ms 202.97.33.138
7 231 ms * 231 ms 202.97.51.174
8 1115 ms 1111 ms 1105 ms 202.97.49.130
9 230 ms 231 ms 230 ms 205.158.79.29
10 1115 ms 1122 ms 1123 ms 65.106.5.45
11 1127 ms * 1122 ms 65.106.2.158
12 463 ms 464 ms * 205.158.60.170
13 473 ms 472 ms 473 ms 71.5.7.191
以下的内容,我将简单的介绍在AIX上查看、配置路由列表,如查询命令为:
#netstat -rn
Routing tables
Destination Gateway Flags Refs Use If PMTU Exp Groups
Route Tree for Protocol Family 2 (Internet):
default 10.0.100.250 UGc 0 0 en0 - - -
10.0.100.0 10.0.100.150 UHSb 0 0 en0 - - - =>
10.0.100/24 10.0.100.150 U 2 2 en0 - - -
10.0.100.255 10.0.100.150 UHSb 0 3 en0 - - -
127/8 127.0.0.1 U 0 353 lo0 - - -
Route Tree for Protocol Family 24 (Internet v6):
::1 ::1 UH 0 0 lo0 16896 - -
其中红色部分标明了默认路由,也就是网关地址。可以用如下命令来添加默认路由:
#route add default 10.0.100.250 或者是
#route add 0 10.0.100.250
表示对没有特别指定,或者目标路径为0的地址,也就是所有地址,使用路由10.0.100.250,其实,这个IP地址也就是网关。但是,这样增加的路由只是增加在路由表中(动态路由),而不写在ODM库中,如果想写在ODM库中,可以简单的由
#smit route 来完成,或者是类似的命令
#chdev -l inet0 -a route=”net,-hopcount,0,,0,10.0.100.250″
跟上面的意思一样,表示对目标地址0,将使用路由10.0.100.250,其实就是默认路由,这样增加的路由是静态路由。
以下是增加动态路由与删除动态路由的一个例子,以下表示针对目标子网10.10.*.*/24,都使用路由10.0.100.251,其中/24是表示子网掩码
#route add -net 10.10.0.0 -netmask 255.255.255.0 10.0.100.251
可以从netstat -rn中看到如下的信息。
10.10/24 10.0.100.251 UG 0 0 en4 - -
如果想删除这个动态路由,可以用如下的命令
#route delete 10.10.0.0 10.0.100.251
以下是增加静态路由与删除静态路由的一个例子,这次我们不针对网段,只是针对主机10.10.10.100,使用路由10.0.100.251。
#chdev -l inet0 -a route=”host,-hopcount,0,,,,,,10.10.10.100,10.0.100.251″
在netstat -rn可以看到如下信息
10.10.10.100 10.0.100.251 UGH 0 0 en4 - -
我们也可以使用如下命令删除该静态路由
#chdev -l inet0 -a delroute=”host,,10.10.10.100,10.0.100.251″
如果你想清空所有的路由表,或者是刷新路由表,可以使用如下命令。注意,此命令仅仅是刷新(其实是清空)当前路由表,并不清空ODM库中的静态路由,所以,写在ODM库中的静态路由在重起后会继续生效。
另外,不要轻易执行此命令,因为如果你是不同的网段连接到该机器,清空路由表可以立即断开你的网络连接。
#route -f
default 10.0.100.250 done
dbtest loopback done
#netstat -rn
Routing tables
Destination Gateway Flags Refs Use If Exp Groups
Route Tree for Protocol Family 2 (Internet):
10.0.100.0 10.0.100.150 UHSb 0 0 en0 - - - =>
10.0.100/24 10.0.100.150 U 2 2 en0 - - -
10.0.100.255 10.0.100.150 UHSb 0 3 en0 - - -
127/8 127.0.0.1 U 0 353 lo0 - - -
Route Tree for Protocol Family 24 (Internet v6):
::1 ::1 UH 0 0 lo0 - -
正确的使用路由可以减少网络跳转,甚至大大提高网络的访问速度。
我们先看看这个补丁的描述
Bug 5496862 AIX: Mandatory patch to use Oracle with IBM Technology Level 5 (5300-5)
Bug 5496862 IO READING PROBLEMS AFTER INSTALLING IBM TECHNOLOGY LEVEL 5 (5300-05)
影响的版本,基本上是跑在5305上所有的9i以及10g的版本都需要打这个补丁,而且是强制要求打这个补丁:
All Oracle 9i, 10gR1 and 10gR2 Database Customers running on AIX 5L V5.3
Technology Level 5 (TL 5300-05) must install an IBM
AIX fix and an Oracle Database patch to bring the OS and Database environments
to the correct levels.
以下是详细描述信息
This is a mandatory patch needed to use Oracle with
IBM Technology Level 5 (5300-05). Without it various
IO errors can be reported such as:
ORA-1115: IO error reading block from file ? (block # ?)
ORA-1110: data file #: name
ORA-27091: skgfqio: unable to queue I/O
ORA-27072: skgfdisp: I/O error
Bad header found during preparing block for write
Fractured block found during preparing block for write
DBW1: terminating instance due to error ORA-600: [kcbzpb_1]
以下是解决方法,需要aix的补丁以及Oracle的补丁,在新的5305版本中,aix补丁已经默认打进去了,如果还没有打进去,可能需要手工打一下。
Please follow these
steps:
For the IBM AIX fix :
After installing AIX 5.3 Technology Level 5, IBM recommends installing the fix for AIX
APAR IY89080. The fix is available now as an interim fix and will be included
in the TL5 Service Pack 1
which is scheduled for release later this month.
To obtain the interim fix,
1. Navigate to http://www14.software.ibm.com/webapp/set2/sas/f/aix.efixmgmt/fixes.html
2. Select the primary ifix location
3. Select the ifix for iy89080
To obtain the Service Pack (when available)
1. Navigate to http://www.ibm.com/servers/eserver/support/unixservers/aixfixes.html
2. Select AIX 5.3 under Fix Bundles
3. Select Service Pack 5300-05-01
For the Oracle fix :
1. Navigate to http://metalink.oracle.com/ and sign into MetaLink
2. Select the "Patches & Updates" tab
3. Select the "Simple Search" link and enter Patch Number 5496862, select
Platform AIX5L Based Systems (64-bit) and desired Oracle version
4. Proceed to download the desired patch.
Please, note that the patch is not available for all Oracle 9i, 10gR1 and 10gR2
releases yet.
If the patch is unavailable for your database version, please contact Oracle Support
for assistance.
在AIX操作系统中,用户可以配置多个EtherChannel(网卡绑定)。在AIX 5.2之前,我们要么只能选择active/active EtherChannel模式,要么,只能选择active/standby EtherChannel模式的绑定网卡。所以,AIX 5.2中引入了新的网卡后备模式,用户可以为整个EtherChannel指定一块备份网卡,当整个EtherChannel失效时,这块网卡会自动顶替EtherChannel的功能。这与AIX 5.2之前的EtherChannel网卡备份模式有很大区别,因此,在5.2以后可以出现更为复杂的复合网卡绑定模式。
一个EtherChannel中可以有2到8块网卡,一个AIX操作系统中可以配置多个EtherChannel。但要记住每个EtherChannel都是一个新的以太网接口,用户也许需要通过no命令调整ifsize参数的值来保证以太网卡和EtherChannel的总数不超过ifsize,ifsize的默认值是8。
您可以使用任何AIX系统支持的网卡来组建EtherChannel。但EtherChannel的同一个通道成员网卡必须连接到支持EtherChannel的交换机上,备用通道可以接入到另外一个交换机,用于主通道的失败接管。EtherChannel的所有成员网卡都应该设置成同样的速度和工作模式,如1000兆全双工。要用作EtherChannel成员的网卡不能配置IP地址,如果已经配置了,必须要在开始配置EtherChannel前删除这些配置。
在Aix5.2以后,我们看看三种典型的配置方式
1、双通道或者多通道的共同active模式,这个模式下,所有的网卡都处于active状态,也就是每个网卡都处于工作状态,他们共有一个IP地址与MAC地址,但是,所有网卡的目标必须在同一个交换机上,并且交换机的对应端口也要绑定。
这样做最大的好处就是,当其中一个网卡失效,或者一根网线失效的时候,不影响整个网络的工作,只有当所有的网卡通道失效的时候,网络才失效。而且,多个网卡的同时工作,可以增加网络带宽,不过,要注意,默认的分配方式是根据目标机器的Ip来分配使用哪个网卡,如果目标机器只有一台,不适合使用默认设置。这种模式下,最大的问题就是所有的网卡目标必须在同一个交换机上,并且绑定在一起,不能防止目标交换机故障。
2、active/standby模式,这样的模式下,一个网卡接到主交换机,一个网卡接到备用交换机,当active通道失效的时候,自动切换到standby通道,当主通道恢复正常的时候,再自动切换到主通道(这里是否切换回去,是可以配置的)。这种方式最大的好处就是可以防止交换机的故障。
3、复合式配置,在这种配置中,结合以上2种方式的优点。如一个3块网卡的环境中,我们可以把其中2片网卡配置成双active模式,以增加网络带宽以及网络的可靠性,另外一块网卡作为后备模式,接在另外一个交换机上,当前面2个网卡都失效,或者前面2个网卡接的交换机失效的时候,切换到后备网卡上。如图:
下面,我们介绍一下详细的步骤:
如果想绑定或者取消绑定,可以用smit etherchannel完成,如要绑定ent1与ent2则:。
#chdev -l en1 -a netaddr=” -a netmask=”
#chdev -l en2 -a netaddr=” -a netmask=”
#chdev -l en1 -a state=’detach’
#chdev -l en2 -a state=’detach’
注意:以上命令是必要的,子网卡先取消现有的IP地址,以及一定要处于detach状态,注意,如果通过en1或者en2连接到主机,操作以上的命令,你的网络可能马上就被中断了,所以,以上的操作建议通过其它网卡完成,或者在HMC上完成。然后,我们开始绑定
#smit etherchannel
选择
Add An EtherChannel / Link Aggregation
在这里选择网卡
EtherChannel / Link Aggregation Adapters ent1,ent2
回车执行:
Command: OK stdout: yes stderr: no
Before command completion, additional instructions may appear below.
ent4 Available
最后会提示新的网卡的生成,这个网卡就是可用的绑定过之后的网卡。可用lsattr查看其属性或者是lsdev -Cc adapter看所有网卡属性。
#lsattr -El ent4
adapter_names ent1,ent2 EtherChannel Adapters True
alt_addr 0x000000000000 Alternate EtherChannel Address True
auto_recovery yes Enable automatic recovery after failover True
backup_adapter NONE Adapter used when whole channel fails True
hash_mode default Determines how outgoing adapter is chosen True
mode standard EtherChannel mode of operation True
netaddr Address to ping True
num_retries 3 Times to retry ping before failing True
retry_time 1 Wait time (in seconds) between pings True
use_alt_addr no Enable Alternate EtherChannel Address True
use_jumbo_frame no Enable Gigabit Ethernet Jumbo Frames True
这样绑定的网卡是双通路的,就是说两个网卡都是处于活动状态,注意,这里还需要交换机配合才可以最终接通2块网卡,网络交换机的设置,可以联系你们的系统管理员。
我们也可以设置备用网卡,平常并不活动,处于备用接管状态,如果主通道发生问题,则切换到备用通道,这样的话,则可以接到两个不同的交换机上用于交换机冗余。
备用网卡就是上面的backup_adapter,可以通过
#smit chgethch
或者是
#smit etherchannel
选择
Change / Show Characteristics of an EtherChannel / Link Aggregation
再选择
Add Backup Adapter来完成。增加过后备网卡的绑定网卡,对比以上,将有如下的差别:
#lsattr -El ent4
adapter_names ent1,ent2 EtherChannel Adapters True
alt_addr 0x000000000000 Alternate EtherChannel Address True
auto_recovery yes Enable automatic recovery after failover True
backup_adapter ent3 Adapter used when whole channel fails True
hash_mode default Determines how outgoing adapter is chosen True
mode standard EtherChannel mode of operation True
netaddr Address to ping True
num_retries 3 Times to retry ping before failing True
retry_time 1 Wait time (in seconds) between pings True
use_alt_addr no Enable Alternate EtherChannel Address True
use_jumbo_frame no Enable Gigabit Ethernet Jumbo Frames True
至于网卡的工作状态,还可以通过netstat -v来查看,如:
#netstat -v ent4
ETHERNET STATISTICS (ent4) :
Device Type: EtherChannel
Hardware Address: 00:14:5e:b7:26:88
......
Number of adapters: 3
Active channel: primary channel
Operating mode: Standard mode
Hash mode: Destination IP address
......
ETHERNET STATISTICS (ent1) :
Link Status : Up
Media Speed Selected: Auto negotiation
Media Speed Running: 1000 Mbps Full Duplex
......
ETHERNET STATISTICS (ent2) :
Link Status : Up
Media Speed Selected: Auto negotiation
Media Speed Running: 1000 Mbps Full Duplex
......
Backup adapter - ent3:
======================
Link Status : Up
Media Speed Selected: Auto negotiation
Media Speed Running: 1000 Mbps Full Duplex
......
如果想取消绑定,则同样执行
#smit etherchannel
选择
Remove An EtherChannel / Link Aggregation
选择你需要取消的网卡,如上面的ent4,回车执行
Command: OK stdout: yes stderr: no
Before command completion, additional instructions may appear below.
ent4 deleted
如果得到以上的结果,表示绑定取消成功。成功的结果,可以通过lsdev -Cc adapter前后对比获得。
以前写了很多安装,以及LVM的东西,现在开始涉足网络了,准备把这些系列发展下去,做成一个完整的FAQ。
通过lsdev命令可以看到网卡的个数与类型
#lsdev -Cc adapter|grep ent
ent0 Available 08-08 10/100/1000 Base-TX PCI-X Adapter (14106902)
ent1 Available 0B-08 10/100/1000 Base-TX PCI-X Adapter (14106902)
ent2 Available EtherChannel / IEEE 802.3ad Link Aggregation
ent3 Available 0I-08 10/100/1000 Base-TX PCI-X Adapter (14106902)
如,从上面可以看到,en0/1/3是千兆网卡,而ent2则是绑定过的网卡(不是真实的网卡),这个就是EtherChannel (TM), 建立在802.3 快速以太网标准之上,提供了把多个以太网接口的带宽聚合起来的能力。IBM 在AIX上对 Cisco的 EtherChannel 的实现是,把2至4个物理接口(或适配器)定义为一个逻辑接口或通道。这个逻辑接口或通道对上层应用来讲就象是一个以太网接口。
如果想查看以上三个真实的网卡具体在哪个插槽上,可以用如下命令
#lsslot -c pci|grep ent
U5791.001.9180185-P1-C04 PCI-X capable, 64 bit, 133MHz slot ent0
U5791.001.9180185-P2-C02 PCI-X capable, 64 bit, 133MHz slot ent1
U5791.001.9180185-P2-C06 PCI-X capable, 64 bit, 133MHz slot ent3
其中,P1 表示第一个PCI笼子,P2表示第二个PCI笼子,C04,C02等则表示在该笼子中对应的是第几个糟位,编号从1开始。在590/595中,对应的背板位置则从左到右的顺序。而550等机型则可以看面板上的标签。
当然,如果想查看任意网卡的详细信息,可以使用lscfg命令,如
#lscfg -vl ent0
ent0 U5791.001.9180185-P1-C04-T1 10/100/1000 Base-TX PCI-X Adapter (14106902)
10/100/1000 Base-TX PCI-X Adapter:
Part Number.................00P6130
FRU Number..................00P6130
EC Level....................H12818
Manufacture ID..............YL1021
Network Address.............001125081671
ROM Level (alterable).......GOL021
Device Specific.(YL)........U5791.001.9180185-P1-C04-T1
上面详细的限制了网卡的位置,速度类型,型号,网络地址等详细信息。
查看网卡的工作模式,可以用如下命令
#netstat -v ent3 | grep -p “Specific Statistics”
10/100/1000 Base-TX PCI-X Adapter (14106902) Specific Statistics:
--------------------------------------------------------------------
Link Status: Up
Media Speed Selected: Auto negotiation
Media Speed Running: 1000 Mbps Full Duplex
PCI Mode: PCI-X (100-133)
PCI Bus Width: 64-bit
……
可以看到红色字体上显示的1000全双工,如果是千兆网卡,则表示网卡工作正常。全双工表示同时发送与接收包,而半双工需要分成两次完成,所以半双工将有很大的性能损耗,如果是连接到交换机,必须要求这里是全双工。
查看网卡的IP可以用ifconfig或者是netstat,如
#ifconfig -a
en3: flags=5e080863,c0
inet 192.168.166.151 netmask 0xffffff00 broadcast 192.168.166.255
tcp_sendspace 131072 tcp_recvspace 65536
en2: flags=4e080863,c0
inet 192.168.167.151 netmask 0xffffff00 broadcast 192.168.167.255
inet 192.168.168.151 netmask 0xffffff00 broadcast 192.168.168.255
tcp_sendspace 131072 tcp_recvspace 65536
lo0: flags=e08084b
inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
inet6 ::1/0
tcp_sendspace 65536 tcp_recvspace 65536
#netstat -in
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
en3 1500 link#2 0.11.25.8.4a.b6 5906447 0 2316411 4 0
en3 1500 192.168.166 192.168.166.151 5906447 0 2316411 4 0
en2 1500 link#3 0.11.25.8.4b.55 1343342735 0 3557846711 3 0
en2 1500 192.168.167 192.168.167.151 1343342735 0 3557846711 3 0
en2 1500 192.168.168 192.168.168.151 1343342735 0 3557846711 3 0
lo0 16896 link#1 1057732 0 1071241 0 0
lo0 16896 127 127.0.0.1 1057732 0 1071241 0 0
lo0 16896 ::1 1057732 0 1071241 0 0
注意,以上的是en2,en3,这里需要说明的是,ent0其实可以分成en0与et0,分别代表以太网第二版与IEEE 802.3接口。
详细属性同样可以通过如下命令查看
#lsattr -El ent0
#lsattr -El en0
#lsattr -El et0
如果想给网卡配置IP地址,可以用smit chinet或者
#chdev -l en1 -a netaddr=’10.0.100.151′ -a netmask=’255.255.255.0′
取消IP地址
#chdev -l en1 -a netaddr=” -a netmask=”
第一次操作,可以用smit tcpip来完成配置工作更简单一些
#smit tcpip
选择Minimum Configuration & Startup
如果想修改网卡的工作模式,可以用如下步骤完成
#chdev -l en1 -a state=’down’
#chdev -l en1 -a state=’detach’
#chdev -l ‘ent1′ -a media_speed=’Auto_Negotiation’
#chdev -l en1 -a state=’up’
其中停止与启动网卡可以用smit chinet代替,修改工作模式可以用smit chgenet代替完成。
下一篇aix的文章,将解释绑定网卡技术
管理过多的文件
用户的某个目录下有非常多的文件,当用户使用ls列示所有文件或使用mv * 命令想把所有文件移至另一目录时,系统报错,相应操作无法进行。错误信息为:”Arguments too long”或”Array list too long”。
该错误的产生是由于/usr/include/sys/limits.h文件中ARG_MAX参数对应值的限制,最大值为24576,并且无法改变此限制。因此当某目录下的文件数超过24576时,可以使用下面的命令列示、删除或移动所有的文件:
1. 列示文件:
#find
-name “*” | xargs ls -l
2. 删除文件,如:
#find ./ -name “*.log” -mtime +1|xargs [-n1] rm
or(注意,xargs后面是大写的i)
# find ./ -name “*.log” -mtime +1|xargs -I{} rm {}
or移动所有文件至目标目录:
#find -name “*” | xargs -I{} mv {} destinationdir
批量更新文件
有的时候,我们需要批量的更新所有的文件,但是shell中一个语句一般实现不了这样的要求,我们可以采用perl帮忙,如更新所有文件内容
perl -e ’s#\/u01\/data_archvie#\/u02\/logs\/admin#i’ -pi.bak `(find . -type f )`
这里-e的部分表示更新,#是分界符,-pi表示产生对应的备份文件
其中,find是可以根据自己的需要扩展的。
补充测试
就第一个问题,很多平台上都有这样的情况的,如linux,其他unix等,不过linux可以很方便的修改之后重新编译内核。我在5.3上做了一个测试,看样子有些东西与以前有差别了,现在ls是不会报这样的错误,起码在10万个文件的时候还没有报,同样,find -exec的方法也是可以的了。
- i=1
- while (($i<=100000))
- do
- touch test$i.log
- i=$(($i + 1))
- done
#ls -l|wc
100000 940953 7555769
rm是报错的,而且,这个错误从#define ARG_MAX 24576这个定义的值就开始报了,如果修改这个值,肯定是要重新编译内核的了。
#rm *.log
ksh: /usr/bin/rm: 0403-027 The parameter list is too long.
mv同样是报错的
#mv *.log tmp/
ksh: /usr/bin/mv: 0403-027 The parameter list is too long.
现在,find -exec方法也是可以的,除了rm可以使用这个方法,mv也可以使用-exec的方法
#find . -name “*.log” -exec rm {} \;
删除成功
Aix 5L的文件系统主要有jfs与jfs2两种,jfs2是增强型的jfs文件系统,从AIX 5.3以后开始为默认文件系统,对64bit支持比较好,而且默认支持大文件。
可以用lsfs来查看文件系统,如
#lsfs -q /u01
Name Nodename Mount Pt VFS Size Options Auto Accounting
/dev/lv00 -- /u01 jfs 524288 rw yes no
(lv size: 524288, fs size: 524288, frag size: 4096, nbpi: 4096, compress: no,
bf: true, ag: 64)
这里展示了一个支持大文件的jfs文件系统
创建文件系统的时候,可以先创建lv再创建文件,也可以直接创建文件系统,但是如果直接创建文件系统的话,OS也会创建一个lv00/lv01这样类似的lv,为了管理方便,一般建议采用先创建lv,再创建文件系统,如创建一个jfs2的文件系统。
1、创建lv
#mklv -y’lv_u02′ -t’jfs2′ datavg 10 hdisk2
lv_u02
以上操作也可以采用smit mklv来完成
2、在该lv上创建jfs2文件系统
#crfs -v jfs2 -d’lv_u02′ -m’/u02′ -A’yes’ -p’rw’ -a agblksize=’4096′
File system created successfully.
2621156 kilobytes total disk space.
New File System size is 5242880
其中-d是lv名称,-m是mount点,-A是表示系统启动的时候自动挂载,-p表示权限,-a之后的表示块尺寸。
以上操作建议采用smit crfs操作,如
#smit crfs
选择Add an Enhanced Journaled File System
选择Add an Enhanced Journaled File System on a Previously Defined Logical Volume
填写LV名称,mount点,是否自动挂装,注意,如果是HA的共享文件系统,需要由HA挂装的文件系统,则不要自动挂装。
3、查看
#lsfs -q /u02
Name Nodename Mount Pt VFS Size Options Auto Accounting
/dev/lv_u02 -- /u02 jfs2 5242880 rw yes no
(lv size: 5242880, fs size: 5242880, block size: 4096, sparse files: yes,
inline log: no,inline log size: 0, reserved: 0, reserved: 0, DMAPI: no)
如果想删除文件系统,可以用rmfs命令操作,注意删除之前先umount这个文件系统,这个命令会删除文件系统所在的lv,但是如果直接删除lv,则不会删除上面存在的文件系统(其实文件系统已经没有了,但是文件系统的信息依然存在于OS中)。
#rmfs -r /u02
rmlv: Logical volume lv_u02 is removed.
如上面的操作将删除lv_u02,-r参数表示连mount点一起删除。以上操作也可以使用smit rmfs来完成。
不管是jfs还是jfs2,都可以增加文件系统的大小,如
#chfs -a size=’3000M’ /u02
Filesystem size changed to 6291456
或者使用smit chfs来操作
注:在5.3系统上运行的jfs2文件系统,可以减少尺寸。
可以采用mount与umount来挂装与卸载文件系统
#mount /u02
对于挂装的文件系统,可以用df来查看其大小及使用
#df -g /u02
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/lv_u02 3.00 3.00 1% 4 1% /u02
如果有用户或程序在一个文件系统中活动,就无法拆卸(umount)这个文件系统,当使用umount命令时,会提示下面的错误:
Device busy 或者 A device is already mounted or cannot be unmounted
例如由于安装程序的异常终止或其它原因经常会遇到不能正常umount光驱(光驱是CDROM文件系统)的问题,当用户umount光盘驱动器时就产生错误0514-062: 指定的设备忙。
遇到这样的情况,先检查用户自己的当前工作目录是否在这个文件系统中,如果是,则用cd /命令使当前工作目录回到根目录,然后再试着拆卸文件系统;另外检查该文件系统下是否挂有子文件系统,如果有,先umount子文件系统。
如果还是不能umount文件系统,可能在文件系统有文件正在被打开使用,因此在umount文件系统之前应该关闭这些文件。有时候可能还有一些进程在使用这个文件系统的资源,可以使用fuser命令来检查有那些进程仍然在这个文件系统中活动。fuser命令将显示在这个文件系统中正在活动的所有进程ID号。下面就fuser命令使用的例子:
#fuser /dev/cd
/dev/cd: 2910 3466
然后用kill命令将这些正在活动的进程杀死,然后再试着拆卸文件系统。例如:
#kill -9 2910 3466
如果使用fuser -u /dev/cd将在进程号后指出用户名。如果root用户用fuser -k /dev/cd命令,则给这些进程发出SIGKILL信号,来杀死这些进程,类似以上的2个过程的合并。