﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Prayer-随笔分类-系统、备份等</title><link>http://www.cppblog.com/prayer/category/11433.html</link><description>在一般中寻求卓越</description><language>zh-cn</language><lastBuildDate>Thu, 21 Mar 2019 07:37:17 GMT</lastBuildDate><pubDate>Thu, 21 Mar 2019 07:37:17 GMT</pubDate><ttl>60</ttl><item><title>Linux中索引节点的介绍</title><link>http://www.cppblog.com/prayer/archive/2012/01/06/163725.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Fri, 06 Jan 2012 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2012/01/06/163725.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/163725.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2012/01/06/163725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/163725.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/163725.html</trackback:ping><description><![CDATA[<div>1、用ls -i命令来查看文件系统对象的索引节点号</div>
<div>&nbsp;<wbr> $ ls -i /usr</div>
<div>&nbsp;<wbr>558145 bin&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 607393 games&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 2429605 kerberos&nbsp;<wbr>&nbsp;<wbr> 705889 local&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 131329 share&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 32833 X11R6&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>574561 dict&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 623809 include&nbsp;<wbr>&nbsp;<wbr> 640225 lib&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>1346113 src&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>590977 etc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr> 673573 java&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 689473 libexec&nbsp;<wbr>213409 sbin&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 12 tmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 11 lost+found</div>
<div>&nbsp;<wbr></div>
<div>2、文件系统的每个对象都分配到一个独一无二的索引节点号。</div>
<div>&nbsp;<wbr></div>
<div>3、用ls -dl命令看到索引节点被引用的次数</div>
<div>&nbsp;<wbr> $ ls -dl /usr/local</div>
<div>drwxr-xr-x&nbsp;<wbr>&nbsp;<wbr> 12 root&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> root&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 4096 Dec&nbsp;<wbr> 7&nbsp;<wbr> 2005 /usr/local</div>
<div>&nbsp;<wbr> 其中12表示被引用了12次。</div>
<div>&nbsp;<wbr></div>
<div>4、创建所有缺少的父目录</div>
<div>&nbsp;<wbr> $ mkdir -p $ORALCE_BASE/admin/$ORACLE_ADMIN/bdump</div>
<div>&nbsp;<wbr></div>
<div>5、创建空文件</div>
<div>&nbsp;<wbr> $ touch junli.log</div>
<div>&nbsp;<wbr></div>
<div>6、硬链接和符号链接</div>
<div>&nbsp;<wbr>&nbsp;<wbr>$ ln firstlink secondlink</div>
<div>&nbsp;<wbr> $ ln -s firstlink secondlink</div>
<div>&nbsp;<wbr></div>
<div>&nbsp;<wbr> 一个给定的索引节点可以有任意数目的硬链接，该索引节点一直存在于文件系统，直到所有的链接消失。硬链接不能跨越文件系统。</div>
<div>&nbsp;<wbr>&nbsp;<wbr>符号链接是一种专门的文件系统，链接通过名称引用另一个文件，而不是直接引用索引节点。符号链接不阻止文件被删除，如果目标文件消失，那么符号链接仅仅不可用。</div>
<div>&nbsp;<wbr> 符号链接比硬链接更灵活，可以给任何类型的文件对象（包括目录）符号链接。又因为符号链接的实现是基于路径的（而不是索引节点），所以创建指向另一个文件系统上的对象的符号链接是完全可行的。 
<div></div>
<div>&nbsp;</div><wbr></div><img src ="http://www.cppblog.com/prayer/aggbug/163725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2012-01-06 16:01 <a href="http://www.cppblog.com/prayer/archive/2012/01/06/163725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX Paging Space</title><link>http://www.cppblog.com/prayer/archive/2011/12/02/161325.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Fri, 02 Dec 2011 07:39:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2011/12/02/161325.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/161325.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2011/12/02/161325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/161325.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/161325.html</trackback:ping><description><![CDATA[<p><span class="postbody"><font size="2">我们知道在AIX操作系统中，Paging Space是一项很重要的设备，AIX kernel（内 核）需要利用 Paging Space 来管理虚拟内存。和内存页面一样，AIX的 Paging Space也是以4KB为单位，当实际内存数的空闲值低于一定数量以后，系统需要把 实际内存中的某些计算页面（Computation Page）写回到Paging Space中（page out），以便释放出实际内存页面用于其他程序。在AIX 4.3.2及以后版本中，操作系统提供了3种 Paging Space的管理机制。分别为： <br />Early Page Space Allocation (EPSA) <br />Late Page Space Allocation (LPSA) <br />Deferred Page Space Allocation (DPSA) <br />Early Page Space Allocation </font></span></p>
<p><span class="postbody"></span></p><br /><font size="2">在AIX系统中，当Paging Space的使用率达到一定百分比时，系统就无法将需要 page out的页面写到Paging Space中，这时候，该进程就很可能被杀掉。为了避免 这种情况的发生，EPSA机制会保证当进程被启动时，在Paging Space中先申请一 页面空间，该空间大小与该进程所需要占用的实际内存的大小一致 （将环境变量 PSALLOC设为early，也就是&#8220;export PSALLOC=early&#8221;）。这样就保证当进程使 用malloc()调用的同时，在Paging Space中有相应的空间保留给该进程，从而保 证该进程的page out 操作。 <br />这种机制虽然可以保证现有的进程安全，但由于很多被保留的页面空间并没有被用 到，造成了非常大的空间浪费。同时，也需要Paging Space的大小比实际内存值要大很多。 <br />Late Page Space Allocation <br />在AIX 4.2.1之后， 4.3.2之前，操作系统默认使用 LPSA 机制。这种机制是指当进程 启动后，系统并不在Paging Space中为该进程保留相应的页面。只有当该进程的实 际内存页面被修改过后，才会在Paging Space中为这些被修改过的页面申请空间。 <br />这种机制在一定程度上减少了Paging Space的空间浪费，但是对系统也存在一定的 风险。比如，当一些后起的进程用了几乎全部的Paging Space后，由于先起的进程 并没有保留足够的Paging Space空间用于进程的page out操作，会导致该进程被杀掉。 <br />Deferred Page Space Allocation <br />在AIX4.3.2之后，DPSA是系统默认的Paging Space的管理机制。在这种机制下，系 统不会为进程保留任何的 page 页面，直到系统确认确实需要将内存中的页面 page out 到Paging Space中，才会把Paging Space的页面分配给该进程。这种机制不会 造成Paging Space的空间浪费，但和LPSA一样，这种机制也给系统带来了相同的 风险。 <br />DPSA是AIX 432及以后版本中所使用的默认机制，它通常适用于配有很大容量RAM 的系统，因为它可以减少很多Paging Space资源的浪费。 <br />对于RAM容量不是很大（比如小于2GB）的系统，用户可以采用LPSA或EPSA机 制。用 &#8220;/usr/samples/kernel/vmtune -d 0&#8221; 命令可以停止使用DPSA，而使用LPSA。 用 &#8220;/usr/samples/kernel/vmtune -d 0&#8221; 命令加上&#8220;export PSALLOC=early&#8221;命令可以停止使用DPSA，而使用EPSA。 <br />用 &#8220;/usr/samples/kernel/vmtune -d 1&#8221; 命令可以激活DPSA。 <br />Paging Space的页面释放 <br />在AIX操作系统中，当内存中的页面被page到了Paging Space中以后，那么这一块 Paging Space的页面空间将被保留给该内存页面，即使该页面已经被写回到内存 中。因此，用lsps命令看到的Paging Space的使用率可能并不能真实反映真正位于 <br />Paging Space 中的页面数，因为有些页面可能已经写回到了内存中。 <br />如果写回到内存中的页面是线程的工作存储页面（Working Storage)，那么随着该线 程的退出或者是相关的内存被释放 -- free()，Paging Space中的相应页面块也才会 释放。</font> <img src ="http://www.cppblog.com/prayer/aggbug/161325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2011-12-02 15:39 <a href="http://www.cppblog.com/prayer/archive/2011/12/02/161325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX如何查看文件系统分布在哪个物理磁盘上 </title><link>http://www.cppblog.com/prayer/archive/2011/12/02/161322.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Fri, 02 Dec 2011 05:20:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2011/12/02/161322.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/161322.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2011/12/02/161322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/161322.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/161322.html</trackback:ping><description><![CDATA[<a href="http://cuiyingfeng.blog.51cto.com/43841/49706">http://cuiyingfeng.blog.51cto.com/43841/49706</a><br /><br />
<div class="showTags">标签：<a class="operlink" href="http://blog.51cto.com/tagindex.php?keyword=%C3%FC%C1%EE" target="_blank"><font color="#015f91">命令</font></a> <a class="operlink" href="http://blog.51cto.com/tagindex.php?keyword=%C4%DA%B4%E6" target="_blank"><font color="#015f91">内存</font></a> <a class="operlink" href="http://blog.51cto.com/tagindex.php?keyword=aix" target="_blank"><font color="#015f91">aix</font></a> </div>
<div class="CopyrightStatement lh22">原创作品，允许转载，转载时请务必以超链接形式标明文章 <a style="text-decoration: underline" href="http://cuiyingfeng.blog.51cto.com/43841/49706" target="_blank"><font color="#015f91">原始出处</font></a> 、作者信息和本声明。否则将追究法律责任。<a href="http://cuiyingfeng.blog.51cto.com/43841/49706"><font color="#015f91">http://cuiyingfeng.blog.51cto.com/43841/49706</font></a> </div><!--正文 begin-->

<div class="showContent">
<div><font size="4"><span lang="EN-US">1</span>、</font><span lang="EN-US"><br /><font size="4"><span class="41"># </span><span class="51"><font color="#ff0000">lsdev -Cc memory</font></span> <br /></font></span><font size="4">查看配置的物理内存设备，下面为其输出示例：</font><span lang="EN-US"><br /><span class="41"><font color="#0000ff" size="4">L2cache0 Available L2 Cache</font></span><span><br /><span class="41"><font color="#0000ff" size="4">mem0 Available Memory</font></span></span><br /><font size="4"><span class="41"># </span><span class="51"><font color="#ff0000">lsattr -El mem0</font></span> <br /></font></span><font size="4">输出类似如下所示：</font><span lang="EN-US"><font size="4"> <br /><span class="41"><font color="#0000ff">goodsize 7936 Amount of usable physical memory in Mbytes False</font></span></font><span><br /><span class="41"><font color="#0000ff" size="4">size 7936 Total amount of physical memory in Mbytes False</font></span></span><br /></span><font size="4">此例说明机器的物理内存为<span lang="EN-US">5888MB</span>。如果前面<span lang="EN-US">lsdev</span>的输出中有设备名<span lang="EN-US"> mem1</span>，则使用同样的命令查看其对应的大小并依此类推。</font></div>
<div><font size="4"><span lang="EN-US">2</span>、</font><br /><font size="4"># </font><font color="#ff0000"><font size="4"><span class="51">bootinfo -r</span><br /></font></font><font color="#0000ff"><font size="4"><span class="41">8126464</span><br /></font></font></span><font size="4">此例说明机器的物理内存为<span class="61"><span lang="EN-US">8126464kB</span></span>。</font></div>
<div><span lang="EN-US"><font size="4"></font></span>&nbsp;</div>
<div><font size="4"><span lang="EN-US">3</span>、</font><span lang="EN-US"><br /><font size="4"># </font><font color="#ff0000"><font size="4"><span class="51">prtconf</span><br /></font></font></span><font size="4">输出类似下面所示：</font><span lang="EN-US"><br /><span class="41"><font color="#0000ff" size="4">----</font></span><span><br /><font color="#0000ff"><font size="4"><span class="41">----</span><br /><span class="41">Memory Size: 7936 MB</span><br /><span class="41">----</span><br /><span class="41">---- </span></font></font></span><br /></span><font size="4">本命令会打出当前主机的详细配置信息，输出中有<span lang="EN-US">Memory Size</span>属性，指示其当前物理内存大小</font></div>
<div><span lang="EN-US"><font size="4"></font></span>&nbsp;</div>
<div><font size="4"><span lang="EN-US">4</span>、</font><span lang="EN-US"><br /><font size="4"># <span class="51"><font color="#ff0000">svmon -G</font> </span><br /></font></span><font size="4">输出类似下面所示：</font><span lang="EN-US"><br /><span class="41"><font color="#0000ff" size="4">size inuse free pin virtual</font></span><span><br /><font color="#0000ff"><font size="4"><span class="41">memory 2031616 1474504 557112 210251 440972</span><br /><span class="41">pg space 131072 1555</span></font></font></span></span></div>
<div class="4"><span lang="EN-US"><font color="#0000ff" size="4">work pers clnt<br />pin 210251 0 0<br />in use 440972 0 1033532</font></span></div>
<div class="4"><font size="4"><span lang="EN-US"><font color="#0000ff">PageSize PoolSize inuse pgsp pin virtual<br />s 4 KB - 1426984 1555 187531 393452<br />m 64 KB - 2970 0 1420 2970<br /></font></span><span class="61">其中：<span lang="EN-US">size</span>表示真实的物理内存的大小，单位是<span lang="EN-US">4k.</span>因此当前物理内存大小为<span lang="EN-US">4k*2031616=8126464kB</span></span></font></div>
<div class="4"><span lang="EN-US"><font size="4"></font></span>&nbsp;</div><font size="4"><span mso-bidi-language:="" mso-fareast-language:="" mso-ansi-language:="" mso-hansi-font-family:="" mso-ascii-font-family:="" ar-sa=""  zh-cn;="" en-us;="" ;="" roman="" new="" times="">以上命令在</span><span lang="EN-US" mso-bidi-language:="" mso-fareast-language:="" mso-ansi-language:="" ar-sa=""  zh-cn;="" en-us;="" ;="" roman="" new="" times="" mso-fareast-font-family:=""  1.0pt;="" mso-font-kerning:=""  12.0pt;="" mso-bidi-font-size:=""  宋体;="">Aix5.3</span><span mso-bidi-language:="" mso-fareast-language:="" mso-ansi-language:="" mso-hansi-font-family:="" mso-ascii-font-family:="" ar-sa=""  zh-cn;="" en-us;="" ;="" roman="" new="" times="">版本实验通过</span></font> 
<p>本文出自 &#8220;<a href="http://cuiyingfeng.blog.51cto.com/"><font color="#015f91">崔莹峰</font></a>&#8221; 博客，请务必保留此出处<a href="http://cuiyingfeng.blog.51cto.com/43841/49706"><font color="#015f91">http://cuiyingfeng.blog.51cto.com/43841/49706</font></a></p></div><img src ="http://www.cppblog.com/prayer/aggbug/161322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2011-12-02 13:20 <a href="http://www.cppblog.com/prayer/archive/2011/12/02/161322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Nginx+PHP+MySQL双机互备、全自动切换方案</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93248.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 12:34:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93248.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93248.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93248.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93248.html</trackback:ping><description><![CDATA[<p>在生产应用中，某台&#8220;Nginx+PHP+MySQL&#8221;接口数据服务器，扮演的角色十分重要，如果服务器硬件或Nginx、MySQL发生故障，而短时间内无法恢复，后果将非常严重。为了避免单点故障，我设计了此套方案，编写了failover.sh脚本，实现了双机互备、全自动切换，故障转移时间只需几十秒。 <br>　　一、双机互备、全自动切换方案：<br>　　1、拓扑图：</p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 2、解释：<br>　　(1)、假设外网域名blog.s135.com解析到外网虚拟IP 72.249.146.214上，内网hosts设置db10对应内网虚拟IP 192.168.146.214</p>
<p>　　(2)、默认情况下，由主机绑定内、外网虚拟IP，备机作为备份，当主机的MySQL、Nginx或服务器出现故障无法访问时，备机会自动接管内、外网虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2&gt;&amp;1 &gt; /dev/null &amp;</p>
<p>　　(3)、主机和备机上的MySQL服务器互为主从，互相同步。在主机处于活动状态（即由主机绑定虚拟IP）时，读写主机的MySQL，写到主机的数据会同步到备机；在备机处于活动状态时，读写备机的MySQL，写到备机的数据会同步到主机（如果主机上的MySQL死掉暂时无法同步，主机上的MySQL恢复后，数据会自动从备机上同步过来，反之亦然）。</p>
<p>　　(4)、主机处于活动状态时，每20秒会把/data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc/（php.ini等配置文件目录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录下的文件通过rsync推送到备机服务器上的对应目录（增量推送，两台服务器上一样的文件不会重复推送），反之如果备机处于活动状态时，每20秒会尝试把文件推送到主机。rsync的配置文件见两台服务器的/etc/rsyncd.conf，rsync守护进程的启动命令为rsync --daemon</p>
<p>3、自动切换流程<br>　　(1)、主机默认绑定内、外网虚拟IP，当主机的MySQL、Nginx无法访问或服务器宕机，主机上的failover.sh守护进程会自动摘除自己绑定的内、外网虚拟IP（如果主机上的failover.sh死掉，无法摘除自己绑定的虚拟IP也没关系），备机上的failover.sh守护进程会自动接管备机原来绑定的内、外网虚拟IP，并发送ARPing包给内、外网网关更新MAC，强行接管。</p>
<p>　　(2)、备机绑定虚拟IP后，会发送ARPing包给内、外网网关，通知网关更新虚拟IP的MAC地址为备机的MAC地址，从而保证了切换后能够通过虚拟IP及时访问到备机。</p>
<p>　　(3)、如果主机的MySQL、Nginx启动起来，全部恢复正常访问，主机上的failover.sh守护进程会检测主机上的MySQL数据是否已经完全从备机上同步过来。如果同步延迟时间为0，主机会自动接管内、外网虚拟IP，并发送ARPing包给内、外网网关，而备机也会自动摘除内、外网虚拟IP。</p>
<p>　　(4)、整个切换流程均由failover.sh自动完成，无需人工处理。</p>
<p>　　4、注意事项（很重要）：<br>　　(1)、crontab里的文件没有做自动同步，如果修改，需要手工在两台服务器上都做修改。</p>
<p>　　(2)、/data0/htdocs/目录内任何用ln -s建立的软连接，rsync不会自动同步，如果在一台服务器上建了软连接，需要手工在另外一台服务器上也建相同的软连接。</p>
<p>　　(3)、如果要删除/data0/htdocs/目录内的某些文件或目录，需要先删除处于活动状态（即绑定了虚拟IP）服务器上的文件或目录，再删除处于备用状态服务器上的文件或目录。</p>
<p>　　(4)、除了/data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc/（php.ini等配置文件目录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录之外的其他配置修改，需要在两台服务器上都做修改。</p>
<p>&nbsp;<br>&nbsp;&nbsp;&nbsp; 二、配置文档与脚本：<br>　　1、主机、备机两台服务器的rsync配置（配置相同）<br>　　(1)、rsync配置文件 </p>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp; vi /etc/rsyncd.conf <br>&nbsp;&nbsp;&nbsp; <br>　　输入一些内容并保存：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>uid = root<br>gid = root<br>use chroot = no<br>max connections = 20<br>pid file = /var/run/rsyncd.pid<br>lock file = /var/run/rsync.lock<br>log file = /var/log/rsyncd.log</p>
<p>[data0_htdocs]<br>path = /data0/htdocs/<br>ignore errors<br>read only = no<br>hosts allow = 192.168.146.0/24<br>hosts deny = 0.0.0.0/32</p>
<p>[php_etc]<br>path = /usr/local/webserver/php/etc/<br>ignore errors<br>read only = no<br>hosts allow = 192.168.146.0/24<br>hosts deny = 0.0.0.0/32</p>
<p>[nginx_conf]<br>path = /usr/local/webserver/nginx/conf/<br>ignore errors<br>read only = no<br>hosts allow = 192.168.146.0/24<br>hosts deny = 0.0.0.0/32 </p>
<p>&nbsp;&nbsp;&nbsp; <br>　　(2)、启动rsync守护进程</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;/usr/bin/rsync --daemon </p>
<p><br>　2、两台MySQL互为主从的配置<br>　　这里就不详细写出互为主从的配置过程了，如果不懂的朋友可以在Google上搜一下。有一点需要指出，my.cnf配置文件中请加上skip-name-resolve参数，使用IP来进行MySQL帐号验证。 </p>
<p>　　3、主机、备机两台服务器负载监控、虚拟IP自动切换的failover.sh守护进程<br>　　(1)、启动failover.sh守护进程（为了开机能够自动运行，请将以下语句添加到/etc/rc.local文件中）：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; /usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2&gt;&amp;1 &gt; /dev/null &amp; </p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; (2)、停止failover.sh守护进程：<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; ps -ef | grep failover.sh </p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 会显示以下信息：</p>
<p>&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; 15428&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; 0 Nov17 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:03 /bin/sh /usr/local/webserver/failover/failover.sh<br>　　root&nbsp;&nbsp;&nbsp;&nbsp; 20123&nbsp; 6878&nbsp; 0 16:16 pts/2&nbsp;&nbsp;&nbsp; 00:00:00 grep failover.sh<br>　　然后杀死failover.sh的进程：</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;kill -9 15428 </p>
<p><br>(3)、failover.sh代码内容（请注意其中的type设置，主机设为master，备机设为slave）：<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>#!/bin/sh<br>LANG=C<br>date=$(date -d "today" +"%Y-%m-%d %H:%M:%S")</p>
<p>#---------------配置信息(开始)---------------<br>#类型：主机设为master，备机设为slave<br>type="master"</p>
<p>#主机、备机切换日志路径<br>logfile="/var/log/failover.log"</p>
<p>#MySQL可执行文件地址，例如/usr/local/mysql/bin/mysql；MySQL用户名；密码；端口<br>mysql_bin="/usr/local/webserver/mysql/bin/mysql"<br>mysql_username="root"<br>mysql_password="123456"<br>mysql_port="3306"</p>
<p>#内网网关<br>gateway_eth0="192.168.146.1"</p>
<p>#主机内网真实IP<br>rip_eth0_master="192.168.146.213"</p>
<p>#备机内网真实IP<br>rip_eth0_slave="192.168.146.215"</p>
<p>#主机、备机内网共用的虚拟IP<br>vip_eth0_share="192.168.113.214"</p>
<p><br>#外网网关<br>gateway_eth1="72.249.146.193"</p>
<p>#主机外网真实IP<br>rip_eth1_master="72.249.146.213"</p>
<p>#备机外网真实IP<br>rip_eth1_slave="72.249.146.215"</p>
<p>#主机、备机外网共用的虚拟IP<br>vip_eth1_share="72.249.146.214"<br>#---------------配置信息(结束)---------------</p>
<p>#绑定内、外网虚拟IP<br>function_bind_vip()<br>{<br>&nbsp;&nbsp; /sbin/ifconfig eth0:vip ${vip_eth0_share} broadcast ${vip_eth0_share} netmask 255.255.255.255 up<br>&nbsp;&nbsp; /sbin/route add -host ${vip_eth0_share} dev eth0:vip<br>&nbsp;&nbsp; /sbin/ifconfig eth1:vip ${vip_eth1_share} broadcast ${vip_eth1_share} netmask 255.255.255.255 up<br>&nbsp;&nbsp; /sbin/route add -host ${vip_eth1_share} dev eth1:vip<br>&nbsp;&nbsp; /usr/local/webserver/php/sbin/php-fpm reload<br>&nbsp;&nbsp; kill -USR1 `cat /usr/local/webserver/nginx/logs/nginx.pid`<br>&nbsp;&nbsp; /sbin/service crond start<br>}</p>
<p>#解除内、外网虚拟IP<br>function_remove_vip()<br>{<br>&nbsp;&nbsp; /sbin/ifconfig eth0:vip ${vip_eth0_share} broadcast ${vip_eth0_share} netmask 255.255.255.255 down<br>&nbsp;&nbsp; /sbin/ifconfig eth1:vip ${vip_eth1_share} broadcast ${vip_eth1_share} netmask 255.255.255.255 down<br>&nbsp;&nbsp; /sbin/service crond stop<br>}</p>
<p>#主机向备机推送文件的函数<br>function_rsync_master_to_slave()<br>{<br>&nbsp;&nbsp; /usr/bin/rsync -zrtuog /data0/htdocs/ ${rip_eth0_slave}::data0_htdocs/ &gt; /dev/null 2&gt;&amp;1<br>&nbsp;&nbsp; /usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ ${rip_eth0_slave}::php_etc/ &gt; /dev/null 2&gt;&amp;1<br>&nbsp;&nbsp; /usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ ${rip_eth0_slave}::nginx_conf/ &gt; /dev/null 2&gt;&amp;1<br>}</p>
<p>#备机向主机推送文件的函数<br>function_rsync_slave_to_master()<br>{<br>&nbsp;&nbsp; /usr/bin/rsync -zrtuog /data0/htdocs/ ${rip_eth0_master}::data0_htdocs/ &gt; /dev/null 2&gt;&amp;1<br>&nbsp;&nbsp; /usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ ${rip_eth0_master}::php_etc/ &gt; /dev/null 2&gt;&amp;1<br>&nbsp;&nbsp; /usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ ${rip_eth0_master}::nginx_conf/ &gt; /dev/null 2&gt;&amp;1<br>}</p>
<p>#虚拟IP ARPing<br>function_vip_arping()<br>{<br>&nbsp;/sbin/arping -I eth0 -c 3 -s ${vip_eth0_share} ${gateway_eth0} &gt; /dev/null 2&gt;&amp;1<br>&nbsp;/sbin/arping -I eth1 -c 3 -s ${vip_eth1_share} ${gateway_eth1} &gt; /dev/null 2&gt;&amp;1&nbsp; <br>}</p>
<p>while true<br>do<br>&nbsp;&nbsp; #用HTTP协议检查虚拟IP<br>&nbsp;&nbsp; if (curl -m 30 -G <a href="http://$%7bvip_eth1_share%7d/">http://${vip_eth1_share}/</a> &gt; /dev/null 2&gt;&amp;1) &amp;&amp; (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${vip_eth0_share}" -e"show slave status\G" &gt; /dev/null 2&gt;&amp;1)<br>&nbsp;&nbsp; then<br>&nbsp;&nbsp; #取得与内网VIP绑定的服务器内网IP<br>&nbsp;&nbsp; eth0_active_server=$(${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${vip_eth0_share}" -e"show slave status\G" &#124; grep "Master_Host" &#124; awk -F ': ' '{printf $2}')<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; #如果内网VIP=主机内网IP（主机MySQL中的Master_Host显示的是备机的域名或IP），且本机为主机<br>&nbsp;&nbsp; if [ "${eth0_active_server}" = "${rip_eth0_slave}" ] &amp;&amp; [ "${type}" = "master" ]<br>&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp; function_rsync_master_to_slave<br>&nbsp;&nbsp;&nbsp;&nbsp; function_vip_arping&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; #如果内网VIP=备机内网IP（备机MySQL中的Master_Host显示的是主机的域名或IP）<br>&nbsp;&nbsp; elif [ "${eth0_active_server}" = "${rip_eth0_master}" ]<br>&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp; if (curl -m 30 -G <a href="http://$%7brip_eth1_master%7d/">http://${rip_eth1_master}/</a> &gt; /dev/null 2&gt;&amp;1) &amp;&amp; (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_master}" -e"show slave status\G" &#124; grep "Seconds_Behind_Master: 0" &gt; /dev/null 2&gt;&amp;1)<br>&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果主机能够访问，数据库同步无延迟，且本机就是主机，那么由本机绑定虚拟IP<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "${type}" = "master" ]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果本机为主机<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_bind_vip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_vip_arping<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 主机已绑定虚拟IP!(Type:1)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果本机为备机<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_remove_vip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 备机已去除虚拟IP!(Type:2)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "${type}" = "slave" ]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果本机为备机<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_rsync_slave_to_master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_vip_arping<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; fi<br>&nbsp;&nbsp; fi<br>&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #虚拟IP无法访问时，判断主机能否访问<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (curl -m 30 -G <a href="http://$%7brip_eth1_master%7d/">http://${rip_eth1_master}/</a> &gt; /dev/null 2&gt;&amp;1) &amp;&amp; (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_master}" -e"show slave status\G" &gt; /dev/null 2&gt;&amp;1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果主机能够访问，且本机就是主机，那么由本机绑定虚拟IP<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "${type}" = "master" ]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_bind_vip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_vip_arping<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 主机已绑定虚拟IP!(Type:3)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_remove_vip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 备机已去除虚拟IP!(Type:4)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>&nbsp;&nbsp; elif (curl -m 30 -G <a href="http://$%7brip_eth1_slave%7d/">http://${rip_eth1_slave}/</a> &gt; /dev/null 2&gt;&amp;1) &amp;&amp; (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_slave}" -e"show slave status\G" &gt; /dev/null 2&gt;&amp;1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #如果主机不能访问而备机能够访问，且本机就是备机，那么由备机绑定虚拟IP<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "${type}" = "slave" ]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_bind_vip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_vip_arping<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 备机已绑定虚拟IP!(Type:5)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_remove_vip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 主机已去除虚拟IP!(Type:6)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "${date} 主机、备机全部无法访问!(Type:7)" &gt;&gt; ${logfile}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br>&nbsp;&nbsp; fi<br>&nbsp;&nbsp; #每次循环暂停20秒(即间隔20秒检测一次)<br>&nbsp;&nbsp; sleep 20<br>done </p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/d_ong/archive/2008/11/27/3384979.aspx">http://blog.csdn.net/d_ong/archive/2008/11/27/3384979.aspx</a></p>
<img src ="http://www.cppblog.com/prayer/aggbug/93248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 20:34 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>请教双机互备的IP配置</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93247.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 12:32:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93247.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93247.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93247.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93247.html</trackback:ping><description><![CDATA[<div class=t_msgfont id=message5555643>各位大家好，我请问，如果是两台机器共享磁阵。一台跑数据库，一台跑应用，两台机器之间互为备份。是否需要配置两个浮动ip：前端客户端连接应用所在的机器使用&#8220;浮动IP1&#8221;，应用所在机器连接数据库所在机器时使用&#8220;浮动IP2&#8221;。<br>我不知道我的理解是否正确，请赐教。小女子不胜感激。</div>
当然，双机里的IP是可以多个的，你可以配置为不应用使用的，只是要保证一点是，有服务启用时，你的IP及卷应该先启动的，也就是应用下的依赖资源要配置好<br><br><br>
<div class=t_msgfont id=message5556769>非常感谢各位的解答，我还有一点不明白，在AIX的系统中，两台机器的/etc/hosts文件中，都有六个IP，其中四个分别是各自的boot_IP和standby_IP，那么另外两个服务IP分别是各自的什么IP地址呢？那个就是需要使用的浮动IP吗？为什么要两台机器各自都有一个呢？应用连接的时候，使用哪一个呢？</div>
<br>
<div class=t_msgfont id=message5558162>各家的HA软件都不一样的<br>IBM的HACMP有一个IP叫做BootIP，还有给应用的IP，这跟每个HA软件都相关<br>详情可以Ask IBM Support或者Google</div>
<br>
<img src ="http://www.cppblog.com/prayer/aggbug/93247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 20:32 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>挂载点 unix根目录下各个目录存放内容说明</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93245.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 11:31:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93245.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93245.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93245.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93245.html</trackback:ping><description><![CDATA[linux、unix这类操作系统将系统中的一切都作为文件来管理。在windows中我们常见的硬件设备、磁盘分区等，在linux、unix中都被视作文件，对设备、分区的访问就是读写对应的文件。 <br>
<div class=spctrl></div>
　　挂载点实际上就是linux中的磁盘文件系统的入口目录，类似于windows中的用来访问不同分区的C:、D:、E:等盘符。其实winxp也支持将一个磁盘分区挂在一个文件夹下面，只是我们C:、D:这样的盘符操作用惯了，一般没有将分区挂到文件夹。<br>
<div class=spctrl></div>
　　选择挂载点是必不可少的步骤，下面对各挂载点做一个简单介绍：<br>
<div class=spctrl></div>
　　/ 根目录<br>
<div class=spctrl></div>
　　<strong>唯一必须挂载的目录。不要有任何的犹豫，选一个分区，挂载它！（在绝大多数情况下，有10G的容量应该是够用了。当然了，很多东西都是多多益善的)<br></strong>
<div class=spctrl></div>
　　swap<br>
<div class=spctrl></div>
　　交换分区，可能不是必须的，不过按照传统，并且照顾到您的安全感，还是挂载它吧。它的容量只要大于您的物理内存就可以了，如果超过了您物理内存两倍的容量，那绝对是一种浪费。<br>
<div class=spctrl></div>
　　/home<br>
<div class=spctrl></div>
　　是用户的home目录所在地，这个分区的大小取决于有多少用户。如果是多用户共同使用一台电脑的话，这个分区是完全有必要的，况且根用户也可以很好地控制普通用户使用计算机，如对用户或者用户组实行硬盘限量使用，限制普通用户访问哪些文件等。<br>
<div class=spctrl></div>
　　/tmp<br>
<div class=spctrl></div>
　　用来存放临时文件。这对于多用户系统或者网络服务器来说是有必要的。这样即使程序运行时生成大量的临时文件，或者用户对系统进行了错误的操作，文件系统的其它部分仍然是安全的。因为文件系统的这一部分仍然还承受着读写操作，所以它通常会比其它的部分更快地发生问题。 <br>
<div class=spctrl></div>
　　/var/log<br>
<div class=spctrl></div>
　　系统日志记录分区。一般多用户系统或者网络服务器要建立这个分区，因为设立了这个分区，即使系统的日志文件出现了问题，他们也不会邮箱到操作系统的主分区<br>
<div class=spctrl></div>
　　/var<br>
<div class=spctrl></div>
　　日志文件，经常会变动，硬盘读写率高的文件放在此中<br>
<div class=spctrl></div>
　　/usr<br>
<div class=spctrl></div>
　　应用程序目录。大部分的软件都安装在这里。就像是Windows里面的Program Files。<br>
<div class=spctrl></div>
　　/bin<br>
<div class=spctrl></div>
　　存放程序，里面的程序可以直接通过命令调用，而不需要进入程序所在的文件夹。<br>
<div class=spctrl></div>
　　/dev<br>
<div class=spctrl></div>
　　存放设备文件<br>
<div class=spctrl></div>
　　/opt <br>
<div class=spctrl></div>
　　存放可选的安装文件，个人一般把自己下载的软件存在里面，比如永中Office、LumaQQ等等。<br>
<div class=spctrl></div>
　　/sbin <br>
<div class=spctrl></div>
　　存放标准系统管理文件<br>
<div class=spctrl></div>
　　/boot <br>
<div class=spctrl></div>
　　它包含了操作系统的内核和在启动系统过程中所要用到的文件，建这个分区是有必要的，因为目前大多数的PC机要受到BIOS的限制,况且如果有了一个单独的/boot启动分区，即使主要的根分区出现了问题，计算机依然能够启动。这个分区的大小约在60MB—120MB之间。<br>
<div class=spctrl></div>
　　/srv<br>
<div class=spctrl></div>
　　一些服务启动之后，这些服务所需要取用的资料目录<br>
<div class=spctrl></div>
　　在文件系统这一环节中，建议您选择： ReiserFS和Ext3<br>
<img src ="http://www.cppblog.com/prayer/aggbug/93245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 19:31 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX 学习笔记之 存储管理 LV PV VG PP</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93212.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 08:09:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93212.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93212.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93212.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93212.html</trackback:ping><description><![CDATA[<p>1.基本概念：<br />PV 物理卷：普通的直接访问的存储设备，有固定的和可移动的之分，代表性的就是硬盘。<br />vg 卷组：<a href="file::;" target="_self"><u><strong><font color="#0000ff">AIX</font></strong></u></a>中最大的存储单位，一个卷组由一组物理硬盘组成，也就是由一个或多个物理卷组成。<br />pp 物理分区：是把物理卷划分成连续的大小相等的存储单位，一个卷组中的物理分区大小都相等。<br />lp 逻辑分区：适映射物理分区的逻辑单位，一个逻辑分区可以对应一个也可以对应多个物理分区。<br />lv 逻辑卷：是指卷组中由多个逻辑分区组成的集合，逻辑卷中的逻辑分区是连续的，但是对应的物理分&nbsp;&nbsp; 区是不连续的，可以在一个磁盘上，也可以在不同的磁盘上。<br />fs 文件系统：是指在AIX系统中面向用户的存储空间。一个逻辑卷只能创建一个文件系统，也就是说一个&nbsp;&nbsp;&nbsp; 文件系统对应一个逻辑卷，如果删除逻辑卷也将删除文件系统。</p>
<p><br />2.存储结构：<br />逻辑卷lv 不能被直接访问，是生设备（裸设备），逻辑卷上建文件系统，文件系统可以被用户访问，市熟设备。文件系统里建目录，目录下建文件。</p>
<p>物理卷，卷组，物理分区，逻辑卷，逻辑分区，逻辑卷是面向<a href="file::;" target="_self"><u><strong><font color="#0000ff">操作系统</font></strong></u></a>的概念<br />文件系统，目录，文件是面向用户的概念。</p>
<p>&nbsp;</p>
<p>3.LVM的配置数据<br />卷组描述区(VGDA):描述卷组中的所有物理卷和逻辑卷的对应关系<br />卷组状态区(VGSA)：记录卷组中物理卷和物理分区的状态信息，在卷组激活时，确定哪些物理分区可用<br />逻辑卷控制块(LVCB)：位于每个逻辑卷开头，包含逻辑卷的信息，占用数百个字节</p>
<p>LVM管理命令就是对VGDA内容的更新，当一块硬盘变成PV时，这个硬盘开始保留一部分空间存放VGDA信息，当把它加入卷组中时，开始将卷组信息写入VGDA区域，当把它从卷组删除时，也同时清除VGDA数据，这个数据还存在于AIX系统的ODM库中，当导入一个卷组时，把VGDA信息写入ODM，导出时删除。</p>
<p>&nbsp;</p>
<p>4.磁盘Quorum<br />卷组的每一个物理卷至少包含着一份VGDA和VGSA。当一个卷组只有一块硬盘时，这块硬盘存有两份VGDA和VGSA,当这个卷组由两块硬盘时，其中一块存有两份，另一块存有一份，当卷组由三块以上硬盘时，每块硬盘存有一份。 如果磁盘Quorum存在，则必须保证卷组有51%以上的VGDA/VGSA可以正常访问。淡然也可以关闭磁盘Quorum。</p>
<p>&nbsp;</p>
<p><br />5.逻辑存储管理的限制<br />VG数：每个系统最多255个VG<br />PV数：对于普通卷组，每个VG最多32个PV,对于大VG，每个卷组最多128个PV<br />PP数：每个PV最多有1016个PP<br />LV数：对于普通VG，每个卷组最多255个LV,对于大VG，每个VG最多512个LV<br />LP数：每个LV最多有32512个LP<br />PP和LP的大小：1M到1024M 必须是2的幂次方<br />LP映射PP的数量：一个LP可以映射1-3个PP</p>
<p>&nbsp;</p>
<p><br />6.物理区域的分布<br />外边缘(Outer-Edge)：存放很少访问的数据<br />外中间(Outer-Middle)：创建逻辑卷时默认的位置<br />中间(Center):磁盘搜索时间最短，速度最快。<br />内中间(Inner-Middle)：比中间稍慢一些<br />内边缘(Inner-Edge)存放很少访问的数据</p>
<p><br />7.向系统添加一块硬盘<br />方法一：<br />添加硬盘后起动机器，自动运行cfgmgr,直接查看结果，如果没有识别再手工配置。<br />#cfgmgr -v<br />#lspv<br />#chdev -l hdisk2 -a pv=yes</p>
<p><br />方法二：<br />系统不能重起时，县查看原有硬盘，然后安装新硬盘，检查新设备，配置新设备<br />#lspv<br />#cfgmgr -v<br />#lspv<br />#chdev -l hdisk2 -a pv=yes<br />#mkdev -c disk -s scsi -t 670mb -p scsi3 -w 6,0 -a pv=yes<br />#smit makdsk</p>
<p><br />8.修改物理卷属性<br />#chpv -a n hdisk1&nbsp;&nbsp;&nbsp; 禁止hdisk1在分配新的PP<br />#chpv -a y hdisk1&nbsp;&nbsp;&nbsp; 允许</p>
<p>#chpv -v r hdisk1&nbsp;&nbsp;&nbsp; 关闭hdisk1的可用性，无法通过逻辑形式读写和访问该物理卷<br />#chpv -v a hdisk1&nbsp;&nbsp;&nbsp; 允许</p>
<p>#chpv -c hdisk1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除hdisk1上的引导记录<br />#smit chpv</p>
<p>&nbsp;</p>
<p>9.显示物理卷信息</p>
<p>#lsdev -Cc disk 显示系统一定义和已配置的物理卷<br />#lspv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以不带任何参数的形式显示系统中所有物理卷信息 <br />#lspv hdisk0&nbsp;&nbsp;&nbsp;&nbsp; 显示一个物理卷hdisk0的属性<br />#lspv -l hdisk0 显示物理卷hdisk0上分布的逻辑卷。<br />#lspv -p hdisk0 显示物理卷上每个逻辑卷物理分区的分布情况，同时显示逻辑卷类型和文件mount点。<br />#lspv -M hdisk0 显示物理分区和逻辑分区的对应情况。</p>
<p><br />10迁移物理卷上的内容：</p>
<p>a.确定系统中有哪些磁盘可用<br />#lsdev -Cc dev<br />#lspv<br />#extendvg rootvg hdisk5</p>
<p>b.检查卷组中包含哪些磁盘，确认源磁盘和目标磁盘在同一个卷组中，<br />#lsvg -p rootvg</p>
<p><br />c.确定目的盘上有足够的空间存放源盘的内容<br />#lspv hdisk0 |grep "USED PPs"<br />#lspv hdisk5 |grep "USED PPs"</p>
<p>d.如果是rootvg 上的磁盘，检查引导逻辑卷是否在源磁盘上<br />#lspv -l hdisk0 |grep hd5<br />#megratepv -l hd5 hdisk0 hdisk5</p>
<p>e.重设系统引导记录<br />#bosboot -a -d /dev/hdisk5<br />#bosboot -m normal hdisk5<br />#mkboot -c -d /dev/hdisk0</p>
<p>f.迁移<br />#smit migratevg<br />#migratevg hdisk0 hdisk5<br />#migratevg -l lv01 hdisk0 hdisk5</p>
<p>g.删除原盘数据<br />#reducevg rootvg hdisk0<br />#rmdev -dl hdisk0</p>
<p>11.卷组管理</p>
<p>#mkvg -y datavg -d 6 -s 8 hdisk7 hdisk8<br />#smit mkvg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建卷组是保证/etc/vg下有2M空间<br />#lsvg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看系统所有VG<br />#lsvg -o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看激活状态的VG<br />#lsvg rootvg&nbsp;&nbsp;&nbsp; 查看rootvg属性<br />#lsvg -l rootvg 查看rootvg里的LV<br />#lsvg -p rootvg 查看rootvg中包含的物理卷</p>
<p>#chvg -ay datavg 使卷组启动时自动激活<br />#chvg -an datavg 使卷组启动时不能自动激活<br />#chvg -u datavg 给卷组解锁</p>
<p>#extendvg datavg hdisk5<br />#reducevg datavg hdisk5<br />#varyonvg datavg<br />#varyoffvg datavg<br />#exportvg datavg<br />#importvg -y datavg hdisk5<br />#syncvg -p hdisk03 hdisk05&nbsp;&nbsp; 同步物理卷<br />#syncvg -v vg05 vg06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同步卷组vg05和vg06上的拷贝<br />#redefinevg -d hdisk0 rootvg&nbsp;&nbsp; 在ODM库中重定义卷组信息，</p>
<p>#swapoff paging_spce_name 使页面空间处于非活动状态</p>
<p><br />#mirrorvg -c 3 datavg&nbsp;&nbsp; 做3份拷贝的卷组镜像<br />#mirrorvg -S -c 3 datavg&nbsp;&nbsp;&nbsp; 后台同步</p>
<p><br />镜像环境中替换磁盘<br />#unmirrorvg datavg hdiak7&nbsp;&nbsp; 删除hdisk7上的镜像<br />#reduncevg datavg hdisk7&nbsp;&nbsp;&nbsp; 在卷组中删除hdisk7<br />#rmdev -dl hdisk7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在系统中删除hdisk7</p>
<p>#extendvg datavg hdisk7&nbsp;&nbsp;&nbsp;&nbsp; 将新盘加入datavg<br />#mirrorvg datavg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给卷组datavg做镜像<br />#unmirrorvg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取消卷组镜像</p>
<p><br />12.逻辑卷管理</p>
<p>#getlvcb -TA hd2&nbsp;&nbsp; 查看逻辑卷控制块信息<br />#lsvg -l rootvg 查看rootvg上的逻辑卷信息<br />#lslv mylv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看一个lv的详细属性<br />#lslv -l lv_01&nbsp;&nbsp; 显示一个逻辑卷所跨越的物理卷，以及PP在物理卷上的分布情况<br />#lslv -p hdisk1 显示物理卷上的逻辑卷分配图</p><img src ="http://www.cppblog.com/prayer/aggbug/93212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 16:09 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>/dev 目录（转载）</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93211.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 07:56:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93211.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93211.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93211.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93211.html</trackback:ping><description><![CDATA[Linux沿袭Unix的风格，将所有设备认成是一个文件。<br>设备文件分为两种： <br><font color=#0000ff>块设备文件（b） <br>字符设备文件（c）</font><br>设备文件一般存放在<font color=#0000ff>/dev</font>目录下<br><font color=#ff0000><strong>/dev/hd</strong><strong>[a-t]：IDE设备 </strong></font><br><strong><font color=#ff0000>/dev/sd[a-z]：SCSI设备 </font></strong><br><font color=#ff0000><strong>/dev/fd</strong><strong>[0-7]：标准软驱 </strong></font><br><strong><font color=#ff0000>/dev/md[0-31]：软raid设备 </font></strong><br><strong><font color=#ff0000>/dev/loop[0-7]：本地回环设备 </font></strong><br><strong><font color=#ff0000>/dev/ram[0-15]：内存 </font></strong><br><font color=#ff0000><strong>/dev/null：无限数据接收设备 ,</strong><strong>相当于回收站 </strong></font><br><strong><font color=#ff0000>/dev/zero：无限零资源 </font></strong><br><strong><font color=#ff0000>/dev/tty[0-63]：虚拟终端 </font></strong><br><strong><font color=#ff0000>/dev/ttyS[0-3]：串口 </font></strong><br><strong><font color=#ff0000>/dev/lp[0-3]：并口 </font></strong><br><strong><font color=#ff0000>/dev/console：控制台 </font></strong><br><strong><font color=#ff0000>/dev/fb[0-31]：framebuffer </font></strong><br><font color=#ff0000><strong>/dev/cd</strong><strong>rom =&gt; /dev/hd</strong><strong>c </strong></font><br><strong><font color=#ff0000>/dev/modem =&gt; /dev/ttyS[0-9] </font></strong><br><strong><font color=#ff0000>/dev/pilot =&gt; /dev/ttyS[0-9] </font></strong><br><br>/dev/console：控制台和/dev/tty[0-63]：虚拟终端的区别与联系<br><font color=#0000ff>控制抬就好比电视机上的按钮，终端好比遥控板,他们的目的都是控制电视机，但是控制台必须在本地，而终端可以在远端,系统只有一个控制台，叫console，其他的都是终端</font><br>
<img src ="http://www.cppblog.com/prayer/aggbug/93211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 15:56 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何创建位于/dev目录子目录下的裸设备文件</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93210.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93210.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93210.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93210.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93210.html</trackback:ping><description><![CDATA[先用mklv创建lv，<br>然后把/dev/目录下的设备文件 c 文件和b文件删除，注意要记住major 和minornumber<br>再使用mknod创建，比如创建/dev/vgdata/rawdev/rlvname<br>mkdir -p /dev/vgdata/rawdev<br>mknod c /dev/vgdata/rawdev/rlvname major minor
<img src ="http://www.cppblog.com/prayer/aggbug/93210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 15:50 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX用裸设备扩数据库表空间</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93209.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 07:48:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93209.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93209.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93209.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93209.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">AIX用裸设备扩数据库表空间专题</p>
<p style="text-indent: 2em">AIXCLUB大哥的经典文章，看这个AIX裸设备这块基本差不多了！AIX的裸设备跟LINUX有些不一样，建立完LV会在/dev/下生成跟LV名称前加R的文件，它就是LV的裸设备文件。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">硬件环境：小型机 IBM P670，存储：IBM SHARK F-20</p>
<p style="text-indent: 2em">软件环境：操作系统 AIX5.1 数据库oracle9i</p>
<p style="text-indent: 2em">主题思想：物理卷PV－&gt;卷组VG－&gt;逻辑卷LV（类型：raw）－&gt;添加表空间</p>
<p style="text-indent: 2em">操作过程：</p>
<p style="text-indent: 2em">一、 首先 </p>
<p style="text-indent: 2em">＃lsvg &#8211; o //查看所有可用卷组</p>
<p style="text-indent: 2em">datavg03</p>
<p style="text-indent: 2em">datavg02</p>
<p style="text-indent: 2em">datavg01</p>
<p style="text-indent: 2em">datavg00</p>
<p style="text-indent: 2em">rootvg</p>
<p style="text-indent: 2em">二、 然后对用来专为数据库准备的卷组进行如下操作：</p>
<p style="text-indent: 2em">＃lsvg &#8211;l datavg03</p>
<p style="text-indent: 2em">datavg09:</p>
<p style="text-indent: 2em">LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT</p>
<p style="text-indent: 2em">lvdata0316 raw 64 64 1 open/syncd N/A</p>
<p style="text-indent: 2em">lvdata0317 raw 64 64 1 open/syncd N/A</p>
<p style="text-indent: 2em">lvdata0318 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0319 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0320 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0321 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0322 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0323 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0324 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0325 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0326 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0327 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0328 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0329 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">lvdata0330 raw 64 64 1 closed/syncd N/A</p>
<p style="text-indent: 2em">由显示可知：该卷组还有13个逻辑卷（裸设备）未被使用（如果在显示结果中没有closed/syncd状态的逻辑卷，可进入第3步）但如何知道这13个逻辑卷有多大容量呢，可以机使用如下命令：</p>
<p style="text-indent: 2em">＃lslv lvdata0315</p>
<p style="text-indent: 2em">LOGICAL VOLUME: lvdata0309 VOLUME GROUP: datavg09</p>
<p style="text-indent: 2em">LV IDENTIFIER: 0037de1d00004c0000000105cd3b6816.11 PERMISSION: read/write</p>
<p style="text-indent: 2em">VG STATE: active/complete LV STATE: opened/syncd</p>
<p style="text-indent: 2em">TYPE: raw WRITE VERIFY: off</p>
<p style="text-indent: 2em">MAX LPs: 512 PP SIZE: 64 megabyte(s)</p>
<p style="text-indent: 2em">COPIES: 1 SCHED POLICY: parallel</p>
<p style="text-indent: 2em">LPs: 64 PPs: 64</p>
<p style="text-indent: 2em">STALE PPs: 0 BB POLICY: relocatable</p>
<p style="text-indent: 2em">INTER-POLICY: minimum RELOCATABLE: yes</p>
<p style="text-indent: 2em">INTRA-POLICY: middle UPPER BOUND: 32</p>
<p style="text-indent: 2em">MOUNT POINT: N/A LABEL: None</p>
<p style="text-indent: 2em">MIRROR WRITE CONSISTENCY: on/ACTIVE</p>
<p style="text-indent: 2em">EACH LP COPY ON A SEPARATE PV ?: yes</p>
<p style="text-indent: 2em">可看到物理分区大小为64M，由于在同一卷组当中，所以可以知道所有物理分区大小都是64M，从lsvg － l datavg09的显示结果可看到，PPs：LPs＝1：1所以，每个逻辑卷的大小是：LPs&#215;PPSIZE=64*64M=4096M=4G,进而可知还有13个4G的逻辑卷，未被使用。</p>
<p style="text-indent: 2em">但到此还不能完全保证就可以使用这13个逻辑卷对数据库的表空间进行扩充，因为我们还不知到这些裸设备的属主，所以还需要如下步骤：</p>
<p style="text-indent: 2em">＃cd /dev</p>
<p style="text-indent: 2em"># ls &#8211;l rlvdata03* //显示以rlvdata03开头的文件属性</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 20 Aug 22 11:33 rlvdata0318</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 21 Aug 22 11:35 rlvdata0319</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 22 Aug 22 11:37 rlvdata0320</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 23 Aug 22 12:35 rlvdata0321</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 24 Aug 22 12:37 rlvdata0322</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 25 Aug 22 12:39 rlvdata0323</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 26 Aug 22 12:39 rlvdata0324</p>
<p style="text-indent: 2em">crw-rw---- 1 oracle dba 58, 27 Aug 19 16:14 rlvdata0325</p>
<p style="text-indent: 2em">从查询结果可知，裸设备的属主已经是oracle了，oracle可以添加这些裸设备了，但如果裸设备的属主不是oracle而是其他用户，那么需要</p>
<p style="text-indent: 2em">＃chown oracle：dba rlvdata03* //要根据实际情况修改，千万小心</p>
<p style="text-indent: 2em">三、添加表空间 我们可以登录数据库了，使用有创建或修改表空间权限的用户登录数据库（有多种方法），我们以sqlplus为例：</p>
<p style="text-indent: 2em">＃su － oracle</p>
<p style="text-indent: 2em">$ sqlplus /nolog</p>
<p style="text-indent: 2em">SQL*Plus: Release 9.2.0.5.0 - Production on Mon Aug 22 12:49:55 2005</p>
<p style="text-indent: 2em">Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.</p>
<p style="text-indent: 2em">SQL&gt;conn /as sysdba</p>
<p style="text-indent: 2em">Connected.</p>
<p style="text-indent: 2em">SQL&gt;alter tablespace ts_index add datafile</p>
<p style="text-indent: 2em">2 &#8216;/dev/rlvdata0318&#8217; size 4090; //size 是4090而不是4096，如果4096全部使用的话，容易出错</p>
<p style="text-indent: 2em">SQL&gt; Tablespace altered</p>
<p style="text-indent: 2em">可以反复以上操作，完成其它裸设备的添加，从而达到表空间扩充的目的。</p>
<p style="text-indent: 2em">但是如果以上13个逻辑卷还不能满足扩充需求，那么可以继续以下步骤</p>
<p style="text-indent: 2em">四、＃lsvg datavg09 //查看卷组信息和使用情况,看是否还有足够的空间</p>
<p style="text-indent: 2em">VOLUME GROUP: datavg09 VG IDENTIFIER: 0037de1d00004c000000010</p>
<p style="text-indent: 2em">5cd3b6816</p>
<p style="text-indent: 2em">VG STATE: active PP SIZE: 64 megabyte(s)</p>
<p style="text-indent: 2em">VG PERMISSION: read/write TOTAL PPs: 2605 (166720 megabytes)</p>
<p style="text-indent: 2em">MAX LVs: 256 FREE PPs: 557 (35648 megabytes)</p>
<p style="text-indent: 2em">LVs: 32 USED PPs: 2048 (131072 megabytes)</p>
<p style="text-indent: 2em">OPEN LVs: 16 QUORUM: 3</p>
<p style="text-indent: 2em">TOTAL PVs: 5 VG DESCRIPTORS: 5</p>
<p style="text-indent: 2em">STALE PVs: 0 STALE PPs: 0</p>
<p style="text-indent: 2em">ACTIVE PVs: 5 AUTO ON: no</p>
<p style="text-indent: 2em">MAX PPs per PV: 1016 MAX PVs: 32</p>
<p style="text-indent: 2em">LTG size: 128 kilobyte(s) AUTO SYNC: no</p>
<p style="text-indent: 2em">HOT SPARE: no</p>
<p style="text-indent: 2em">显示信息可以看到，该卷组目前还有35648M空间供使用，则可以进行如下操作：</p>
<p style="text-indent: 2em">＃mklv -y &#8216;lvdata0331&#8217; - t &#8216;raw&#8217; datavg09 64</p>
<p style="text-indent: 2em">说明：在卷组datavg09上创建逻辑卷lvdata0331，逻辑卷的类型是raw，逻辑卷的lps是64</p>
<p style="text-indent: 2em">逻辑卷大小太大对会影响数据库性能，所以不宜创建过大的裸设备。</p>
<p style="text-indent: 2em">然后进行前面的&#8216;三&#8217;节</p>
<p style="text-indent: 2em">但是如果当前所有的卷组都已使用完，没有可以用来添加裸设备的卷组，那么还要，创建卷组。</p>
<p style="text-indent: 2em">五、创建卷组 在创建之前，我们首先看一下有没有可用的物理卷</p>
<p style="text-indent: 2em">＃lspv</p>
<p style="text-indent: 2em">vpath53 000b273dbe31ff50 datavg03</p>
<p style="text-indent: 2em">vpath54 000b273dbe320138 datavg03</p>
<p style="text-indent: 2em">vpath55 000b273dbe320303 datavg03</p>
<p style="text-indent: 2em">vpath56 000b273dbe320795 None</p>
<p style="text-indent: 2em">vpath57 000b273dbe320a46 None</p>
<p style="text-indent: 2em">vpath58 000b273dbe320c29 None</p>
<p style="text-indent: 2em">可以看到vpath56、vpath57、vpath58、还没有备卷组使用。由于当前环境的存储提供是磁盘阵列，所以vpath 是在阵列上指定了大小的，在小型机系统认到的所谓的&#8220;物理卷&#8221;（其实真正的物理卷，应该是</p>
<p style="text-indent: 2em">hdisk）。</p>
<p style="text-indent: 2em">＃ mkvg -f -y'datavg04' -s'64' '-n' vpath56 vpath57 vpath58</p>
<p style="text-indent: 2em">说明：用 vpath56 vpath57 vpath58 创建卷组datavg04，并且物理分区大小是64M</p>
<p style="text-indent: 2em">卷组创建好后，重复前面的步骤即可完成。</p>
<p style="text-indent: 2em">参考：</p>
<p style="text-indent: 2em">裸设备，也叫裸分区（原始分区），是一种没有经过格式化，不被Unix通过文件系统来读取的特殊字符设备。本文收集裸设备和Oracle问答20例。　　</p>
<p style="text-indent: 2em">1．什么叫做裸设备？</p>
<p style="text-indent: 2em">　　裸设备，也叫裸分区（原始分区），是一种没有经过格式化，不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。　　</p>
<p style="text-indent: 2em">2．如何辨别裸设备？</p>
<p style="text-indent: 2em">　　在Unix的/dev目录下，有许多文件，其中有两个大类：字符设备文件和块设备文件。　　字符设备特殊文件进行I/O操作不经过操作系统的缓冲区，而块设备特殊文件用来同外设进行定长的包传输。字符特殊文件与外设进行I/o操作时每次只传输一个字符。而对于块设备特殊文件来说，它用了cache机制，在外设和内存之间一次可以传送一整块数据。裸设备使用字符特殊文件。在/dev 目录下，你可以看到许多这样的文件。　　</p>
<p style="text-indent: 2em">3．使用裸设备的好处　　</p>
<p style="text-indent: 2em">因为使用裸设备避免了再经过Unix操作系统这一层，数据直接从Disk到Oracle进行传输，所以使用裸设备对于读写频繁的数据库应用来说，可以极大地提高数据库系统的性能。当然，这是以磁盘的 I/O非常大，磁盘I/O已经称为系统瓶颈的情况下才成立。如果磁盘读写确实非常频繁，以至于磁盘读写成为系统瓶颈的情况成立，那么采用裸设备确实可以大大提高性能，最大甚至可以提高至40％，非常明显。　　而且，由于使用的是原始分区，没有采用文件系统的管理方式，对于Unix维护文件系统的开销也都没有了，比如不用再维护I-node，空闲块等，这也能够导致性能的提高。　　</p>
<p style="text-indent: 2em">4．如何决定是否应该使用裸设备？　　</p>
<p style="text-indent: 2em">判断是否使用裸设备要从以下方面进行考虑：首先，数据库系统本身需要已经被比较好的经过了优化。优化是一门很有些技术的话题，很难简单地讲述。其次，使用Unix命令来辨别是否存在磁盘读写瓶颈。比如Unix的vmstat, sar等命令都可以较好的进行鉴别。如果决定采用裸设备，需要磁盘上还有空闲的分区。否则，就要新添磁盘，或者对原有系统重新规划。　　</p>
<p style="text-indent: 2em">5．什么系统必须使用裸设备？　　</p>
<p style="text-indent: 2em">如果使用了Oracle并行服务器选项，则必须采用裸设备来存放所有的数据文件，控制文件，重做日志文件。只有把这些文件放到裸设备上，才能保证所有Oracle实例都可以读取这个数据库的文件。这是由Unix操作系统的特性决定的。　　还有一种情况是，如果你想使用异步I/O，那么在有些Unix上也必须采用裸设备。这个需要参考具体Unix的相关文档。</p>
<p style="text-indent: 2em">6．能够使用一个磁盘的第一个分区作为裸设备吗？　　</p>
<p style="text-indent: 2em">可以，但是不推荐。在Unix的比较旧的版本是银行，磁盘的第一个分区常常包含这个磁盘的一些信息，以及逻辑卷的一些控制信息。若这些部分被裸设备覆盖的话，磁盘就会变得不可识别，导致系统崩溃。　　较新的Unix版本不会发生这样的情况，因为它们采用了更复杂的技术来管理磁盘，逻辑卷的一些信息。　　但是，除非很确信不要使用磁盘的第一个分区来作为裸设备。</p>
<p style="text-indent: 2em">7．我可以把整个裸设备都作为Oracle的数据文件吗？　　</p>
<p style="text-indent: 2em">不行。必须让数据文件的大小稍微小于该裸设备的实际大小。至少要空出两个oracle块的大小来。　</p>
<p style="text-indent: 2em">8．裸设备应该属于那个用户？　　</p>
<p style="text-indent: 2em">应该由root来创建裸设备，然后再分配给Oracle用户以供使用。同时还要把它归入Oracle用户所在的那个组里边（通常都是DBA）。　　</p>
<p style="text-indent: 2em">9．在创建数据文件时如何指定裸设备？　　</p>
<p style="text-indent: 2em">和普通文件没有什么太大的区别，一样都是在单引号里边写上裸设备的详细路径就可以了。举一个例子：要在创建一个表空间，使用两个裸设备，每个分别为30M的大小，Oracle块的大小为4K，可以用下面的命令：　　CREATE TABLESPACE RAW_TS　　DATAFILE'/dev/raw1' size 30712k　　DATAFILE '/dev/raw2' size 30712k;</p>
<p style="text-indent: 2em">10.Oracle块的大小和裸设备有什么关系吗？　　</p>
<p style="text-indent: 2em">Oracle会必须是裸设备上物理块大小的倍数。　　</p>
<p style="text-indent: 2em">11．如何在裸设备上进行备份？　　</p>
<p style="text-indent: 2em">在裸设备上，不能使用Unix实用程序来进行备份，唯一的办法是使用最基本的Unix命令：DD来进行备份。比如：dd if=/dev/raw1of=/dev/rmt0bs=16k。dd的具体语法可以参考unix手册，或者联机帮助。你也可以先用dd把裸设备上的数据文件备份到磁盘上，然后再利用Unix实用程序进一步处理。行服务器选项，</p>
<p style="text-indent: 2em">12。我可以在数据库上让一部分数据文件使用文件系统，另一部分使用裸设备吗？　　</p>
<p style="text-indent: 2em">可以。但是这样的话，会使备份过程更加复杂。</p>
<p style="text-indent: 2em">13．我应该把联机重做日志文件放到裸设备上吗？　　</p>
<p style="text-indent: 2em">这是一个极好的选择。联机重做日志文件是写操作非常频繁的文件，放到裸设备上非常合适。如果你使用了并行服务器选项，那么联机重做日志文件必须放到裸设备上面。　　</p>
<p style="text-indent: 2em">14．可以把归档日志文件放到裸设备上吗？　　</p>
<p style="text-indent: 2em">不行。归档日志文件必须放到常规的Unix文件系统上面，或者直接放到磁带上面去。　　</p>
<p style="text-indent: 2em">15．我可以在裸设备上边放置多个数据文件吗？　　</p>
<p style="text-indent: 2em">不行。所以你必须在设置裸设备时非常小心。太小的话，会导致空间很快用完，太大的话，空间就白白浪费了。　　</p>
<p style="text-indent: 2em">16．因应该把几个裸设备放到同一个物理磁盘上吗？　　</p>
<p style="text-indent: 2em">这样做不好。因为使用裸设备就是为了提高磁盘读写速度。而把多个裸设备放到同一个物理磁盘上会导致读写竞争，这样对于提高I/O速度是不利的。应该尽量分散裸设备到不同的物理磁盘上，最好是分散到不同的磁盘控制器上。这是最佳选择。　　</p>
<p style="text-indent: 2em">17．需要把所有裸设备都定义成同样的大小吗？　　</p>
<p style="text-indent: 2em">这不是必须得，但是划分成同样的大小对于管理数据库比较有利。　　</p>
<p style="text-indent: 2em">18．为了在Unix上使用裸设备，我需要改变Unix核心参数吗？　　 不需要。但可以选择减小缓冲区的大小，如果没有别的应用也在同一台Unix机器上运行。因为运用了裸设备以后，不再使用Unix的系统缓冲区。　　</p>
<p style="text-indent: 2em">19．为了提高读写速度，在操作系统级别上，还有什么办法可以采取吗？　　</p>
<p style="text-indent: 2em">使用RAID（廉价冗余磁盘阵列）也是非常有效的办法，尤其实那种读写非常频繁的系统。　　</p>
<p style="text-indent: 2em">20．在考虑了以上所有方面后，还能有什么办法可以提高性能的吗？　　</p>
<p style="text-indent: 2em">这就需要对Oracle 进行优化，并且购买更多的磁盘和磁盘控制器，来分散I/O</p><img src ="http://www.cppblog.com/prayer/aggbug/93209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 15:48 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于裸设备</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93200.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93200.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93200.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93200.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93200.html</trackback:ping><description><![CDATA[什么是裸设备(RAW DEVICE) <br><br>裸设备是指未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume)，应用程序直接通过一 <br>个字符设备驱动程序对它进行访问。如何对设备上的数据读写决定于使用它的应用程序。由于对裸设备的操作不通过UNIX的缓冲区，数据在ORACLE的数据缓冲区(BUFFER CACHE)和磁盘之间直接传递，所以使用裸设备在一定程度上能够提高I/O性能，适合I/O量大的系统。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)环境下，多个节点同时访问同一个数据库，所以CONTROL FILE、DATA FILE、REDO LOG都必须建在RAW DEVICE上。 <br><br>1.2 裸设备的可用空间 <br><br>不同的UNIX对裸设备的管理不完全相同，特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间，应用程序在使用裸设备时不可以覆盖这一部分，否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。下面是常用UNIX的OS Reserved Size列表： <br><br>UNIX　　　　　OS Reserved Size <br><br>------------　---------------- <br><br>SUN Solaris　　　　　　　0 <br><br>HP-UX　　　　　　　　　　0 <br><br>IBM AIX　　　　　　　　　4k <br><br>Tru64 UNIX　　　　　　　64k <br><br>Linux　　　　　　　　　　0
<img src ="http://www.cppblog.com/prayer/aggbug/93200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 15:13 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据文件用文件系统还是裸设备，这是一个问题</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93197.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 07:12:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93197.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93197.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93197.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93197.html</trackback:ping><description><![CDATA[<p>每个DBA Team在建库时，对数据文件采用文件系统还是裸设备都是分成两派的，双方都很难说服对方，我这里也分析一下数据文件用文件系统还是裸设备的各自优劣。</p>
<p><strong>速度</strong></p>
<p>都说裸设备比文件系统快，因为少走了OS的cache。但到底快多少呢？IBM还说自己的jfs2比裸设备快呢！</p>
<p>我们用ORION(oracle提供的存储测试工具，可以从otn网站下载，模拟数据库对存储的读写操作)测试了一下：</p>
<p>存储SUN2540 两个盘<br><br>文件系统读：<br>Maximum Large MBPS=205.34 @ Small=0 and Large=4<br>Maximum Small IOPS=1160 @ Small=10 and Large=0<br>Minimum Small Latency=4.51 @ Small=1 and Large=0<br><br>祼设备读：<br><br>Maximum Large MBPS=205.02 @ Small=0 and Large=4<br>Maximum Small IOPS=1161 @ Small=10 and Large=0<br>Minimum Small Latency=4.49 @ Small=1 and Large=0<br><br><br>文件系统写<br><br>Maximum Large MBPS=84.48 @ Small=0 and Large=4<br>Maximum Small IOPS=675 @ Small=1 and Large=0<br>Minimum Small Latency=1.48 @ Small=1 and Large=0<br><br>裸设备写<br>Maximum Large MBPS=83.92 @ Small=1 and Large=4<br>Maximum Small IOPS=674 @ Small=1 and Large=0<br>Minimum Small Latency=1.48 @ Small=1 and Large=0<br><br>从以上数据可以看出，速度基本差不多，如果因为速度要使用祼设备的理由就不成立了。<br><br><br><strong>防误删除：</strong><br>文件被误删除后基本不能恢复，数据丢失。<br>祼设备被误删除后，可以重新建立，数据不丢失。<br><br><br><strong>扩展性：</strong><br>数据件在文件系统中可以自动扩展<br>祼设备不能自动扩展，如果容量不够需要增加祼设备作为新的数据文件来扩充表空间。<br>需要注意的一个问题是，自动扩展是不是一定好？！<br>很多DBA喜欢把datafile设置成autoextend on maxsize unlimited，我觉得比较严谨的作法还是要设置一个合理的maxsize。<br>防止应用的错误向表空间中插入垃圾记录，在文件系统中可能会把整个文件系统的free space消耗光！<br><br><strong>移植性</strong><br>文件可能通过copy的方式很方便的实现迁移，裸设备很困难。</p>
<p><strong>Dataguard时祼设备不能自动创建数据文件</strong></p>
<p>也就是这个参数standby_file_management 设置成auto没有用。<br><br>写到这儿就行了，到底用文件系统还是裸设备大家自己定吧。<br></p>
<img src ="http://www.cppblog.com/prayer/aggbug/93197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 15:12 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LDAP</title><link>http://www.cppblog.com/prayer/archive/2009/08/13/93192.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 13 Aug 2009 06:36:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/13/93192.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/93192.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/13/93192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/93192.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/93192.html</trackback:ping><description><![CDATA[　LDAP是轻量目录访问协议，英文全称是Lightweight Directory Access Protocol，一般都简称为LDAP。它是基于X.500标准的，但是简单多了并且可以根据需要定制。与X.500不同，LDAP支持TCP/IP，这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义，所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。<br>
<div class=spctrl></div>
　　简单说来，LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。<br>
<div class=spctrl></div>
　　LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用，不过根据组织者的需要，它可以做得更加强大。<br>
<div class=spctrl></div>
　　LDAP其实是一电话簿，类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络目录，也类似于你在花园中所看到的树木。<br>
<div class=spctrl></div>
　　不少LDAP开发人员喜欢把LDAP与关系数据库相比，认为是另一种的存贮方式，然后在读性能上进行比较。实际上，这种对比的基础是错误的。LDAP和关系数据库是两种不同层次的概念，后者是存贮方式（同一层次如网格数据库，对象数据库），前者是存贮模式和访问协议。LDAP是一个比关系数据库抽象层次更高的存贮概念，与关系数据库的查询语言SQL属同一级别。LDAP最基本的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果，不过在其它方面，例如更新，就慢得多。<br>
<div class=spctrl></div>
　　从另一个意义上 LDAP是实现了指定的数据结构的存贮，它是一种特殊的数据库。但是LDAP和一般的数据库不同，明白这一点是很重要的。 LDAP对查询进行了优化，与写性能相比LDAP的读性能要优秀很多。<br>
<div class=spctrl></div>
　　就象Sybase、Oracle、Informix或Microsoft的数据库管理系统（DBMS）是用于处理查询和更新关系型数据库那样，LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库，但不是关系型数据库。要特别注意的是，LDAP通常作为一个 hierarchal数据库使用，而不是一个关系数据库。因此，它的结构用树来表示比用表格好。正因为这样，就不能用SQL语句了。 <br>
<div class=spctrl></div>
　　现在LDAP技术不仅发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运行在几乎所有计算机平台上的所有的应用程序从LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据：电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表，等等。通过把LDAP目录作为系统集成中的一个重要环节，可以简化员工在企业内部查询信息的步骤，甚至连主要的数据源都可以放在任何地方。 <br>
<div class=spctrl></div>
　　LDAP目录的优势 <br>
<div class=spctrl></div>
　　如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于WEB的数据库设计方式，即前端使用浏览器而后端使用WEB服务器加上关系数据库。后端在Windows的典型实现可能是Windows NT + IIS + Acess数据库或者是SQL服务器，IIS和数据库之间通过ASP技术使用ODBC进行连接，达到通过填写表单查询数据的功能； <br>
<div class=spctrl></div>
　　后端在Linux系统的典型实现可能是Linux+ Apache + postgresql，Apache和数据库之间通过PHP3提供的函数进行连接。使用上述方法的缺点是后端关系数据库的引入导致系统整体的性能降低和系统的管理比较繁琐，因为需要不断的进行数据类型的验证和事务的完整性的确认；并且前端用户对数据的控制不够灵活，用户权限的设置一般只能是设置在表一级而不是设置在记录一级。 <br>
<div class=spctrl></div>
　　目录服务的推出主要是解决上述数据库中存在的问题。目录与关系数据库相似，是指具有描述性的基于属性的记录集合，但它的数据类型主要是字符型，为了检索的需要添加了BIN（二进制数据）、CIS（忽略大小写）、CES（大小写敏感）、TEL（电话型）等语法（Syntax），而不是关系数据库提供的整数、浮点数、日期、货币等类型，同样也不提供象关系数据库中普遍包含的大量的函数，它主要面向数据的查询服务（查询和修改操作比一般是大于10:1），不提供事务的回滚（rollback）机制，它的数据修改使用简单的锁定机制实现All-or-Nothing，它的目标是快速响应和大容量查询并且提供多目录服务器的信息复制功能。 <br>
<div class=spctrl></div>
　　现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。可能LDAP最大的优势是：可以在任何计算机平台上，用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。 <br>
<div class=spctrl></div>
　　LDAP协议是跨平台的和标准的协议，因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上，LDAP得到了业界的广泛认可，因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持，因为他们根本不用考虑另一端（客户端或服务端）是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器（或者还可能是具有LDAP界面的关系型数据库），因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。与LDAP不同的是，如果软件产商想在软件产品中集成对DBMS的支持，那么通常都要对每一个数据库服务器单独定制。不象很多商用的关系型数据库，你不必为LDAP的每一个客户端连接或许可协议付费 大多数的LDAP服务器安装起来很简单，也容易维护和优化。 <br>
<div class=spctrl></div>
　　LDAP服务器可以用&#8220;推&#8221;或&#8220;拉&#8221;的方法复制部分或全部数据，例如：可以把数据&#8220;推&#8221;到远程的办公室，以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能，数据库产商就会要你支付额外的费用，而且也很难管理。 <br>
<div class=spctrl></div>
　　LDAP允许你根据需要使用ACI（一般都称为ACL或者访问控制列表）控制对数据读和写的权限。例如，设备管理员可以有权改变员工的工作地点和办公室号码，但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的，所以不用担心在客户端的应用程序上是否要进行安全检查。 <br>
<div class=spctrl></div>
　　LDAP（Lightweight Directory Acess Protocol）是目录服务在TCP/IP上的实现（RFC 1777 V2版和RFC 2251 <br>
<div class=spctrl></div>
　　V3版）。它是对X500的目录协议的移植，但是简化了实现方法，所以称为轻量级的目录服务。在LDAP中目录是按照树型结构组织，目录由条目（Entry）组成，条目相当于关系数据库中表的记录；条目是具有区别名DN（Distinguished <br>
<div class=spctrl></div>
　　Name）的属性（Attribute）集合，DN相当于关系数据库表中的关键字（Primary <br>
<div class=spctrl></div>
　　Key）；属性由类型（Type）和多个值（Values）组成，相当于关系数据库中的域（Field）由域名和数据类型组成，只是为了方便检索的需要，LDAP中的Type可以有多个Value，而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织，非常的直观。LDAP把数据存放在文件中，为提高效率可以使用基于索引的文件数据库，而不是关系数据库。LDAP协议集还规定了DN的命名方法、存取控制方法、搜索格式、复制方法、URL格式、开发接口等 <br>
<div class=spctrl></div>
　　LDAP对于这样存储这样的信息最为有用，也就是数据需要从不同的地点读取，但是不需要经常更新。 <br>
<div class=spctrl></div>
　　例如，这些信息存储在LDAP目录中是十分有效的： <br>
<div class=spctrl></div>
　　l 公司员工的电话号码簿和组织结构图 <br>
<div class=spctrl></div>
　　l 客户的联系信息 <br>
<div class=spctrl></div>
　　l 计算机管理需要的信息，包括NIS映射、email假名，等等 <br>
<div class=spctrl></div>
　　l 软件包的配置信息 <br>
<div class=spctrl></div>
　　l 公用证书和安全密匙 <br>
<div class=spctrl></div>
　　什么时候该用LDAP存储数据 <br>
<div class=spctrl></div>
　　大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此，当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化，大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如，用LDAP服务器来存储电话号码是一个很好的选择，但是它不能作为电子商务站点的数据库服务器。 <br>
<div class=spctrl></div>
　　如果下面每一个问题的答案都是&#8220;是&#8221;，那么把数据存在LDAP中就是一个好主意。 <br>
<div class=spctrl></div>
　　l 需要在任何平台上都能读取数据吗？ <br>
<div class=spctrl></div>
　　l 每一个单独的记录项是不是每一天都只有很少的改变？ <br>
<div class=spctrl></div>
　　l 可以把数据存在平面数据库（flat database）而不是关系型数据库中吗？换句话来说，也就是不管什么范式不范式的，把所有东西都存在一个记录中（差不多只要满足第一范式）。 <br>
<div class=spctrl></div>
　　最后一个问题可能会唬住一些人，其实用平面数据库去存储一些关系型的数据也是很一般的。例如，一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法：如果可以把保数据存在一张张的卡片里，就可以很容易地把它存在LDAP目录里。 <br>
<div class=spctrl></div>
　　安全和访问控制 <br>
<div class=spctrl></div>
　　LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制，这比用客户端的软件保证数据的安全可安全多了。 <br>
<div class=spctrl></div>
　　用LDAP的ACI，可以完成： <br>
<div class=spctrl></div>
　　l 给予用户改变他们自己的电话号码和家庭地址的权限，但是限制他们对其它数据（如，职务名称，经理的登录名，等等）只有&#8220;只读&#8221;权限。 <br>
<div class=spctrl></div>
　　l 给予&#8220;HR-admins"组中的所有人权限以改变下面这些用户的信息：经理、工作名称、员工号、部门名称和部门号。但是对其它域没有写权限。 <br>
<div class=spctrl></div>
　　l 禁止任何人查询LDAP服务器上的用户口令，但是可以允许用户改变他或她自己的口令。 <br>
<div class=spctrl></div>
　　l 给予经理访问他们上级的家庭电话的只读权限，但是禁止其他人有这个权限。 <br>
<div class=spctrl></div>
　　l 给予&#8220;host-admins"组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息 <br>
<div class=spctrl></div>
　　l 通过Web，允许&#8220;foobar-sales"组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理（PDA）上。（如果销售人员的软件都支持LDAP，这将非常有用） <br>
<div class=spctrl></div>
　　l 通过Web，允许组的所有者删除或添加他们拥有的组的成员。例如：可以允许销售经理给予或禁止销售人员改变Web页的权限。也可以允许邮件假名（mail aliase）的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。&#8220;公用&#8221;的邮件列表应该允许用户从邮件假名中添加或删除自己（但是只能是自己）。也可以对IP地址或主机名加以限制。例如，某些域只允许用户IP地址以192.168.200.*开头的有读的权限，或者用户反向查找DNS得到的主机名必须为*.foobar.com。 <br>
<div class=spctrl></div>
　　LDAP目录树的结构 <br>
<div class=spctrl></div>
　　LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉，也就很容易掌握LDAP目录树这个概念了。就象DNS的主机名那样，LDAP目录记录的标识名（Distinguished Name，简称DN）是用来读取单个记录，以及回溯到树的顶部。后面会做详细地介绍。 <br>
<div class=spctrl></div>
　　为什么要用层次结构来组织数据呢？原因是多方面的。下面是可能遇到的一些情况： <br>
<div class=spctrl></div>
　　l 如果你想把所有的美国客户的联系信息都&#8220;推&#8221;到位于到西雅图办公室（负责营销）的LDAP服务器上，但是你不想把公司的资产管理信息&#8220;推&#8221;到那里。 <br>
<div class=spctrl></div>
　　l 你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里，资产管理组对&#8220;asset-mgmt"部分有完全的访问权限，但是不能访问其它地方。 <br>
<div class=spctrl></div>
　　l 把LDAP存储和复制功能结合起来，可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状况的信息，但是欧洲的销售情况就只要每小时更新一次就行了。 <br>
<div class=spctrl></div>
　　刨根问底：基准DN <br>
<div class=spctrl></div>
　　LDAP目录树的最顶部就是根，也就是所谓的&#8220;基准DN"。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar的电子商务公司工作，这家公司在Internet上的名字是foobar.com。 <br>
<div class=spctrl></div>
　　o="FooBar, Inc.", c=US <br>
<div class=spctrl></div>
　　（以X.500格式表示的基准DN） <br>
<div class=spctrl></div>
　　在这个例子中，o=FooBar, Inc. 表示组织名，在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前，一般都用这种方式来表示基准DN。但是事物总是在不断变化的，现在所有的公司都已经（或计划）上Internet上。随着Internet的全球化，在基准DN中使用国家代码很容易让人产生混淆。现在，X.500格式发展成下面列出的两种格式。 <br>
<div class=spctrl></div>
　　o=foobar.com <br>
<div class=spctrl></div>
　　（用公司的Internet地址表示的基准DN） <br>
<div class=spctrl></div>
　　这种格式很直观，用公司的域名作为基准DN。这也是现在最常用的格式。 <br>
<div class=spctrl></div>
　　dc=foobar, dc=com <br>
<div class=spctrl></div>
　　（用DNS域名的不同部分组成的基准DN） <br>
<div class=spctrl></div>
　　就象上面那一种格式，这种格式也是以DNS域名为基础的，但是上面那种格式不改变域名（也就更易读），而这种格式把域名：foobar.com分成两部分 dc=foobar, dc=com。在理论上，这种格式可能会更灵活一点，但是对于最终用户来说也更难记忆一点。考虑一下foobar.com这个例子。当foobar.com和gizmo.com合并之后，可以简单的把&#8220;dc=com"当作基准DN。把新的记录放到已经存在的dc=gizmo, dc=com目录下，这样就简化了很多工作（当然，如果foobar.com和wocket.edu合并，这个方法就不能用了）。如果LDAP服务器是新安装的，我建议你使用这种格式。再请注意一下，如果你打算使用活动目录（Actrive Directory），Microsoft已经限制你必须使用这种格式。 <br>
<div class=spctrl></div>
　　更上一层楼：在目录树中怎么组织数据 <br>
<div class=spctrl></div>
　　在UNIX文件系统中，最顶层是根目录（root）。在根目录的下面有很多的文件和目录。象上面介绍的那样，LDAP目录也是用同样的方法组织起来的。 <br>
<div class=spctrl></div>
　　在根目录下，要把数据从逻辑上区分开。因为历史上（X.500）的原因，大多数LDAP目录用OU从逻辑上把数据分开来。OU表示&#8220;Organization Unit"，在X.500协议中是用来表示公司内部的机构：销售部、财务部，等等。现在LDAP还保留ou=这样的命名规则，但是扩展了分类的范围，可以分类为：ou=people, ou=groups, ou=devices，等等。更低一级的OU有时用来做更细的归类。例如：LDAP目录树（不包括单独的记录）可能会是这样的： <br>
<div class=spctrl></div>
　　dc=foobar, dc=com <br>
<div class=spctrl></div>
　　ou=customers <br>
<div class=spctrl></div>
　　ou=asia <br>
<div class=spctrl></div>
　　ou=europe <br>
<div class=spctrl></div>
　　ou=usa <br>
<div class=spctrl></div>
　　ou=employees <br>
<div class=spctrl></div>
　　ou=rooms <br>
<div class=spctrl></div>
　　ou=groups <br>
<div class=spctrl></div>
　　ou=assets-mgmt <br>
<div class=spctrl></div>
　　ou=nisgroups <br>
<div class=spctrl></div>
　　ou=recipes <br>
<div class=spctrl></div>
　　单独的LDAP记录 <br>
<div class=spctrl></div>
　　DN是LDAP记录项的名字 <br>
<div class=spctrl></div>
　　在LDAP目录中的所有记录项都有一个唯一的&#8220;Distinguished Name"，也就是DN。每一个LDAP记录项的DN是由两个部分组成的：相对DN（RDN）和记录在LDAP目录中的位置。 <br>
<div class=spctrl></div>
　　RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字，这个名字通常存在cn（Common Name）这个属性里。因为几乎所有的东西都有一个名字，在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的吃燕麦粥食谱存为一个记录，我就会用cn=Oatmeal Deluxe作为记录项的RDN。 <br>
<div class=spctrl></div>
　　l 我的LDAP目录的基准DN是dc=foobar,dc=com <br>
<div class=spctrl></div>
　　l 我把自己的食谱作为LDAP的记录项存在ou=recipes <br>
<div class=spctrl></div>
　　l 我的LDAP记录项的RDN设为cn=Oatmeal Deluxe <br>
<div class=spctrl></div>
　　上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住，DN的读法和DNS主机名类似。下面就是完整的DN： <br>
<div class=spctrl></div>
　　cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com <br>
<div class=spctrl></div>
　　举一个实际的例子来说明DN <br>
<div class=spctrl></div>
　　现在为公司的员工设置一个DN。可以用基于cn或uid（User ID），作为典型的用户帐号。例如，FooBar的员工Fran Smith（登录名：fsmith）的DN可以为下面两种格式： <br>
<div class=spctrl></div>
　　uid=fsmith,ou=employees,dc=foobar,dc=com <br>
<div class=spctrl></div>
　　（基于登录名） <br>
<div class=spctrl></div>
　　LDAP（以及X.500）用uid表示&#8220;User ID"，不要把它和UNIX的uid号混淆了。大多数公司都会给每一个员工唯一的登录名，因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫Fran Smith的加入公司，如果Fran改变了她的名字（结婚？离婚？或宗教原因？），也用不着改变LDAP记录项的DN。 <br>
<div class=spctrl></div>
　　cn=Fran Smith,ou=employees,dc=foobar,dc=com <br>
<div class=spctrl></div>
　　（基于姓名） <br>
<div class=spctrl></div>
　　可以看到这种格式使用了Common Name（CN）。可以把Common Name当成一个人的全名。这种格式有一个很明显的缺点就是：如果名字改变了，LDAP的记录就要从一个DN转移到另一个DN。但是，我们应该尽可能地避免改变一个记录项的DN。 <br>
<div class=spctrl></div>
　　定制目录的对象类型 <br>
<div class=spctrl></div>
　　你可以用LDAP存储各种类型的数据对象，只要这些对象可以用属性来表示，下面这些是可以在LDAP中存储的一些信息： <br>
<div class=spctrl></div>
　　l 员工信息：员工的姓名、登录名、口令、员工号、他的经理的登录名，邮件服务器，等等。 <br>
<div class=spctrl></div>
　　l 物品跟踪信息：计算机名、IP地址、标签、型号、所在位置，等等。 <br>
<div class=spctrl></div>
　　l 客户联系列表：客户的公司名、主要联系人的电话、传真和电子邮件，等等。 <br>
<div class=spctrl></div>
　　l 会议厅信息：会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。 <br>
<div class=spctrl></div>
　　l 食谱信息：菜的名字、配料、烹调方法以及准备方法。 <br>
<div class=spctrl></div>
　　因为LDAP目录可以定制成存储任何文本或二进制数据，到底存什么要由你自己决定。LDAP目录用对象类型（object classes）的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中，你都要根据自己的需要扩展基本的LDAP目录的功能，创建新的对象类型或者扩展现存的对象类型。 <br>
<div class=spctrl></div>
　　LDAP目录以一系列&#8220;属性对&#8221;的形式来存储记录项，每一个记录项包括属性类型和属性值（这与关系型数据库用行和列来存取数据有根本的不同）。下面是我存在LDAP目录中的一部分食谱记录： <br>
<div class=spctrl></div>
　　dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com <br>
<div class=spctrl></div>
　　cn: Instant Oatmeal Deluxe <br>
<div class=spctrl></div>
　　recipeCuisine: breakfast <br>
<div class=spctrl></div>
　　recipeIngredient: 1 packet instant oatmeal <br>
<div class=spctrl></div>
　　recipeIngredient: 1 cup water <br>
<div class=spctrl></div>
　　recipeIngredient: 1 pinch salt <br>
<div class=spctrl></div>
　　recipeIngredient: 1 tsp brown sugar <br>
<div class=spctrl></div>
　　recipeIngredient: 1/4 apple, any type <br>
<div class=spctrl></div>
　　请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的，而不是在每一个属性的后面用逗号把一系列值分开。 <br>
<div class=spctrl></div>
　　因为用这样的方式存储数据，所以数据库就有很大的灵活性，不必为加入一些新的数据就重新创建表和索引。更重要的是，LDAP目录不必花费内存或硬盘空间处理&#8220;空&#8221;域，也就是说，实际上不使用可选择的域也不会花费你任何资源。 <br>
<div class=spctrl></div>
　　作为例子的一个单独的数据项 <br>
<div class=spctrl></div>
　　让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIF，用来导入和导出LDAP目录的记录项。 <br>
<div class=spctrl></div>
　　dn: uid=fsmith, ou=employees, dc=foobar, dc=com <br>
<div class=spctrl></div>
　　objectclass: person <br>
<div class=spctrl></div>
　　objectclass: organizationalPerson <br>
<div class=spctrl></div>
　　objectclass: inetOrgPerson <br>
<div class=spctrl></div>
　　objectclass: foobarPerson <br>
<div class=spctrl></div>
　　uid: fsmith <br>
<div class=spctrl></div>
　　givenname: Fran <br>
<div class=spctrl></div>
　　sn: Smith <br>
<div class=spctrl></div>
　　cn: Fran Smith <br>
<div class=spctrl></div>
　　cn: Frances Smith <br>
<div class=spctrl></div>
　　telephonenumber: 510-555-1234 <br>
<div class=spctrl></div>
　　roomnumber: 122G <br>
<div class=spctrl></div>
　　o: Foobar, Inc. <br>
<div class=spctrl></div>
　　mailRoutingAddress: fsmith@foobar.com <br>
<div class=spctrl></div>
　　mailhost: mail.foobar.com <br>
<div class=spctrl></div>
　　userpassword: {crypt}3x1231v76T89N <br>
<div class=spctrl></div>
　　uidnumber: 1234 <br>
<div class=spctrl></div>
　　gidnumber: 1200 <br>
<div class=spctrl></div>
　　homedirectory: /home/fsmith <br>
<div class=spctrl></div>
　　loginshell: /usr/local/bin/bash <br>
<div class=spctrl></div>
　　属性的值在保存的时候是保留大小写的，但是在默认情况下搜索的时候是不区分大小写的。某些特殊的属性（例如，password）在搜索的时候需要区分大小写。 <br>
<div class=spctrl></div>
　　让我们一点一点地分析上面的记录项。 <br>
<div class=spctrl></div>
　　dn: uid=fsmith, ou=employees, dc=foobar, dc=com <br>
<div class=spctrl></div>
　　这是Fran的LDAP记录项的完整DN，包括在目录树中的完整路径。LDAP（和X.500）使用uid（User ID），不要把它和UNIX的uid号混淆了。 <br>
<div class=spctrl></div>
　　objectclass: person <br>
<div class=spctrl></div>
　　objectclass: organizationalPerson <br>
<div class=spctrl></div>
　　objectclass: inetOrgPerson <br>
<div class=spctrl></div>
　　objectclass: foobarPerson <br>
<div class=spctrl></div>
　　可以为任何一个对象根据需要分配多个对象类型。person对象类型要求cn（common name）和sn（surname）这两个域不能为空。persion对象类型允许有其它的可选域，包括givenname、telephonenumber，等等。organizational Person给person加入更多的可选域，inetOrgPerson又加入更多的可选域（包括电子邮件信息）。最后，foobarPerson是为Foobar定制的对象类型，加入了很多定制的属性。 <br>
<div class=spctrl></div>
　　uid: fsmith <br>
<div class=spctrl></div>
　　givenname: Fran <br>
<div class=spctrl></div>
　　sn: Smith <br>
<div class=spctrl></div>
　　cn: Fran Smith <br>
<div class=spctrl></div>
　　cn: Frances Smith <br>
<div class=spctrl></div>
　　telephonenumber: 510-555-1234 <br>
<div class=spctrl></div>
　　roomnumber: 122G <br>
<div class=spctrl></div>
　　o: Foobar, Inc. <br>
<div class=spctrl></div>
　　以前说过了，uid表示User ID。当看到uid的时候，就在脑袋里想一想&#8220;login"。 <br>
<div class=spctrl></div>
　　请注意CN有多个值。就象上面介绍的，LDAP允许某些属性有多个值。为什么允许有多个值呢？假定你在用公司的LDAP服务器查找Fran的电话号码。你可能只知道她的名字叫Fran，但是对人力资源处的人来说她的正式名字叫做Frances。因为保存了她的两个名字，所以用任何一个名字检索都可以找到Fran的电话号码、电子邮件和办公房间号，等等。 <br>
<div class=spctrl></div>
　　mailRoutingAddress: fsmith@foobar.com <br>
<div class=spctrl></div>
　　mailhost: mail.foobar.com <br>
<div class=spctrl></div>
　　就象现在大多数的公司都上网了，Foobar用Sendmail发送邮件和处理外部邮件路由信息。Foobar把所有用户的邮件信息都存在LDAP中。最新版本的Sendmail支持这项功能。 <br>
<div class=spctrl></div>
　　Userpassword: {crypt}3x1231v76T89N <br>
<div class=spctrl></div>
　　uidnumber: 1234 <br>
<div class=spctrl></div>
　　gidnumber: 1200 <br>
<div class=spctrl></div>
　　gecos: Frances Smith <br>
<div class=spctrl></div>
　　homedirectory: /home/fsmith <br>
<div class=spctrl></div>
　　loginshell: /usr/local/bin/bash <br>
<div class=spctrl></div>
　　注意，Foobar的系统管理员把所有用户的口令映射信息也都存在LDAP中。FoobarPerson类型的对象具有这种能力。再注意一下，用户口令是用UNIX的口令加密格式存储的。UNIX的uid在这里为uidnumber。提醒你一下，关于如何在LDAP中保存NIS信息，有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成。 <br>
<div class=spctrl></div>
　　LDAP复制 <br>
<div class=spctrl></div>
　　LDAP服务器可以使用基于&#8220;推&#8221;或者&#8220;拉&#8221;的技术，用简单或基于安全证书的安全验证，复制一部分或者所有的数据。 <br>
<div class=spctrl></div>
　　例如，Foobar有一个&#8220;公用的&#8221;LDAP服务器，地址为ldap.foobar.com，端口为389。Netscape Communicator的电子邮件查询功能、UNIX的&#8220;ph"命令要用到这个服务器，用户也可以在任何地方查询这个服务器上的员工和客户联系信息。公司的主LDAP服务器运行在相同的计算机上，不过端口号是1389。 <br>
<div class=spctrl></div>
　　你可能即不想让员工查询资产管理或食谱的信息，又不想让信息技术人员看到整个公司的LDAP目录。为了解决这个问题，Foobar有选择地把子目录树从主LDAP服务器复制到&#8220;公用&#8221;LDAP服务器上，不复制需要隐藏的信息。为了保持数据始终是最新的，主目录服务器被设置成即时&#8220;推&#8221;同步。这些种方法主要是为了方便，而不是安全，因为如果有权限的用户想查询所有的数据，可以用另一个LDAP端口。 <br>
<div class=spctrl></div>
　　假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。可以建立从ldap.foobar.com:1389到munich-ldap.foobar.com:389的数据复制，象下面这样： <br>
<div class=spctrl></div>
　　periodic pull: ou=asia,ou=customers,o=sendmail.com <br>
<div class=spctrl></div>
　　periodic pull: ou=us,ou=customers,o=sendmail.com <br>
<div class=spctrl></div>
　　immediate push: ou=europe,ou=customers,o=sendmail.com <br>
<div class=spctrl></div>
　　&#8220;拉&#8221;连接每15分钟同步一次，在上面假定的情况下足够了。&#8220;推&#8221;连接保证任何欧洲的联系信息发生了变化就立即被&#8220;推&#8221;到Munich。 <br>
<div class=spctrl></div>
　　用上面的复制模式，用户为了访问数据需要连接到哪一台服务器呢？在Munich的用户可以简单地连接到本地服务器。如果他们改变了数据，本地的LDAP服务器就会把这些变化传到主LDAP服务器。然后，主LDAP服务器把这些变化&#8220;推&#8221;回本地的&#8220;公用&#8221;LDAP服务器保持数据的同步。这对本地的用户有很大的好处，因为所有的查询（大多数是读）都在本地的服务器上进行，速度非常快。当需要改变信息的时候，最终用户不需要重新配置客户端的软件，因为LDAP目录服务器为他们完成了所有的数据交换工作。<br>
<div class=spctrl></div>
　　<strong>LDAP诠释</strong><br>
<div class=spctrl></div>
　　1. LDAP介绍 4<br>
<div class=spctrl></div>
　　1.1. LDAP是什么 4<br>
<div class=spctrl></div>
　　1.2. LDAP是电话簿 4<br>
<div class=spctrl></div>
　　1.3. LDAP是不是数据库 4<br>
<div class=spctrl></div>
　　2. LDAP的特点 5<br>
<div class=spctrl></div>
　　2.1. LDAP的优势 5<br>
<div class=spctrl></div>
　　2.1.1 跨平台 5<br>
<div class=spctrl></div>
　　2.1.2 费用及维护 5<br>
<div class=spctrl></div>
　　2.1.3 复制技术 5<br>
<div class=spctrl></div>
　　2.1.4 允许使用ACI 5<br>
<div class=spctrl></div>
　　2.2. LDAP存储什么数据 6<br>
<div class=spctrl></div>
　　2.3. 什么时候该用LDAP存储数据 6<br>
<div class=spctrl></div>
　　3. LDAP的基本模型 7<br>
<div class=spctrl></div>
　　3.1 信息模型：描述LDAP的信息表示方式 7<br>
<div class=spctrl></div>
　　3.2 命名模型：描述LDAP中的数据如何组织 7<br>
<div class=spctrl></div>
　　3.3 功能模型：描述LDAP中的数据操作访问 7<br>
<div class=spctrl></div>
　　3.4 安全模型：描述LDAP中的安全机制 8<br>
<div class=spctrl></div>
　　3.4.1 身份认证 8<br>
<div class=spctrl></div>
　　3.4.2 通讯安全 8<br>
<div class=spctrl></div>
　　3.4.3 访问控制 8<br>
<div class=spctrl></div>
　　4. LDAP数据结构 9<br>
<div class=spctrl></div>
　　4.1 树状组织 9<br>
<div class=spctrl></div>
　　4.2 条目和条目认证 9<br>
<div class=spctrl></div>
　　4.3 数据样式（schema） 9<br>
<div class=spctrl></div>
　　4.4 对象类型(objectClass) 9<br>
<div class=spctrl></div>
　　4.5 过滤器和语法 10<br>
<div class=spctrl></div>
　　4.6 树移植 10<br>
<div class=spctrl></div>
　　4.7 LDIF交换文件 10<br>
<div class=spctrl></div>
　　4.8 JAVA或CORBA对象串行化存储 10<br>
<div class=spctrl></div>
　　1.1. LDAP是什么<br>
<div class=spctrl></div>
　　LDAP是轻量目录访问协议，英文全称是Lightweight Directory Access Protocol，一般都简称为LDAP。它是基于X.500标准的，但是简单多了并且可以根据需要定制。与X.500不同，LDAP支持TCP/IP，这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义，所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。<br>
<div class=spctrl></div>
　　简单说来，LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。 <br>
<div class=spctrl></div>
　　LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用，不过根据组织者的需要，它可以做得更加强大。 <br>
<div class=spctrl></div>
　　1.2. LDAP是电话簿<br>
<div class=spctrl></div>
　　LDAP其实是一电话簿，类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络目录，也类似于你在花园中所看到的树木。 <br>
<div class=spctrl></div>
　　1.3. LDAP是不是数据库<br>
<div class=spctrl></div>
　　不少LDAP开发人员喜欢把LDAP与关系数据库相比，认为是另一种的存贮方式，然后在读性能上进行比较。实际上，这种对比的基础是错误的。LDAP和关系数据库是两种不同层次的概念，后者是存贮方式（同一层次如网格数据库，对象数据库），前者是存贮模式和访问协议。LDAP是一个比关系数据库抽象层次更高的存贮概念，与关系数据库的查询语言SQL属同一级别。LDAP最基本的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果，不过在其它方面，例如更新，就慢得多。<br>
<div class=spctrl></div>
　　从另一个意义上 LDAP是实现了指定的数据结构的存贮，它是一种特殊的数据库。但是LDAP和一般的数据库不同，明白这一点是很重要的。 LDAP对查询进行了优化，与写性能相比LDAP的读性能要优秀很多。<br>
<div class=spctrl></div>
　　就象Sybase、Oracle、Informix或Microsoft的数据库管理系统（DBMS）是用于处理查询和更新关系型数据库那样，LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库，但不是关系型数据库。要特别注意的是，LDAP通常作为一个hierarchal数据库使用，而不是一个关系数据库。因此，它的结构用树来表示比用表格好。正因为这样，就不能用SQL语句了。 <br>
<div class=spctrl></div>
　　2. LDAP的特点<br>
<div class=spctrl></div>
　　2.1. LDAP的优势<br>
<div class=spctrl></div>
　　2.1.1 跨平台<br>
<div class=spctrl></div>
　　LDAP最大的优势是：可以在任何计算机平台上，用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。<br>
<div class=spctrl></div>
　　LDAP协议是跨平台的和标准的协议，因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上，LDAP得到了业界的广泛认可，因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持，因为他们根本不用考虑另一端（客户端或服务端）是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器（或者还可能是具有LDAP界面的关系型数据库），因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。与LDAP不同的是，如果软件产商想在软件产品中集成对DBMS的支持，那么通常都要对每一个数据库服务器单独定制。<br>
<div class=spctrl></div>
　　2.1.2 费用及维护<br>
<div class=spctrl></div>
　　不象很多商用的关系型数据库，你不必为LDAP的每一个客户端连接或许可协议付费。<br>
<div class=spctrl></div>
　　大多数的LDAP服务器安装起来很简单，也容易维护和优化。<br>
<div class=spctrl></div>
　　2.1.3 复制技术<br>
<div class=spctrl></div>
　　LDAP服务器可以用"推"或"拉"的方法复制部分或全部数据，例如：可以把数据"推"到远程的办公室，以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能，数据库产商就会要你支付额外的费用，而且也很难管理。<br>
<div class=spctrl></div>
　　2.1.4 允许使用ACI<br>
<div class=spctrl></div>
　　LDAP允许你根据需要使用ACI（一般都称为ACL或者访问控制列表）控制对数据读和写的权限。例如，设备管理员可以有权改变员工的工作地点和办公室号码，但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的，所以不用担心在客户端的应用程序上是否要进行安全检查。<br>
<div class=spctrl></div>
　　2.2. LDAP存储什么数据<br>
<div class=spctrl></div>
　　LDAP对于这样存储这样的信息最为有用：也就是数据需要从不同的地点读取，但是不需要经常更新。例如，这些信息存储在LDAP目录中是十分有效的：<br>
<div class=spctrl></div>
　　l 公司员工的电话号码簿和组织结构图<br>
<div class=spctrl></div>
　　l 客户的联系信息<br>
<div class=spctrl></div>
　　l 计算机管理需要的信息，包括NIS映射、email假名，等等<br>
<div class=spctrl></div>
　　l 软件包的配置信息<br>
<div class=spctrl></div>
　　l 公用证书和安全密匙<br>
<div class=spctrl></div>
　　2.3. 什么时候该用LDAP存储数据<br>
<div class=spctrl></div>
　　大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此，当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化，大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如，用LDAP服务器来存储电话号码是一个很好的选择，但是它不能作为电子商务站点的数据库服务器。<br>
<div class=spctrl></div>
　　如果下面每一个问题的答案都是"是"，那么把数据存在LDAP中就是一个好主意。<br>
<div class=spctrl></div>
　　l 需要在任何平台上都能读取数据吗？<br>
<div class=spctrl></div>
　　l 每一个单独的记录项是不是每一天都只有很少的改变？<br>
<div class=spctrl></div>
　　l 可以把数据存在平面数据库（flat database）而不是关系型数据库中吗？换句话来说，也就是不管什么范式不范式的，把所有东西都存在一个记录中（差不多只要满足第一范式）。<br>
<div class=spctrl></div>
　　最后一个问题可能会唬住一些人，其实用平面数据库去存储一些关系型的数据也是很一般的。例如，一条公司员工的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法：如果可以把保数据存在一张张的卡片里，就可以很容易地把它存在LDAP目录里。<br>
<div class=spctrl></div>
　　3. LDAP的基本模型 <br>
<div class=spctrl></div>
　　3.1 信息模型：描述LDAP的信息表示方式 <br>
<div class=spctrl></div>
　　在LDAP中信息以树状方式组织，在树状信息中的基本数据单元是条目，而每个条目由属性构成，属性中存储有属性值；LDAP中的信息模式，类似于面向对象的概念，在LDAP中每个条目必须属于某个或多个对象类（Object Class），每个Object Class由多个属性类型组成，每个属性类型有所对应的语法和匹配规则；对象类和属性类型的定义均可以使用继承的概念。每个条目创建时，必须定义所属的对象类，必须提供对象类中的必选属性类型的属性值，在LDAP中一个属性类型可以对应多个值。 <br>
<div class=spctrl></div>
　　在LDAP中把对象类、属性类型、语法和匹配规则统称为Schema，在LDAP中有许多系统对象类、属性类型、语法和匹配规则，这些系统Schema在LDAP标准中进行了规定，同时不同的应用领域也定义了自己的Schema，同时用户在应用时，也可以根据需要自定义Schema。这有些类似于XML，除了XML标准中的XML定义外，每个行业都有自己标准的DTD或DOM定义，用户也可以自扩展；也如同XML，在LDAP中也鼓励用户尽量使用标准的Schema，以增强信息的互联互通。 <br>
<div class=spctrl></div>
　　在Schema中最难理解的是匹配规则，这是LDAP中为了加快查询的速度，针对不同的数据类型，可以提供不同的匹配方法，如针对字符串类型的相等、模糊、大于小于均提供自己的匹配规则。 <br>
<div class=spctrl></div>
　　3.2 命名模型：描述LDAP中的数据如何组织 <br>
<div class=spctrl></div>
　　LDAP中的命名模型，也即LDAP中的条目定位方式。在LDAP中每个条目均有自己的DN和RDN。DN是该条目在整个树中的唯一名称标识，RDN是条目在父节点下的唯一名称标识，如同文件系统中，带路径的文件名就是DN，文件名就是RDN。 <br>
<div class=spctrl></div>
　　3.3 功能模型：描述LDAP中的数据操作访问 <br>
<div class=spctrl></div>
　　在LDAP中共有四类10种操作：查询类操作，如搜索、比较；更新类操作，如添加条目、删除条目、修改条目、修改条目名；认证类操作，如绑定、解绑定；其它操作，如放弃和扩展操作。除了扩展操作，另外9种是LDAP的标准操作；扩展操作是LDAP中为了增加新的功能，提供的一种标准的扩展框架，当前已经成为LDAP标准的扩展操作，有修改密码和StartTLS扩展，在新的RFC标准和草案中正在增加一些新的扩展操作，不同的LDAP厂商也均定义了自己的扩展操作。 <br>
<div class=spctrl></div>
　　3.4 安全模型：描述LDAP中的安全机制 <br>
<div class=spctrl></div>
　　LDAP中的安全模型主要通过身份认证、安全通道和访问控制来实现。 <br>
<div class=spctrl></div>
　　3.4.1 身份认证<br>
<div class=spctrl></div>
　　在LDAP中提供三种认证机制，即匿名、基本认证和SASL（Simple Authentication and Secure Layer）认证。匿名认证即不对用户进行认证，该方法仅对完全公开的方式适用；基本认证均是通过用户名和密码进行身份识别，又分为简单密码和摘要密码认证；SASL认证即LDAP提供的在SSL和TLS安全通道基础上进行的身份认证，包括数字证书的认证。 <br>
<div class=spctrl></div>
　　3.4.2 通讯安全<br>
<div class=spctrl></div>
　　在LDAP中提供了基于SSL/TLS的通讯安全保障。SSL/TLS是基于PKI信息安全技术，是目前Internet上广泛采用的安全服务。LDAP通过StartTLS方式启动TLS服务，可以提供通讯中的数据保密性、完整性保护；通过强制客户端证书认证的TLS服务，同时可以实现对客户端身份和服务器端身份的双向验证。 <br>
<div class=spctrl></div>
　　3.4.3 访问控制<br>
<div class=spctrl></div>
　　虽然LDAP目前并无访问控制的标准，但从一些草案中或是事实上LDAP产品的访问控制情况，我们不难看出：LDAP访问控制异常的灵活和丰富，在LDAP中是基于访问控制策略语句来实现访问控制的，这不同于现有的关系型数据库系统和应用系统，它是通过基于访问控制列表来实现的，无论是基于组模式或角色模式，都摆脱不了这种限制。 <br>
<div class=spctrl></div>
　　在使用关系型数据库系统开发应用时，往往是通过几个固定的数据库用户名访问数据库。对于应用系统本身的访问控制，通常是需要建立专门的用户表，在应用系统内开发针对不同用户的访问控制授权代码，这样一旦访问控制策略变更时，往往需要代码进行变更。总之一句话，关系型数据库的应用中用户数据管理和数据库访问标识是分离的，复杂的数据访问控制需要通过应用来实现。 <br>
<div class=spctrl></div>
　　而对于LDAP，用户数据管理和访问标识是一体的，应用不需要关心访问控制的实现。这是由于在LDAP中的访问控制语句是基于策略语句来实现的，无论是访问控制的数据对象，还是访问控制的主体对象，均是与这些对象在树中的位置和对象本身的数据特征相关。 <br>
<div class=spctrl></div>
　　在LDAP中，可以把整个目录、目录的子树、制定条目、特定条目属性集或符合某过滤条件的条目作为控制对象进行授权；可以把特定用户、属于特定组或所有目录用户作为授权主体进行授权；最后，还可以定义对特定位置（例如IP地址或DNS名称）的访问权。 <br>
<div class=spctrl></div>
　　4. LDAP数据结构<br>
<div class=spctrl></div>
　　LDAP是实现了指定的数据结构的存贮，它包括以下可以用关系数据库实现的结构要求：树状组织、条目认证、类型定义、许可树形记录拷贝。<br>
<div class=spctrl></div>
　　4.1 树状组织<br>
<div class=spctrl></div>
　　无论是X500还是LDAP都是采用树状方式进行记录。每一个树目录都有一个树根的入口条目，子记录全部是这一根条目的子孙。这是目录与关系数据类型最大的区别（关系数据库的应用结构也可实现树状记录）。因此，把目录看作是更高级的树状数据库也未尝不可，只不过除此外，它不能实现关系存贮的重要功能。<br>
<div class=spctrl></div>
　　4.2 条目和条目认证<br>
<div class=spctrl></div>
　　LDAP是以条目作为认证的根据。ROOT的权限认证与目录本身无关，但除此外所有条目的认证权限由条目本身的密码进行认证。LDAP可以配置成各种各样不同的父子条目权限继承方式。<br>
<div class=spctrl></div>
　　每一个条目相当于一个单一的平面文本记录，由条目自身或指定的条目认证进行访问控制。因此，LDAP定义的存贮结构等同于一批树状组织的平面数据库，并提供相应的访问控制。<br>
<div class=spctrl></div>
　　条目中的记录以名-值对的形式存在，每一个名值对必须由数据样式schema预定义。因此，LDAP可以看作是以规定的值类型以名值对形式存贮在一系列以树状组织的平面数据库的记录的集合。<br>
<div class=spctrl></div>
　　4.3 数据样式（schema）<br>
<div class=spctrl></div>
　　数据样式schema是针对不同的应用，由用户指定（设计）类和属性类型预定义，条目中的类(objectclass)和属性必须在在LDAP服务器启动时载入内存的schema已有定义。因此，AD活动目录中的条目记录就必须符合Active Directory的schema中。如果已提供的schema中的定义不够用，用户可以自行定义新的schema.<br>
<div class=spctrl></div>
　　在http://ldap.akbkhome.com/index.php中可以看到常用的schema。<br>
<div class=spctrl></div>
　　4.4 对象类型(objectClass)<br>
<div class=spctrl></div>
　　因为LDAP目录可以定制成存储任何文本或二进制数据，到底存什么要由你自己决定。LDAP目录用对象类型（objectclass）的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中，你都要根据自己的需要扩展基本的LDAP目录的功能，创建新的对象类型或者扩展现存的对象类型。<br>
<div class=spctrl></div>
　　条目中的记录通过objectclass实现分类，objectClass是一个继承性的类定义，每一个类定义指定必须具备的属性。如某一条目指定必须符合某个类型，则它必须具备超类所指定的属性。<br>
<div class=spctrl></div>
　　通过objectclass分类，分散的条目中的记录就实际上建立了一个索引结构，为高速的读查询打下了基础。Objectclass也是过滤器的主要查询对象。<br>
<div class=spctrl></div>
　　4.5 过滤器和语法<br>
<div class=spctrl></div>
　　LDAP是一个查询为主的记录结构，无论是何种查询方式，最终都由过滤器缺点查询的条件。过滤器相当于SQL中的WHERE子句。任何LDAP的类过滤和字符串都必须放在括号内，如（objectclass=*）,指列出所有类型的记录（不过分类）。<br>
<div class=spctrl></div>
　　可以使用=，&gt;=，&lt;=，~=（约等于）进行比较，如(number&lt;=100)。合并条件是最怪的，必须把操作符放在两个操作对象的前面而不是中间，单一操作对象用括号括起来。如<br>
<div class=spctrl></div>
　　l A与B，不是A&amp;B，而是（&amp;(A)(B)）。<br>
<div class=spctrl></div>
　　l 或使用"|"表示；<br>
<div class=spctrl></div>
　　l 非使用"！"表示。<br>
<div class=spctrl></div>
　　l 对于"与"，或"或"在操作符后可以跟多个条件表达式，但非后则只参是单个表达式。<br>
<div class=spctrl></div>
　　详见RFC1558。<br>
<div class=spctrl></div>
　　4.6 树移植<br>
<div class=spctrl></div>
　　LDAP最重要的特性和要求并不是读性能，而是扩展性。这一特性是通过树移植和树复制实现的。按LDAP的RFC要求，LDAP目录应该可以任意地在不同的目录间连接、合并并实现自动复制，及自动性同步。这意味着用户可以在任一LDAP中访问条目，而不用管其中某一部分是否复制自全世界另一目录中的记录，同时另一目录中的记录同样在正常运作。<br>
<div class=spctrl></div>
　　这一特性如果在关系数据库中实现，意味着要使用程序化的非规范化预复制。类似于汇总帐目的设计。<br>
<div class=spctrl></div>
　　4.7 LDIF交换文件<br>
<div class=spctrl></div>
　　LDIF是LDAP约定的记录交换格式，以平面文本的形式存在，是大部分LDAP内容交换的基础，如拷贝、添加、修改等操作，都是基于LDIF文件进行操作。<br>
<div class=spctrl></div>
　　4.8 JAVA或CORBA对象串行化存储<br>
<div class=spctrl></div>
　　网络高效率的访问加上JAVA的跨平台能力，当把JAVA或CORBA对象串行化后存储到LDAP目录上时，可以产生非同一般的集成效果--实际上，这正是EJB和.NET的网络定位基础技术。<br>
<div class=spctrl></div>
　　使用JAVA或CORBA对象存储时，必须首先让LDAP服务支持该对象定义，也就是说包含qmail.schema或corba.schema。<br>
<div class=spctrl></div>
　　JAVA必须存储在objectclass=javacontainer的条目中，而且必须带有cn属性，这意味着除非该JAVA类专门实现了DirContext接口，对于大多数JAVA类来说，只能采用DirContext代替Context实现bind的添加操作。取出JAVA类相对要简单得多，只需使用context.lookup()获得该对象的句柄，然后强制造型成所需要的对象就可以了,如：<br>
<div class=spctrl></div>
　　Person p=(Person)contex.lookup("cn=elvis,dc=daifu,dc=com");<br>
<div class=spctrl></div>
　　这个句法在EJB的程序中，是经常用到的。<br>
<div class=spctrl></div>
　　使用CORBA的跨语言性质，使用CORBA存储对象比JAVA更加诱人，这意味着所存储的对象可以被任何语言编写的客户端访问。其实，微软的.net说到底也非常简单，无非是把COM对象存储到微软自家的目录ActiveDirectory里面，从而可以在网络范围内使用任何微软平台的语言进行对象访问而已。众所周知，COM就是与CORBA相对的微软规范。<br>
<div class=spctrl></div>
　　使用对象串行化技术，可以把常用对象如某个打印机，某个客户直接存储到LDAP中，然后快速获取该对象的引用，这样，就比把对象信息存储到关系数据库中，分别取出属性，然后再初始化对象操作的做法，效率要高得多了。这是LDAP目前比普通关系数据库存储要优秀的地方，而对象数据库还不成熟。<br>
<div class=spctrl></div>
　　
<h3><a name=""></a>LDAP协议常见的命名格式</h3>
<br>　　LDAP协议中采用的命名格式， 因为我们需要通过名字信息访问目录对象，所以名字格式对于用户或者应用程序非常重要。活动目录支持大多数的名字格式类型。较为常用的格式有以下两种： <br>
<div class=spctrl></div>
　　<strong>（1）RFC822命名法</strong><br>
<div class=spctrl></div>
　　这种命名法的标准格式为：object_name@domain_name，形式非常类似于电子邮件地址，比如Myname@mydomain.com。活动目录为所有的用户提供了这种式的好名字，所以用户可以直接使用该友好名字当作电子邮件地址，也可以用作登录系统时的账户名。<br>
<div class=spctrl></div>
　　<strong>（2）LDAP URL 和X.500名字</strong><br>
<div class=spctrl></div>
　　任何一个支持LDAP 的客户都可以利用LDAP名通过LDAP 协议访问活动目录，LDAP 名不像普通的Internet URL 名字那么直观，但是LDAP 名往往隐藏在 应用系统的内部，最终用户很少直接使用LDAP 名。LDAP 名使用X.500 命名规 范，也称为属性化命名法，包括活动目录服务所在的服务器以及对象的属性信息。 <br>
<img src ="http://www.cppblog.com/prayer/aggbug/93192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-13 14:36 <a href="http://www.cppblog.com/prayer/archive/2009/08/13/93192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>F5公司的负载均衡解决方案</title><link>http://www.cppblog.com/prayer/archive/2009/08/10/92751.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 17:14:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/10/92751.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92751.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/10/92751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92751.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92751.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; 以整合、发布、经营商业信息而闻名于全国的国内某著名网站，日前为网络用户提供了一种新的服务，此服务的内容是为网络用户提供了一种特别安全的网上交易付款途径，其运作的实质是以此网站旗下某公司为信用中介，在买家确认收到商品前，替买卖双方暂时保管货款的一种增值服务。<br>　　这种第三方的网络支付行为，可以为网络用户有效降低交易中的支付风险。<br>该网站能够安全、快速、有效的于网络中实现该项服务，得益于其借力于F5公司的负载均衡解决方案。<br>　　F5公司根据客户对此项业务的发展目标，总结出如下负载均衡需求:<br>　　服务器负载均衡功能。<br>　　<strong>根据预设的负载策略，将不同的访问请求分发到相应的服务器。并能够通过规定方式检查服务器是否正常提供相应的服务，若发现某个服务出现异常，则采用设定的方案进行隔离，保证正常服务不受其影响。要求在正常情况下两台或多台服务器的负载基本相同，在某台服务器停机的情况下透明的容错，保证关键服务的持续,提供特别的会话保持能力, 可以根据不同应用的特点保证个别用户的访问会定位在特定的服务器,只有在这台服务器出现故障时再将访问导向到其他服务器, 并且和中间键服务器配合, 避免用户访问会话的丢失。<br></strong>&nbsp;&nbsp; SSL加速<br>　　避免SSL加解密运算对服务器造成的额外压力，提高服务器的处理能力, 保证电子商务访问的安全可靠。<br>　　HTTP压缩<br>　　通过压缩Http服务器的回应内容而提高Web用户访问速度, 降低服务器回应的网络流量。<br>&nbsp;&nbsp; 连接优化:OneConnection <br>　　通过OneConnection技术，卸载服务器端的处理压力，提升服务器处理性能。<br>　　RateShaping<br>　　通过流量整形和Qos机制区分和保证重要应用的带宽和服务等级。<br>　　高可靠性。<br>　　通过HA等方式保证系统的7x24小时服务，保证系统的高可靠性。<br>&nbsp;&nbsp; 采用两台BIGIP 6400提供给网站服务器负载均衡和流量管理)<br>　　F5公司在这个极有针对性的技术方案中，除了将多种高级的流量管理技术结合使用，大大改善服务器端处理能力和用户端访问速度，还利用F5的BIGIP 6400优异的硬件平台，使今后SSL 处理能力可以扩充到15100 TPS，其与Nokia的Cluster构架成功配合，还可以消除网络中单点故障。堪称一种完美组合!<br>　　网站在采用了F5的解决方案后，其服务器可每日轻松接待巨大的用户访问量，F5公司出色的网站服务器负载均衡和流量管理技术，使该网站的此项服务在运营中顺畅有序。<br>　　F5将其成熟的产品，出色的解决方案扩张到了一个新的领域，为该网站的用户创造了一个网络交易的安全天平。<br>&nbsp;</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/mengtech/archive/2008/04/09/2268355.aspx">http://blog.csdn.net/mengtech/archive/2008/04/09/2268355.aspx</a></p>
<img src ="http://www.cppblog.com/prayer/aggbug/92751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-10 01:14 <a href="http://www.cppblog.com/prayer/archive/2009/08/10/92751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>F5简介</title><link>http://www.cppblog.com/prayer/archive/2009/08/10/92750.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 17:12:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/10/92750.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92750.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/10/92750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92750.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92750.html</trackback:ping><description><![CDATA[<div class=t_msgfont id=message9565849>F5&nbsp;&nbsp;是网络设备，它以一定的频率探测一组服务器的某个port确认服务是否正常，对外提供一个统一的虚拟ip，应用访问这个虚拟ip之后，f5 将这个请求转发到服务器群组里面的可以提供服务的服务器上。 然后返回信息也经过f5到请求端。<br><br>这样f5 就做了一个负载均衡的工作，当然也提供了高可用的功能。<br><br>通常提供web 服务的比较多一些，尤其是无连接状态的。 数据库也可以使用f5，不过有些应用服务器在f5自身发生设备切换的时候重连容易出问题。<br><br></div>
F5是硬件的负载均衡设备<br>HA是软件的实现高可用系统<br>
<img src ="http://www.cppblog.com/prayer/aggbug/92750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-10 01:12 <a href="http://www.cppblog.com/prayer/archive/2009/08/10/92750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>F5负载均衡器简明配置手册(转)</title><link>http://www.cppblog.com/prayer/archive/2009/08/10/92749.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 17:06:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/10/92749.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92749.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/10/92749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92749.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92749.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 今天在值班的时候突然接到电话，说要更改F5的一个配置，结果登陆到F5的web界面上，突然觉得这些东西都超级陌生了，呵呵，技术这个东西看来确实是需要经常的练习的啊，虽然没有要求我们专业的维护，但是对于一个运维人员来说，基本的操作应该要会的吧，找到一篇简单的基于ssh的说明，温故一下。
<h4>F5负载均衡器简明配置手册</h4>
负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层，实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外，还有分析应用层的信息，如HTTP协议URI或Cookie信息。<br>一、F5配置步骤：<br>1、F5组网规划<br>(1)组网拓朴图（具体到网络设备物理端口的分配和连接，服务器网卡的分配与连接）<br>(2)IP地址的分配（具体到网络设备和服务器网卡的IP地址的分配）<br>(3)F5上业务的VIP、成员池、节点、负载均衡算法、策略保持方法的确定<br>2、F5配置前的准备工作<br>(1)版本检查<br>f5-portal-1:~# b version <br>Kernel:<br>BIG-IP Kernel 4.5PTF-07 Build18 <br>(2)时间检查－－如不正确，请到单用户模式下进行修改<br>f5-portal-1:~# date<br>Thu May 20 15:05:10 CST 2004 <br>(3)申请license－－现场用的F5都需要自己到F5网站上申请license<br>3、F5　的通用配置<br>(1)在安全要求允许的情况下，在setup菜单中可以打开telnet及ftp功能，便于以后方便维护<br>(2)配置vlan unique_mac选项，此选项是保证F5上不同的vlan 的MAC地址不一样。在缺省情况下，F5的各个vlan的MAC地址是一样的，建议在配置时，把此项统一选择上。可用命令ifconfig &#8211;a来较验 <br>具体是system/Advanced Properties/vlan unique_mac<br>(3)配置snat any_ip选项选项，此选项为了保证内网的机器做了snat后，可以对ping的数据流作转换。Ping是第三层的数据包，缺省情况下F5是不对ping的数据包作转换，也就是internal vlan的主机无法ping external vlan的机器。（注意：还可以采用telnet来验证。） <br>具体是system/Advanced Properties/snat any_ip<br>4、F5 的初始化配置<br>建议在对F5进行初始时都用命令行方式来进行初始化（用Web页面初始化的方式有时会有问题）。登录到命令行上，运行config或setup命令可以进行初始化配置。初次运行时会提示一些license的信息。<br>default:~# config <br>5、F5双机切换监控配置（有F5双机时需要）<br>(1)在web页面中选择相应的vlan，在arm failsafe选择则可。Timeout为从F5收不到包的时间起，经过多长时间就发生切换。此配置不能同步，需要在F5的主备机上同时配置。每个vlan都可以配置vlan arm failsafe。<br>具体在Network下<br>(2)在web页面中选择system，在redundant properties中把gateway failsafe选择则可。Router是需要监控的地址。此配置不能同步，需要在F5的主备机上同时配置。一套F5上只能配置一个gateway failsafe<br>具体在system/redundant properties/gateway failsafe<br>6、F5　MAC　masquerade配置<br>Mac Masquerading是F5的Shared IP Address (Floating)的MAC地址，F5如果不配置此项，则shared IP Address的MAC地址与每台F5的vlan self IP Address的MAC地址是一样的。<br>一般服务器是以shared IP Address为网关，在两台F5上都配置了Mac Masquerade（相同的MAC地址），这样当F5发生切换后，服务器上shared IP address的MAC不变，保证了业务的不中断<br>具体在Network下<br>7、F5的pool配置<br>(1)在配置工具Web页面的导航面板中选择&#8220;Pools&#8221;中的&#8220;Pools&#8221;标签，点击&#8220;ADD&#8221;按钮添加服务器池(Pool)。<br>(2)在池属性（Pool Properties）中的&#8220;Load Balancing Method&#8221;表格中选择负载均衡策略，通常采用默认策略：&#8220;Round Robin&#8221; <br>(3)在&#8220;Resouces&#8221;表格中的&#8220;Member Address&#8221;文本框输入成员IP地址，在&#8220;Service&#8221;文本框中输入服务端口，点击&#8220;&gt;&gt;&#8221;添加到&#8220;Current Members&#8221;当前成员列表中。<br>(4)添加所有组成员，点击&#8220;Done&#8221;完成配置。 <br>(5)在&#8220;Pools&#8221;中的&#8220;Pool Name&#8221;列选中特定池，然后池属性页面中选择&#8220;Persistence&#8221;标签。 <br>(6)在&#8220;Persistence Type&#8221;表格中选定会话保持类型。点击&#8220;Apply&#8221;应用配置。<br>8、F5的virtual server配置<br>(1)在配置工具Web页面的导航面板中选择&#8220;Virtual Servers&#8221;中的&#8220;Virtual Servers&#8221;标签，点击&#8220;ADD&#8221;按钮添加虚拟服务器。 <br>(2)在&#8220;Add Virtual Server&#8221;窗口的&#8220;Address&#8221;文本框中输入虚拟服务器IP地址，并在&#8220;Service&#8221;文本框中输入服务端口号或在下拉框中选择现有的服务名称，点击&#8220;Next&#8221;执行下一步。 <br>(3)在&#8220;Add Virtual Server&#8221;窗口的&#8220;Configure Basic Properties&#8221;页面中点击&#8220;Next&#8221;执行下一步。 在&#8220;Add Virtual Server&#8221;窗口的&#8220;Select Physical Resources&#8221;页面中点击单选按钮&#8220;Pool&#8221;，并在下拉框中选择虚拟服务器对应的负载均衡池。 <br>(4)按&#8220;Done&#8221;完成创建虚拟服务器。<br>9、F5的monitor的配置<br>(1)在配置工具Web页面的导航面板中选择&#8220;Monitor&#8221;中的&#8220;Monitors&#8221;标签，点击&#8220;ADD&#8221;按钮添加监控<br>(2)根据需要选择相关关联类型：&#8220;Node Associations&#8221;标签、Node Address Associations&#8221;标签、Service Associations&#8221;标签。<br>(3)被选关联标签中，在&#8220;Choose Monitor&#8221;表格中选择监控名称，点击&#8220;&gt;&gt;&#8221;按钮添加到&#8220;Monitor Rule&#8221;监控规格文本框中。监控规则可以为一条或多条。<br>(4)选择监控规则后，在对应节点的&#8220;Associate Current Monitor Rule&#8221;复选框中选中。如果欲删除监控关联，则选中对应节点的&#8220;Delete Existing Assocation&#8221;复选框。<br>(5)点击&#8220;Apply&#8221;关联监控<br>10、F5的SNAT配置<br>(1)在配置工具Web页面的导航面板中选择&#8220;NATs&#8221;中的&#8220;SNATs&#8221;标签，点击&#8220;ADD&#8221;按钮添加SNAT地址。 <br>(2)在&#8220;Add SNAT&#8221;窗口中&#8220;Translation Address&#8221;的&#8220;IP&#8221;文本框中输入SNAT IP地址，并在&#8220;Origin List&#8221;的&#8220;Origin Address&#8221;文本框中输入节点IP地址或在&#8220;Origin VLAN&#8221;下拉框中选择VLAN名称，点击&#8220;&gt;&gt;&#8221;加入&#8220;Current List&#8221;列表。 <br>(3)按&#8220;Done&#8221;完成添加SNAT IP地址。<br>11、F5主备机同步及切换校验<br>具体在system/Redundant Properties/synchonize Config...<br>12、业务的校验<br>F5主备机切换的校验<br>F5主备机业务运行的校验<br>其中1~6是基本配置，7~10业务配置，11~12校验<br>二、F5负载均衡器的维护<br>1、F5节点及应用的检查<br>通过&#8220;System -&gt; Network Map&#8221;页面查看节点及应用状态<br>绿色:节点或虚拟服务器为&#8220;UP&#8221;<br>红色:节点或虚拟服务器状态为&#8220;Down&#8221;<br>灰色:节点或虚拟服务器被禁用<br>2、日志的检查<br>(1)当天日志：从web上查看logs中的system log、bigip log、monitor log，看日志中是否有异常。 <br>(2)7天内的日志<br>系统日志文件 - /var/log/messages消息, 系统消息<br>BIG-IP 日志文件 - /var/log/bigip<br>&#8220;External&#8221; BIG-IP events<br>Monitor 日志文件 - /var/log/bigd<br>&#8220;Internal&#8221; BIG-IP Events<br>3DNS 日志文件 - /var/log/3dns<br>3DNS Information<br>用gzcat、more、vi命令打开<br>3、F5流量的检查<br>(1)业务上的基本维护主要是在F5上查看F5分发到各节点的connect是否负载均衡，一般不应有数量级的差别<br>(2)通过WEB-&gt;pool-&gt; pool statistics中查看connection项中的total和current项，不应有明显的数量级的差别<br>(3)F5 qkview命令<br>执行qkview，执行完成后将输出信息保存在文件&#8220;/var/tmp/-tech.out&#8221;中，供高级技术支持用<br>(4)F5 tcpdump命令<br>TCPDUMP是Unix系统常用的报文分析工具，TCPDUMP经常用于故障定位，如会话保持失效、SNAT通信问题等<br>tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ]<br>[ -i interface ] [ -m module ] [ -r file ]<br>[ -s snaplen ] [ -T type ] [ -w file ]<br>[ -E algo:secret ] [ expression ]
<img src ="http://www.cppblog.com/prayer/aggbug/92749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-10 01:06 <a href="http://www.cppblog.com/prayer/archive/2009/08/10/92749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>F5 APACHE WEBLOGIC取用户真实IP的问题</title><link>http://www.cppblog.com/prayer/archive/2009/08/10/92748.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 16:50:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/10/92748.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92748.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/10/92748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92748.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92748.html</trackback:ping><description><![CDATA[<p>应用环境如下：&nbsp;<br><strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">F5</strong>负载均衡16台<strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">apache</strong>，然后转到后台的4台weblogic，weblogic之间做集群。&nbsp;<br>现在有一个问题就是在weblogic上无法获取客户的真实IP地址了。<br>看到网上有很多相关帖子是介绍<strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">apache</strong>和weblogic集成使用，可以利用http头<br>里X-Forwarded-For这个值取出用户ip地址。<br>但是在我这个环境下X-Forwarded-For值指向<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">F5</strong>的地址，初步估计问题应该<br>在<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">F5</strong>的配置上。<br>经过查找<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">F5</strong>的资料，发现http profile里有一项设置是Insert XForwarded-For，将<br>这个功能启用，发现weblogic已经可以取到用户的ip地址了。<br><span>Insert XForwarded-For指定一个可以供LTM 系统在HTTP 请求中插入的<br>XForwarded-For标头，以便<a name=baidusnap1></a><strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">与</strong>连接Pool使用。此特性可以将客<br>户机的IP地址作为XForwarded-For标头的值进行添加。</span></p>
<img src ="http://www.cppblog.com/prayer/aggbug/92748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-10 00:50 <a href="http://www.cppblog.com/prayer/archive/2009/08/10/92748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>电力研究院双机热备平台</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92703.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 07:07:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92703.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92703.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92703.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92703.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 电力研究院应用平台是一个非常重要的应用平台，对数据的可靠性和安全性具有极高的要求。通过与客户协调，决定使用IBM Pserver小型机和IBM DS4300来搭建这个应用平台的硬件部分。通过IBM AIX操作系统和HACMP 5.3来实现这个硬件平台的高可用性。由于平台只有一个应用程序，为了测试更加方便和直观性，于是决定整个平台为双机热备平台。整个平台具有以下特点：1.&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/prayer/archive/2009/08/09/92703.html'>阅读全文</a><img src ="http://www.cppblog.com/prayer/aggbug/92703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 15:07 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一台570划LPAR做双机问题</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92702.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 07:05:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92702.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92702.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92702.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92702.html</trackback:ping><description><![CDATA[如果给一台570（8CPU,16G）划分两个lpar，然后两个lpar之间做双机，这样做在现实应用中有意义么？<br><br>个人感觉，就算划了lpar，还是在一个整体上啊.<br><br>不是太明白，请教各位。<br><br>当然有意义。起码操作系统是隔离的，一个崩了不影响另一个。<br><br>如果是物理上的（比如说电源坏啦，或者是电源线断了的。。。。。）就没有意义了！<br><br>1、大楼机房双路电源接入 ；<br>2、570本身双电源；<br>3、UPS ； <br>4、电源线质量还好，一般不断； <br>5、在不行，再搞台570 <br><br>我就遇到过一次，用的是两台HP的8620，一台机器两个partition，两台机器间做的cluster，不是LZ说的<br>partition和partition做cluster，机房也是双电源，8620本身也是，但是就这样仍然出了一次险情。用户有个小子去关磁带机的电源时误把机柜电源关了（两个开关），呵呵！！结果是这台机器马上熄火了。不过幸好还有台机器在另一个机房里面跑。所以业务还没有受大的影响。<br><br>想想如果是LZ的那种接法的话就over了。当然了，这种情况是人为的。没有办法控制！<br><br>要是机器本身坏电源，UPS全坏。。。。等情况出现也很难，要真那样就可以买六合彩了！<br><br>
<img src ="http://www.cppblog.com/prayer/aggbug/92702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 15:05 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统双机热备的方案</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92700.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:52:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92700.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92700.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92700.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92700.html</trackback:ping><description><![CDATA[<div class=articleContent id=articleBody>
<p>目前，双机和集群采用的操作系统主要有UNIX、Linux、BSD及微软公司的Windows NT/2000。随着<br>Linux的迅速发展，稳定性、安全性及功能的不断增强，人们对Linux的使用越来越广泛，Linux已<br>成为服务器市场中的一个重要操作系统，基于Linux的双机和集群系统也越来越多。</p>
<p>Linux集群的主要优点有：高可靠性、高性能、低成本等等。</p>
<p>&nbsp;<wbr></wbr></p>
<p>1.1&nbsp;<wbr></wbr>&nbsp;<wbr></wbr>&nbsp;<wbr></wbr>&nbsp;<wbr></wbr> 概述<br>1.1.1&nbsp;<wbr></wbr>&nbsp;<wbr></wbr> 实现目的<br>双机热备份（Hot Standby）是一种软硬件相结合的高可靠性应用方案。双机热备系统由两台独立<br>的服务器以及相应的控制软件构成，<strong>两台服务器在网络中表现为单一的系统，对外表现为一个独<br>立的网络IP，并以单一系统的模式进行控制和管理。</strong>该系统将两台服务器的数据和运行状态（包<br>括硬盘数据和内存数据）进行镜像，可以实现两台服务器之间的热备份，并能够做到无缝切换，<br>从而对外提供稳定可靠的服务，实现双机系统的高可用性解决方案。</p>
<p>&nbsp;<wbr></wbr></p>
<p>1.1.2&nbsp;<wbr></wbr>功能概述<br>双机热备份系统由相应的应用软件进行控制，操作系统和应用程序安装在两台服务器的系统盘上。<br><strong>每一台服务器分配一个固定的IP地址，此外还指定了一个独立IP地址作为集群IP（cluster IP），<br>该IP是双机系统对外提供服务的接口。</strong></p>
<p><br>两台服务器一台成为主节点（Primary Server），另一台成为从节点（Standby Server），主节<br>点与从节点之间保持固定时间间隔的心跳信号，通过心跳信号实现两个对等系统之间的周期性的<br>握手，从而能够监视对方的运行状态，进行主机及网络的故障检测。</p>
<p><br>在系统正常情况下，主节点占用系统资源并运行所有的服务，为信息系统提供支持，从节点通过<br>心跳信号监视主节点的运行情况。一旦主节点发生故障（如主机故障，网络故障，软件故障等），<br>从节点就会自动接管（Take Over）主节点的资源和服务，继续支持信息的运营，从而保证整个双<br>机系统能够不间断的运行（Non-Stop）。主节点在恢复运行后，又可以自动获取资源并取代从节点。</p>
<p>&nbsp;<wbr></wbr></p>
<p>1.2&nbsp;<wbr></wbr>运行环境</p>
<p><br>1.2.1&nbsp;<wbr></wbr>硬件需求</p>
<p><br>在集群系统的实现方案中双机热备份系统是硬件配置最简单和价格最低廉的解决方案，通常镜像<br>服务的硬件配置需要两台独立的服务器，每台服务器有独立的操作系统硬盘和数据存贮硬盘，<br>每台服务器有提供网络连接功能的网卡，此外还可以有一对完成内部连接和数据镜像功能的网卡。</p>
<p><strong>双机系统的两台服务器拥有共享的数据存储空间（可以是一个数据存储硬盘或一台专门的数据存<br>储服务器）。</strong>任何一台服务器在运行服务时，从共享的数据存储空间内读取和存储数据。<strong>每台服<br>务器的操作系统和应用程序文件存储在各自的本地存储空间上。</strong></p>
<p>&nbsp;<wbr></wbr></p>
<p><strong>双机热备份系统采用内存镜像的技术，即把两台服务器的数据和运行状态（包括硬盘数据和内存<br>数据）进行镜像。这个技术的优点是所有的应用程序和操作数据在两台服务器上镜像同步，当主<br>节点出现故障时，从节点可以在几乎没有延迟的情况下接管主节点运行的服务，从而实现无缝切<br>换和热备份。该技术的缺点是，由于两台服务器的内存完全一致，当由于系统应用程序带有缺陷<br>而导致系统宕机时，两台服务器会同步宕机。</strong></p>
<p>&nbsp;<wbr></wbr></p>
<p><strong>也可以在双机系统中使用第三方生产的磁盘阵列柜，在磁盘阵列柜中安装有磁盘阵列控制卡，阵<br>列柜可以直接将柜中的硬盘配置成为逻辑盘阵。该结构不采用内存镜像技术，因此需要有一定的<br>切换时间，同时由于所有的数据全部存贮在磁盘阵列柜中，当主节点出现故障时，从节点接替主<br>节点，从磁盘阵列柜中读取数据，所以不会产生数据不同步的问题。</strong>由于这种方案不需要网络镜<br>像同步，因此这种集群方案服务器的性能要比镜像服务器结构高出很多。</p>
<p>&nbsp;<wbr></wbr></p>
<p>双机热备份系统的两台服务器通过内部局域网进行连接，通过周期性的心跳信号保持通信和进行<br>相互监视。两台服务器之间可以采用多种连接方式，可以使用串口线，也可以通过以太网ethernet<br>进行连接，还可以采用并存的多种连接方式实现两台主机的多重互连。如果双机系统有冗余连接，<br>在第一条通信路径失效的情况下，控制软件可以尝试使用第二条通信路径进行连接。因此，为了<br>避免不必要的失效切换，最好建立两种以上独立的物理路径，使用至少两种心跳。</p>
<p>&nbsp;<wbr></wbr></p>
<p>双机热备份系统具有配置简单，使用方便，价格低廉等诸多优点，但由于镜像服务器需要采用网络<br>方式镜像数据，通过镜像软件实现数据的同步，因此需要占用网络服务器的CPU及内存资源，造成<br>服务器的性能有所降低。</p>
<p>&nbsp;<wbr></wbr></p>
<p>1.2.2&nbsp;<wbr></wbr>软件需求</p>
<p><br>本方案仅讨论Redhat Linux系统下的双机热备份系统的实现，使用的双机控制软件是Linux-HA<br>heartbeat。因此，除了安装操作系统及相关的应用服务程序之外，还需要安装heartbeat控制软件。</p>
<p>通过对heartbeat软件的配置，可以把两台服务器分别指定为主节点和从节点，指定心跳信号的时<br>间间隔，指定cluster IP、子网掩码、广播地址、鉴权方式，还可以设置heartbeat启动的服务，<br>该服务最终由双机系统通过cluster IP对外提供。</p>
<p>&nbsp;<wbr></wbr></p>
<p>Heartbeat可以最大限度地保护用户端的应用连续性。用户的硬件资源(如网卡)，软件资源（如<br>操作系统、数据库管理系统、数据库应用系统、电子邮件系统等）均能处于heartbeat容错软件<br>的保护之下，当这些被保护的资源出现技术故障时， heartbeat容错软件可以随时实施系统资源<br>的切换。因此，heartbeat真正实现了用户硬件或是软件资源发生故障时系统及应用层上的在线<br>热切换。</p>
<p>&nbsp;<wbr></wbr></p>
<p>Heartbeat软件的特点有：</p>
<p><br>不需增加额外硬件资源，纯软件方式实现双机容错，并且对双机无硬件配置要求。<br>可支持DB2，Notes、Exchange、SQL Server、Sybase、Informix、Oracle 、SAP等多种系统的应用<br>层热切换。</p>
<p><br>支持共享磁盘阵列柜和内存镜像等多种方式，给用户提供了选择上的灵活性，同时也能适应各种机型、<br>网络结构、软件平台及应用系统。</p>
<p><br>占用系统资源较少，不增加网络负荷，并且不会干扰具体应用程序的运行和操作。<br>真正实现无人值守，全自动地实现系统资源和应用服务的切换。</p>
<p><br>1.3.2&nbsp;<wbr></wbr>方案说明</p>
<p><br>服务器Server A和Server B构成双机热备份系统的两台主机，并且分别作为主节点（Primary Server）<br>和从节点（Standby Server）。<strong>两台主机均运行Linux-HA heartbeat，该软件成为双机热备系统的控制程序。</strong></p>
<p>两台主机通过串口线、以太网等多种方式进行连接，传送数据和心跳信号，并互相进行状态监视。可以<br>只使用一种连接方式（如以太网连接），但是多种连接方式下的冗余路径可以保证双机连接的可靠性和<br>服务质量。</p>
<p><strong>数据库服务器或磁盘阵列柜是专门的数据存储和共享设备，两台服务器在运行时，均从该设备中读取和<br>存储数据。这种方式可以有效地提高数据传输效率，提高双机热备服务器的系统性能，并且能够保证两<br>台服务器之间的数据同步。</strong></p>
<p>&nbsp;<wbr></wbr></p>
<p>1.4&nbsp;<wbr></wbr>存在的问题</p>
<p>&nbsp;<wbr></wbr></p>
<p>双机备份系统有两种配置方式，分别是&#8220;基于系统切换的双机系统&#8221;和&#8220;基于系统镜像的双机系统&#8221;，<br>二者的区别是：<br>基于系统切换的双机系统仅仅把两台服务器的硬盘数据进行镜像，在主节点失效的情况下，从节点将进行<br>系统一级的切换。该方式不能实现无缝切换，实现的是冷备份。</p>
<p>基于系统镜像的双机系统把两台服务器的硬盘数据和内存数据都进行镜像。为保证完全的内存镜像，两台<br>服务器之间需通过专用连接网段实时地保持一个连续的、双向的镜像进程，该进程确保两台服务器之间的<br>数据同步。一旦故障发生，无论任何一台服务器失效，失效服务器上的数据和应用，将立即切换到另一台<br>服务器上，从而使用户在没有中断的情况下可以继续使用双机系统提供的服务。该方式能够做到无缝切换，<br>实现的是热备份。</p>
<p>本方案描述的heartbeat双机热备份系统是一种基于系统镜像的双机系统，实现方法是，主节点在出现故障<br>的情况下，集群IP地址无缝地切换到从节点，从而客户机对服务器的访问可以由从节点来支持。但是两台<br>服务器之间并没有镜像进程完成彻底的内存镜像，因而主节点在故障时所运行的数据信息不能切换到从节<br>点，造成数据丢失以及服务中断。所以该方案不是严格意义上的系统镜像，实现的是服务一级的切换，并<br>不能实现实时数据的切</p>
<p>换。</p>
</div>
<img src ="http://www.cppblog.com/prayer/aggbug/92700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:52 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>双机热备份原理</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92699.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:44:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92699.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92699.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92699.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong><em><span>双机热备原理</span></em></strong> </p>
<p>　　<span>双机热备是当一台服务器在工作时（称为主机）。另一台服务器作备用状态（称为备机）。当主机因为某种原因出现故障，如死机，主机断电，病毒发作，硬盘损坏等，不能继续提供服务时，从机能够在规定的时间内接替主机的服务，继续提供服务，从而达到不停机的服务。</span></p>
<p>　　<em><strong><span>双机热备软件 </span></strong></em></p>
<p><strong><em><span>　</span></em></strong><span>DataWare</span><span>是一组高可靠性的软件系统，可使联入网络中的两台服务器达到一种近乎无差错的容错级。</span><span>如图：<font face=宋体> <v:stroke joinstyle="miter"></v:stroke></font><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock><v:shape id=_x0000_s1026 style="MARGIN-TOP: 205.45pt; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: -7.5pt; WIDTH: 246pt; POSITION: absolute; HEIGHT: 143.25pt; TEXT-ALIGN: left; mso-wrap-distance-left: 0; mso-wrap-distance-right: 0; mso-position-vertical-relative: line" o:allowoverlap="f" alt="" type="#_x0000_t75"><v:imagedata o:title="11" src="file:///C:\Users\ly\AppData\Local\Temp\msohtml1\01\clip_image001.gif"></v:imagedata><w:wrap type="square"></w:wrap></v:shape></span></p>
<p><span>注：<span><br></span>　<span>1</span>、上面是两台<span>Web</span>服务器，装有相同的网络操作系统，<span>NT</span>或<span>UNIX</span>通过<span>SCSI</span>总线连接到一个外存子系统。<span><br></span>　<span>2</span>、服务器通过网卡连接并经由<span>SCSI</span>通道和一个网络上的监视器侦测主服务器故障。当发生故障时，备援主机接替故障主机管理磁盘阵列、网络通讯、数据库等，<span>DataWare</span>起到主副机之间容错切换开关的作用。<span><br></span>　<span>3</span>、在备援机工作期间，用户只需进行几个简单的操作即可重新恢复系统。<span><br>Web</span>服务器的<span>host A </span>如果出现电源供应不足、断电、主机硬件故障、网络出错、应用软件冲突等，<span>DataWare</span>即会及时警报，通知管理员。</span> </p>
<ul type=disc>
    <li><strong><span>DataWare</span></strong><strong><span>工作原理</span></strong><span>：</span><span> </span></li>
</ul>
<p><span>1</span><span>、服务进程：<span><br></span>　<span>1</span>）、双服务器采用<span>TCP/IP</span>网络协议跟用户连接。<span><br></span>　<span>2</span>）、双机后台对于用户<span>—</span>服务器网络用户透明。 </span></p>
<p><span>服务及优点：<span><br></span>　<span>1</span>）、网络服务：<span><br></span>双机后台对于用户一端，由监控软件<span>DataWare </span>提供一个逻辑的<span>IP</span>地址，如：<span>192.1.1.1</span>，任一用户上网只需用到这一地址；当后台有一台服务器出现故障时，另外一台服务器会自动将其网卡的<span>IP</span>地址替换为<span>192.1.1.1</span>；这样，用户一端的网络不会因为一台服务器出现故障而断掉。<span><br></span>　<span>2</span>）、数据库服务：<span><br></span>当有一台服务器出现故障时，另外一台服务器会自动接管数据库<span>engine </span>；同时启动数据库和应用程序，使用户数据库可以继续操作，对用户而言不受影响。</span></p>
<p><span>2</span><span>、监控原理：</span></p>
<p><span>DataWare </span><span>会有<span>SCSI</span>侦测心跳及网络侦测心跳两条通讯线路，结果置于<span>Power 5000s </span>磁盘柜上的一个<span>5MB </span>的小区，用于监控（如命名为<span>Ware</span>），此小区一般在机柜逻辑盘的起始段。</span></p>
<p><span>3</span><span>、监控对象资源有：<span><br></span>　<span>1</span>）、<span>Informix</span>数据库运行状态<span><br></span>　<span>2</span>）、银行应用交易业务<span><br></span>　<span>3</span>）、<span>Sco Open Server Unix</span>系统运行状态<span><br></span>　<span>4</span>）、生产机硬件资源<span> <br></span>　<span>5</span>）、系统网络设备<span><br></span>　<span>6</span>）、对等主机系统运行状态<span><br></span>　<span>7</span>）、<span>SQL</span>数据库运行状态<span><br></span>　<span>8</span>）、<span>IIS</span>的运行状态</span></p>
<ul type=disc>
    <li><strong><span>有两种工作模式</span></strong><span>：</span><span> </span></li>
</ul>
<p><span>1</span><span>）、双机热备份<span> 2</span>）、双机互备援</span></p>
<p><span>DataWare </span><span>支持的操作系统</span></p>
<p><span>Unix Based System:<br>Sco OpenServer5.0 SCO/MPX Unixware7.x<br>HP/ ux (Multi-pro ) HP/ux (Uni-Pro )</span><span>等<span><br>Windows NT:<br>WinNT 3.51, 4.0 (</span>英文版）<span> WinNT 4.0 (</span>中文版）</span></p>
<ul type=disc>
    <li><span>DataWare</span><span>的功能模块：</span><span> </span></li>
</ul>
<p><span>　<span>1</span>、切换模块：支持主从热备份<span> hot Standby </span>和对等处理模式，同时也支持双机双控模式和争主机工作自由切换模式。<span><br></span>　<span>2</span>、切换时间灵活设置：在尽可能短的时间内完成安全切换，并对其切换过程提供动态监测、显示，同时为用户提出排除故障的操作提示。<span><br></span>　<span>1</span>）、自动侦测，<span> 2</span>）、自动切换，<span> 3</span>）、自动修复，<span> 4</span>）、负载平衡，<span> 5</span>）、自动提醒，<span> 6</span>）、易操作</span></p>
<ul type=disc>
    <li><strong><span>DataWare</span></strong><strong><span>功能</span></strong><span>：</span><span> </span></li>
</ul>
<p><span>1</span><span>、服务器停电时，能实现自动切换。<span><br>2</span>、服务器的硬盘、<span>CPU</span>、<span>RAM</span>发生故障，影响系统运行时，实现自动切换。<span><br>3</span>、网络连接发生故障时（如服务器网卡、网线故障），实现自动切换。<span><br>4</span>、服务器的<span>SCSI</span>线路，控制器设备发生故障时，实现自动切换。<span><br>5</span>、操作系统、数据库或应用程序发生故障时，实现自动切换。<span><br>6</span>、提供手动切换功能和可选功能附件，使系统管理员可以在主机负载过大时或其他适当的时候，实现手动切换。<span><br>7</span>、双机软件本身发生故障时，应能给出提示信息，使系统管理员可以及时将其恢复。<span><br>8</span>、安全完成多次切换。<span><br>9</span>、监测备份机的基本设备和系统状态，保证备份机的可靠性。<span><br>10</span>、自动保存完整的系统日志，并可管理。<span><br></span>报警系统：<span><br></span>　<span>1</span>）、发生任何故障时，均在监控窗口中给出错信息及响应的处理建议。<span><br></span>　<span>2</span>）、发生重大故障或切换时，发出明显的信号（如警报声等）提醒系统管理员注意。<span> <br></span>　<span>3</span>）、结合可选的功能附件，能按要求显示系统资源的利用情况。</span></p>
<p><span>　</span><strong><em><span>双机热备常用硬件</span></em></strong><span><br></span><span>　<span>1</span>、双服务器<span><br></span>　<span>2</span>、至少<span>32M</span>内存<span><br></span>　<span>3</span>、<span>SCSI</span>接口<span><br></span>　<span>4</span>、以太网通道<span><br></span>　<span>5</span>、可支持双服务器的阵列子系统<span><br></span>　<span>6</span>、终端服务器</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/prayer/aggbug/92699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:44 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战：ROSE HA双机热备系统安装指南</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92698.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:39:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92698.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92698.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92698.html</trackback:ping><description><![CDATA[<div class=content_art>
<div id=1>
<p><strong>&nbsp;&nbsp;&nbsp; </strong>在对系统连续运营要求较高的系统中，我们通常有RAID、hot spare来保障存储系统以及数据的安全性，但是仅仅存储系统的安全就足够了么？为了防止服务器应用程序的意外宕机，我们通常还会通过两台服务器冗余，且互为备份共同执行同一任务的架构模式来防止服务器错误的发生。这种架构也就是我们通常所说的双机热备的架构模式。</p>
<p>&nbsp;&nbsp;&nbsp; 在众多对系统可靠性要求较高的业务环境中，双机热备系统都得到了广泛的应用，并发挥着重要的作用，为企业构筑高可用性系统提供了一种较为安全且成本相对较低的后台环境构架。</p>
<p>&nbsp;&nbsp;&nbsp;<strong> 双机系统的基本构成通常包括了2台互为备份的服务器，后台往往公用一台存储系统，两台互为备份的服务器之间一般有心跳线连接，用以监控另一台服务器的运行状态，同时2台服务器上还需要运行双机热备的系统软件。任何导致系统当机或服务中断的故障，都会自动触发双机热备的系统软件流程来进行错误判定、故障隔离，并通过联机恢复来继续执行中断的服务。这样，预先指定的备份服务器将首先接管被中断的服务，并继续提供原有的服务。在这个过程中，用户所感受的只是需要经受一定程度可接受的时延，而能够在最短的时间内继续访问服务。</strong></p>
<p>&nbsp;&nbsp;&nbsp; Rose HA是目前市面上应用非常广泛的一种双机HA软件，他由美国 ROSE Datasystem Inc.提供，能够和windows操作平台无缝集成，因而并被多家服务器或者存储厂商以OEM的形式销售提供给大家，被广泛用于在X86服务器基础上构架双机热备系统，拥有较大规模的市场基础和使用人群。但是双机软件的安装是比较容易出问题的环节，下面我们将以SQL Server数据库平台为例，介绍如何在win 2000，SQL Server的环境下构筑Rose HA。</p>
<p><strong>安装环境：</strong></p>
<p>&nbsp;&nbsp;&nbsp; 双机环境的基本构成包括：两台服务器（以下分别称为&#8220;服务器1&#8221;和&#8220;服务器2&#8221;），一套磁盘整列柜，我们这里以SQL Server数据库软件为例，服务器采用win 2000的操作系统，采用ROSE HA 软件。软硬件都准备好了以后，我们先进行双机热备环境配置的准备工作。</p>
</div>
<div id=ParagraphCount style="DISPLAY: none">1</div>
</div>
<!--分页标记-->
<div id=1>
<p><strong>1. 安装win 2000</strong><br>&nbsp;&nbsp;&nbsp; Rose HA软件能与windows环境无缝集成，在安装Rose HA之前，我们首先需要安装WINDOWS操作系统，这里以windows2000为例。相信各位对操作系统的安装都相当熟悉，这里我们只写了简略的步骤。</p>
<p>&nbsp;&nbsp;&nbsp; （1） 将所有的驱动程序安装好,配置好网络。</p>
<p>&nbsp;&nbsp;&nbsp; （2） 安装Services Pack 2或更高。</p>
<p>&nbsp;&nbsp;&nbsp; （3） 必须要注意的是，安装完毕后，需要在两台NT服务器的磁盘管理器中查看磁盘柜中将要安装数据库的卷的盘符是否相同，该盘符必须相同。</p>
<p><strong>2. 安装SQL Server数据库</strong></p>
<p>&nbsp;&nbsp;&nbsp; SQL Server的安装步骤我们也不详细列出，相信各位在数据库安装上都有丰富的经验。</p>
<p>&nbsp;&nbsp;&nbsp; （1） 关闭服务器2，在服务器1上安装SQL Server数据库，选择把程序文件安装在本地硬盘，把数据库文件安装在磁盘阵列柜上。安装完毕，在控制面板的服务中把SQL Server的所有服务停止并设置成手工启动方式。</p>
<p>&nbsp;&nbsp;&nbsp; （2） 关闭服务器1，按上述步骤在服务器2上进行安装SQL Server数据库。</p>
<p>&nbsp;&nbsp;&nbsp; （3） 安装完毕后打开两台服务器。将服务器2上的SQL Server服务启动，然后全部停掉，再将服务器1 的SQL Server服务启动，然后全部停掉。验证是否能够启动这些服务。如果启停正常，再进行以下步骤。否则需恢复正常后才能进行以后的步骤。</p>
</div>
<div id=ParagraphCount style="DISPLAY: none">1</div>
<!--分页标记-->
<div id=1>
<p><strong>3、 安装ROSE HA 软件</strong></p>
<p>&nbsp;&nbsp;&nbsp; 下面我们正式进入Rose HA的安装步骤。第一步我们需要把2台服务器的硬件上建立连接，这样2台服务器才有可能在协同工作中互为备份，能够监控到对方服务器的状态。</p>
<p><font color=#0000ff>硬件安装</font></p>
<p>&nbsp;&nbsp;&nbsp; 用ROSE软件所带的RS232串口线将服务器1和服务器2的COM1口连接起来</p>
<p>&nbsp;&nbsp;&nbsp; 注：我们建议使用两根心跳线，如果要通过网卡建立第二根心跳线，可用以下方法连接。</p>
<p>&nbsp;&nbsp;&nbsp; 1． 用一根网线直接连接两台服务器上的私网网卡。</p>
<p>&nbsp;&nbsp;&nbsp; 2． 通过HUB连接两台服务器上的公网网卡。</p>
<p>&nbsp;&nbsp;&nbsp; 如果服务器上只有一个网卡，那就需要在网卡上多绑定一个IP地址用于心跳线的连接。</p>
<p><font color=#0000ff>软件安装</font></p>
<p>&nbsp;&nbsp;&nbsp; 硬件连接都确认无误之后，下面我们可以进入Rose HA的软件安装。特别注意：在安装ROSEHA之前必须将系统曰期该为正确的系统曰期。</p>
<p>&nbsp;&nbsp;&nbsp; 1． 进入光盘上软件所在的目录，运行SETUP程序，按照默认方式安装，当出现提示输入LOCAL和REMOTE的主机名时，将本地服务器的主机名输入LOCAL栏里，将另一台服务器的主机名输入REMOTE栏里，并按提示输入登陆用户的密码。其他都按照默认方式安装。</p>
<p>&nbsp;&nbsp;&nbsp; 2． 安装过程中会要求注销一次然后在运行安装程序。</p>
<p>&nbsp;&nbsp;&nbsp; 3． ROSE HA安装成功后，需进入WIN2000服务管理器，将ROSEHA的Cluster Service与Monitor Service服务登录帐户改为Local System帐户。</p>
<p>&nbsp;&nbsp;&nbsp; 4．在安装ROSE HA试用版时，启动时会提示&#8220;The license is invalid&#8221;，无法启动双机服务，该情况如何解决。</p>
<p>&nbsp;&nbsp;&nbsp; 进入主菜单的Tool子菜单的License项，点击&#8220;确定&#8221;即可。</p>
</div>
<div id=ParagraphCount style="DISPLAY: none">1</div>
<!--分页标记-->
<div id=1>
<p><strong>4. 配置双机热备</strong></p>
<p>&nbsp;&nbsp;&nbsp; （1） 启动Cluster Administration Tool,在Tools菜单中，添加License后选择启动按钮 （按钮为绿色）。</p>
<p>&nbsp;&nbsp;&nbsp; （2） 在Private Net 菜单中，添加RS &#8211;232线,选择COM1口进行连接，传输率为缺省值-9600。再添加TCP/IP Socket做心跳线,选择相应的IP地址连接。连接成功后会在Private Net Administration界面下看到两台主机间的两根心跳线都变为绿色。（注：心跳线的设置必须在两台服务器上都进行设置，其它的资源则只需在一台服务器上设置即可。）</p>
<p>&nbsp;&nbsp;&nbsp; （3） 点击Resource Objects按钮 进入Resource Administration界面。在Resource菜单中的Create子菜单中选择Volume，在Share Volume栏中，选择磁盘柜中SQL Server 数据库文件所在的盘符，选择Create按钮，建立成功后点击Close退出。在Resource Administration 界面中，选中Volume,使其高亮，然后点击Bring In&nbsp; 按钮。Bring In成功后主机方的资源显示为亮色，而备机方的资源显示为绿色。</p>
<p>&nbsp;&nbsp;&nbsp; （4） 用上面的方法选择建立IP资源，在Active IP Address栏中输入虚拟的IP地址。如有多个网卡，在NIC栏中选择准备在双机上使用的网卡，在Original IP Address栏中选择本机所需绑定的IP地址，然后点击Add按钮。再在Server栏里选中远端服务器，同样选中网卡和IP地址，点击Add按钮。添加完毕后点击Create按钮，建立成功后点击Close退出。在Resource Administration 界面中，选择IP,使其高亮，然后按照（3）的方法将其Bring In。</p>
<p>&nbsp;&nbsp;&nbsp; （5） 建立Alias Name资源，在Computer Alias Name栏中输入虚拟的共享主机名。点击create按钮，退出。在Resource Administration 界面中，选择Alias,使其高亮，然后按照（3）的方法将其Bring In。</p>
<p>&nbsp;&nbsp;&nbsp; （6） 建立File Share资源，在File Share栏中选中数据库文件所在的共享磁盘柜卷，将Available Objects栏中的Volume, IP，Alias项都添加到Pre-requisite Objects栏中,然后选择Create按钮，退出。在Resource Administration 界面中，选择File Share,使其高亮，然后按照（3）的方法将其Bring In。（注：以下服务配置以SQL Server 7.0为例）</p>
<p>&nbsp;&nbsp;&nbsp; （7） 建立NT Services资源，在列表中选择MSSQLServer到NT Service栏中，再把Object Name栏中的内容改为MSSQLServer。将Available Objects栏中的File Share项添加到Pre-requisite Objects栏中，选择Create按钮，退出。在Resource Administration 界面中，选择MSSQLServer使其高亮，然后按照（3）的方法将其Bring In。</p>
<p>&nbsp;&nbsp;&nbsp; （8） 建立NT Services资源，在列表中选择SQLServerAgent到NT Service栏中，再把Object Name栏中的内容改为SQLServerAgent。将Available Objects栏中的File Share项添加到Pre-requisite Objects栏中，选择Create按钮，退出。在Resource Administration 界面中，选择SQLServerAgent使其高亮，然后按照（3）的方法将其Bring In。</p>
<p>&nbsp;&nbsp;&nbsp; （9） 这一步结束后，ROSE HA的全部设置基本已经完成，我们可以在Options菜单中，选中/取消Automatic Start Cluster选项，该选项决定在WINDOWS NT启动时是否启动ROSE HA。</p>
</div>
<div id=ParagraphCount style="DISPLAY: none">1</div>
<img src ="http://www.cppblog.com/prayer/aggbug/92698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:39 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>是不是做HA热备，必需共享磁盘阵列</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92697.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:33:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92697.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92697.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92697.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92697.html</trackback:ping><description><![CDATA[不行<br><br>
<div class=t_msgfont id=message356270>HA里有个概念叫资源，当机器发生故障，切换到另一台机器时，除了IP地址浮动过去以外，还要发生资源的接管。被接管的资源一定要备机也能正常访问到。<br><br>试想如果APACHE/iPlanet装在A机的内置硬盘上，且新产生的数据（如用户、邮件、新建主页）都在内置硬盘上，B机根本无法访问，如何接管呢？<br><br>以前做过iPlanet邮件服务器的双机，建议将所有文件均安装在共享盘阵的文件系统上（如/usr/netscape/server4），这样便于数据维护。因为即使数据变化发生在A机连接的共享盘阵上，接管后，数据也能保证一致。<br></div>
<img src ="http://www.cppblog.com/prayer/aggbug/92697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:33 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ROSE HA简介</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92696.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:32:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92696.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92696.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92696.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92696.html</trackback:ping><description><![CDATA[ROSE HA将冗余的硬件资源配置成一个高可用性系统。 所有的服务器可以是不同类型或不同品牌。RoseHA的工作方式 &#183; 所有的服务器可以是不同类型或不同品牌。 &#183;<br>&nbsp;RoseHA 支持主从方式以及对等方式。在主从方式中，一个服务器被指定为进行关键性操作的主服务器，另一服务器作为热备份服务器。<br>在对等方式中，所有服务器指定为各自进行关键性操作的主服务器。<strong>两台服务器互相备份</strong>。 <br>1．硬件组成： A&#183; 服务器：运行同一版本操作系统的计算机系统。 <br>l 主服务器：提供主服务的计算机系统, 但相对于其它主服务来说，主服务器也可以是备份服务器。 <br>l 备份服务器：配置有某些用以恢复故障服务的硬件设备的计算机系统。如果主服务运行正常，没有出现故障，此时，备份服务器将处于以下三种状态之一：空闲&#183;执行副服务&#183;执行主服务。一台备份服务器可以装备多个硬件设备，用以恢复多个故障服务；另一方面，对一些重要的服务，也可采用ACTIVE/ACTIVE方式，这样可以进一步提高冗余度，增加系统可靠性。 B&#183; Clients（客户端）: 是指那些访问服务的计算机系统。 2．通信连接 ROSE HA支持运行TCP/IP协议的ATM&#183;Ethernet&#183;10M/100M以太网&#183;光纤网 私有网：用以交换服务器心跳的网络。它可通过一条独立的网络连接来传送心跳，也可采用RS－232以点对点的通信方式来传送心跳。公有网：供客户端访问服务的网络。连接公有网最好的办法是用独立的网络连接，这样，客户端可以通过指定网络访问相关服务，从而提高系统的可靠性；其次，多个服务负载也可以由多个独立分离的网络分别承担或由一个网络独立承担。主网络接口: 此接口是客户端访问服务的入口，客户通过一个特定的网络IP地址来识别服务. 备份网络接口: （服务器间的服务恢复：）此接口是安装在备份服务器上用来提供访问主服务的备份的网络IP地址。如果主服务器出现故障，则备份服务器会将服务接管过来，且备份网络接口也会将原在主网络接口的IP地址接管过来。本地的服务恢复：可以在主服务器上另外安装一个备份网络接口，用来做备份网络接口, 这时如果主网络接口出现故障，此备份接口将接管主IP 地址, 而避免相关服务在两台服务器之间的切换。 3. 在线存储： SCSI磁盘设备私有磁盘：主要是用于存储操作系统及那些在服务被接管时不被访问的数据。共享磁盘：两台主机通过独立的访问路径访问共享磁盘。在每个服务器中都有各 自独立的供主服务使用的共享磁盘的分区，这样可保证在备份服务器接管时服务及数据的可靠性。另外，在磁盘发生故障时，还可以采取如下能保证数据可靠性的冗余及容错的磁盘介质： Mirroring(镜像) SUN在线磁盘介质； RDBMS镜像； RAID 1、3、5磁盘阵列；（一） 组件说明 1. 服务 主服务: 此服务是在指定的主服务器上运行，Client可通过连接在该服务器上的NIC上的指定的Active IP 地址来访问，主服务由HA软件来管理，当主服务器出现故障时，在很短的宕机时间内，备份服务器会将主服务接管过去。副服务: 是指不由HA管理的服务.对它而言，不存在备份服务器。副服务可以在不中断主服务的情况下随时被中断，原来分配给它的资源也会分配给主服务的接管任务中。 2. Agents Agents用来监测一些重要的硬件和软件资源的可靠性，这些资源包括如下内容： l 服务器 l 网络接口通信连接（通信服务） l 在线存储系统（文件服务，磁盘服务） l 重要的系统及相关的应用程序 判断Agents的好坏，主要可以从这样几个因素来考虑：首先，对系统资源的占用要小；对系统性能的影响要小；对错误信息要能实时反映；另外是该Agent的可靠性，不要产生重大错误，发生虚假报警。 Agents开发工具： Agents实际上是一些C(C＋＋)程序和shell scripts。ROSE HA为要开发新的Agents的用户提供了API及模板文件。用户要检验自己应用的可靠性，必须写出精确的Agent程序或shell脚本。在ROSE HA软件中，HA管理器与Agents间的通讯是通过API来完成的，因此，用户不需再做其他的编程工作。 3. HA服务器 HA服务器（HA Daemon）是ROSE HA的核心部分。它主要完成以下工作： *监测服务器，看是否所有用来执行服务的资源都是可靠的。 *根据HA的配置文件对服务器进行配置。 *启动指定的服务. *启动服务的Agents. *通过Agents来监测服务器及服务的所有相关进程。 *管理用来恢复故障服务的冗余硬件资源。 *根据接收到的服务器心跳及Agents心跳，处理相应的事件日志、错误处理及在线恢复工作。 4. 心跳 Agents心跳： 通过周期性的Agents心跳，Agents会将服务的可靠性通知HA Daemon。Agents心跳是通过共享内存来实现的，如果服务的可用性出现问题，Agents会停止向HA管理器发送心跳。Agents心跳在预定时间内的丢失预示着它所监测的服务出现了故障，此时，ROSE HA会执行服务的切换进程。 服务器心跳： 通过周期性的服务器心跳，服务器会将自身的可靠性通知对方服务器。服务器心跳是通过基于TCP/IP 的Socket或RS－232线来传送的，如果服务器出现故障，HA管理器将向对方发送死的心跳，或停止发送心跳。此心跳在一定时间内的丢失预示着此服务器已出现故障，此时，ROSE HA将开始执行服务的切换过程。 5. HA配置文件 在每台装有ROSE HA系统的服务器中，都会产生一个配置文件，此文件就是一个根据由用户定义要求保护相关服务所定的工作表。此文件可以根据不同应用环境的要求加以修改，该配置文件主要包含以下内容： *已获得的软件许可，可以运行ROSE HA软件的所有License信息。 *配置服务：』服务的启动与停止的shell程序『服务的Agents 』所要求的硬件资源（如服务器,网卡及共享磁盘分区等等）和其各自的标识（IP地址，安装点等等）。『指定的冗余硬件设备。 *私有网的配置信息 6. Shell 程序 用户可以针对以下内容，自己编写Shell程序：＊ 起动和停止服务＊ 执行故障服务的切换＊ 执行事件通知：向系统控制台发送信息，通过E－mail将信息通知对方，向用户发出广播信息，初始化进程等。 <br><br>
<img src ="http://www.cppblog.com/prayer/aggbug/92696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:32 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>主要Linux 平台高可用集群软件(High Availability Cluster- HA)简介</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92695.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:28:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92695.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92695.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92695.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92695.html</trackback:ping><description><![CDATA[主要Linux 平台高可用集群软件(High Availability Cluster- HA)简介及软件下载<br><font color=red><strong>主要Linux 平台高可用<u><strong>集群</font></strong></u>软件(High Availability Cluster- HA)简介及软件下载</strong><br>================================================<br>本文针对Linux平台的<u><strong><font color=#ff0000>集群</font></strong></u>软件进行简单的介绍.<br>转载请勿修改 作者: <strong><font color=red>nntp 最后更新:20060824</font></strong><br>Linux集群主要分成三大类( 高可用<u><strong><font color=#ff0000>集群</font></strong></u>， 负载均衡<u><strong><font color=#ff0000>集群</font></strong></u>，科学计算<u><strong><font color=#ff0000>集群</font></strong></u>)<br>高可用<u><strong><font color=#ff0000>集群</font></strong></u>( High Availability Cluster)<br>负载均衡<u><strong><font color=#ff0000>集群</font></strong></u>(Load Balance Cluster)<br>科学计算<u><strong><font color=#ff0000>集群</font></strong></u>(High Performance Computing Cluster)<br>================================================<br>高可用<u><strong><font color=#ff0000>集群</font></strong></u>(High Availability Cluster)<br>常见的就是2个节点做成的HA集群，有非常多通俗的不科学的名称，比如"双机热备", "双机互备", "双机".<br>高可用<u><strong><font color=#ff0000>集群</font></strong></u>解决的是保障用户的应用程式持续对外提供服务的能力。 (请注意高可用<u><strong><font color=#ff0000>集群</font></strong></u>既不是用来保护业务数据的，保护的是用户的业务程式对外不间断提供服务，把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)<br>Linux平台常见的高可用<u><strong><font color=#ff0000>集群</font></strong></u> 有这些:<br><strong>1. RedHat 公司 的 开放原始码RedHat Cluster Suite, 简称RHCS . (产品介绍<br><font color=#0000ff>http://www.redhat.com/solutions/clustersuite/)</font><br></strong><br>- RHCS实际上是个套件，除了目前提到的高可用<u><strong><font color=#ff0000>集群</font></strong></u>软件，还包含了一个基于LVS的负载均衡软件.<br>- RHCS包含的<u><strong><font color=#ff0000>集群</font></strong></u>软件，是GPL协议下开放原始码的<u><strong><font color=#ff0000>集群</font></strong></u>系统. <br>- RHCS目前的版本有 RHCS v3和 v4,分别对应于RedHat 企业版Linux的 3.0家族和4.0家族.<br>- RHCS是个独立的产品，不包括在RedHat Enterprise Linux当中，无论是购买还是下载，都是独立存在的.<br>RHCS的获得:<br>RHCS的获得有三个途径:<br>a. 从redhat 的官方销售渠道购买，得到的是RedHat RHCS产品的二进制代码(光盘或直接从RHN-RedHat Network下载)，原始码，及支持和升级服务.<br>b. 从redhat 的官方站点下载SRPM包，编译并安装. 无原厂商业支持和升级服务. 这里下载 (<br><font color=#0000ff>ftp://ftp.redhat.com/pub/redhat/linux/enterprise/4/en/RHCS</font><br>和<br><font color=#0000ff>ftp://ftp.redhat.com/pub/redhat/linux/enterprise/3/en/RHCS)</font><br>c. 从centOS官方站点下载RHCS的二进制代码包并安装，无原厂商业支持和升级服务. 这里下载(<br><font color=#0000ff>http://mirror.centos.org/centos/4/csgfs/</font><br>, 请阅读此目录中的README文件)<br><strong>2. Novell 公司 的 开放原始码高可用集群HA套件</strong><br>Novell 公司并购了欧洲Linux第一大厂SuSE之后，成为全球能够抗衡RedHat的主要力量. <br>SuSE企业版Linux 带有一套开放原始码的HA集群软件，包括 HA project的heartbeat, heartbeat-ldirectord, heartbeat-pils, heartbeat-stonith, <u><strong><font color=#ff0000>集群</font></strong></u>关联的存储软件drbd, 虚拟IP的 src_vipa软件.和RHCS不同的是，SuSE/Novell 企业版Linux自带的 HA集群软件并非一个独立的软件，如上介绍，而是由不同的开放原始码项目提供的不同部分的程式。<br><u><strong><font color=#ff0000>集群</font></strong></u>软件的获得:<br>本<u><strong><font color=#ff0000>集群</font></strong></u>软件组件已附带在SuSE Linux Enterprise Server 光盘中(SLES9, SLES10), SuSE Linux Enterprise Server(SLES9, SLES10)的光盘，能免费从download.novell.com获得，并提供2个月的在线网络更新服务. 用户只需要在novell站点上免费注册一个novell 站点账号，就能下载SLES9, SLES10的所有光盘ISO.<br><strong>3. Novell 公司的Novell Cluster Service</strong><br>Novell 在败落前，原来是一家非常伟大的公司，有着非常雄厚的技术力量。 早在10多年前，Novell公司就在<u><strong><font color=#ff0000>集群</font></strong></u>领域独树一帜，是当时唯一能够在PC服务器上构建出32节点<u><strong><font color=#ff0000>集群</font></strong></u>的厂商.<br>Novell收购SuSE公司之后，将原来在Novell netware操作系统上的大量企业级应用移植和整合到了SuSE Linux Enterprise Linux平台, Novell 当时名震<u><strong><font color=#ff0000>集群</font></strong></u>领域的Novell Cluster Service 也被整合移植到了Linux平台.<br>Novell Cluster Service是个商业系统，并非开放原始码产品<br>这里能看到细节<br><font color=#0000ff>http://www.novell.com/products/openenterpriseserver/ncs.html</font><br>产品的获得<br>直接从Novell 公司购买.<br><strong>4. Steeleye Lifekeeper for linux (产品介绍<br><font color=#0000ff>http://www.steeleye.com/)</font><br></strong><br>steeleye 公司是<u><strong><font color=#ff0000>集群</font></strong></u>行业非常著名的公司，他们的<u><strong><font color=#ff0000>集群</font></strong></u>系统最早是AT&amp;T 贝尔实验室研发的，后来被卖给了金融行业的著名IT公司NCR公司。(不少朋友到ATM取钱的时候也许会看到NCR制造的ATM机). lifekeeper集群的历史非常悠久，后来steeleye又得到了几个从当时的巨头DEC跳槽来的核心研发人员.因此lifekeeper的构架和品质是有非常好的口碑的.<br>产品获得<br>a. 从steeleye官方渠道申请试用版<br>b. 从steeleye 官方购买<br><strong>5. HP MC/Service Guard for linux (<br><font color=#0000ff>http://h71028.www7.hp.com/enterprise/cache/6468-0-0-0-121.aspx)</font><br></strong><br>HP在和Compaq合并之前，在HP-UX平台有一套旗舰级的高可用<u><strong><font color=#ff0000>集群</font></strong></u>系统(MC/SG for HP-UX)，被广泛部署在各种关键业务计算领域。比如银行，电信，金融等等。主要的硬件平台是PA-RISC架构的小型机和中型机系统.<br>Compaq在和HP合并之前，在Alpha 平台有一套旗舰级的高可用<u><strong><font color=#ff0000>集群</font></strong></u>,叫做(TruCluster).被广泛部署在各种关键业务计算领域，比如国防，航天，制造等等。主要的硬件平台是Alpha架构的小型机和中型机.<br>随着两个公司的合并，两套著名的<u><strong><font color=#ff0000>集群</font></strong></u>系统也完成了合并，新的产品仍旧叫做MC/SG,不过能跑在PA-RISC, IA, IA64平台.<br>5年前，HP将MC/SG集群系统移植到了linux平台，并发展至今. HP MC/SG for linux有着非常高的品质和长期在高度关键业务需求的领域发展的背景。<br>软件的获得:<br>从HP官方渠道购买并获得技术支持和升级服务.<br><strong>6. 开放原始码的 HA 项目 (<br><font color=#0000ff>http://www.linux-ha.org/)</font><br></strong><br>linux-HA 项目历史悠久, 非常多linux 发行附带的HA集群都是采用了linux-HA 的heartbeat系统和相关的组件.需要构建完全的开源，自由而且免费的高可用<u><strong><font color=#ff0000>集群</font></strong></u>的用户能选择.<br>软件获得:<br>免费下载，没有商业支持和商业升级服务.<br><strong>7. Turbolinux 高可用<u><strong><font color=#ff0000>集群</font></strong></u>系统</strong><br>Turbolinux 这几年发展的颇不顺利，从创始人走人到公司在日本的股权变动. 颇让人担忧。<br>TurboLinux 的高可用<u><strong><font color=#ff0000>集群</font></strong></u>软件有两个.<br>a. TurboLinux Cluster HA 3.1 <br>b. TurboLinux8 ClusterPro<br>因为都没有在具体的项目中深入用过，不做更多解释.<br>软件获得:<br>从Turbolinux 官方购买，并获得技术支持和升级服务.<br><br><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong>http://blog.chinaunix.net/u/17248/showart_449056.html
<li style="MARGIN-TOP: 20px; PADDING-LEFT: 10px; MARGIN-LEFT: 0px; LINE-HEIGHT: 18px; TEXT-ALIGN: left"><br></li>
<img src ="http://www.cppblog.com/prayer/aggbug/92695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:28 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>双机热备</title><link>http://www.cppblog.com/prayer/archive/2009/08/09/92694.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Sun, 09 Aug 2009 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/09/92694.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92694.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/09/92694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92694.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92694.html</trackback:ping><description><![CDATA[双机热备这一概念包括了广义与狭义两种意义。 <br><br>从广义上讲，双机热备（双机容错）就是对于重要的服务，使用两台服务器，互相备份，共同执行同一服务。当一台服务器出现故障时，可以由另一台服务器承担服务任务，从而在不需要人工干预的情况下，自动保证系统能持续提供服务<br>双机热备由备用的服务器解决了在主服务器故障时服务不中断的问题。但在实际应用中，可能会出现多台服务器的情况，即服务器集群<br>双机热备一般情况下需要有共享的存储设备。但某些情况下也可以使用两台独立的服务器<br>实现双机热备，需要通过专业的集群软件或双机软件<br><br>从狭义上讲，双机热备特指基于active/standby方式的服务器热备。服务器数据包括数据库数据同时往两台或多台服务器写，或者使用一个共享的存储设备。在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时，另一台备份服务器会通过双机软件的诊测（一般是通过心跳诊断）将standby机器激活，保证应用在短时间内完全恢复正常使用 <br>
<img src ="http://www.cppblog.com/prayer/aggbug/92694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-09 14:24 <a href="http://www.cppblog.com/prayer/archive/2009/08/09/92694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>卷组、逻辑卷、物理卷的操作命令</title><link>http://www.cppblog.com/prayer/archive/2009/07/28/91494.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Tue, 28 Jul 2009 07:46:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/07/28/91494.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/91494.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/07/28/91494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/91494.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/91494.html</trackback:ping><description><![CDATA[<span style="FONT-WEIGHT: bold">卷组:<br>&nbsp;&nbsp; </span>列出卷组细节： lsvg vg_name<br>&nbsp;&nbsp; 列出卷组中的逻辑卷： lsvg -l vg_name<br>&nbsp;&nbsp; 列出卷组中的物理卷： lsvg -p vg_name<br>&nbsp;&nbsp; 按卷组列出所有的逻辑卷： lsvg -o|lsvg -i -l<br>&nbsp;&nbsp; 增加卷组： smitty mkvg<br>&nbsp;&nbsp; 卷组扩容/缩小 smitty vgsc<br>&nbsp;&nbsp; 激活卷组（使其可用）： varyonvg vg_name<br>&nbsp;&nbsp; 解除卷组： varyoffvg vg_name<br>&nbsp;&nbsp; 修改卷组属性： smitty chvg<br>&nbsp;&nbsp; 向卷组中增加一个物理卷： extendvg vg_name hdiskN 这个硬盘的状态必须是可用的。<br>&nbsp;&nbsp; 从卷组中删除一个物理卷： reducevg [-d] vg_name hdiskN 删除物理卷时其所在的卷组必须处于非&nbsp;&nbsp; 活动状态<br><span style="FONT-WEIGHT: bold">物理卷：</span><br>&nbsp;&nbsp; 列出物理卷名称： lspv<br>&nbsp;&nbsp; 列出物理卷细节： lspv hdiskN<br>&nbsp;&nbsp; 列出物理卷中的逻辑卷： lspv -l hdiskN<br>&nbsp;&nbsp; 列出物理卷中的物理分区分布： lspv -p hdiskN<br>&nbsp;&nbsp; 显示物理分区与逻辑分区的对应情况：lspv -M hdiskN<br>&nbsp;&nbsp; 增加物理卷： cfgmgr /mkdev<br>&nbsp;&nbsp; 删除物理卷： rmdev<br>逻辑卷：<br>&nbsp;&nbsp; 列出逻辑卷名称： lsvg -l vg_name<br>&nbsp;&nbsp; 列出逻辑卷细节： lslv lv_name<br>&nbsp;&nbsp; 列出逻辑卷相关的物理卷： lslv -l lv_name<br>&nbsp;&nbsp; 列出物理卷中物理分区的分配： lslv -p pv_name<br>&nbsp;&nbsp; 显示逻辑卷中LP与PP的对应: lslv -m lv_name<br>&nbsp;&nbsp; 增加逻辑卷： smitty mklv 或 mklv<br>&nbsp;&nbsp; 删除逻辑卷:&nbsp; smitty rmlv 活 rmlv<br>&nbsp;&nbsp; 设置逻辑卷属性： smitty lvsc 或 chlv<br>&nbsp;&nbsp; 增加逻辑卷拷贝： smitty mklvcopy<br>&nbsp;&nbsp; 删除逻辑卷拷贝:&nbsp; smitty rmlvcopy<br><br>
<img src ="http://www.cppblog.com/prayer/aggbug/91494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-07-28 15:46 <a href="http://www.cppblog.com/prayer/archive/2009/07/28/91494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX mklv 命令</title><link>http://www.cppblog.com/prayer/archive/2009/07/28/91492.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Tue, 28 Jul 2009 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/07/28/91492.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/91492.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/07/28/91492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/91492.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/91492.html</trackback:ping><description><![CDATA[<h3>用途</h3>
<p>创建逻辑卷。</p>
<h3>语法</h3>
<p><span class=bold>mklv</span> [ <span class=bold>-a </span><span class=italic>Position</span> ] [ <span class=bold>-b</span><span class=italic> BadBlocks</span> ] [ <span class=bold>-c</span><span class=italic> Copies</span> ] [ <span class=bold>-d </span><span class=italic>Schedule</span> ] [ <span class=bold>-e </span><span class=italic>Range</span> ] [ <span class=bold>-i</span> ] [ <span class=bold>-L </span><span class=italic>Label</span> ] [ <span class=bold>-m </span><span class=italic>MapFile</span> ] [ <span class=bold>-o </span><span class=italic>Y / N</span> ] [ <span class=bold>-r</span><span class=italic> Relocate</span> ] [ <span class=bold>-s</span><span class=italic> Strict</span> ] [ <span class=bold>-t </span><span class=italic>Type</span> ] [ <span class=bold>-u </span><span class=italic>UpperBound</span> ] [ <span class=bold>-v</span><span class=italic> Verify</span> ] [ <span class=bold>-w </span><span class=italic>MirrorWriteConsistency</span> ] [ <span class=bold>-x</span><span class=italic> Maximum</span> ] [ <span class=bold>-y</span><span class=italic> NewLogicalVolume</span> | <span class=bold>-Y</span><span class=italic> Prefix</span> ] [ <span class=bold>-S</span> <span class=italic>StripeSize</span> ] [ <span class=bold>-U</span> <span class=italic>Userid</span> ] [ <span class=bold>-G</span> <span class=italic>Groupid</span> ] [ <span class=bold>-P</span> <span class=italic>Modes</span> ] <span class=italic>VolumeGroup Number</span> [ <span class=italic>PhysicalVolume ..</span>. ]</p>
<h3>描述</h3>
<p><span class=bold>mklv</span> 命令在 <span class=italic>VolumeGroup</span> 中创建一个新的逻辑卷。例如，所有的文件系统必须处于单独的逻辑卷上。<span class=bold>mklv</span> 命令将逻辑分区数分配给新的逻辑卷。如果用 <span class=italic>PhysicalVolume</span> 参数指定了一个或多个物理卷，那么只有这些物理卷对物理分区是可用的。否则，卷组中的所有物理卷都是可用的。</p>
<p>缺省的设置提供了最常用的字符，也可使用标志去定制系统要求的逻辑卷。创建了逻辑卷之后，可以用 <span class=bold>chlv</span> 命令来更改它的特性。</p>
<p>缺省的分配策略是使用每个逻辑卷副本的最小物理卷数来尽量连续地放置属于一个副本的物理分区，然后将物理分区放置到由 <span class=bold>-a</span> 标志指定的期望的区域中。在缺省的情况下，同时将逻辑分区的每个副本放置在一个单独的物理卷上。</p>
<p>创建逻辑卷时，<span class=bold>-m</span> 标志指定所用的精确的物理分区。</p>
<p>如果 <span class=italic>volume group</span> 中的逻辑卷是以大 vg 格式创建的，则 <span class=bold>U</span>、<span class=bold>G</span> 和 <span class=bold>P</span> 标志可以用于分别设置特殊设备文件的所有权、组和许可权。只有 root 用户才可以设置这些值。如果导出了 <span class=italic>volume group</span>，那么当 <span class=bold>R</span> 标志是由 <span class=bold>importvg</span> 命令指定的时这些值可以在导入时恢复。</p>
<p>当使用 <span class=bold>mklv</span> 命令时，可以用 512 Blocks/KB/MB/GB 指定逻辑卷的大小。（请参阅示例。）</p>
<p>物理分区从最外边起并以数字 1 开始计数。</p>
<div class=notelisttitle>注:</div>
<ol type=1>
    <li>对于逻辑卷所做的更改不会在文件系统中反映出来。使用 <span class=bold>chfs</span> 命令来更改文件系统特性。
    <li>每个逻辑卷有一个控制块。逻辑卷控制块位于逻辑卷初始的几百个字节上。当允许控制块直接读取和写逻辑卷时，必须要小心。逻辑卷数据开始于第二个 512 字节块。
    <li>要使用这个命令，必须具有 root 用户的权限或者是 <span class=bold>system</span> 组的成员。
    <li>当用 <span class=bold>-S</span> 标志创建条带逻辑卷时，必须指定两个或多个物理卷或者使用 <span class=bold>-u</span> 标志。
    <li>当创建条带逻辑卷时，分区的数量必须是条带分割宽度的偶数倍。
    <li>要用多于一个的副本创建一个条带逻辑卷，当卷组处于并发方式下时，所有的活动节点应该至少为 AIX 4.3.3 或更新版本。
    <li>在快照卷组上不允许 <span class=bold>mklv</span> 命令。 </li>
</ol>
<p>您可以使用基于 Web 的系统管理器中的卷应用程序来更改卷特性。您也可以使用&#8220;系统管理接口工具&#8221;（SMIT）<span class=bold>smit mklv</span> 快速路径来运行此命令。</p>
<h4>条带逻辑卷上的文件系统</h4>
<p>如果想要在条带逻辑卷上创建文件系统，则在运行 <span class=bold>crfs</span> 命令或 <span class=bold>mkfs</span> 命令创建文件系统之前，应该创建条带逻辑卷。为了在条带分割宽度内最大化地使用磁盘空间，则在创建条带逻辑卷时应该选择同样大小的硬盘。条带分割宽度是形成条带逻辑卷的硬盘数。</p>
<h3>标志</h3>
<p>&nbsp;</p>
<table class=FCK__ShowTableBorders rules=none width="100%" border=0 frame=void>
    <tbody vAlign=top>
        <tr>
            <td width="42%"><span class=bold>-a</span><span class=italic> Position</span></td>
            <td width="57%">设置内部物理卷分配策略（在物理卷上的逻辑分区的位置）。<span class=italic>Position</span> 变量可以是以下之一：
            <dl>
            <dt class=bold>m
            <dd>在每个物理卷的外部中间扇区内分配逻辑分区。这是缺省的位置。
            <dt class=bold>c
            <dd>在每个物理卷的中间扇区内分配逻辑分区。
            <dt class=bold>e
            <dd>在每个物理卷的外部边缘段内分配逻辑分区。
            <dt class=bold><span class=bold>ie</span>
            <dd>在每个物理卷的内部边缘段内分配逻辑分区。
            <dt class=bold><span class=bold>im</span>
            <dd>在每个物理卷的内部中间段内分配逻辑分区。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-b</span><span class=italic> BadBlocks</span></td>
            <td>设置坏区重定位策略。<span class=italic>Relocation</span> 变量可以是以下之一：
            <dl>
            <dt class=bold><span class=bold>y</span>
            <dd>发生坏区重定位。这是缺省值。
            <dt class=bold><span class=bold>n</span>
            <dd>防止发生坏区重定位。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-c</span><span class=italic> Copies</span></td>
            <td>设置分配给每个逻辑分区的物理分区数。<span class=italic>Copies</span> 变量的值可以设置为从 1 到 3，缺省值是 1。</td>
        </tr>
        <tr>
            <td><span class=bold>-d</span><span class=italic> Schedule</span></td>
            <td>当多于一个的逻辑分区被写入时，设置调度策略。<span class=italic>Schedule</span> 变量可以是以下之一：
            <dl>
            <dt class=bold>p
            <dd>建立一个并行调度策略。这是调度策略的缺省值。
            <dt class=bold>ps
            <dd>用顺序读策略进行并行写。所有镜像都以并行方式写入，但如果第一个镜像可用，则始终从第一个镜像读取。
            <dt class=bold>pr
            <dd>并行写循环读取。除了试图更均匀地在所有的镜像上分配读以外，此策略基本类似于并行策略。
            <dt class=bold><span class=bold>s</span>
            <dd>建立顺序调度策略。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-e</span><span class=italic> Range</span></td>
            <td>设置内部物理卷分配策略（使用提供了最佳分配的卷所扩展的物理卷数量）。<span class=italic>Range</span> 值由 <span class=italic>UpperBound</span> 变量限制（用 <span class=bold>-u</span> 标志设置），它可以是以下之一：
            <dl>
            <dt class=bold><span class=bold>x</span>
            <dd>根据最大物理卷数量分配。
            <dt class=bold><span class=bold>m</span>
            <dd>根据最小物理卷数量分配逻辑分区。这是缺省的范围。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-G</span><span class=italic> Groupid</span></td>
            <td>为逻辑卷特别文件指定组标识。</td>
        </tr>
        <tr>
            <td><span class=bold>-i</span></td>
            <td>从标准输入中读取 <span class=italic>PhysicalVolume</span> 参数。仅当 <span class=italic>PhysicalVolume</span> 从标准输入中输入时，才使用 <span class=bold>-i</span> 参数。</td>
        </tr>
        <tr>
            <td><span class=bold>-L</span></td>
            <td>设置逻辑卷标号。缺省的标号是 <span class=bold>None</span>。逻辑卷文件大小的最大值为 127 个字符。
            <div class=notetitle>注:</div>
            <div class=notebody>如果逻辑卷用作一个日志文件系统（JFS），则 JFS 将使用这个字段存储逻辑卷上的文件系统的安装点作为以后的参考。</div>
            </td>
        </tr>
        <tr>
            <td><span class=bold>-m</span><span class=italic> MapFile</span></td>
            <td>指定要分配的精确的物理分区。分区以 <span class=italic>MapFile</span> 参数中给定的顺序来使用<span class=italic>。</span>在 <span class=italic>MapFile</span> 参数中使用的分区是不合法的，因为新的逻辑卷无法占用与先前分配的逻辑卷相同的物理空间。属于一个副本的所有物理分区在为逻辑卷的下一个副本分配之前就已经分配好了。<span class=italic>MapFile</span> 参数的格式为：<tt><font face=NSimsun>PVname:PPnum1[-PPnum2]</font></tt>。在本示例中，<tt><font face=NSimsun>PVname</font></tt> 是一个由系统指定的物理卷名（例如 <tt><font face=NSimsun>hdisk0</font></tt>)。这是每个物理分区的一个记录或连续物理分区的一个范围。<tt><font face=NSimsun>PPnum</font></tt> 是物理分区号。
            <dl>
            <dt class=bold><tt><font face=NSimsun>PVname</font></tt>
            <dd>物理卷的名称由系统指定。
            <dt class=bold><tt><font face=NSimsun>PPnum</font></tt>
            <dd>物理分区数量。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-o</span><span class=italic>Y / N</span></td>
            <td>打开／关闭重叠的 IO 串行化。如果打开了串行化，则不允许重叠的 IO 在一个块范围中，并且在任何一段时间内仅处理一个块范围内的一个单独 IO。大多数应用程序（如文件系统和数据库）会进行串行化，所以串行化应该设置为 <tt><font face=NSimsun>off</font></tt>。新的逻辑卷的缺省值为 <tt><font face=NSimsun>off</font></tt>。</td>
        </tr>
        <tr>
            <td><span class=bold>-P</span><span class=italic> Modes</span></td>
            <td>为逻辑卷特别文件指定许可权（文件方式）。</td>
        </tr>
        <tr>
            <td><span class=bold>-r</span><span class=italic> Relocate</span></td>
            <td>设置重组织重定位标志。对于条带逻辑卷，<span class=italic>Relocate</span> 参数必须设置为 <span class=bold>n</span>（条带逻辑卷的缺省值）。<span class=italic>Relocate</span> 参数可以是以下之一：
            <dl>
            <dt class=bold>y
            <dd>允许在重组织过程中重定位逻辑卷。这是重定位的缺省值。
            <dt class=bold>n
            <dd>防止在重组织过程中重定位逻辑卷。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-s</span><span class=italic> Strict</span></td>
            <td>确定严格的分配策略。逻辑分区的副本可以分配为是否共享相同的物理卷。<span class=italic>Strict</span> 参数由以下之一表示：
            <dl>
            <dt class=bold>y
            <dd>设置一个严格的分配策略，这样逻辑分区的副本无法共享相同的物理卷。这是分配策略的缺省值。
            <dt class=bold>n
            <dd>没有设置一个严格的分配策略，这样逻辑分区的副本可以共享相同的物理卷。
            <dt class=bold>s
            <dd>设置一个超级严格的分配策略，这样为一个镜像分配的分区就无法与另一个镜像的分区共享相同的物理卷。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-S</span><span class=italic> StripeSize</span></td>
            <td>定义每个分割区的字节数。必须是在 4K 和 128K 之间的 2 的乘幂，例如 4K、8K、16K、32K 或 128K。
            <div class=notetitle>注:</div>
            <div class=notebody>当使用 <span class=bold>-S</span> 标志创建一个条带逻辑卷时，<span class=bold>-d</span>、<span class=bold>-e</span> 和 <span class=bold>-s</span> 标志是无效的。</div>
            </td>
        </tr>
        <tr>
            <td><span class=bold>-t</span><span class=italic> Type</span></td>
            <td>设置逻辑卷的类型。标准的类型为 <span class=bold>jfs</span>（日志文件系统）、<span class=bold>jfslog</span>（日志文件系统记录日志）、<span class=bold>jfs2</span>（增强的日志文件系统）、<span class=bold>jfs2log</span>（增强的日志文件系统记录日志）和 <span class=bold>paging</span>（页面调度空间），但用户可以使用这个标志定义其它逻辑卷类型。无法创建类型为 <span class=bold>boot</span> 的条带逻辑卷。缺省值为 <span class=bold>jfs</span>。如果文件系统的日志是手动创建的，则用户必须运行 <span class=bold>logform</span> 命令在日志可以使用之前清除新的 <span class=bold>jfslog</span>。例如，要格式化逻辑卷 <tt><font face=NSimsun>logdev</font></tt>，请输入：
            <p>&nbsp;</p>
            <pre class=xmp>logform /dev/logdev</pre>
            <p><tt><font face=NSimsun>/dev/logdev</font></tt> 是逻辑卷的绝对路径。</p>
            </td>
        </tr>
        <tr>
            <td><span class=bold>-U</span><span class=italic> Userid</span></td>
            <td>为逻辑卷特定文件指定用户标识。</td>
        </tr>
        <tr>
            <td><span class=bold>-u</span><span class=italic> UpperBound</span></td>
            <td>为新的分配设置物理卷的最大数量。<span class=italic>Upperbound</span> 变量的值必须介于 1 和物理卷总数之间。当使用条带逻辑卷或超级严格性时，值的上界表示每个镜像副本所允许的最大物理卷数量。
            <div class=notetitle>注:</div>
            <div class=notebody>当创建超级严格逻辑卷时，必须指定物理卷或使用 <span class=bold>-u</span> 标志。</div>
            </td>
        </tr>
        <tr>
            <td><span class=bold>-v</span><span class=italic> Verify</span></td>
            <td>设置逻辑卷的写验证状态。使（<span class=bold>y</span>）到逻辑卷的所有写入由随后的读取来验证，或者阻止（<span class=bold>n</span>）验证到逻辑卷的所有写入。<span class=italic>Verify</span> 参数由以下之一表示：
            <dl>
            <dt class=bold>n
            <dd>防止验证到逻辑卷的所有写操作。这是 <span class=bold>-v</span> 标志的缺省值。
            <dt class=bold>y
            <dd>验证到逻辑卷所有写操作。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-w</span><span class=italic> MirrorWriteConsistency</span></td>
            <td>
            <dl>
            <dt class=bold>y 或 a
            <dd>打开 <span class=italic>active</span> 镜像写一致性以确保在通常的 I／O　处理中逻辑卷镜像副本之间的数据一致性。
            <dt class=bold>p
            <dd>打开 <span class=italic>passive</span> 镜像写一致性以确保在系统中断后卷组同步中镜像副本之间的数据一致性。
            <div class=notetitle>注:</div>
            <div class=notebody>此功能仅适用于&#8220;大卷组&#8221;。</div>
            <dt class=bold><span class=bold>n</span>
            <dd>没有镜像写一致性。请参阅 <span class=bold>syncvg</span> 命令的 <span class=bold>-f</span> 标志。</dd></dl></td>
        </tr>
        <tr>
            <td><span class=bold>-x</span><span class=italic> Maximum</span></td>
            <td>设置可以分配到逻辑卷的逻辑分区的最大数量。缺省值是 512。由 <span class=italic>Number</span> 参数所表示的数量必须等于或小于由 <span class=italic>Maximum</span> 变量所表示的数量。每个逻辑卷的逻辑分区的最大数是 32,512。</td>
        </tr>
        <tr>
            <td><span class=bold>-y</span><span class=italic> NewLogicalVolume</span></td>
            <td>指定使用逻辑卷名代替系统生成的名称。逻辑卷名必须是唯一的系统宽度名，可以由 1 到 15 个字符组成。如果 <span class=italic>volume group</span> 联机于并发方式，则 <span class=italic>volume group</span> 联到的所有并发节点上的新的名称必须是唯一的。名称不能以其它设备的&#8220;设备配置数据库&#8221;中的 <span class=bold>PdDv</span> 类已定义的前缀开始。</td>
        </tr>
        <tr>
            <td><span class=bold>-Y</span><span class=italic> Prefix</span></td>
            <td>指定使用 <span class=italic>Prefix</span> 以代替新的逻辑卷中的系统生成名称的前缀。前缀必须小于等于 13 个字符。名称不能以其它设备的&#8220;设备配置数据库&#8221;中的 <span class=bold>PdDv</span> 类已定义的前缀开始，也不能是另一个设备已使用的名称。</td>
        </tr>
    </tbody>
</table>
<h3>示例</h3>
<ol type=1>
    <li>要用一个逻辑分区和数据的两个总副本制作逻辑组 <tt><font face=NSimsun>vg02</font></tt> 中的逻辑卷，请输入：
    <pre class=xmp>mklv  -c 2 vg02 1</pre>
    <li>要在卷组 <tt><font face=NSimsun>vg03</font></tt> 中创建一个具有九个逻辑分区、三个最多跨越两个物理卷的总副本并且其分配策略不严格的逻辑卷，请输入：
    <pre class=xmp>mklv  -c 3   -u 2   -s n vg03 9</pre>
    <li>如有可能，要用跨越物理卷中央段的五个逻辑分区、没有坏区的重定位和页面调度类型在 <tt><font face=NSimsun>vg04</font></tt> 中制作逻辑卷，请输入：
    <pre class=xmp>mklv  -a c  -t paging  -b n vg04 5</pre>
    <li>要用 15 个从 <tt><font face=NSimsun>hdisk5</font></tt>、<tt><font face=NSimsun>hdisk6</font></tt> 和 <tt><font face=NSimsun>hdisk9</font></tt> 逻辑卷中选出的逻辑分区，在 <tt><font face=NSimsun>vg03</font></tt> 中创建逻辑卷，请输入：
    <p>&nbsp;</p>
    <pre class=xmp>mklv vg03 15 hdisk5 hdisk6 hdisk9</pre>
    <li>要用 3 个物理卷和 12 个逻辑分区上的大小为 64K 的组合分割区，在 <tt><font face=NSimsun>vg05</font></tt> 上制作条带逻辑卷，请输入：
    <p>&nbsp;</p>
    <pre class=xmp>mklv -u 3 -S 64K vg05 12</pre>
    <li>要用 hdisk1、hdisk2、hdisk3 和 12 个逻辑分区上的大小为 8K 的组合分割区，在 <tt><font face=NSimsun>vg05</font></tt> 上创建条带逻辑卷，请输入：
    <p>&nbsp;</p>
    <pre class=xmp>mklv -S 8K vg05 12 hdisk1 hdisk2 hdisk3</pre>
    <li>要用最小值 10MB 请求一个逻辑卷，请输入：
    <pre class=xmp>mklv <span class=italic>VGNAME</span> 10M #</pre>
    <p><span class=bold>mklv</span> 命令会确定大于等于 10MB 的创建逻辑卷所需的分区数量。</p>
    <p>可以使用以下的大写和小写字母：</p>
    <pre class=xmp>B/b       512 字节块     K/k       KB    K/k       KB    M/m       MB    G/g       GB</pre>
    </li>
</ol>
<h3>文件</h3>
<p>&nbsp;</p>
<table class=FCK__ShowTableBorders rules=none width="100%" border=0 frame=void>
    <tbody vAlign=top>
        <tr>
            <td width="15%"><span class=bold>/usr/sbin</span></td>
            <td width="85%"><span class=bold>mklv</span> 命令驻留的目录。</td>
        </tr>
        <tr>
            <td><span class=bold>/tmp</span></td>
            <td>当运行此命令时临时文件存储的目录。</td>
        </tr>
        <tr>
            <td><span class=bold>/dev</span></td>
            <td>创建的逻辑卷的字符和块设备项所在的目录。</td>
        </tr>
    </tbody>
</table>
<h3>相关信息</h3>
<p><span class=bold>chfs</span> 命令、<span class=bold>chlv</span> 命令、<span class=bold>chpv</span> 命令、<span class=bold>extendlv</span> 命令、<span class=bold>mklvcopy</span> 命令、<span class=bold>rmlvcopy</span> 命令和 <span class=bold>syncvg</span> 命令。</p>
<p><span class=italic>AIX 5L Version 5.2 System Management Concepts: Operating System and Devices</span> 中的 Logical Volume Storage Overview。</p>
<p>有关安装基于 Web 的系统管理器的信息，请参阅<span class=italic>《AIX 5L V5.2 基于 Web 的系统管理器管理指南》</span>中的『第 2 章：安装基于 Web 的系统管理器』。</p>
<p><span class=italic>AIX 5L Version 5.2 System Management Concepts: Operating System and Devices</span> 中的 System Management Interface Tool (SMIT) Overview。</p>
<img src ="http://www.cppblog.com/prayer/aggbug/91492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-07-28 15:30 <a href="http://www.cppblog.com/prayer/archive/2009/07/28/91492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>