<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Chenjunlu's Blog</title>
	
	<link>http://www.chenjunlu.com</link>
	<description>记录生活的全部</description>
	<lastBuildDate>Wed, 15 Feb 2012 09:17:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/chenjunlu" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="chenjunlu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><item>
		<title>在 MIUI 系统下开启 App2SD+ 功能</title>
		<link>http://www.chenjunlu.com/2012/02/how-to-turn-on-the-app2sd-under-miui/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-turn-on-the-app2sd-under-miui</link>
		<comments>http://www.chenjunlu.com/2012/02/how-to-turn-on-the-app2sd-under-miui/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 09:17:45 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App2SD]]></category>
		<category><![CDATA[HTC Desire]]></category>
		<category><![CDATA[MIUI]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2544</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2553" title="App2SD+" src="http://www.chenjunlu.com/wp-content/uploads/2012/02/App2SD+.jpg" alt="App2SD+" width="383" height="321" /></p>
最近发现自己手机上的内置 ROM 空间不够用了，虽然之前用 修改了系统的分区大小，但是毕竟手机快用2年了，软件使用的空间也越来越大，目前还没有换手机的打算，所以没办法，只有自己想想其他办法来解决，我的手机是 HTC Desire ，目前我自己刷的是最新的小米系统 MIUI， 虽然当前系统的版本有内置 App2SD 功能，但是像微信或 Google Maps 不支持 App2SD，所以我想到了 App2SD+ 功能。

在 Android 手机刚面世的时候，系统版本 1.5 和后来的 2.1 都不支持把程序装到 SD 卡上，由于系统内置的空间较小，装不了太多软件，于是有国外的牛人搞出了 App2SD 的概念，就是把软件装在 SD 卡上。在官方推出2.2版本系统的时候就把这个概念整合到系统，于是出现了2种 App2SD 功能。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2553" title="App2SD+" src="http://www.chenjunlu.com/wp-content/uploads/2012/02/App2SD+.jpg" alt="App2SD+" width="383" height="321" /></p>
<p>最近发现自己手机上的内置 ROM 空间不够用了，虽然之前用 修改了系统的分区大小，但是毕竟手机快用2年了，软件使用的空间也越来越大，目前还没有换手机的打算，所以没办法，只有自己想想其他办法来解决，我的手机是 HTC Desire ，目前我自己刷的是最新的小米系统 MIUI， 虽然当前系统的版本有内置 App2SD 功能，但是像微信或 Google Maps 不支持 App2SD，所以我想到了 App2SD+ 功能。</p>
<p>在 Android 手机刚面世的时候，系统版本 1.5 和后来的 2.1 都不支持把程序装到 SD 卡上，由于系统内置的空间较小，装不了太多软件，于是有国外的牛人搞出了 App2SD 的概念，就是把软件装在 SD 卡上。在官方推出2.2版本系统的时候就把这个概念整合到系统，于是出现了2种 App2SD 功能。</p>
<p>为了区分2种 App2SD，这里重新命名一下:</p>
<ul>
<li>App2SD： Android 2.2 版本内置的 App2SD</li>
<li>App2SD+： 国外牛人从1.5系统开始搞的 App2SD</li>
</ul>
<p>这两种 App2SD 有着明显的区别，区别如下:</p>
<ul>
<li>App2SD：直接把软件装在 SD 卡的 Fat32 分区上，这个分区就是手机连接电脑使用磁盘驱动器的时候看到的那个硬盘分区，这样做有缺点，比如当使用磁盘驱动器模式的时候，SD 卡被电脑独占，装在 SD 卡上的程序无法运行，会导致很多插件和软件消失。另外，目前来说 Android 上面的软件很多还是不支持 App2SD 的，只有一部分可以装在 SD 卡上。</li>
<li>App2SD+： 通过给SD卡分区, 一个 Swap 分区(可选),一个 Ext 分区(安装软件的地方),一个 Fat32 分区。这种方式很好的解决了官方2.2系统自带 App2SD 的缺点,所有程序都可以装在 SD 卡上,在使用磁盘驱动器模式的时候也不会影响到 SD 卡上程序的运行。</li>
</ul>
<p>所以，我个人强烈推荐使用 App2SD+。</p>
<p>MIUI 的 App2SD+ 是完全使用 Darktremor App2SD 的，一点不一样的地方都没有。英文好感兴趣朋友请参考<a href="http://forum.xda-developers.com/showthread.php?p=7021328" target="_blank">这里</a>。</p>
<p>下面我来介绍一下在 MIUI 系统下开启 App2SD+ 功能的的具体方法：</p>
<ol>
<li>备份 SD 卡上的文件到电脑上（因为给SD卡分区后，你的 SD 卡上的资料就会全部删除）。</li>
<li>重启到 Recovery 模式。</li>
<li>使用菜单下的 Partition sdcard 功能对 SD 卡进行分区管理。</li>
<li>根据屏幕提示，选择 Swap-size 和 Ext3-size 选项，用滚轮上下调整空间大小，最后确定开始分区，没分配的空间就是 FAT32 存储空间。</li>
<li>开启 App2SD+ 功能，打开手机的超级终端，在命令行下输入如下内容：（这一步手机自动重启，这一步是重新加载 a2sd 功能，并且会把已经安装过的软件移到 sd-ext 分区里）<br />
<blockquote><p>$  su<br />
# a2sd reinstall</p></blockquote>
</li>
<li>如果想关闭 App2SD+ 功能，则需要输入如下内容：<br />
<blockquote><p>$  su<br />
# a2sd remove</p></blockquote>
</li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年02月17日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-reflash-alpharev-hboot-on-htc-desire/" title="刷 N1 Table 增加 HTC Desire 可用内存 ">刷 N1 Table 增加 HTC Desire 可用内存 </a> (0)</li><li>2011年02月14日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-root-your-htc-desire/" title="如何获取 HTC Desire 的 root 权限?">如何获取 HTC Desire 的 root 权限?</a> (1)</li><li>2011年03月16日 -- <a href="http://www.chenjunlu.com/2011/03/pes2011-for-android-and-ipad/" title="PES2011 for Android and iPad">PES2011 for Android and iPad</a> (0)</li><li>2011年02月18日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-s-off-your-htc-desire/" title="How to S-OFF your HTC Desire ?">How to S-OFF your HTC Desire ?</a> (0)</li><li>2011年02月15日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-install-cyanogenmod6-on-htc-desire/" title="HTC Desire 刷 CyanogenMod6 ROM 详细说明">HTC Desire 刷 CyanogenMod6 ROM 详细说明</a> (0)</li><li>2010年07月28日 -- <a href="http://www.chenjunlu.com/2010/07/auto-mount-your-sd-card/" title="懒人必备小工具 &#8211; Auto mount your SD card">懒人必备小工具 &#8211; Auto mount your SD card</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/02/how-to-turn-on-the-app2sd-under-miui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>虚拟化 hypervisor 的类型对比</title>
		<link>http://www.chenjunlu.com/2012/01/hypervisor-types/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hypervisor-types</link>
		<comments>http://www.chenjunlu.com/2012/01/hypervisor-types/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 00:36:11 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[hypervisor]]></category>
		<category><![CDATA[Type 1]]></category>
		<category><![CDATA[Type 2]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2512</guid>
		<description><![CDATA[对虚拟化 hypervisor 类型的对比首先从理解市场上的两种不同方式开始，它们是：
<ul>
	<li>Type 1：直接运行于硬件系统之上的裸机管理程序，Type 1 也经常被称为硬件虚拟化引擎。</li>
	<li>Type 2：以现有操作系统之上的应用程序之一的方式运行。</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2529" title="Hypervisor Design" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Hypervisor_Design.jpg" alt="Hypervisor Design" width="461" height="346" /></p>]]></description>
			<content:encoded><![CDATA[<p>对虚拟化 hypervisor 类型的对比首先从理解市场上的两种不同方式开始，它们是：</p>
<ul>
<li>Type 1：直接运行于硬件系统之上的裸机管理程序，Type 1 也经常被称为硬件虚拟化引擎。</li>
<li>Type 2：以现有操作系统之上的应用程序之一的方式运行。</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2529" title="Hypervisor Design" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Hypervisor_Design.jpg" alt="Hypervisor Design" width="461" height="346" /></p>
<p>由于 Type 1 管理程序以简化层的方式向虚拟机提交虚拟化后的硬件资源，因此它可以提供更好的性能和可扩展性。从而减少了运行管理程序本身所需的花销。</p>
<p>由于 Type 1 管理程序直接运行于硬件层上，它起的作用也在硬件范围内。运行了Type 1 虚拟化管理程序的主机通常只用于实现单一功能，它们作为资源池的一部分被设计，用于支持多个虚拟机内的各种应用程序运行。</p>
<p>尽管很多情况下 Type 1 与 Type 2 管理程序之上可以运行相同的虚拟机，从而提供完全同类型的功能，但是通常Type 1 管理程序要比 Type 2 更高效。事实上，我们可以把 Type 1 系统上运行的虚拟机迁移到 Type 2 系统上，反之也可以实现。可能需要一些转换机制，但是完全可以实现。</p>
<p>由于直接运行于硬件层之上，Type 1 管理程序支持硬件级的虚拟化。而 Type 2 管理程序由于是作为操作系统的应用运行的，它完成的是软件层的虚拟化。</p>
<p>理解虚拟化管理程序的使用率：</p>
<p>由于实现原理的影响，Type 1 管理程序通常用于支持生产环境或者是直接为用户提供服务的虚拟机。而Type 2管理程序虽然可以提供非常丰富的服务能力，但却很少用于生产环境。通常运行 Type 2 管理器的主机还会支持其它的一些额外服务，因此无法100%的用于支持虚拟机运行。所以，我们需要选择 Type 1 系统支持生产用虚拟机。</p>
<p>Type 1 管理程序可以监控虚拟机的运行状态，跟踪虚拟机内发生的所有动作，必要情况下还可以允许（或禁止）对某些资源的访问来满足虚拟机操作需求。理想情况下，虚拟机管理器可以配置某个虚拟机的各种设置策略来完成对它的管理。如果您需要完成如下的这些任务，请考虑选择基于硬件的虚拟化管理程序：</p>
<ol>
<li>系统整合：虚拟化管理程序可以支持在同一物理硬件上运行多种系统，这样可以在保证，甚至是提高服务水平的基础上减少所需物理服务器数量和降低成本。</li>
<li>系统测试：管理程序可以实现对系统的隔离，因此可以在不影响生产系统的情况下完成对新软件和应用的测试。相比物理平台，测试所需成本降低。</li>
<li>异构平台管理：管理程序可以支持在同一物理硬件上运行多种异构的操作系统平台，从而可以降低企业使用异构平台的硬件成本。</li>
<li>硬件优化：通过在同一个物理主机上运行多个工作负载，管理程序可以把服务器利用率从5%~10%提高到60%~70%。</li>
<li>应用程序高可用：通过在故障切换集群系统中运行工作负载，运行了管理程序的服务器可以支持应用程序的高可用，确保虚拟机内应用程序提供的服务始终可用。</li>
<li>资源优化：通过在独立的虚拟机内运行不同的应用，管理程序可以优化资源配置，因为每个不同的应用在不同时间段所需的硬件资源是变化的。</li>
<li>服务灵活性：由于管理程序支持跨虚拟机的操作，所以虚拟机的克隆和再生变得更加容易，相比物理机企业获得了更大的灵活性。</li>
<li>动态资源管理：虚拟化管理程序可以支持在虚拟机工作负载运行高峰期，手动或自动地进行资源再分配，因此虚拟化管理程序可以更好地支持数据中心范围内的动态资源分配。</li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/01/hypervisor-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>意犹未尽的《机械迷城》</title>
		<link>http://www.chenjunlu.com/2012/01/machinarium/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=machinarium</link>
		<comments>http://www.chenjunlu.com/2012/01/machinarium/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 05:37:05 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[游戏志 | Game]]></category>
		<category><![CDATA[AVG]]></category>
		<category><![CDATA[Machinarium]]></category>
		<category><![CDATA[机械迷城]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2514</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-large wp-image-2518" title="Machinarium" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Machinarium-1024x640.jpg" alt="Machinarium" width="417" height="260" /></p>

好久没些博客了，这篇好像是2012年的第一篇文章，这么重要的位置我竟用来写游戏心得，我真有点不好意思，呵呵。春节假期，我在 iPad2 的 App Store 上下载了一款叫《机械迷城》（Machinarium）的游戏，它真是一款让人爱不释手的游戏，大年初二到初四我一口气玩到通关，它里面的很多谜题都是一些智力小游戏，让玩家在体验游戏的欢乐的同时锻炼了大脑，真是让人着迷。《机械迷城》是由捷克独立开发小组 <a href="http://amanita-design.net/" target="_blank">Amanita Design</a> 设计制作的一款 AVG 冒险游戏。该游戏在2009年独立游戏节上获得了视觉艺术奖。游戏采用的是传统点击式界面，和 Samorost 游戏相似，2D 背景和人物，没有对白。Machinarium 游戏的时间更长更复杂，游戏画面则全部由手画完成。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-large wp-image-2518" title="Machinarium" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Machinarium-1024x640.jpg" alt="Machinarium" width="417" height="260" /></p>
<p>好久没些博客了，这篇好像是2012年的第一篇文章，这么重要的位置我竟用来写游戏心得，我真有点不好意思，呵呵。春节假期，我在 iPad2 的 App Store 上下载了一款叫《机械迷城》（Machinarium）的游戏，它真是一款让人爱不释手的游戏，大年初二到初四我一口气玩到通关，它里面的很多谜题都是一些智力小游戏，让玩家在体验游戏的欢乐的同时锻炼了大脑，真是让人着迷。《机械迷城》是由捷克独立开发小组 <a href="http://amanita-design.net/" target="_blank">Amanita Design</a> 设计制作的一款 AVG 冒险游戏。该游戏在2009年独立游戏节上获得了视觉艺术奖。游戏采用的是传统点击式界面，和 Samorost 游戏相似，2D 背景和人物，没有对白。Machinarium 游戏的时间更长更复杂，游戏画面则全部由手画完成。</p>
<p>独立游戏，这个名字真的还是第一次听说（是我火星了。。），自然而然地联想起了时下很流行的小成本独立制作电影。“独立”总是意味着着四两搏千斤似的优雅，和满脸稚气的无拘无束，在这个势利的世界里，占据着以品质，内涵著称的一个角落，而且，这个角落越发得令人无法抑制地加以窥视（尽管多数人人依旧不屑一顾）。</p>
<p>我深深被精美的美工背景吸引，饥渴地下载下来，一口气通了关。过程中除了感叹于各种谜题的绝妙设计，以及 2D 动画细微处的一丝不苟之外（背景音乐都是那么惬意），浮现起了一个词：“后工业时代”。</p>
<p>被遗弃的，散落在垃圾堆的主角，灰黑色植物上的嫩芽（不知道你注意到没），肮脏的的污水池，锈迹斑斑的楼梯，碎掉的街灯。这些场景已经定下了一种整体抑郁的色调，在以一种严肃而无奈的方式暗示我们：“这是一个不值得停留的时代里的一个被遗忘的城市。”不由自主想起了机器人瓦里？嗯，当然会想起，太相似了。</p>
<p>监狱里想抽烟的废物，懦弱的罪犯（无辜的？），被抢走的乐器的三人组，不再工作的扳手，还有那个高塔之上几乎无能的老大。。。等等，好多好多。每时每刻，都有一种淡淡的悲伤和凄凉侵袭我们，主角默默地帮助那些可能一辈子也不了解自己存在价值的机器人，犹如瓦里一个人整理者全人类留下的垃圾。主角回忆着往日和心爱的另一半在油池里面嬉戏，恰似瓦里默默注视老电影里那双牵起与被牵起的手。</p>
<p>后工业时代的进行总是伴随着疑惑不解，彷徨失落，急躁反抗，当然还有前辈制造的各种遗留问题和隐隐发臭的垃圾。记得《搏击俱乐部》里的那句台词：“我们是被上帝抛弃的一代，没有大萧条，没有世界大战，我们的战斗是精神的斗争。”机器们重复着制造者设计的工作而不思考它的意义，人类每天做着自己既不喜欢也搞不懂的工作，而时间依旧不曾停留。于是有人疑惑，有人彷徨，有人反抗，但是这些终究不是良药秘方，这些终归于沉寂。</p>
<p>这样，就有了后现代主义的散漫，缺少了开天辟地的豪情，一切归于琐碎的问题，混合的意识，安逸的信步。或许瓦里或者是游戏里的主角拯救世界的壮举过于理想化，可我依旧被感动得落泪，拯救不值得拯救的世界，不因为过去或者现在，只因为一种趋势，一种回忆的力量，一个对未知未来的期望。似乎诠释着后工业时代延续性的重要，过去可以无比向往，现在可以无比作呕，未来可以毫无希望，但是，要有走下去的毅力，至少给予后代变革进步的机会，而我们，不惜为完成过渡倾其所有，毫不犹豫。</p>
<p>而游戏与电影总是浪漫的，即使灰暗抑郁，也有精神的美好寄托，微笑不知情地面对危险，总是观众乐于接受的，当我们从欢乐的外表提炼出严肃的暗喻时，自然有连篇出现的猜想。奔波在荒漠孤城里的机器人，最终拯救了城市，亦步亦趋，艰难，但是坚定。思想的孤寂痛楚总是当下人们最大的敌人，但就算没有灯塔，我们依旧要默默地走下去。</p>
<p>我应该说，这是一部让人休闲的游戏，还是一些让人思考的材料，更是一种让人伤感落泪的猜想。</p>
<blockquote><p>“这个世界如此美丽，值得我们为之奋斗，我只相信后半句。”</p>
<p style="text-align: right;">&#8212;米勒尔·海明威</p>
</blockquote>
<p>在经历了那些魔兽，飞车，使命，战神等游戏的汹涌震撼和冲击之外，电子游戏亦不可救药地进入了“后工业时代”，生猛海鲜似的大手笔（大作，神作），貌似越来越不能满足玩家的口味，相同的东西吃多了总会腻，无论这东西有多美味，画面和照片一样（至少我们肉眼无法辨别）的时候，我们又该有怎样的期待？这类独立制作的小游戏虽然不太可能是最终出路，但算作一种提示，一种指引，一剂良药呢？如果独立游戏能保持独立电影的严谨和卓越，哦。我越发地期待它的未来了！诞生一个独立游戏的韦恩斯坦？呃，仅仅是一个细菌般渺小的玩家，我依旧对它具有某种真诚的祝福和遐想。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/01/machinarium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Liferay Portal 集群配置指南</title>
		<link>http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=liferay-portal-ha-cluster-configuration-manual</link>
		<comments>http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 09:38:57 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[APJ]]></category>
		<category><![CDATA[HA]]></category>
		<category><![CDATA[Liferay]]></category>
		<category><![CDATA[mod_jk]]></category>
		<category><![CDATA[mod_proxy]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2494</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-2505" title="liferay_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/liferay_logo-300x79.jpg" alt="liferay_logo" width="300" height="79" /></p>

最近公司的 OA 系统出现性能问题，虽然问题的根源是应用中的签报系统采用的是 JBPM 框架，该框架在数据库设计方面的低效的惊人，但是在新的签报系统开发出来之前，作为系统运维人员的我们只能先采取其他曲线救国的方式来减少性能问题发生的可能性，所以就有了 OA 系统集群测试环境的搭建这个项目，这篇博文的诞生也拜该项目所赐。配置过程中费了老大的劲，尝试了很多种配置方式，其中的艰辛我就不说了，至少结果是好的。由于公司的 OA 系统是在 Liferay Portal 定制开发的，所以该集群测试环境的搭建也主要是围绕着 Liferay Portal 以及 Apache，Tomcat 来进行。我就不废话了，下面详细介绍 Liferay Portal 集群配置过程：
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-2505" title="liferay_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/liferay_logo-300x79.jpg" alt="liferay_logo" width="300" height="79" /></p>
<p>最近公司的 OA 系统出现性能问题，虽然问题的根源是应用中的签报系统采用的是 JBPM 框架，该框架在数据库设计方面的低效的惊人，但是在新的签报系统开发出来之前，作为系统运维人员的我们只能先采取其他曲线救国的方式来减少性能问题发生的可能性，所以就有了 OA 系统集群测试环境的搭建这个项目，这篇博文的诞生也拜该项目所赐。配置过程中费了老大的劲，尝试了很多种配置方式，其中的艰辛我就不说了，至少结果是好的。由于公司的 OA 系统是在 Liferay Portal 定制开发的，所以该集群测试环境的搭建也主要是围绕着 Liferay Portal 以及 Apache，Tomcat 来进行。我就不废话了，下面详细介绍 Liferay Portal 集群配置过程：</p>
<p>1. 在两个节点上分别编译安装 Apache ：</p>
<blockquote><p><code>[root@oaclstest1 media]# yum install openssl openssl-devel<br />
[root@oaclstest1 media]# cd httpd-2.2.14<br />
[root@oaclstest1 httpd-2.2.14]# ./configure --prefix=/usr/local/apache --enable-so --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-scgi --enable-proxy-ajp --enable-proxy-balancer --enable-ssl<br />
[root@oaclstest1 httpd-2.2.14]# make<br />
[root@oaclstest1 httpd-2.2.14]# make install</code></p></blockquote>
<p>2. 配置 httpd.conf 文件，添加以下内容：</p>
<blockquote><p><code>&lt;VirtualHost *:80&gt;<br />
ServerName 10.1.2.200<br />
#ErrorLog /var/log/apache2/ajp.error.log<br />
#CustomLog /var/log/apache2/ajp.log combined</code></p>
<p><code>&lt;Proxy *&gt;<br />
AddDefaultCharSet Off<br />
Order deny,allow<br />
Allow from all<br />
&lt;/Proxy&gt;<br />
ProxyPass /balancer-manager !<br />
ProxyPass / balancer://ajpCluster/ stickysession=JSESSIONID<br />
ProxyPassReverse / balancer://ajpCluster/ stickysession=JSESSIONID<br />
&lt;Proxy balancer://ajpCluster&gt;<br />
BalancerMember ajp://10.1.2.190:8009 route=node2<br />
BalancerMember ajp://10.1.2.189:8009 route=node1<br />
ProxySet lbmethod=byrequests<br />
&lt;/Proxy&gt;</code></p>
<p><code>&lt;Location /balancer-manager&gt;<br />
SetHandler balancer-manager<br />
Order deny,allow<br />
Allow from all<br />
&lt;/Location&gt;<br />
&lt;/VirtualHost&gt;</code></p></blockquote>
<p>3. 配置 RHCS 集群，cluster.conf 文件内容如下：</p>
<blockquote><p><code>&lt;?xml version="1.0" ?&gt;<br />
&lt;cluster alias="OaHA" config_version="17" name="OaHA"&gt;<br />
&lt;fence_daemon post_fail_delay="0" post_join_delay="3"/&gt;<br />
&lt;clusternodes&gt;<br />
&lt;clusternode name="oaclstest1" nodeid="1" votes="1"&gt;<br />
&lt;fence/&gt;<br />
&lt;/clusternode&gt;<br />
&lt;clusternode name="oaclstest2" nodeid="2" votes="1"&gt;<br />
&lt;fence/&gt;<br />
&lt;/clusternode&gt;<br />
&lt;/clusternodes&gt;<br />
&lt;cman expected_votes="1" two_node="1"/&gt;<br />
&lt;fencedevices/&gt;<br />
&lt;rm&gt;<br />
&lt;failoverdomains&gt;<br />
&lt;failoverdomain name="Failover_Oa" ordered="0" restricted="1"&gt;<br />
&lt;failoverdomainnode name="oaclstest1" priority="1"/&gt;<br />
&lt;failoverdomainnode name="oaclstest2" priority="1"/&gt;<br />
&lt;/failoverdomain&gt;<br />
&lt;/failoverdomains&gt;<br />
&lt;resources&gt;<br />
&lt;ip address="10.1.2.200" monitor_link="1"/&gt;<br />
&lt;script file="/usr/local/apache/bin/apachectl" name="httpd_script"/&gt;<br />
&lt;/resources&gt;<br />
&lt;service autostart="1" domain="Failover_Oa" name="OaHA_Service" recovery="relocate"&gt;<br />
&lt;ip ref="10.1.2.200"/&gt;<br />
&lt;script ref="httpd_script"/&gt;<br />
&lt;/service&gt;<br />
&lt;/rm&gt;<br />
&lt;/cluster&gt;</code></p></blockquote>
<p>4. 启动集群</p>
<blockquote><p><code>[root@oaclstest1 ~]# service cman start<br />
[root@oaclstest2 ~]# service cman start<br />
[root@oaclstest1 ~]# service rgmanager start<br />
[root@oaclstest2 ~]# service rgmanager start<br />
</code></p></blockquote>
<p>5. 配置 server.xml 文件以（node1 为例）：</p>
<blockquote><p><code>&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;Server port="8005" shutdown="SHUTDOWN"&gt;</code></p>
<p><code>&lt;!--APR library loader. Documentation at /docs/apr.html --&gt;<br />
&lt;Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /&gt;<br />
&lt;!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --&gt;<br />
&lt;Listener className="org.apache.catalina.core.JasperListener" /&gt;<br />
&lt;!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --&gt;<br />
&lt;Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /&gt;<br />
&lt;Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /&gt;</code></p>
<p><code>&lt;GlobalNamingResources&gt;</code></p>
<p><code>&lt;Resource name="UserDatabase" auth="Container"<br />
type="org.apache.catalina.UserDatabase"<br />
description="User database that can be updated and saved"<br />
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"<br />
pathname="conf/tomcat-users.xml" /&gt;<br />
&lt;/GlobalNamingResources&gt;</code></p>
<p><code>&lt;Service name="Catalina"&gt;</code></p>
<p><code>&lt;Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"<br />
connectionTimeout="20000"<br />
redirectPort="8443" URIEncoding="UTF-8" /&gt;</code></p>
<p><code>&lt;!-- Define an AJP 1.3 Connector on port 8009 --&gt;<br />
&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /&gt;</code></p>
<p><code>&lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"&gt;<br />
</code><br />
<code>&lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<br />
channelSendOptions="6"&gt;</code></p>
<p><code>&lt;Manager className="org.apache.catalina.ha.session.BackupManager"<br />
expireSessionsOnShutdown="false"<br />
notifyListenersOnReplication="true"<br />
mapSendOptions="6"/&gt;</code></p>
<p><code>&lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<br />
&lt;Membership className="org.apache.catalina.tribes.membership.McastService"<br />
address="228.0.0.4"<br />
port="45564"<br />
frequency="500"<br />
dropTime="3000"/&gt;<br />
&lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />
address="auto"<br />
port="5000"<br />
selectorTimeout="100"<br />
maxThreads="6"/&gt;</code></p>
<p><code>&lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<br />
&lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/&gt;<br />
&lt;/Sender&gt;<br />
&lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/&gt;<br />
&lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/&gt;<br />
&lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/&gt;<br />
&lt;/Channel&gt;</code></p>
<p><code>&lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/&gt;<br />
&lt;Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/&gt;</code></p>
<p><code>&lt;ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/&gt;<br />
&lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/&gt;<br />
&lt;/Cluster&gt;</code></p>
<p><code>&lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"<br />
resourceName="UserDatabase"/&gt;<br />
</code><br />
<code>&lt;Host name="localhost" appBase="webapps"<br />
unpackWARs="true" autoDeploy="true"<br />
xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&lt;/Host&gt;<br />
&lt;/Engine&gt;<br />
&lt;/Service&gt;<br />
&lt;/Server&gt;</code></p></blockquote>
<p>6. 配置 context.xml 文件：</p>
<blockquote><p><code>&lt;?xml version='1.0' encoding='utf-8'?&gt;</code></p>
<p><code>&lt;Context distributable="true"&gt;<br />
&lt;!-- Default set of monitored resources --&gt;<br />
&lt;WatchedResource&gt;WEB-INF/web.xml&lt;/WatchedResource&gt;<br />
&lt;/Context&gt;</code></p></blockquote>
<p>7. 配置 EHcache ：将 hibernate-clustered.xml 和 liferay-multi-vm-clustered.xml 文件从 portal-impl.jar 里解压出来并且放到一个命名为 myehcache 的文件夹内。然后将 myehcache 文件夹复到 [TOMCAT-HOME]/webapps/ROOT/WEB-INF/classes 目录下。在 portal-ext.properties 文件里加上如下配置信息：</p>
<blockquote><p><code>net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml<br />
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml</code></p></blockquote>
<p>8. 配置 Jackrabbit : 请确认在 portal-ext.properties 文件里包含如下配置信息：</p>
<blockquote><p><code>dl.hook.impl=com.liferay.documentlibrary.util.JCRHook</code></p></blockquote>
<p>9. 开启 clusterLink： 在 portal-ext.properties 文件里加上如下配置信息：</p>
<blockquote><p><code>cluster.link.enabled=true</code></p></blockquote>
<p>10. 在 Liferay 后台配置 LDAP：将 Authentication Search Filter field 设置成 (&amp;(objectCategory=person)(sAMAccountName=@screen_name@))。</p>
<p>11. 分别启动两个节点上的 Tomcat 应用。</p>
<p>12. 在浏览器中输入 http://10.1.2.200 进行测试。</p>
<p>需要再说明一下的是：在配置 Apache 的负载均衡的过程中，我使用红帽自带的 Apache，一直没有配置成功，最后通过编译安装特定版本的 Apache 才得以成功，这其中失败的原因我还没找到，另外，在编译安装 Apache 后，我没有再尝试使用 mod_jk 模块来实现负载均衡，不过貌似该模块比我配置的 mod_proxy 模块效率高，稳定性好。想更多了解这两个模块的区别的朋友请参考<a href="http://ningq.com/2010/12/modproxy_vs_modjk.html" target="_blank">这里</a>。未来我会找时间，再尝试用 mod_jk 模块配置一下。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年10月11日 -- <a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" title="Oracle HA 脚本">Oracle HA 脚本</a> (0)</li><li>2011年05月20日 -- <a href="http://www.chenjunlu.com/2011/05/how-to-monitor-tomcat-server-by-using-cacti/" title="在 Cacti 下实现对 Tomcat 的监控">在 Cacti 下实现对 Tomcat 的监控</a> (9)</li><li>2011年04月19日 -- <a href="http://www.chenjunlu.com/2011/04/red-hat-cluster-suite-overview/" title="Red Hat Cluster Suite 概览">Red Hat Cluster Suite 概览</a> (0)</li><li>2011年03月7日 -- <a href="http://www.chenjunlu.com/2011/03/red-hat-gfs/" title="Red Hat GFS 存储解决方案">Red Hat GFS 存储解决方案</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Keyboard 上手玩</title>
		<link>http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-play-kindle-keyboard</link>
		<comments>http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 02:26:58 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Briss]]></category>
		<category><![CDATA[E-ink]]></category>
		<category><![CDATA[e-Reader]]></category>
		<category><![CDATA[Instapaper]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Kindle]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2450</guid>
		<description><![CDATA[Kindle 这款亚马逊的产品刚推出的时候我就很关注，低廉的价位，电子墨水屏，都是吸引我的主要原因，由于手里有 iPad 用来看一些技术类书籍，所以一直也就忍着没有入手 Kindle。上个月终于下定决心，毕竟 iPad 的娱乐性太强了，很难安下心来静静的看书，而且 Kindle 的 E-ink 屏还有保护眼镜的功效，有利于长时间的阅读。淘宝上随便选了一家信用比较高的卖家就下单了，我购买的是 Kindle Keyboard wifi 广告版，也就是大家常说的 Kindle3，没有买 3G 版一是觉得性价比不高，另外怕在国内使用会被封号，另外强烈建议大家购买广告版，不但便宜而且对使用几乎没有影响，因为广告只是出现在系统主页，以及屏保画面。
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2468" title="kindle-in-hand" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle-in-hand.jpg" alt="kindle-in-hand" width="342" height="182" /></p>]]></description>
			<content:encoded><![CDATA[<p>Kindle 这款亚马逊的产品刚推出的时候我就很关注，低廉的价位，电子墨水屏，都是吸引我的主要原因，由于手里有 iPad 用来看一些技术类书籍，所以一直也就忍着没有入手 Kindle。上个月终于下定决心，毕竟 iPad 的娱乐性太强了，很难安下心来静静的看书，而且 Kindle 的 E-ink 屏还有保护眼镜的功效，有利于长时间的阅读。淘宝上随便选了一家信用比较高的卖家就下单了，我购买的是 Kindle Keyboard wifi 广告版，也就是大家常说的 Kindle3，没有买 3G 版一是觉得性价比不高，另外怕在国内使用会被封号，另外强烈建议大家购买广告版，不但便宜而且对使用几乎没有影响，因为广告只是出现在系统主页，以及屏保画面。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2468" title="kindle-in-hand" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle-in-hand.jpg" alt="kindle-in-hand" width="342" height="182" /></p>
<p>亚马逊做的东西就是精致，无论是拿到手上的手感，还是系统的可用性，我下单时侯，选择了代装 <a href="http://www.duokan.com/forum/index.php" target="_blank">多看</a> 系统的服务，一个月玩下来，我发现完全没有必要安装多看系统，在我看来多看系统唯一一个功能 Kindle 原生系统没有的功能就是中文 TTS，这个功能我几乎不用，所以我一直在用原生系统，也许有的朋友会说，原生系统看不了 txt 文件，看不了 ePub 格式的文件。恩，这个确实，不过，对于 txt 文件，我们可以通过亚马逊的在线服务来转换成 mobi 格式就好了。拿到 Kindle 的第一件事就是注册了，这里会一点英语的朋友基本都能很轻松做得到，成功后你会得到一个 Kindle 邮箱（你可以自己设置用户名），这个邮箱可是相当好用的东东，要想使用亚马逊丰富的云服务，就靠这个邮箱了。说回浏览 txt 文件的话题，用你注册邮箱给你的 kindle 邮箱发一封信，附件是你需要转换的 txt 文件，亚马逊会自动转换该文件成原生系统可识别的格式，并同步到你的 Kindle 中去。这里需要说明的是，如果你使用的是 @free.kindle.com 的邮箱，那么亚马逊只在你的 Kindle 存在 wifi 连接时同步，这样如果你的 Kindle 是 3G 版的，这样可以避免产生多余的流量费用。如果你不在意这些，你可以直接使用 @kindle.com 的邮箱地址，当然因为我的 Kindle 只是 wifi 版的，我使用哪个地址就无所谓了，我索性使用的就是 @kindle.com 地址。如果你有一些非扫描版的 pdf 文件需要转换，那么注意了，请把邮件的标题写成 “convert”，因为 Kindle Keyboard 支持 pdf 的浏览，所以如果没有 convert 标题，亚马逊不会转换相关文件，只是同步该 pdf 到你的 Kindle 上去。如果有朋友，执意要在 Kindle 原生系统上浏览 ePub 格式文件的话，那么这也不是不可能的，不过请先对你的 Kindle 进行越狱，具体的教程请参考 <a href="http://bbs.mydoo.cn/thread-19025-1-1.html" target="_blank">这里</a>。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2476" title="kindle" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle.jpg" alt="kindle" width="350" height="197" /></p>
<p>英语有待提高的我，使用 Kindle 浏览英文原版书籍时，常常遇到单词不会的情况，没关系，亚马逊都想到了，原生系统支持字典查询，不过系统自带的字典是英英字典，不太符合国人的实际情况，但是网上有很多可以下载的 Kindle 英汉字典，你可以下载后用 USB 连接拷贝到 Kindle 中去，淘宝买家也会送一些英汉字典的，不过这些英汉字典基本没有支持变形的功能，我自己在网上下了一些比较好用的英汉字典，想要的朋友可以直接联系我，有了英汉字典，我们就可以保证在阅读的时候随时查找不会的单词，这不仅节省了很多时间，还大大提高了我读英文原版书籍的速度。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2451" title="kindle_keyboard_thumb" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle_keyboard_thumb.jpg" alt="kindle_keyboard_thumb" width="300" height="177" /></p>
<p>我用 Kindle 除了看书之外最多的事情就是看新闻了，在 Kindle Store 订购杂志和报纸的方法，我就不说了，一个是我没弄过，二是身为国人的我为真没有付费购买信息的习惯。我的方法是使用一些第三方网站来实现每日新闻的推送，国内的网站我推荐 <a href="http://ikindle.mobi/" target="_blank">ikindle.mobi</a> 和 <a href="http://dogear.mobi/" target="_blank">狗耳朵</a>，注册成功后，你可以在帐号设置里设置自己的 Kindle 邮箱，然后勾选你感兴趣的新闻进行推送，需要说明的是，记得一定要在 Amazon 的 Manage your Kindle 页面下把相应网站地址添加到白名单里，这样每天清晨你打开 Kindle 就可以浏览最新的国内外资讯。狗耳朵还提供一个烧制 Google Reader 的 RSS 种子功能，不过貌似每天发送的文件太多了，有被退信的现象，我不太推荐，毕竟我的 Google Reader 里少说也有几十个种子。说到 Google Reader ，我不得不推荐 <a href="http://www.instapaper.com/" target="_blank">Instapaper</a>， 老外的创意实在是太绝了，在阅读 Google Reader 时，如果想读这篇文章现在又没有时间仔细阅读，可以点击 Instapaper 提供的 Read Later 按钮，Instapaper 自动把该文章推送到你的 Kindle 上。目前 iPad 上的 Flipboard 应用也开始支持 Instapaper 了。<a href="http://www.instascriber.com/" target="_blank">Instascriber</a> 提供了自动推送 RSS 种子的服务，应该说是 Instapaper 服务的再集成，感兴趣的朋友可以试试。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2464" title="kindle_keyboard_thumb_1" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle_keyboard_thumb_1.jpg" alt="" width="407" height="252" /></p>
<p>也许有的人还会抱怨 Kindle 原生系统没有 pdf 自动切白边功能，的确，不过使用 <a href="http://sourceforge.net/projects/briss/" target="_blank">Briss</a> 开源软件完全可以自己手动切白边，Briss 的好处就是跨平台，并且用户自由度比较高。</p>
<p>絮絮叨叨的说了一堆，以上就是我使用 Kindle 的一个月的上手经验，希望有着同样爱好的朋友能够一起交流。Kindle 说到头来就是一个读书的工具，在这里，我希望跟大家一起共勉，让我们多多看书，充实自己，提高自己，为自己，也为身边那些爱你的人。最后，送给大家关于梦想的一句话：</p>
<blockquote><p>梦想无论怎样模糊，总潜伏在我们心底，使我们的心境永远得不到宁静，直到这些梦想成为事实才止；像种子在地下一样,一定要萌芽滋长，伸出地面来，寻找阳光。</p>
<p style="text-align: right;">－－ 林语堂</p>
</blockquote>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年08月4日 -- <a href="http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/" title="Comex &#8212; 年仅19岁的超级黑客">Comex &#8212; 年仅19岁的超级黑客</a> (0)</li><li>2011年03月16日 -- <a href="http://www.chenjunlu.com/2011/03/pes2011-for-android-and-ipad/" title="PES2011 for Android and iPad">PES2011 for Android and iPad</a> (0)</li><li>2011年03月2日 -- <a href="http://www.chenjunlu.com/2011/03/ipad-tips/" title="iPad 你不可不知的使用小技巧">iPad 你不可不知的使用小技巧</a> (0)</li><li>2011年01月20日 -- <a href="http://www.chenjunlu.com/2011/01/how-to-configure-your-ipad-after-jailbreaking/" title="玩转 iPad：越狱后的配置">玩转 iPad：越狱后的配置</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下安装 Cognos Server</title>
		<link>http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-cognos-server-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 09:27:53 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[CM-CFG-5063]]></category>
		<category><![CDATA[CM-CFG-5137]]></category>
		<category><![CDATA[CM-SYS-5124]]></category>
		<category><![CDATA[Cognos]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[RHEL]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2436</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2444" title="Cognos_IBM_logo_centered" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/Cognos_IBM_logo_centered.jpg" alt="Cognos_IBM_logo_centered" width="281" height="111" /></p>
最近一段时间，公司这边最大的项目就是 BI 项目了，公司买了 N 台服务器，用来运行 IBM Cognos 商业智能解决方案。我实际上是在项目的上线部署的过程中才参与进来，说心里话，真的从中学到很多东西。过去在 HP Neoview 组也号称涉足商业智能，但是毕竟只是支持，通过这个项目，我才真正了解到了一个公司应该如何来构建自己的商业智能解决方案。技术层面上，我除了掌握了 Cognos 的一些简单安装配置外，还接触到了 Oracle GoldenGate 技术，GoldenGate 亚秒级的数据同步技术，不但实现了数据库的冗余备份，而且使用 Cognos ETL 工具对备库进行抽取，也大大降低生产数据库的负载。GoldenGate 这方面的内容以后我也会把一些实践心得写到博客上来。感兴趣的朋友请关注博客的相关更新。

下面我来简单介绍一下 Cognos Server 的配置过程：
... ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2444" title="Cognos_IBM_logo_centered" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/Cognos_IBM_logo_centered.jpg" alt="Cognos_IBM_logo_centered" width="281" height="111" /></p>
<p>最近一段时间，公司这边最大的项目就是 BI 项目了，公司买了 N 台服务器，用来运行 IBM Cognos 商业智能解决方案。我实际上是在项目的上线部署的过程中才参与进来，说心里话，真的从中学到很多东西。过去在 HP Neoview 组也号称涉足商业智能，但是毕竟只是支持，通过这个项目，我才真正了解到了一个公司应该如何来构建自己的商业智能解决方案。技术层面上，我除了掌握了 Cognos 的一些简单安装配置外，还接触到了 Oracle GoldenGate 技术，GoldenGate 亚秒级的数据同步技术，不但实现了数据库的冗余备份，而且使用 Cognos ETL 工具对备库进行抽取，也大大降低生产数据库的负载。GoldenGate 这方面的内容以后我也会把一些实践心得写到博客上来。感兴趣的朋友请关注博客的相关更新。</p>
<p>下面我来简单介绍一下 Cognos Server 的配置过程：</p>
<ol>
<li>安装 Java SDK。由于 Cognos 要求的 Java 版本比较高，所以必须自行下载新版本的 Java。我自己下载并安装的是 jdk1.6.0_29。</li>
<li>创建 itadmin 用户和用户组。</li>
<li>配置相关环境变量：<br />
<blockquote><p>export JAVA_HOME=/jboss/jdk1.6.0_29<br />
export PATH=$JAVA_HOME/bin:$PATH:.<br />
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib</p></blockquote>
</li>
<li>配置 vncserver 并启动：<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ vi .vnc/xstartup<br />
#!/bin/sh</p>
<p># Uncomment the following two lines for normal desktop:<br />
unset SESSION_MANAGER<br />
exec /etc/X11/xinit/xinitrc</p>
<p>[ -x /etc/vnc/xstartup ] &amp;&amp; exec /etc/vnc/xstartup<br />
[ -r $HOME/.Xresources ] &amp;&amp; xrdb $HOME/.Xresources<br />
xsetroot -solid grey<br />
vncconfig -iconic &amp;<br />
xterm -geometry 80&#215;24+10+10 -ls -title “$VNCDESKTOP Desktop” &amp;<br />
twm &amp;<br />
[itadmin@dlidcbiuatapp ~]$ vncserver</p></blockquote>
</li>
<li>创建安装目录，并修改相应的权限：<br />
<blockquote><p>[root@dlidcbiuatapp ~]# mkdir -p /opt/ibm/cognos<br />
[root@dlidcbiuatapp ~]# chown -R itadmin:itadmin /opt/ibm/cognos</p></blockquote>
</li>
<li>安装 Cognos Server 的依赖软件包。<br />
<blockquote><p>[root@dlidcbiuatapp ~]# yum install libXp*<br />
[root@dlidcbiuatapp ~]# yum install openmotif*<br />
[root@dlidcbiuatapp ~]# yum install compat-libstdc++*</p></blockquote>
</li>
<li>使用 vncviewer 以 itadmin 登录 vncserver。</li>
<li>挂载 Cognos Server 安装光盘。<br />
<blockquote><p>[root@dlidcbiuatapp ~]# mount -o loop /media/Cognos_Server_linux_x86_64.iso /cognos/</p></blockquote>
</li>
<li>运行安装脚本：<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ cd /cognos/linuxi38664h/<br />
[itadmin@dlidcbiuatapp linuxi38664h]$ ./issetup</p></blockquote>
</li>
<li>拷贝jar文件。<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ cp /opt/ibm/cognos/c10_64/bin64/jre/6.0/lib/ext/bcprov-jdk14-134.jar $JAVA_HMOE/jre/lib/ext/</p></blockquote>
</li>
<li>在 /opt/ibm/cognos/c10_64/webapps/p2pd/WEB-INF/lib/ 目录下添加 Oracle 数据库驱动包 ojdbc14.jar。</li>
<li>启动可视化配置：<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ cd /opt/ibm/cognos/c10_64/bin64/<br />
[itadmin@dlidcbiuatapp bin64]$ ./cogconfig.sh</p></blockquote>
</li>
<li>配置 content manager。</li>
<li>拷贝 /opt/ibm/cognos/c10_64/webcontent/ 目录下的所有内容到 /opt/ibm/cognos/c10_64/webapps/p2pd/ 目录下。</li>
<li>启动 Cognos server。</li>
<li>打开浏览器输入：http://10.10.7.175:9300/p2pd/servlet/dispatch</li>
</ol>
<p>在具体的实践中，如果你遇到了 CM-CFG-5137 错误，log 给出的具体信息是：“Content Manager was unable to complete the initialization of the content store.”。请参考<a href="http://www-01.ibm.com/support/docview.wss?uid=swg21342265" target="_blank">这里</a>解决。</p>
<p>如果你遇到了CM-CFG-5063 错误，那么你一定是数据库的用户配置的权限不够，具体请参考<a href="https://www-304.ibm.com/support/docview.wss?uid=swg21340046" target="_blank">这里</a>解决。</p>
<p>另外一个需要说明的就是，如果你使用 Oracle 作为 Cognos Server 的数据库，那么创建的数据库编码方式一定要是 UTF-8，否则你会遇到 CM-SYS-5124 错误，排错请参考<a href="https://www-304.ibm.com/support/docview.wss?uid=swg21338618" target="_blank">这里</a>解决。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年07月12日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-configure-the-installed-apache-as-a-service-of-the-linux-server/" title="配置编译安装的 Apache 为系统服务">配置编译安装的 Apache 为系统服务</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Mac OS X 下使用 IPython</title>
		<link>http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-ipython-under-mac-os-x</link>
		<comments>http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 01:08:08 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[easy_install]]></category>
		<category><![CDATA[iMac]]></category>
		<category><![CDATA[iPython]]></category>
		<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[readline]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2399</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2422" title="IPython_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/IPython_logo.png" alt="IPython_logo" width="140" height="140" /></p>
使用 IPython 真的很让人着迷，我决定把家里的 iMac 也安装上 IPython 以便于我进一步的学习。在 Mac OS X 下安装 IPython 则是件很简单的事，使用 easy_install 命令即可。值得说明的是，由于 Mac OS X Snow Leopard 更改了 GNU Lisence，所以在 Mac OS X 下安装 IPython 还单独需要 readline 功能，不过在 setuptools 工具面前一切都那么简单。直接在 Mac 的命令行下执行如下命令即可，具体过程如下：
... ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2422" title="IPython_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/IPython_logo.png" alt="IPython_logo" width="140" height="140" /></p>
<p>使用 IPython 真的很让人着迷，我决定把家里的 iMac 也安装上 IPython 以便于我进一步的学习。在 Mac OS X 下安装 IPython 则是件很简单的事，使用 easy_install 命令即可。值得说明的是，由于 Mac OS X Snow Leopard 更改了 GNU Lisence，所以在 Mac OS X 下安装 IPython 还单独需要 readline 功能，不过在 setuptools 工具面前一切都那么简单。直接在 Mac 的命令行下执行如下命令即可，具体过程如下：</p>
<blockquote><p><code>chenjunlu@mac:~ &gt; easy_install-2.6 readline ipython<br />
Searching for readline<br />
Reading http://pypi.python.org/simple/readline/<br />
Reading http://github.com/ludwigschwardt/python-readline<br />
Reading http://www.python.org/<br />
Best match: readline 6.2.1<br />
Downloading http://pypi.python.org/packages/2.6/r/readline/readline-6.2.1-py2.6-macosx-10.6-universal.egg#md5=ede81e48d1d5a0b889fe75a240833f47<br />
Processing readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
creating /Library/Python/2.6/site-packages/readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
Extracting readline-6.2.1-py2.6-macosx-10.6-universal.egg to /Library/Python/2.6/site-packages<br />
Adding readline 6.2.1 to easy-install.pth file</code></p>
<p><code>Installed /Library/Python/2.6/site-packages/readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
Processing dependencies for readline<br />
Finished processing dependencies for readline<br />
Searching for ipython<br />
Reading http://pypi.python.org/simple/ipython/<br />
Reading http://ipython.scipy.org<br />
Reading http://ipython.scipy.org/dist<br />
Reading http://ipython.scipy.org/dist/0.10<br />
Reading http://ipython.scipy.org/dist/0.9.1<br />
Reading http://ipython.scipy.org/dist/0.8.4<br />
Reading http://ipython.org<br />
Reading http://archive.ipython.org/release/0.11/<br />
Reading http://ipython.scipy.org/dist/old/0.9<br />
Best match: ipython 0.11<br />
Downloading http://archive.ipython.org/release/0.11/ipython-0.11-py2.6.egg<br />
Processing ipython-0.11-py2.6.egg<br />
creating /Library/Python/2.6/site-packages/ipython-0.11-py2.6.egg<br />
Extracting ipython-0.11-py2.6.egg to /Library/Python/2.6/site-packages<br />
Adding ipython 0.11 to easy-install.pth file<br />
Installing ipcontroller script to /usr/local/bin<br />
error: /usr/local: Permission denied<br />
chenjunlu@mac:~ &gt; sudo easy_install-2.6 readline ipython<br />
Searching for readline<br />
Best match: readline 6.2.1<br />
Processing readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
readline 6.2.1 is already the active version in easy-install.pth</code></p>
<p><code>Using /Library/Python/2.6/site-packages/readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
Processing dependencies for readline<br />
Finished processing dependencies for readline<br />
Searching for ipython<br />
Best match: ipython 0.11<br />
Processing ipython-0.11-py2.6.egg<br />
ipython 0.11 is already the active version in easy-install.pth<br />
Installing ipcontroller script to /usr/local/bin<br />
Installing iptest script to /usr/local/bin<br />
Installing ipcluster script to /usr/local/bin<br />
Installing ipython script to /usr/local/bin<br />
Installing pycolor script to /usr/local/bin<br />
Installing iplogger script to /usr/local/bin<br />
Installing irunner script to /usr/local/bin<br />
Installing ipengine script to /usr/local/bin<br />
Installing ipython-qtconsole script to /usr/local/bin</code></p>
<p><code>Using /Library/Python/2.6/site-packages/ipython-0.11-py2.6.egg<br />
Processing dependencies for ipython<br />
Finished processing dependencies for ipython<br />
chenjunlu@mac:~ &gt;</code></p></blockquote>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年03月28日 -- <a href="http://www.chenjunlu.com/2011/03/microsoft-mouse-driver-under-mac-os-x/" title="Mac OS X 下的 MicroSoft 鼠标驱动">Mac OS X 下的 MicroSoft 鼠标驱动</a> (2)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年08月4日 -- <a href="http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/" title="Comex &#8212; 年仅19岁的超级黑客">Comex &#8212; 年仅19岁的超级黑客</a> (0)</li><li>2011年07月14日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-edit-the-hosts-file-in-mac-os-x/" title="在 Mac OS X 下修改 hosts 文件">在 Mac OS X 下修改 hosts 文件</a> (3)</li><li>2010年06月22日 -- <a href="http://www.chenjunlu.com/2010/06/ios4-%e7%bb%88%e4%ba%8e%e5%87%ba%e6%9d%a5%e4%ba%86/" title="iOS4 终于出来了">iOS4 终于出来了</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下安装 Python 和 IPython</title>
		<link>http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-python-and-ipython-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 06:58:45 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[egg]]></category>
		<category><![CDATA[iPython]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[setuptools]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2392</guid>
		<description><![CDATA[上周利用一周的时间学习了《A Byte of Python》，基本掌握了 Python 语言，但我作为一名系统工程师，基本告别了令人讨厌的编码工作，所以学习 Python 的主要原因除了爱好，就是想用它进行系统管理，所以我又开始读《Python for Unix and Linux System Administration》这本书，我开始尝试用 Python 来进行系统配置。工欲善其事，必先利其器！使用 Python 进行系统管理，当然首推 IPython，IPython 是一种“高级交互式Python”， 除了包含内置的交互解释器的功能（当然这个用起来感觉还是不一样地）以外还提供了一组灰常灰常有用的工具。Fernando Pérez 是 iPython 的创建者，他通过阅读《IPP and LazyPython》产生了灵感，现在他是 IPython 对象的核心开发人。在 Fernando 看来，IPython 是一种能够解决问题的高度可配置的工具。

下面我来介绍一下在 RHEL 5.5 下如何安装 Python 和 IPython。我的 RHEL 5.5 64bit 预装的是 Python 2.4.3，版本比较老，而 iPython 0.11 要求 Python 的版本至少是2.6。好在可以在一个系统上安装多个版本的 Python，前提是不要安装在同一个目录中，具体的安装配置过程如下：
<ol>
	<li>使用 yum 安装 Python 的依赖包。</li>
	<li>编译安装 Python 程序包。</li>
	<li>创建软连接</li>
	<li>如果运行上一步创建的软连接报函数库没有加载的错误，请配置 Python 函数库：</li>
	<li>安装 IPython 程序包。</li>
	<li>大功告成！</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>上周利用一周的时间学习了《A Byte of Python》，基本掌握了 Python 语言，但我作为一名系统工程师，基本告别了令人讨厌的编码工作，所以学习 Python 的主要原因除了爱好，就是想用它进行系统管理，所以我又开始读《Python for Unix and Linux System Administration》这本书，我开始尝试用 Python 来进行系统配置。工欲善其事，必先利其器！使用 Python 进行系统管理，当然首推 IPython，IPython 是一种“高级交互式Python”， 除了包含内置的交互解释器的功能（当然这个用起来感觉还是不一样地）以外还提供了一组灰常灰常有用的工具。Fernando Pérez 是 iPython 的创建者，他通过阅读《IPP and LazyPython》产生了灵感，现在他是 IPython 对象的核心开发人。在 Fernando 看来，IPython 是一种能够解决问题的高度可配置的工具。</p>
<p>下面我来介绍一下在 RHEL 5.5 下如何安装 Python 和 IPython。我的 RHEL 5.5 64bit 预装的是 Python 2.4.3，版本比较老，而 iPython 0.11 要求 Python 的版本至少是2.6。好在可以在一个系统上安装多个版本的 Python，前提是不要安装在同一个目录中，具体的安装配置过程如下：</p>
<ol>
<li>使用 yum 安装 Python 的依赖包。<br />
<code>yum -y install gcc gdbm-devel readline-devel ncurses-devel zlib-devel bzip2-develsqlite-devel db4-devel openssl-devel tk-devel bluez-libs-devel make</code></li>
<li>编译安装 Python 程序包。<br />
<code>[root@pubservicedb ~]# tar -xvf Python-2.7.2.tar.bz2<br />
[root@pubservicedb ~]# cd Python-2.7.2<br />
[root@pubservicedb Python-2.7.2]# ./configure --prefix=/usr/local/python2.7 --with-threads --enable-shared<br />
[root@pubservicedb Python-2.7.2]# make<br />
[root@pubservicedb Python-2.7.2]# make install</code></li>
<li>创建软连接。<br />
<code>[root@pubservicedb Python-2.7.2]# ln -sf /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7</code></li>
<li>如果运行上一步创建的软连接报函数库没有加载的错误，请配置 Python 函数库：<br />
<code>[root@pubservicedb Python-2.7.2]# python2.7<br />
python2.7: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory<br />
[root@pubservicedb Python-2.7.2]# touch /etc/ld.so.conf.d/python2.7.conf<br />
[root@pubservicedb Python-2.7.2]# echo "/usr/local/python2.7/lib/" &gt;&gt; /etc/ld.so.conf.d/python2.7.conf<br />
[root@pubservicedb Python-2.7.2]# cat /etc/ld.so.conf.d/python2.7.conf<br />
[root@pubservicedb Python-2.7.2]# ldconfig<br />
[root@pubservicedb Python-2.7.2]# python2.7<br />
Python 2.7.2 (default, Nov 1 2011, 14:00:46)<br />
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2<br />
Type "help", "copyright", "credits" or "license" for more information.<br />
&gt;&gt;&gt;<br />
[root@pubservicedb Python-2.7.2]#</code></li>
<li>安装 IPython 程序包。<br />
<code>[root@pubservicedb ~]# tar -xvf ipython-0.11<br />
[root@pubservicedb ~]# cd ipython-0.11<br />
[root@pubservicedb ipython-0.11]# python2.7 setup.py install<br />
[root@pubservicedb python2.7]# ln -sf /usr/local/python2.7/bin/ipython /usr/bin/ipython<br />
[root@pubservicedb python2.7]# ipython<br />
Python 2.7.2 (default, Nov 1 2011, 14:00:46)<br />
Type "copyright", "credits" or "license" for more information.</code></p>
<p><code>IPython 0.11 -- An enhanced Interactive Python.<br />
? -&gt; Introduction and overview of IPython's features.<br />
%quickref -&gt; Quick reference.<br />
help -&gt; Python's own help system.<br />
object? -&gt; Details about 'object', use 'object??' for extra details.<br />
In [1]: exit()<br />
[root@pubservicedb ipython]#</code></li>
<li>大功告成！</li>
</ol>
<p>本文使用的是源代码安装的方式来安装的 IPython，其实如果系统上安装了 setuptools，那么你可以使用 easy_install 来安装，或者直接下载 IPython 的 egg 包再配置好相关环境后直接使用。如果你对 setuptools 和 egg 包的概念不是很理解，请参考这篇<a href="http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html" target="_blank">文章</a>。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年11月24日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Cognos Server">在 RHEL 5.5 下安装 Cognos Server</a> (0)</li><li>2011年11月3日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/" title="在 Mac OS X 下使用 IPython">在 Mac OS X 下使用 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>yum 命令出现“段错误”的解决方案</title>
		<link>http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-fix-the-segmentation-fault-when-using-yum</link>
		<comments>http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 08:29:24 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Cacti]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[Segmentation fault]]></category>
		<category><![CDATA[yum]]></category>
		<category><![CDATA[zlib]]></category>
		<category><![CDATA[段错误]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2371</guid>
		<description><![CDATA[在公司的监控服务器上运行 yum 命令安装软件一直不成功，报错的内容是 “Segmentation fault（段错误）”，上网搜了搜，基本都是一样的解决方案（1.yum clean all 2.修改源 3.修改 yum.conf），照此执行，但并不能解决我的问题，有点绝望，但老天不负有心人，我终于找到了这篇<a href="http://bugs.centos.org/view.php?id=4702&#38;nbn=1" target="_blank">帖子</a>。

问题的描述如下：

<blockquote><code>Summary:
0004702: yum fails with segfault after source zlib upgrade
</code>
<code>Description:
Some apps require the latest version of zlib (1.2.5)
After installation from source yum segfaults. (took me ages to figure it out)
Solution, rm -rf /usr/lib/libz.* &#38; reinstall zlib-1.2.3.</code>

<code>Affects all CentOS 4.* and RHEL 4.* versions.</code>

<code>Additional Information:
[root@SirVic ~]# yum update
Setting up Update Process
Setting up repositories
Segmentation fault</code>

<code>last lines of strace :
_llseek(6, 0, [0], SEEK_CUR) = 0
read(6, "<!--?xml version=\"1.0\" ?--> read(6, "", 4346) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++</code></blockquote>]]></description>
			<content:encoded><![CDATA[<p>在公司的监控服务器上运行 yum 命令安装软件一直不成功，报错的内容是 “Segmentation fault（段错误）”，上网搜了搜，基本都是一样的解决方案（1.yum clean all 2.修改源 3.修改 yum.conf），照此执行，但并不能解决我的问题，有点绝望，但老天不负有心人，我终于找到了这篇<a href="http://bugs.centos.org/view.php?id=4702&amp;nbn=1" target="_blank">帖子</a>。</p>
<p>问题的描述如下：</p>
<blockquote><p><code>Summary:<br />
0004702: yum fails with segfault after source zlib upgrade<br />
</code><br />
<code>Description:<br />
Some apps require the latest version of zlib (1.2.5)<br />
After installation from source yum segfaults. (took me ages to figure it out)<br />
Solution, rm -rf /usr/lib/libz.* &amp; reinstall zlib-1.2.3.</code></p>
<p><code>Affects all CentOS 4.* and RHEL 4.* versions.</code></p>
<p><code>Additional Information:<br />
[root@SirVic ~]# yum update<br />
Setting up Update Process<br />
Setting up repositories<br />
Segmentation fault</code></p>
<p><code>last lines of strace :<br />
_llseek(6, 0, [0], SEEK_CUR) = 0<br />
read(6, "<!--?xml version=\"1.0\" ?--> read(6, "", 4346) = 0<br />
--- SIGSEGV (Segmentation fault) @ 0 (0) ---<br />
+++ killed by SIGSEGV +++</code></p></blockquote>
<p>原来我在搭建 Cacti 监控环境时，安装新版本的 zlib 使用的&#8211;prefix 选项对 yum 产生了影响。</p>
<p>具体的解决方案如下：</p>
<ol>
<li>安装完系统后，运行一次”#yum update”（yum 产生了缓存） ，然后再安装新版本的 zlib，之后如果不执行”#yum clean all”，则一直可以使用 yum，不会报段错误。</li>
<li>如果在执行 yum 前已经安装了新版本的 zlib，则需要做如下处理：<br />
<blockquote><p><code>[root@pubservicedb media]# vi /etc/ld.so.conf<br />
include ld.so.conf.d/*.conf<br />
#/usr/local/zlib/lib<br />
/usr/local/freetype/lib<br />
/usr/local/libjpeg/lib<br />
/usr/local/libgd/lib<br />
/usr/local/libpng/lib</p>
<p>[root@pubservicedb media]# ldconfig<br />
[root@pubservicedb media]# yum clean all<br />
[root@pubservicedb media]# yum list all</p>
<p>[root@pubservicedb media]# vi /etc/ld.so.conf<br />
include ld.so.conf.d/*.conf<br />
/usr/local/zlib/lib<br />
/usr/local/freetype/lib<br />
/usr/local/libjpeg/lib<br />
/usr/local/libgd/lib<br />
/usr/local/libpng/lib</p>
<p>[root@pubservicedb media]# ldconfig</code></p></blockquote>
</li>
</ol>
<p>需要说明的是：这种解决方案不是最佳解决方案，因为如果有用户再一次清除了 yum 缓存，那么再使用 yum 安装软件时依然会报段错误。还有人使用更改软连接的<a href="http://qiaojing.blog.51cto.com/841363/649160" target="_blank">方式</a>解决了这个问题 ，但原理和我的解决方案是一模一样的，依然不能完美解决这个问题，但是这两种方式应该是目前为止最优的解决方案了，谁叫该死的 yum 这么固执，只愿意使用老版本的 zlib 库。（囧rz）</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年11月24日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Cognos Server">在 RHEL 5.5 下安装 Cognos Server</a> (0)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年09月5日 -- <a href="http://www.chenjunlu.com/2011/09/how-to-monitor-iis-server-by-using-cacti/" title="在 Cacti 下实现监控 IIS 服务器">在 Cacti 下实现监控 IIS 服务器</a> (0)</li><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RHCS 管理手册</title>
		<link>http://www.chenjunlu.com/2011/10/rhcs-manual/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rhcs-manual</link>
		<comments>http://www.chenjunlu.com/2011/10/rhcs-manual/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 02:48:42 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[cluster.conf]]></category>
		<category><![CDATA[cman]]></category>
		<category><![CDATA[rgmanager]]></category>
		<category><![CDATA[RHCS]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2348</guid>
		<description><![CDATA[<h3>1. 启动 RHCS 集群</h3>
RHCS集群的核心进程有 cman 和 rgmanager，要启动集群，依次在集群的每个节点执行如下命令即可：

<code>[root@web1 ~]# service cman start
[root@web1 ~]# service rgmanager start</code>

需要注意的是，执行这两个命令是有先后顺序的，需要首先启动 cman，然后在启动 rgmanager。在集群所有节点成功启动 cman 服务后，然后继续依次在每个节点启动 rgmanager 服务。

<h3>2. 关闭 RHCS 集群</h3>
与启动集群服务刚好相反，关闭RHCS集群的命令为：

<code>[root@web1 ~]# service rgmanager stop
[root@web1 ~]# service cman stop</code>

首先在集群的每个节点依次关闭 rgmanager 服务，等待所有节点的 rgmanager 服务成功关闭后，再依次关闭每个节点的 cman 服务即可完成整个集群服务的关闭。

有时在关闭 cman 服务时，可能会提示关闭失败，此时可以检查本机的共享存储 GFS2 文件系统是否已经卸载，还可以检查其它节点的 rgmanager 服务是否都已经正常关闭。

... ...]]></description>
			<content:encoded><![CDATA[<h3>1. 启动 RHCS 集群</h3>
<p>RHCS集群的核心进程有 cman 和 rgmanager，要启动集群，依次在集群的每个节点执行如下命令即可：</p>
<p><code>[root@web1 ~]# service cman start<br />
[root@web1 ~]# service rgmanager start</code></p>
<p>需要注意的是，执行这两个命令是有先后顺序的，需要首先启动 cman，然后在启动 rgmanager。在集群所有节点成功启动 cman 服务后，然后继续依次在每个节点启动 rgmanager 服务。</p>
<h3>2. 关闭 RHCS 集群</h3>
<p>与启动集群服务刚好相反，关闭RHCS集群的命令为：</p>
<p><code>[root@web1 ~]# service rgmanager stop<br />
[root@web1 ~]# service cman stop</code></p>
<p>首先在集群的每个节点依次关闭 rgmanager 服务，等待所有节点的 rgmanager 服务成功关闭后，再依次关闭每个节点的 cman 服务即可完成整个集群服务的关闭。</p>
<p>有时在关闭 cman 服务时，可能会提示关闭失败，此时可以检查本机的共享存储 GFS2 文件系统是否已经卸载，还可以检查其它节点的 rgmanager 服务是否都已经正常关闭。</p>
<h3>3.管理应用服务</h3>
<p>集群系统启动后，默认是自动启动应用服务的，但是如果某个应用服务没有自动启动，就需要通过手工方式来启动。管理应用服务的命令是 clusvcadm，通过这个命令可以启动、关闭、重启、切换集群中的应用服务。</p>
<ol>
<li>启动某个应用服务<br />
可以通过如下方式启动某个节点的应用服务：</p>
<p><code>clusvcadm -e -m</code></p>
<p>其中：</p>
<ul>
<li>Service：表示集群中创建的应用服务名称。</li>
<li> Node：表示集群节点名称。</li>
</ul>
<p>例如，要启动节点web1上的 webserver 服务，操作如下：</p>
<p><code>[root@web1 ~]# clusvcadm -e webserver -m web1<br />
Member web1 trying to enable service:webserver...Success<br />
service:webserver is now running on web1</code></p>
<p>可以通过 /var/log/messages 文件查看启动应用服务的详细信息。当 webserver 启动后，与服务相关的集群资源：如虚拟IP、应用程序服务脚本也随之启动。</li>
<li>关闭某个应用服务<br />
可以通过如下方式关闭某个节点的应用服务：</p>
<p><code>clusvcadm -s -m</code></p>
<p>例如，要关闭节点 Mysql1 上的 mysqlserver 服务，操作如下：</p>
<p><code>[root@Mysql1 ~]# clusvcadm -s mysqlserver -m Mysql1<br />
Member Mysql1 stopping service:mysqlserver...Success</code></p>
<p>可以通过/var/log/messages文件查看关闭应用服务的详细信息。当 mysqlserver 关闭后，与服务相关的集群资源：如虚拟IP、应用程序服务脚本也随之释放。</li>
<li>重启某个应用服务<br />
可以通过如下方式重启某个节点的应用服务：</p>
<p><code>clusvcadm -R -m</code></p>
<p>例如，要重启节点 web1 上的 webserver 服务，操作如下：</p>
<p><code>[root@web2 ~]# clusvcadm -R webserver -m web1<br />
Member web1 trying to restart service:webserver...Success</code></p>
<p>这个命令是在 web2 节点上执行的，但是也能成功将 web1 节点上的 webserver 进行重启，由此可知，clusvcadm 命令在集群任意节点执行都是可以的。</li>
<li>切换某个服务<br />
可以通过如下方式将一个应用服务从一个节点切换到另一个节点：</p>
<p><code>clusvcadm -r -m</code></p>
<p>例如，要将节点web1的服务切换到节点web2上，操作如下：</p>
<p><code>[root@web1 ~]# clusvcadm -r webserver -m web2<br />
Trying to relocate service:webserver to web2...Success<br />
service:webserver is now running on web2</code></li>
</ol>
<h3>4. 监控 RHCS 集群状态</h3>
<p>通过对 RHCS 的监控，有助于了解集群每个节点的健康状况，并能发现问题，及时解决问题，RHCS 集群提供了丰富的状态查看命令，这里主要介绍下 cman_tool、clustat、ccs_tool 的使用方法。</p>
<ol>
<li>cman_tool 命令<br />
cman_tool 的参数比较多，但是用法比较简单，基本用法格式为：</p>
<p><code>cman_tool [options]</code></p>
<p>下面列举几个简单的使用例子：</p>
<p><code>[root@web1 ~]# cman_tool nodes -a<br />
Node Sts Inc Joined Name<br />
0 M 0 2010-08-23 01:24:00 /dev/sdb7<br />
1 M 2492 2010-08-23 01:22:43 web2<br />
Addresses: 192.168.12.240<br />
2 M 2492 2010-08-23 01:22:43 Mysql1<br />
Addresses: 192.168.12.231<br />
3 M 2492 2010-08-23 01:22:43 Mysql2<br />
Addresses: 192.168.12.232<br />
4 M 2488 2010-08-23 01:22:43 web1<br />
Addresses: 192.168.12.230</code></p>
<p>此命令显示了节点名称，以及对应的节点IP地址和加入集群的时间。<br />
如果要了解更多集群节点信息，可以通过如下命令：</p>
<p><code>[root@web1 ~]# cman_tool status<br />
Version: 6.2.0<br />
Config Version: 35 #集群配置文件版本号<br />
Cluster Name: mycluster #集群名称<br />
Cluster Id: 56756<br />
Cluster Member: Yes<br />
Cluster Generation: 2764<br />
Membership state: Cluster-Member<br />
Nodes: 4 #集群节点数<br />
Expected votes: 6 #期望的投票数<br />
Quorum device votes: 2 #表决磁盘投票值<br />
Total votes: 6 #集群中所有投票值大小<br />
Quorum: 4 #集群法定投票值，低于这个值，集群将停止服务<br />
Active subsystems: 9<br />
Flags: Dirty<br />
Ports Bound: 0 177<br />
Node name: web1<br />
Node ID: 4 #本节点在集群中的ID号<br />
Multicast addresses: 239.192.221.146 #集群广播地址<br />
Node addresses: 192.168.12.230 #本节点对应的IP地址</code>
</li>
<li>clustat 命令<br />
clustat 命令使用非常简单，详细的使用方法可以通过 “clustat -h” 获取帮助信息，这里仅仅列举几个例子：</p>
<p><code>[root@web1 ~]#clustat -i 3<br />
Cluster Status for mycluster @ Mon Aug 23 18:54:15 2010<br />
Member Status: Quorate<br />
Member Name ID Status<br />
------ ---- ---- ------<br />
web2 1 Online, rgmanager<br />
Mysql1 2 Online, rgmanager<br />
Mysql2 3 Online, rgmanager<br />
web1 4 Online, Local, rgmanager<br />
/dev/sdb7 0 Online, Quorum Disk<br />
Service Name Owner (Last) State<br />
------- ---- ----- ------ --------<br />
service:mysqlserver Mysql1 started<br />
service:webserver web1 started</code></p>
<p>对输出内容含义如下：<br />
clustat 的“-i”参数可以实时的显示集群系统中每个节点以及服务的运行状态，“-i 3”表示每三秒刷新一次集群状态。<br />
在这个输出中，可以看到每个节点都处于“Online”状态，表明每个节点都运行正常，如果某个节点退出了集群，对应的状态应该是“Offline”，同时还可以看到，集群的两个服务也处于“started”状态，分别运行在 Mysql1 节点和 web1 节点。<br />
另外，通过“ID”一列可以知道集群节点的对应关系，例如，web2 在此集群中对应的就是“Node 1”节点，同理，web1 对应的是“Node 4”节点。了解集群节点顺序有助于对集群日志的解读。
</li>
<li>ccs_tool 命令<br />
ccs_tool 主要用来管理集群配置文件 cluster.conf，通过 ccs_tool 可以在集群中增加/删除节点、增加/删除 fence 设备、更新集群配置文件等操作。</p>
<p>下面是ccs_tool的几个应用实例：</p>
<p>当在一个节点修改完配置文件后，可以执行“ccs_tool update”指令将配置文件在所有节点进行更新，例如：</p>
<p><code>[root@web1 cluster]# ccs_tool update /etc/cluster/cluster.conf<br />
Proposed updated config file does not have greater version number.<br />
Current config_version :: 35<br />
Proposed config_version:: 35<br />
Failed to update config file.</code></p>
<p>ccs_tool 是根据 cluster.conf 中的“config_version”值来决定是否进行更新的，因此在修改完 cluster.conf 文件后，一定要将 cluster.conf 的 config_version 值进行更新，这样执行 ccs_tool 时才能更新配置文件。</p>
<p><code>[root@web1 cluster]# ccs_tool update /etc/cluster/cluster.conf<br />
Config file updated from version 35 to 36<br />
Update complete.</code></li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年04月19日 -- <a href="http://www.chenjunlu.com/2011/04/red-hat-cluster-suite-overview/" title="Red Hat Cluster Suite 概览">Red Hat Cluster Suite 概览</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/rhcs-manual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>老美和老华</title>
		<link>http://www.chenjunlu.com/2011/10/american-and-china/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=american-and-china</link>
		<comments>http://www.chenjunlu.com/2011/10/american-and-china/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 05:46:41 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[时事评论 | Event]]></category>
		<category><![CDATA[中国]]></category>
		<category><![CDATA[债券]]></category>
		<category><![CDATA[美国]]></category>
		<category><![CDATA[货币]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2329</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2363" title="american_vs_china" src="http://www.chenjunlu.com/wp-content/uploads/2011/10/american_vs_china.jpg" alt="american_vs_china" width="420" height="315" /></p>
先说说钱是什么。钱就是欠条。不管是黄金白银，还是纸钞，还是电子币，本质都是欠条。黄金白银、纸币、电子币的地位都是平等的，“金本位货币”理论是错误的。

假设世界上只有两家人，老美两口子和老华两口子，开始他们两家各干各的，自给自足。一天，老美捉了4条鱼，老华逮了8只鸟，老美想尝尝鸟味，老华想品品鱼鲜，他们就交换了，老美用2条鱼换了老华的4只鸟。以后他们常常这样交换。

有一天，老美懒了，没去捉鱼，在家睡了一天。晚上，老华逮鸟回家，老美没东西吃，就找老华借鸟吃。老美找一张树皮，在上面写上：2条鱼。到老华家后，对老华说：“我来换你4只鸟。不过，我今天生病了，没能去捉鱼，我给你打2条鱼的欠条。”老华说：“这好说。” 于是把欠条收下，把4只鸟给了老美。老美回去吃得美滋滋的。

老美尝到了这个甜头，第二天又在家睡一天，晚上又拿2条鱼的欠条去换了4只鸟。交换完毕，老美对老华说：“以后欠条上就不写2条鱼了，这欠条是我老美打的，以后就写2美圆吧。”老华欣然同意。以后欠条就用美圆表示，如此日复一日。
... ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2363" title="american_vs_china" src="http://www.chenjunlu.com/wp-content/uploads/2011/10/american_vs_china.jpg" alt="american_vs_china" width="420" height="315" /></p>
<p>先说说钱是什么。钱就是欠条。不管是黄金白银，还是纸钞，还是电子币，本质都是欠条。黄金白银、纸币、电子币的地位都是平等的，“金本位货币”理论是错误的。</p>
<p>假设世界上只有两家人，老美两口子和老华两口子，开始他们两家各干各的，自给自足。一天，老美捉了4条鱼，老华逮了8只鸟，老美想尝尝鸟味，老华想品品鱼鲜，他们就交换了，老美用2条鱼换了老华的4只鸟。以后他们常常这样交换。</p>
<p>有一天，老美懒了，没去捉鱼，在家睡了一天。晚上，老华逮鸟回家，老美没东西吃，就找老华借鸟吃。老美找一张树皮，在上面写上：2条鱼。到老华家后，对老华说：“我来换你4只鸟。不过，我今天生病了，没能去捉鱼，我给你打2条鱼的欠条。”老华说：“这好说。” 于是把欠条收下，把4只鸟给了老美。老美回去吃得美滋滋的。</p>
<p>老美尝到了这个甜头，第二天又在家睡一天，晚上又拿2条鱼的欠条去换了4只鸟。交换完毕，老美对老华说：“以后欠条上就不写2条鱼了，这欠条是我老美打的，以后就写2美圆吧。”老华欣然同意。以后欠条就用美圆表示，如此日复一日。</p>
<p>按照商品交换的原则来说，商品交换应该是物物交换，商品换商品，而不是钱和物的交换。老美拿钱换了老华的鸟，老华得到钱，这不是商品交换的全过程，只是半个过程。老华手里有老美的钱，就说明老美还欠老华的鱼。所以，钱的本质就是欠条。等老华拿钱买了老美的鱼后，商品交换的整个过程才结束。这个过程就是老美用鱼换了老华的鸟。如果老华始终不用钱去换老美的鸟，那么老美就占了大便宜了，白吃白喝老华的。可是，这里，老美就设法始终不让老华拿钱到他那里兑换实物。</p>
<p>日子长了，老华手里积攒的钱有一大堆。老美害怕老华来兑换实物，就对老华说：“现在我们之间的交易，你是顺差，顺差对你是非常有利的，你要保持下去。” 老华听了很高兴，就舍不得兑换实物了。老华就没想起来问一问：“你是逆差，既然逆差不利，你为什么要始终保持逆差呢？”</p>
<p>又过一天，老美觉得4只鸟不够吃的，就写了3美圆，到老华家买了6只鸟。老美一天有6只鸟吃，老华反而只有2只鸟吃，饿得饥肠辘辘。但是一想到手里有那么多的钱，到老美家可以买很多很多的东西，够自己养老的了，也就觉得值了。</p>
<p>以前，秦国利用其权威，经常为各国培养奸贼。外国的王公贵族到秦国去，秦国就教育他们：“以后只要秦国和你们的国家打仗，你们就割地，这对你们国家是最有利的。”这些王公贵族，回到自己的国家后，因为是从秦国留学回去的，满腹经纶，都被委任要职。后来，只要秦国的大兵一压，或者一封讨伐信一到，这些国家就立即割地。如今，美国的这种“顺差有利”的理论被各国的留学生带到世界，也就成了主流经济学理论，美国靠印钱到各国买东西，各国都象守宝贝一样守着美圆，舍不得花，美国暗里得意死了。</p>
<p>又过了很长一段时间，老华发现老美给他的一些钱被虫蛀了，想到老美家把这些欠条兑换成实物。老美对他说：“这些钱都是财富，你怎么能轻易花掉呢？你太奢侈了。你不要担心我兑换不起你，我富裕的很，你看我吃的喝的，哪样不比你好？”边说边指着屋里的一口袋一口袋的鸟肉干说：“你看我有这么多的财富，你还担心什么？我完全能兑换得起你，你不要担心，我拿我的人格发誓，我绝对不违约。可是你有什么，你就是个穷光蛋，天天饿得直打晃，我看着都可怜。俗话说，越穷越赖，我倒担心你的信誉呢。”老美说完，忽然感到说得不好，又立即改口说道：“当然啦，你只是表面上穷，实际上你非常富裕，你有那么多的外汇储备。你看我有什么，欠一屁股债。我倒感觉你对我的天下第一富的地位有严重威胁呢。”老华被他说得，如同一口喝了二两老白干，顿时觉得晕晕忽忽的。老美又说道：“这充分说明你这条路走对了。今后你还要继续走下去，我们之间的贸易是互惠互利的。我们要共同富裕。”老华感激万分，忙向老美表态：“您放心，我是个负责任的人，绝对不失信！”老美又指着老华手里的钱说道：“既然这些钱被虫蛀了，我就给你重新写个债券吧。算是我借你的债，付给你优厚的利息，一年后还钱。 ”老华一听，这个合算，就换了一张债券回去。他们的交易又正常继续下去。</p>
<p>终于有一天，老华有点醒悟了。他想：“老美这个家伙天天什么活都不干，吃的喝的，全都是我的，比我过得还滋润，我得到的只不过是些树皮。而他总是想尽一切办法，编出各种理论不让我兑换实物，如果不能兑换，就只能当柴火烧。算了，以后就不和他交易了。”</p>
<p>晚上，老美又拿3美圆去买鸟。老华不给他。老美就说：“如果你不卖给我，我就得饿死，那么你手里的美圆和债券就全废了。你要知道，现在救我就是救你自己。”老华听了，不得已，还得和他交易。究竟和老美还继续交易不交易？老华愁死了，但是在他妻子面前还得装作很英明的样子。</p>
<p>转眼一年过去了，老华的妻子翻出老美的那张债券，催老华去讨债。还塞给老华一大抱美圆，让他顺便到老美家多买点东西。老华怕减少外汇储备，不想买东西，两口子为此事争吵起来。老华的妻子嚷道：“不买东西，留这些美圆有什么屁用？今后不准你再要他的美圆，也不准你再要他的债券！”</p>
<p>声音传到隔壁，老美吓死了。对他妻子说：“我倒不怕他们来讨债，我造钱还他就是了，要多少有多少。说实话，我根本就不需要向他们借债，不管买什么，我直接造钱付帐就行。其实，不管是我发出去的债券，还是美圆，本质都是债券，都表明我欠人家的实物。而我之所以要向他们借债，就是演戏，让他们知道我对造钱很慎重，不轻易造钱，我也不造钱买东西，以保持他们对美圆的信任。我最怕的就是他们怀疑我乱造钱，造钱买东西，不信任美圆，不接受美圆。其次我怕的是他们拿美圆来换实物。这样要把我们掏空还不说，我们还不能白占他们的便宜了。我们得想个办法，让他们继续相信和接受美圆，还不能让他们来兑换实物。”</p>
<p>于是两口子就嘀咕了一阵子，然后大声吵起架来。老美的妻子大声骂老美：“你这个饭桶，就知道吃吃喝喝，我让你节省开支你也不节省，欠的都是债，拿什么还哪，我的老天爷呀，这个日子我不过了，我得上吊去！”老美也大声骂他的妻子：“你这个扫帚星，就知道怨我，你天天涂脂抹粉，穿红戴绿，我让你节省开支你听了吗？你就知道让我天天去借债，我上哪借去？你看人老华家的，那才叫会管家，人家多富裕，钱都多得发霉了。摊上你这个女人，我算倒八辈子的霉了。我也不活了，我也得上吊去！”</p>
<p>隔壁老华两口子听得一清二楚，都想：“你们千万不能死，你们死了，我们问谁要债去！你们要是缺钱花，就赶紧来借吧，借多少都有，绝对不限制，救你们就是救我们自己。”老华想完，就对妻子说：“他们太可怜了，不能让他们就这样倒下。他们不好意思来借债，我们就主动送上去吧。 家里还有一只鸟，也送给他们吧。”老华的妻子连连点头。于是两口子抱起一大抱美圆和家里仅剩的一只鸟，到老美家去，对他们说：“送给你们应应急吧。”说完两口子转身就走了。</p>
<p>老美两口子在后面，望着他们的背影，乐翻了天。老美说：“这样的傻瓜穷死活该！”</p>
<p>老华! 你們是否应该反省一下你們的经济政策？</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年06月3日 -- <a href="http://www.chenjunlu.com/2011/06/kung-fu-panda-2/" title="爱电影之《功夫熊猫2》">爱电影之《功夫熊猫2》</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/american-and-china/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</title>
		<link>http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 00:06:52 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RHCS]]></category>
		<category><![CDATA[RHEL]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2225</guid>
		<description><![CDATA[由于前段时间一直在准备 OCP 的认证考试，所以领导十分 nice 的一直没有给我分配复杂的工作。原先安排的搭建 Oracle HA 环境的实验任务也允许我考完试后再做，国庆假日回来我终于有时间把这部分任务完成了。由于之前在相同的机器上做过 Oracle RAC 的实验，所以卸载的过程中对 CRS 组件没有彻底删除，所以导致我走了不少的弯路，还把机器弄挂一次，为此我还特意跑去 IDC 重装了一次系统。嘿嘿，不抱怨了，至少 HA 环境成功的搭建了起来，结果还是令人满意的。(#^_^#）

下面我来详细介绍一下具体的配置过程：
<h3>1. 网络配置</h3>
具体的网络配置过程我就不在这里罗嗦了，基本跟 Oracle RAC 相同，每个节点两个网卡其中一个做心跳线。两个节点的 /etc/hosts 配置文件内容一致，内容如下：
<blockquote><code># Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
10.10.6.203 testrac1
192.168.122.101 testrac1-priv

10.10.6.207 testrac2
192.168.122.102 testrac2-priv

10.10.6.208 testHA</code></blockquote>

... ...]]></description>
			<content:encoded><![CDATA[<p>由于前段时间一直在准备 OCP 的认证考试，所以领导十分 nice 的一直没有给我分配复杂的工作。原先安排的搭建 Oracle HA 环境的实验任务也允许我考完试后再做，国庆假日回来我终于有时间把这部分任务完成了。由于之前在相同的机器上做过 Oracle RAC 的实验，所以卸载的过程中对 CRS 组件没有彻底删除，所以导致我走了不少的弯路，还把机器弄挂一次，为此我还特意跑去 IDC 重装了一次系统。嘿嘿，不抱怨了，至少 HA 环境成功的搭建了起来，结果还是令人满意的。(#^_^#）</p>
<p>下面我来详细介绍一下具体的配置过程：</p>
<h3>1. 网络配置</h3>
<p>具体的网络配置过程我就不在这里罗嗦了，基本跟 Oracle RAC 相同，每个节点两个网卡其中一个做心跳线。两个节点的 /etc/hosts 配置文件内容一致，内容如下：</p>
<blockquote><p><code># Do not remove the following line, or various programs<br />
# that require network functionality will fail.<br />
127.0.0.1 localhost.localdomain localhost<br />
10.10.6.203 testrac1<br />
192.168.122.101 testrac1-priv</p>
<p>10.10.6.207 testrac2<br />
192.168.122.102 testrac2-priv</p>
<p>10.10.6.208 testHA</code></p></blockquote>
<h3>2. 存储配置</h3>
<p>在 MSA2312fc 控制界面下划分一个 150G 的空间给两个节点，然后解决多路径问题并进行分区和格式化操作。具体的操作请参见这篇<a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" target="_blank">文章</a>。</p>
<h3>3.安装和配置 RHCS</h3>
<p>RHEL 5.5 的安装光盘镜像中包含了安装 RHCS 所有需要的安装包，配置 yum 安装源，然后进行安装。在每个节点上都执行如下操作：</p>
<blockquote><p><code>[root@testrac1 ~]# vi /etc/yum.repos.d/aeon.repo<br />
[Server]<br />
name=Server<br />
baseurl=file:///redhat/Server<br />
enabled=1<br />
gpgcheck=0<br />
gpgkey=</p>
<p>[Cluster]<br />
name=Cluster<br />
baseurl=file:///redhat/Cluster<br />
enabled=1<br />
gpgcheck=0<br />
gpgkey=</p>
<p>[ClusterStorage]<br />
name=ClusterStorage<br />
baseurl=file:///redhat/ClusterStorage<br />
enabled=1<br />
gpgcheck=0<br />
gpgkey=</p>
<p>[VT]<br />
name=VT<br />
baseurl=file:///redhat/VT<br />
enabled=1<br />
gpgcheck=0<br />
gpgkey=</p>
<p>[root@testrac1 ~]#</p>
<p>[root@testrac1 /]# cd media/<br />
[root@testrac1 media]# mount -o loop RHEL_5.5_X86_64.iso /redhat</p>
<p>[root@testrac1 media]# yum clean all<br />
Loaded plugins: rhnplugin, security<br />
Cleaning up Everything<br />
[root@testrac1 media]#</p>
<p>[root@testrac1 media]# yum groupinstall Clustering<br />
Loaded plugins: rhnplugin, security<br />
This system is not registered with RHN.<br />
RHN support will be disabled.<br />
Setting up Group Process<br />
Resolving Dependencies</p>
<p>... ...</p>
<p>Installed:<br />
Cluster_Administration-en-US.noarch 0:5.2-1 cluster-cim.x86_64 0:0.12.1-2.el5 cluster-snmp.x86_64 0:0.12.1-2.el5<br />
ipvsadm.x86_64 0:1.24-10 luci.x86_64 0:0.12.2-12.el5 modcluster.x86_64 0:0.12.1-2.el5<br />
piranha.x86_64 0:0.8.4-16.el5 rgmanager.x86_64 0:2.0.52-6.el5 ricci.x86_64 0:0.12.2-12.el5<br />
system-config-cluster.noarch 0:1.0.57-3</p>
<p>Dependency Installed:<br />
cman.x86_64 0:2.0.115-34.el5 httpd.x86_64 0:2.2.3-43.el5 net-snmp.x86_64 1:5.3.2.2-9.el5<br />
oddjob.x86_64 0:0.27-9.el5 oddjob-libs.x86_64 0:0.27-9.el5 openais.x86_64 0:0.80.6-16.el5<br />
perl-Net-Telnet.noarch 0:3.03-5 perl-XML-LibXML.x86_64 0:1.58-6 perl-XML-LibXML-Common.x86_64 0:0.13-8.2.2<br />
perl-XML-NamespaceSupport.noarch 0:1.09-1.2.1 perl-XML-SAX.noarch 0:0.14-8 pexpect.noarch 0:2.3-3.el5<br />
php.x86_64 0:5.1.6-27.el5 php-cli.x86_64 0:5.1.6-27.el5 php-common.x86_64 0:5.1.6-27.el5<br />
python-imaging.x86_64 0:1.1.5-5.el5 tix.x86_64 1:8.4.0-11.fc6 tkinter.x86_64 0:2.4.3-27.el5<br />
tog-pegasus.x86_64 2:2.9.1-2.el5</p>
<p>Complete!<br />
[root@testrac1 media]#</p>
<p>[root@testrac1 media]# chkconfig --add cman<br />
[root@testrac1 media]# chkconfig --add rgmanager</p>
<p>[root@testrac1 media]# chkconfig cman on<br />
[root@testrac1 media]# chkconfig rgmanager on</code></p></blockquote>
<p>在节点1的图形界面下打开 system-config-cluster 工具进行相应的 RHCS 配置，依次执行如下操作：创建 cluster ，添加节点，配置 fence 设备（如果没有可以不设置），创建故障域，田间节点到故障域，添加三种资源，创建服务（通过服务把故障域和资源整合在一起），请注意添加资源顺序，首先是文件系统，然后是 IP 资源，最后是脚本资源。保存配置文件，并把该配置文件复制到节点2的相同目录下。具体的 /etc/cluster/cluster.conf 配置内容如下：</p>
<blockquote><p><code>&lt;?xml version="1.0"?&gt;<br />
&lt;cluster alias="OracleHA" config_version="15" name="OracleHA"&gt;<br />
&lt;fence_daemon post_fail_delay="0" post_join_delay="3"/&gt;<br />
&lt;clusternodes&gt;<br />
&lt;clusternode name="testrac1-priv" nodeid="1" votes="1"&gt;<br />
&lt;fence/&gt;<br />
&lt;/clusternode&gt;<br />
&lt;clusternode name="testrac2-priv" nodeid="2" votes="1"&gt;<br />
&lt;fence/&gt;<br />
&lt;/clusternode&gt;<br />
&lt;/clusternodes&gt;<br />
&lt;cman expected_votes="1" two_node="1"/&gt;<br />
&lt;fencedevices/&gt;<br />
&lt;rm&gt;<br />
&lt;failoverdomains&gt;<br />
&lt;failoverdomain name="Failover_Oracle" ordered="0" restricted="1"&gt;<br />
&lt;failoverdomainnode name="testrac2-priv" priority="1"/&gt;<br />
&lt;failoverdomainnode name="testrac1-priv" priority="1"/&gt;<br />
&lt;/failoverdomain&gt;<br />
&lt;/failoverdomains&gt;<br />
&lt;resources&gt;<br />
&lt;fs device="/dev/mapper/mpath0p1" force_fsck="0" force_unmount="1" fsid="15674" fstype="ext3" mountpoint="/oradata" name="oradata" options="" self_fence="0"/&gt;<br />
&lt;ip address="10.10.6.208" monitor_link="1"/&gt;<br />
&lt;script file="/etc/init.d/dbora" name="ora_script"/&gt;<br />
&lt;/resources&gt;<br />
&lt;service autostart="1" domain="Failover_Oracle" name="OracleHA_Service" recovery="relocate"&gt;<br />
&lt;ip ref="10.10.6.208"/&gt;<br />
&lt;fs ref="oradata"/&gt;<br />
&lt;script ref="ora_script"/&gt;<br />
&lt;/service&gt;<br />
&lt;/rm&gt;<br />
&lt;/cluster&gt;</code></p></blockquote>
<h3>4.安装 Oracle （无实例）</h3>
<p>在两个节点上分别安装 Oracle 软件，具体的安装过程我请参考这篇文章。</p>
<p>两个节点上的 oracle 用户的 ORACLE 相关环境变量设置如下：</p>
<blockquote><p><code>ORACLE_BASE=/oracle<br />
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1<br />
ORACLE_SID=hatest</code></p></blockquote>
<h3>5.启动 RHCS 集群</h3>
<p>首先我们需要启动 RHCS 集群，需要说明的是，RHCS 集群的启动顺序是在各个节点上依次启动 cman 和 rgmanager 服务，如果想关闭 RHCS 集群，那么请在各个节点上依次关闭 rgmanager 和 cman 服务，顺序是相反的。集群启动成功后，需要把资源转移到节点1上去。具体操作如下：</p>
<blockquote><p><code>[root@testrac1 media]# service cman start<br />
Starting cluster:<br />
Loading modules... done<br />
Mounting configfs... done<br />
Starting ccsd... done<br />
Starting cman... done<br />
Starting daemons... done<br />
Starting fencing... done<br />
[ OK ]<br />
[root@testrac1 media]# service rgmanager start<br />
Starting Cluster Service Manager: [ OK ]<br />
[root@testrac1 media]#</p>
<p>[root@testrac2 ~]# service cman start<br />
Starting cluster:<br />
Loading modules... done<br />
Mounting configfs... done<br />
Starting ccsd... done<br />
Starting cman... done<br />
Starting daemons... done<br />
Starting fencing... done<br />
[ OK ]<br />
[root@testrac2 ~]# service rgmanager start<br />
Starting Cluster Service Manager: [ OK ]<br />
[root@testrac1 media]#</p>
<p>[root@testrac1 media]# clustat<br />
Cluster Status for OracleHA @ Mon Oct 10 17:31:24 2011<br />
Member Status: Quorate</p>
<p>Member Name ID Status<br />
------ ---- ---- ------<br />
testrac1-priv 1 Online, Local, rgmanager<br />
testrac2-priv 2 Online, rgmanager</p>
<p>Service Name Owner (Last) State<br />
------- ---- ----- ------ -----<br />
service:OracleHA_Service testrac2-priv started<br />
[root@testrac1 media]#<br />
[root@testrac1 media]# clusvcadm -r OracleHA_Service -m testrac1-priv<br />
Trying to relocate service:OracleHA_Service to testrac1-priv...Success<br />
service:OracleHA_Service is now running on testrac1-priv<br />
[root@testrac1 media]#<br />
[root@testrac1 media]# clustat<br />
Cluster Status for OracleHA @ Mon Oct 10 17:32:05 2011<br />
Member Status: Quorate</p>
<p>Member Name ID Status<br />
------ ---- ---- ------<br />
testrac1-priv 1 Online, Local, rgmanager<br />
testrac2-priv 2 Online, rgmanager</p>
<p>Service Name Owner (Last) State<br />
------- ---- ----- ------ -----<br />
service:OracleHA_Service testrac1-priv started<br />
[root@testrac1 media]#</code></p></blockquote>
<h3>6.安装 Oracle 实例</h3>
<p>由于我们把 Oracle HA 环境的实例安装到共享存储上，所以我们只需要在节点1上安装实例到共享存储上即可。首先，查看共享存储是否通过 RHCS 集群挂载到 /oradata 目录下：</p>
<blockquote><p><code>[root@testrac1 ~]# mount<br />
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)<br />
proc on /proc type proc (rw)<br />
sysfs on /sys type sysfs (rw)<br />
devpts on /dev/pts type devpts (rw,gid=5,mode=620)<br />
/dev/cciss/c0d0p1 on /boot type ext3 (rw)<br />
tmpfs on /dev/shm type tmpfs (rw)<br />
/media/RHEL_5.5_X86_64.iso on /redhat type iso9660 (rw,loop=/dev/loop0)<br />
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)<br />
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)<br />
none on /sys/kernel/config type configfs (rw)<br />
/dev/mapper/mpath0p1 on /oradata type ext3 (rw)<br />
</code></p></blockquote>
<p>修改目录 /oradata 的权限：</p>
<blockquote><p><code>[root@testrac1 ~]# chown oracle:oinstall /oradata</code></p></blockquote>
<p>在节点1的图形界面下使用 dbca 安装实例到 /oradata 目录下，其中需要说明的是在 Step 8 中，请勾选 “Enable Archiving” 选项，并把归档日志的默认目录设置为共享存储下，比如 “/oradata/archs” 目录。在Step 11和12中请把 Controlfile，Datafiles 和 Redolog 的默认路径都设置到共享存储的 /oradata 的相关目录下。</p>
<h3>7.创建监听器</h3>
<p>在两个节点上的图形界面下分别运行 netca 创建监听器，如下内容是节点1上的监听器配置文件 listener.ora 的文件内容：</p>
<blockquote><p><code>[root@testrac1 oracle]# cat /oracle/product/10.2.0/db_1/network/admin/listener.ora<br />
# listener.ora Network Configuration File: /oracle/product/10.2.0/db_1/network/admin/listener.ora<br />
# Generated by Oracle configuration tools.</p>
<p>SID_LIST_LISTENER =<br />
(SID_LIST =<br />
(SID_DESC =<br />
(SID_NAME = PLSExtProc)<br />
(ORACLE_HOME = /oracle/product/10.2.0/db_1)<br />
(PROGRAM = extproc)<br />
)<br />
)</p>
<p>LISTENER =<br />
(DESCRIPTION_LIST =<br />
(DESCRIPTION =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = testrac1)(PORT = 1521))<br />
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))<br />
)<br />
)</p>
<p>[root@testrac1 oracle]#</code></p></blockquote>
<h3>8.同步相关配置文件</h3>
<p>首先，复制密码文件和参数文件到节点2，过程如下：</p>
<blockquote><p><code>[oracle@testrac1 ~]$ cd /oracle/product/10.2.0/db_1/dbs/<br />
[oracle@testrac1 dbs]$ ls<br />
hc_hatest.dat initdw.ora init.ora lkHATEST orapwhatest spfilehatest.ora<br />
[oracle@testrac1 dbs]$ scp orapwhatest oracle@10.10.6.207:/oracle/product/10.2.0/db_1/dbs/<br />
oracle@10.10.6.207's password:<br />
orapwhatest 100% 1536 1.5KB/s 00:00<br />
[oracle@testrac1 dbs]$ scp spfilehatest.ora oracle@10.10.6.207:/oracle/product/10.2.0/db_1/dbs/<br />
oracle@10.10.6.207's password:<br />
spfilehatest.ora 100% 2560 2.5KB/s 00:00<br />
[oracle@testrac1 dbs]$</code></p></blockquote>
<p>其次，创建 Oracle 在节点2启动需要的目录，过程如下：</p>
<blockquote><p><code>[oracle@testrac2 ~]$ mkdir -p /oracle/admin/hatest/{adump,bdump,cdump,dpdump,pfile,udump}<br />
[oracle@testrac2 ~]$</code></p></blockquote>
<p>最后，确保相关目录的权限是正确的，过程如下：</p>
<blockquote><p><code>[root@testrac2 ~]# chown -R oracle:oinstall /oracle</code></p></blockquote>
<h3>9.编写 Oracle 相关的 RHCS 脚本</h3>
<p>这里需要说明一下，之前在 system-config-cluter 里配置添加的脚本资源，请先不要添加到 OracleHA_Service 服务中，因为该脚本资源我们还没有编写和安装。也就是说刚安装 Oracle 实例时启动的 RHCS 集群提供服务中的不包括脚本脚本。现在，我们编写 RHCS 脚本，由于具体的内容，请参考这篇<a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" target="_blank">文章</a>。编写完成后，拷贝该脚本文件 dbora 到两个节点的 /etc/init.d/ 目录中去。最后，我们需要添加该脚本资源到 OracleHA_Service 服务中，保存配置文件 cluster.conf ，并发送到 RHCS 集群的所有节点中去，重启 RHCS 集群。至此，配置完毕。</p>
<h3>10.测试</h3>
<p>由于篇幅的问题，我就不在这里把详细的测试过程贴出来了，说说测试思路吧，主要是针对 RHCS 集群提供三种资源进行测试，IP 资源你在其他机器上 ping 一下就好，文件系统资源需要在各个节点上运行 mount 命令看看是否挂载成功，而 Oracle 数据库则需要用 sqlplus 连接看是否正常访问。如果这些都成功的话，则进行节点服务的切换，再进行测试。注意：文件系统资源只能在生效的节点上挂载，而 Oracle 实例和监听器也只能在生效的节点上运行。如果对 RHCS 集群的管理不是很熟悉，请参考这篇<a href="http://www.chenjunlu.com/2011/10/rhcs-manual/" target="_blank">文章</a>。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年11月24日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Cognos Server">在 RHEL 5.5 下安装 Cognos Server</a> (0)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月18日 -- <a href="http://www.chenjunlu.com/2011/10/rhcs-manual/" title="RHCS 管理手册">RHCS 管理手册</a> (0)</li><li>2011年10月11日 -- <a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" title="Oracle HA 脚本">Oracle HA 脚本</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle HA 脚本</title>
		<link>http://www.chenjunlu.com/2011/10/oracle-ha-script/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=oracle-ha-script</link>
		<comments>http://www.chenjunlu.com/2011/10/oracle-ha-script/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 01:51:55 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[dbora]]></category>
		<category><![CDATA[HA]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2250</guid>
		<description><![CDATA[<pre>#!/bin/bash
#
# /etc/init.d/dbora
# chkconfig: 2345 02 98
# description: Oracle is meant to run under Linux Oracle Server
#
# Source function library.
. /etc/rc.d/init.d/functions

ORACLE_HOME=/oracle/product/10.2.0/db_1
ORACLE_SID=hatest
ORACLE_NAME=oracle
LOCKFILE="$ORACLE_HOME/.oracle.lock"
RESTART_RETRIES=3
DB_PROCNAMES="pmon"
LSNR_PROCNAME="tnslsnr"

# RETVAL=0
# Start the oracle Server

#
# The following command assumes that the oracle login
# will not prompt the password
#

start() {

echo  "Starting Oracle10g Server... "
tmpfile=/home/oracle/`basename $0`-start.$$
logfile=/home/oracle/`basename $0`-start.log

... ...
</pre>

]]></description>
			<content:encoded><![CDATA[<pre>#!/bin/bash
#
# /etc/init.d/dbora
# chkconfig: 2345 02 98
# description: Oracle is meant to run under Linux Oracle Server
#
# Source function library.
. /etc/rc.d/init.d/functions

ORACLE_HOME=/oracle/product/10.2.0/db_1
ORACLE_SID=hatest
ORACLE_NAME=oracle
LOCKFILE="$ORACLE_HOME/.oracle.lock"
RESTART_RETRIES=3
DB_PROCNAMES="pmon"
LSNR_PROCNAME="tnslsnr"

# RETVAL=0
# Start the oracle Server

#
# The following command assumes that the oracle login
# will not prompt the password
#

start() {

echo  "Starting Oracle10g Server... "
tmpfile=/home/oracle/`basename $0`-start.$$
logfile=/home/oracle/`basename $0`-start.log

#
# Set up our sqlplus script.  Basically, we're trying to
# capture output in the hopes that it's useful in the case
# that something doesn't work properly.
#
echo "startup" &gt; $tmpfile
echo "quit" &gt;&gt; $tmpfile

su - $ORACLE_NAME -c \
"sqlplus \"/ as sysdba\" &lt; $tmpfile &amp;&gt; $logfile"

if [ $? -ne 0 ]; then
echo "ORACLE_HOME Incorrectly set?"
echo "See $logfile for more information."
return 1
fi

#
# If we see:
# ORA-.....: failure, we failed
#
rm -f $tmpfile
grep -q "failure" $logfile
if [ $? -eq 0 ]; then
rm -f $tmpfile
echo "ORACLE_SID Incorrectly set?"
echo "See $logfile for more information."
return 1
fi

echo "Starting listern..."
((su - $ORACLE_NAME -c "$ORACLE_HOME/bin/lsnrctl start")
&gt;&gt; $logfile 2&gt;&amp;1) || return 1
#return $?
if [ -n "$LOCKFILE" ]; then
touch $LOCKFILE
fi
#/usr/local/tomcat/bin/catalina.sh start
return 0
}

stop() {
echo "Shutting down Oracle10g Server..."

declare tmpfile
declare logfile

tmpfile=/home/oracle/`basename $0`-stop.$$
logfile=/home/oracle/`basename $0`-stop.log
if [ -z "$LOCKFILE" ] || [ -f $LOCKFILE ]; then
echo
else
echo "oracle is not run"
return 0
fi

# Setup for Stop ...
echo "shutdown abort" &gt; $tmpfile
echo "quit" &gt;&gt; $tmpfile

su - $ORACLE_NAME -c \
"sqlplus \"/ as sysdba\" &lt; $tmpfile &amp;&gt; $logfile"

if [ $? -ne 0 ]; then
echo "ORACLE_HOME Incorrectly set?"
echo "See $logfile for more information."
return 1
fi

#
# If we see 'failure' in the log, we're done.
#
rm -f $tmpfile
grep -q failure $logfile
if [ $? -eq 0 ]; then
echo
echo "Possible reason: ORACLE_SID Incorrectly set."
echo "See $logfile for more information."
return 1
fi

status $LSNR_PROCNAME
if [ $? -ne 0 ] ; then
if [ -n "$LOCKFILE" ]; then
rm -f $LOCKFILE
fi
return 0 # Listener is not running
fi

((su - $ORACLE_NAME -c "$ORACLE_HOME/bin/lsnrctl stop")
&gt;&gt; $logfile 2&gt;&amp;1) || return 1

if [ -n "$LOCKFILE" ]; then
rm -f $LOCKFILE
fi
return 0
}

get_lsnr_status()
{
declare -i subsys_lock=$1

status $LSNR_PROCNAME
if [ $? == 0 ] ; then
return 0 # Listener is running fine
elif [ $subsys_lock -ne 0 ]; then
return 3
elif [ $? -ne 0 ] ; then
return 1
fi
}

get_db_status()
{
declare -i subsys_lock=$1
declare -i i=0
declare -i rv=0
declare ora_procname

for procname in $DB_PROCNAMES ; do

ora_procname="ora_${procname}_${ORACLE_SID}"

status $ora_procname
if [ $? -eq 0 ] ; then
# This one's okay; go to the next one.
continue
elif [ $subsys_lock -ne 0 ]; then
return 3
elif  [ $? -ne 0 ] ; then
return 1
fi

done
}

update_status()
{
declare -i old_status=$1
declare -i new_status=$2

if [ -z "$2" ]; then
return $old_status
fi

if [ $old_status -ne $new_status ]; then
return 1
fi
return $old_status
}
status_ias()
{
declare -i subsys_lock=1
declare -i last
#
# Check for lock file.  Crude and rudimentary, but it works
#
if [ -z "$LOCKFILE" ] || [ -f $LOCKFILE ]; then
subsys_lock=0
fi

# Check database status
get_db_status $subsys_lock
update_status $? # Start
last=$?

# Check &amp; report listener status
get_lsnr_status $subsys_lock
update_status $? $last
last=$?

# Check &amp; report opmn / opmn-managed process status
#get_opmn_status $subsys_lock
#update_status $? $last
#last=$?

#
# No lock file, but everything's running.  Put the lock
# file back. XXX - this kosher?
#
if [ $last -eq 0 ] &amp;&amp; [ $subsys_lock -ne 0 ]; then
touch $LOCKFILE
fi
return $last
}

restart() {
echo -n "Restart Oracle10g Server"
stop
start
echo
}

case "$1" in
start)
start
exit $?
;;
stop)
stop
exit $?
;;
status)
status_ias
exit $?
;;
restart|reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
;;
esac
exit 0
</pre>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年12月26日 -- <a href="http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/" title="Liferay Portal 集群配置指南">Liferay Portal 集群配置指南</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年09月6日 -- <a href="http://www.chenjunlu.com/2011/09/how-to-uninstall-oracle-10g-under-linux/" title="如何在 Linux 下完全卸载 Oracle 10g ?">如何在 Linux 下完全卸载 Oracle 10g ?</a> (0)</li><li>2011年08月25日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-install-oracle-rac-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Oracle RAC">在 RHEL 5.5 下安装 Oracle RAC</a> (0)</li><li>2011年05月18日 -- <a href="http://www.chenjunlu.com/2011/05/recovering-the-oracle-database-on-different-machine-with-rman-backup-flies/" title="RMAN 整库备份异机恢复流程">RMAN 整库备份异机恢复流程</a> (0)</li><li>2011年05月14日 -- <a href="http://www.chenjunlu.com/2011/05/restore-the-oracle-database-by-using-tivoli-storage-manager/" title="利用 Tivoli Storage Manager 磁带库中的备份恢复 Oracle">利用 Tivoli Storage Manager 磁带库中的备份恢复 Oracle</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/oracle-ha-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</title>
		<link>http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 05:48:55 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[HPDMmultipath]]></category>
		<category><![CDATA[kpartx]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MSA2312fc]]></category>
		<category><![CDATA[multipath]]></category>
		<category><![CDATA[RHEL]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2221</guid>
		<description><![CDATA[最近我在利用红帽的 RHCS 搭建 Oracle HA 环境的时候，又遇到了共享存储的多路径问题，上次遇到的产品是 IBM DS4700，而这次的产品是 HP MSA2312fc。IBM 产品的多路径解决方案使用的是重新编译内核，而 HP 的存储产品的解决方案则更标准化一些，主要利用 Red Hat 的 DM-Multipath 的特性来配置解决。咱们直入主题，具体的解决方案步骤如下：
<ol>
	<li>确认 RHEL 系统中是否安装了 device-mapper-multipath 软件。如果没有安装，请挂载 RHEL 5.5    的光盘镜像，自行安装。我在实践中 device-mapper-multipath 已经安装成功。
</li>
	<li>下载 HPDMmultipath 软件。</li>
	<li>解压安装 HPDMmultipath 软件。
</li>
	<li>针对具体的 HP 存储型号进行 DM-multipath 相关配置，具体操作如下：
</li>
	<li>配置 multipathd 服务，重启系统。
</li>
	<li>建立链路，查看链路状况。
</li>
	<li>再次编辑 /etc/multipath.conf 配置文件，把 multipath 这个段前的 ＃ 号去掉，然后将 wwid 后面的 id 填写为前面 multipath -ll 命令输出的 id ，并将 alias 改为 mpath0。
</li>
	<li>重启 multipathd 服务查看是否配置成功。如果 /dev/mapper 目录下有 mpath0 设备文件则表示上述配置成功。
</li>
<li>... ...</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>最近我在利用红帽的 RHCS 搭建 Oracle HA 环境的时候，又遇到了共享存储的多路径问题，上次遇到的产品是 IBM DS4700，而这次的产品是 HP MSA2312fc。IBM 产品的多路径解决方案使用的是重新编译内核，而 HP 的存储产品的解决方案则更标准化一些，主要利用 Red Hat 的 DM-Multipath 的特性来配置解决。咱们直入主题，具体的解决方案步骤如下：</p>
<ol>
<li>确认 RHEL 系统中是否安装了 device-mapper-multipath 软件。如果没有安装，请挂载 RHEL 5.5    的光盘镜像，自行安装。我在实践中 device-mapper-multipath 已经安装成功，具体如下：<br />
<blockquote><p>[root@testrac1 .ssh]# rpm -qa | grep device-mapper-multipath*<br />
device-mapper-multipath-0.4.7-34.el5</p></blockquote>
</li>
<li>下载 HPDMmultipath 软件。请点击 <a href="http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&amp;cc=us&amp;prodTypeId=18964&amp;prodSeriesId=3559651&amp;prodNameId=3559652&amp;swEnvOID=2025&amp;swLang=13&amp;mode=2&amp;taskId=135&amp;swItem=co-82195-1" target="_blank">这里</a>下载。</li>
<li>解压安装 HPDMmultipath 软件。具体操作如下：<br />
<blockquote><p>[root@testrac1 media]# tar -zxvf HPDMmultipath-4.4.1.tar.gz<br />
[root@testrac1 media]# cd HPDMmultipath-4.4.1<br />
[root@testrac1 HPDMmultipath-4.4.1]# ls<br />
bin  conf  COPYING  docs  HPDMMP_Install.log  INSTALL  README.txt  SRPMS<br />
[root@testrac1 HPDMmultipath-4.4.1]# ./INSTALL</p>
<p>** HPDMmultipath-4.4.1 kit Installation. Date : Fri Sep 30 08:49:35 CST 2011 **</p>
<p>Checking for the Operating System version. Please wait&#8230;</p>
<p>HP Device Mapper Multipath v4.4.1 kit &#8211; Installation Menu</p>
<p>1. Install HPDM Multipath Utilities<br />
2. Uninstall HPDM Multipath Utilities<br />
3. Exit</p>
<p>Enter choice [1/2/3] : 1</p>
<p>Note: This will install HPDMmultipath-4.4.1 tools for HP StorageWorks disk<br />
arrays.</p>
<p>Warning: If you are retaining the existing /etc/multipath.conf file, you will<br />
have to manually edit the file with HP recommended parameters.<br />
Please refer user documentation for more details.</p>
<p>Would you like to overwrite the existing /etc/multipath.conf file with the<br />
new multipath configuration file ? (y/n) : y</p>
<p>Saving /etc/multipath.conf file to /etc/multipath.conf.savefile<br />
Copying new multipath configuration file multipath.conf to /etc directory</p>
<p>Configuring multipath services to start at boot time&#8230;.OK</p>
<p>Installation completed successfully!</p>
<p>[root@testrac1 HPDMmultipath-4.4.1]#</p></blockquote>
</li>
<li>针对具体的 HP 存储型号进行 DM-multipath 相关配置，具体操作如下：<br />
<blockquote><p>[root@testrac1 HPDMmultipath-4.4.1]# vi /etc/multipath.conf</p>
<p># For MSA23xxfc and MSA23xxi arrays</p>
<p>device {<br />
vendor                  “HP”<br />
product                 “MSA2312fc|MSA2324fc|MSA2312i|MSA2324i”<br />
path_grouping_policy    group_by_prio<br />
getuid_callout          “/sbin/scsi_id -g -u -s /block/%n”<br />
path_checker            tur<br />
path_selector           “round-robin 0&#8243;<br />
prio_callout            “/sbin/mpath_prio_alua /dev/%n”<br />
rr_weight               uniform<br />
failback                immediate<br />
hardware_handler        “0&#8243;<br />
no_path_retry           18<br />
rr_min_io               100<br />
}</p></blockquote>
</li>
<li>配置 multipathd 服务，重启系统。<br />
<blockquote><p>[root@testrac1 HPDMmultipath-4.4.1]# chkconfig multipathd &#8211;list<br />
multipathd      0:off   1:off   2:off   3:on    4:off   5:on    6:off</p>
<p>[root@testrac1 HPDMmultipath-4.4.1]# chkconfig multipathd on<br />
[root@testrac1 HPDMmultipath-4.4.1]# chkconfig multipathd &#8211;list<br />
multipathd      0:off   1:off   2:on    3:on    4:on    5:on    6:off</p>
<p>[root@testrac1 HPDMmultipath-4.4.1]# reboot<br />
Broadcast message from root (pts/1) (Fri Sep 30 08:58:08 2011):<br />
The system is going down for reboot NOW!</p></blockquote>
</li>
<li>建立链路，查看链路状况。<br />
<blockquote><p>[root@testrac1 ~]# multipath -v0<br />
[root@testrac1 ~]# multipath -ll<br />
mpath0 (3600c0ff00010383eec84394e01000000) dm-2 HP,MSA2312fc<br />
[size=140G][features=1 queue_if_no_path][hwhandler=0][rw]<br />
\_ round-robin 0 [prio=50][active]<br />
\_ 1:0:1:1 sdb 8:16  [active][ready]<br />
\_ round-robin 0 [prio=10][enabled]<br />
\_ 0:0:2:1 sda 8:0   [active][ready]<br />
[root@testrac1 ~]#</p></blockquote>
</li>
<li>再次编辑 /etc/multipath.conf 配置文件，把 multipath 这个段前的 ＃ 号去掉，然后将 wwid 后面的 id 填写为前面 multipath -ll 命令输出的 id ，并将 alias 改为 mpath0。具体配置信息如下：<br />
<blockquote><p>multipath {<br />
wwid                  3600c0ff00010383eec84394e01000000<br />
alias                   mpath0<br />
path_grouping_policy    group_by_prio<br />
path_selector        “round-robin 0&#8243;<br />
failback                immediate<br />
rr_weight               uniform<br />
no_path_retry           10<br />
rr_min_io               100<br />
}</p></blockquote>
</li>
<li>重启 multipathd 服务查看是否配置成功。如果 /dev/mapper 目录下有 mpath0 设备文件则表示上述配置成功。<br />
<blockquote><p>[root@testrac1 ~]# service multipathd restart<br />
Stopping multipathd daemon:                                [  OK  ]<br />
Starting multipathd daemon:                                [  OK  ]<br />
[root@testrac1 ~]# multipath -ll<br />
mpath0 (3600c0ff00010383eec84394e01000000) dm-2 HP,MSA2312fc<br />
[size=140G][features=1 queue_if_no_path][hwhandler=0][rw]<br />
\_ round-robin 0 [prio=50][active]<br />
\_ 1:0:1:1 sdb 8:16  [active][ready]<br />
\_ round-robin 0 [prio=10][enabled]<br />
\_ 0:0:2:1 sda 8:0   [active][ready]<br />
[root@testrac1 .ssh]# ls /dev/mapper/<br />
control  mpath0  VolGroup00-LogVol00  VolGroup00-LogVol01<br />
[root@testrac1 ~]#</p></blockquote>
</li>
</ol>
<p>如果大家对 DM-Multipath 的详细配置方法感兴趣请参考 <a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/DM_Multipath/index.html" target="_blank">这里</a>。再多说几句，我在 Oracle HA 的实践中，开始犯了个错误，以为应该对 /dev 目录下的 dm-2 设备进行分区格式化，结果造成格式化后无法挂载。后来才发现应该对 /dev/mapper/mpath0 进行操作。另外，在使用 fdisk 命令进行分区的过程中我遇到了 “error 22: Invalid argument ” 错误，后来通过运用 kpartx 命令得到解决。具体的分区格式化操作如下：</p>
<blockquote><p>[root@testrac1 ~]# fdisk /dev/mapper/mpath0</p>
<p>The number of cylinders for this disk is set to 18236.<br />
There is nothing wrong with that, but this is larger than 1024,<br />
and could in certain setups cause problems with:<br />
1) software that runs at boot time (e.g., old versions of LILO)<br />
2) booting and partitioning software from other OSs<br />
(e.g., DOS FDISK, OS/2 FDISK)</p>
<p>Command (m for help): m<br />
Command action<br />
a   toggle a bootable flag<br />
b   edit bsd disklabel<br />
c   toggle the dos compatibility flag<br />
d   delete a partition<br />
l   list known partition types<br />
m   print this menu<br />
n   add a new partition<br />
o   create a new empty DOS partition table<br />
p   print the partition table<br />
q   quit without saving changes<br />
s   create a new empty Sun disklabel<br />
t   change a partition&#8217;s system id<br />
u   change display/entry units<br />
v   verify the partition table<br />
w   write table to disk and exit<br />
x   extra functionality (experts only)</p>
<p>Command (m for help):<br />
Command (m for help): n<br />
Command action<br />
e   extended<br />
p   primary partition (1-4)<br />
p<br />
Partition number (1-4): 1<br />
First cylinder (1-18236, default 1):<br />
Using default value 1<br />
Last cylinder or +size or +sizeM or +sizeK (1-18236, default 18236):<br />
Using default value 18236</p>
<p>Command (m for help): w<br />
The partition table has been altered!</p>
<p>Calling ioctl() to re-read partition table.</p>
<p>WARNING: Re-reading the partition table failed with error 22: Invalid argument.<br />
The kernel still uses the old table.<br />
The new table will be used at the next reboot.<br />
Syncing disks.</p>
<p>[root@testrac1 ~]# fdisk -l<br />
Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes<br />
255 heads, 32 sectors/track, 35132 cylinders<br />
Units = cylinders of 8160 * 512 = 4177920 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/cciss/c0d0p1   *           1          25      101984   83  Linux<br />
/dev/cciss/c0d0p2              26       35132   143236560   8e  Linux LVM</p>
<p>Disk /dev/sda: 149.9 GB, 149999992832 bytes<br />
255 heads, 63 sectors/track, 18236 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System</p>
<p>Disk /dev/sdb: 149.9 GB, 149999992832 bytes<br />
255 heads, 63 sectors/track, 18236 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System</p>
<p>Disk /dev/dm-2: 149.9 GB, 149999992832 bytes<br />
255 heads, 63 sectors/track, 18236 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/dm-2p1               1       18236   146480638+  83  Linux</p>
<p>[root@testrac1 ~]# kpartx -a  /dev/mapper/mpath0<br />
[root@testrac1 ~]# kpartx -l  /dev/mapper/mpath0<br />
mpath0p1 : 0 292961277 /dev/mapper/mpath0 63<br />
[root@testrac1 ~]#<br />
[root@testrac1 ~]# ls /dev/mapper/mpath0<br />
mpath0    mpath0p1</p>
<p>[root@testrac1 ~]# mkfs.ext3 /dev/mapper/mpath0p1<br />
mke2fs 1.39 (29-May-2006)<br />
Filesystem label=<br />
OS type: Linux<br />
Block size=4096 (log=2)<br />
Fragment size=4096 (log=2)<br />
18317312 inodes, 36620159 blocks<br />
1831007 blocks (5.00%) reserved for the super user<br />
First data block=0<br />
Maximum filesystem blocks=4294967296<br />
1118 block groups<br />
32768 blocks per group, 32768 fragments per group<br />
16384 inodes per group<br />
Superblock backups stored on blocks:<br />
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,<br />
4096000, 7962624, 11239424, 20480000, 23887872</p>
<p>Writing inode tables: done<br />
Creating journal (32768 blocks): done<br />
Writing superblocks and filesystem accounting information: done</p>
<p>This filesystem will be automatically checked every 35 mounts or<br />
180 days, whichever comes first.  Use tune2fs -c or -i to override.<br />
[root@testrac1 ~]#</p></blockquote>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li><li>2011年07月12日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-configure-the-installed-apache-as-a-service-of-the-linux-server/" title="配置编译安装的 Apache 为系统服务">配置编译安装的 Apache 为系统服务</a> (0)</li><li>2011年11月24日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Cognos Server">在 RHEL 5.5 下安装 Cognos Server</a> (0)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我爱桌游: 波多黎各</title>
		<link>http://www.chenjunlu.com/2011/10/puerto-rico/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=puerto-rico</link>
		<comments>http://www.chenjunlu.com/2011/10/puerto-rico/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 13:00:59 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[游戏志 | Game]]></category>
		<category><![CDATA[BoardGameGeek]]></category>
		<category><![CDATA[Puerto Rico]]></category>
		<category><![CDATA[桌游]]></category>
		<category><![CDATA[波多黎各]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2141</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2246" title="puerto_rico" src="http://www.chenjunlu.com/wp-content/uploads/2011/09/puerto_rico.jpg" alt="puerto_rico" width="384" height="288" /></p>
波多黎各（Puerto Rico）位於加勒比海大安德列斯群岛东端，由主岛波多黎各及其附近的别克斯、库莱布拉和莫纳等小岛组成。该岛原为印第安人居住地，1493年11月19日哥伦布在第二次远航中到达波多黎各，自此西方世界对该地展开长达数百年的殖民。

在波多黎各游戏中，玩家将扮演那个船运时代的波多黎各的某个庄园主。可种植的作物有五种：玉米，染料，咖啡，糖，烟草。每位玩家要尽全力保证比其他竞争者更有效的经营波多黎各：种植作物、储藏作物、建造有用的建筑来发展圣胡安。派遣移民为你最好的工作，在适当的时候卖出作物，但最重要的是要把作物运到欧洲以达到利益最大化。

游戏的机制是允许玩家每轮通过从桌面上剩余的角色牌中选择一个角色来决定该轮的游戏阶段。游戏分多个回合，独创之处在于每个回合中，每个玩家轮到自己时都要从余下的人物角色中任选一个，从自己开始按顺序所有人进行该人物角色的相应行动。每轮同一个角色不能选两次，游戏中总是选择了对自己最有利角色的玩家将会赢得游戏。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2246" title="puerto_rico" src="http://www.chenjunlu.com/wp-content/uploads/2011/09/puerto_rico.jpg" alt="puerto_rico" width="384" height="288" /></p>
<p>波多黎各（Puerto Rico）位於加勒比海大安德列斯群岛东端，由主岛波多黎各及其附近的别克斯、库莱布拉和莫纳等小岛组成。该岛原为印第安人居住地，1493年11月19日哥伦布在第二次远航中到达波多黎各，自此西方世界对该地展开长达数百年的殖民。</p>
<p>在波多黎各游戏中，玩家将扮演那个船运时代的波多黎各的某个庄园主。可种植的作物有五种：玉米，染料，咖啡，糖，烟草。每位玩家要尽全力保证比其他竞争者更有效的经营波多黎各：种植作物、储藏作物、建造有用的建筑来发展圣胡安。派遣移民为你最好的工作，在适当的时候卖出作物，但最重要的是要把作物运到欧洲以达到利益最大化。</p>
<p>游戏的机制是允许玩家每轮通过从桌面上剩余的角色牌中选择一个角色来决定该轮的游戏阶段。游戏分多个回合，独创之处在于每个回合中，每个玩家轮到自己时都要从余下的人物角色中任选一个，从自己开始按顺序所有人进行该人物角色的相应行动。每轮同一个角色不能选两次，游戏中总是选择了对自己最有利角色的玩家将会赢得游戏。</p>
<p>很喜欢这款桌游，认为它的策略性很强，它没有卡坦岛中的骰子，也不像卡卡颂那样随机抽取卡片，没有了这些偶然因素的设置让我对波多黎各更加的着迷，感兴趣的朋友来和我切磋一下吧。哈哈。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2247" title="puerto_rico3" src="http://www.chenjunlu.com/wp-content/uploads/2011/10/puerto_rico3.jpg" alt="puerto_rico3" width="384" height="288" /></p>
<p><strong>BGG链接：</strong><a href="http://www.boardgamegeek.com/game/3076" target="blank">http://www.boardgamegeek.com/game/3076</a><br />
<strong>所获奖项：</strong></p>
<ul>
<li>2002年德国年度游戏冠军评审团奖提名</li>
<li>2002年德国玩家票选最佳游戏第1名</li>
<li>2003年国际游戏奖最佳策略游戏</li>
<li>2003年美国游戏杂志最佳深度策略游戏</li>
<li>2005 Hra roku Winner</li>
<li>2008波兰年度游戏</li>
</ul>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年06月15日 -- <a href="http://www.chenjunlu.com/2011/06/samurai/" title="我爱桌游: 侍/Samurai">我爱桌游: 侍/Samurai</a> (0)</li><li>2011年06月10日 -- <a href="http://www.chenjunlu.com/2011/06/risk/" title="我爱桌游: 大战役/RISK">我爱桌游: 大战役/RISK</a> (0)</li><li>2011年01月23日 -- <a href="http://www.chenjunlu.com/2011/01/carcassonne/" title="我爱桌游: 卡卡颂">我爱桌游: 卡卡颂</a> (0)</li><li>2011年01月22日 -- <a href="http://www.chenjunlu.com/2011/01/the-settlers-of-catan/" title="我爱桌游: 卡坦岛">我爱桌游: 卡坦岛</a> (3)</li><li>2011年01月21日 -- <a href="http://www.chenjunlu.com/2011/01/blokus/" title="我爱桌游: 角斗士">我爱桌游: 角斗士</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/10/puerto-rico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在 Linux 下完全卸载 Oracle 10g ?</title>
		<link>http://www.chenjunlu.com/2011/09/how-to-uninstall-oracle-10g-under-linux/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-uninstall-oracle-10g-under-linux</link>
		<comments>http://www.chenjunlu.com/2011/09/how-to-uninstall-oracle-10g-under-linux/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 07:46:24 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Uninstallation]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2186</guid>
		<description><![CDATA[最近的工作是在 RHEL 5.5 下实现 Oracle HA（双机热备），由于之前在这两台试验机上进行了 Oracle RAC 的配置演练，所以在进行 Oracle HA 实验前只能先把已经安装的 Oracle 数据库软件完全卸载。我 Google 了一番，最后在 Oracle 的官方论坛找了一篇<a href="https://forums.oracle.com/forums/thread.jspa?threadID=436711" target="_blank">文章</a>，按照里面的方法一步一步的操作，成功在试验机上卸载了 Oracle 10g，具体操作流程如下：
<ol>
	<li>关闭数据库：
<blockquote>[oracle@rac1 ~]$ sqlplus /nolog
SQL&#62; connect / as sysdba
SQL&#62; shutdown immediate
SQL&#62; exit</blockquote>
</li>
	<li>停止 Listener：
<blockquote>[oracle@rac1 ~]$ lsnrctl stop</blockquote>
</li>
	<li>依次在 Shell 下运行如下命令：
<ul>
	<li>$ORACLE_HOME/bin/localconfig delete</li>
	<li>rm -rf $ORACLE_HOME</li>
	<li>rm -rf $ORACLE_BASE</li>
	<li>rm -rf /etc/oraInst.loc /etc/oratab</li>
	<li>rm -rf /etc/oracle</li>
	<li>rm -rf /etc/inittab.cssd</li>
	<li>rm -rf /usr/local/bin/coraenv</li>
	<li>rm -rf /usr/local/bin/dbhome</li>
	<li>rm -rf /usr/local/bin/oraenv</li>
	<li>rm -rf /tmp/.oracle</li>
	<li>rm -rf /var/tmp/.oracle</li>
</ul>
</li>
	<li>删除相关用户和用户组：
<blockquote>[root@rac1 ~]# userdel oracle
[root@rac1 ~]# groupdel dba
[root@rac1 ~]# groupdel oinstall</blockquote>
</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>最近的工作是在 RHEL 5.5 下实现 Oracle HA（双机热备），由于之前在这两台试验机上进行了 Oracle RAC 的配置演练，所以在进行 Oracle HA 实验前只能先把已经安装的 Oracle 数据库软件完全卸载。我 Google 了一番，最后在 Oracle 的官方论坛找了一篇<a href="https://forums.oracle.com/forums/thread.jspa?threadID=436711" target="_blank">文章</a>，按照里面的方法一步一步的操作，成功在试验机上卸载了 Oracle 10g，具体卸载流程如下：</p>
<ol>
<li>关闭数据库：<br />
<blockquote><p>[oracle@rac1 ~]$ sqlplus /nolog<br />
SQL&gt; connect / as sysdba<br />
SQL&gt; shutdown immediate<br />
SQL&gt; exit</p></blockquote>
</li>
<li>停止 Listener：<br />
<blockquote><p>[oracle@rac1 ~]$ lsnrctl stop</p></blockquote>
</li>
<li>依次在 Shell 下运行如下命令：
<ul>
<li>$ORACLE_HOME/bin/localconfig delete</li>
<li>rm -rf $ORACLE_HOME</li>
<li>rm -rf $ORACLE_BASE</li>
<li>rm -rf /etc/oraInst.loc /etc/oratab</li>
<li>rm -rf /etc/oracle</li>
<li>rm -rf /etc/inittab.cssd</li>
<li>rm -rf /usr/local/bin/coraenv</li>
<li>rm -rf /usr/local/bin/dbhome</li>
<li>rm -rf /usr/local/bin/oraenv</li>
<li>rm -rf /tmp/.oracle</li>
<li>rm -rf /var/tmp/.oracle</li>
</ul>
</li>
<li>删除相关用户和用户组：<br />
<blockquote><p>[root@rac1 ~]# userdel oracle<br />
[root@rac1 ~]# groupdel dba<br />
[root@rac1 ~]# groupdel oinstall</p></blockquote>
</li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2010年12月30日 -- <a href="http://www.chenjunlu.com/2010/12/how-to-install-oracle10g-on-rhel5/" title="在 Red Hat 5 下安装 Oracle 10g 实践">在 Red Hat 5 下安装 Oracle 10g 实践</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月11日 -- <a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" title="Oracle HA 脚本">Oracle HA 脚本</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年08月25日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-install-oracle-rac-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Oracle RAC">在 RHEL 5.5 下安装 Oracle RAC</a> (0)</li><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/09/how-to-uninstall-oracle-10g-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Cacti 下实现监控 IIS 服务器</title>
		<link>http://www.chenjunlu.com/2011/09/how-to-monitor-iis-server-by-using-cacti/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-monitor-iis-server-by-using-cacti</link>
		<comments>http://www.chenjunlu.com/2011/09/how-to-monitor-iis-server-by-using-cacti/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 03:13:22 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Cacti]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[SNMP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2193</guid>
		<description><![CDATA[今天突然收到一封邮件，邮件上说：“由于公司分支机构不断的扩大，所以公司的一个内部系统的访问量也大增，所以领导要求我对该系统进行必要的监控”。由于该应用是跑在 Windows Server 2008 下的 IIS 服务器上的，所以我决定对主机和服务器都进行必要的监控，监控 Windows 主机我以前实现过，可以说是轻车熟路，如果有感兴趣的朋友可以参考我博客中的 <a href="http://www.chenjunlu.com/2011/05/monitoring-windows-server-2008-with-cacti-by-using-snmp-informant/" target="_blank">文章</a> 。对于 IIS 服务器的监控，我还是第一次配置，由于以前配置过很多种服务器的监控，所以对我来说监控 IIS 应该不是难事，我很快就在 Cacti 的 <a href="http://forums.cacti.net/about12464.html" target="_blank">官方论坛</a> 找到了监控 IIS 服务器需要的相关模板，任务很快完成了，具体做法如下：
<ol>
	<li>下载 IIS 相关监控模板。</li>
	<li>在 Cacti 界面下导入相关模板。</li>
	<li>创建 Host 模板（IIS Server）并把刚刚导入的图像模板添加到创建的主机模板中。</li>
	<li>配置 Windows Server 端的 SNMP 服务，如果有不清楚怎么配置的朋友，请参考这个 <a href="http://forums.cacti.net/download/file.php?id=16502&#38;sid=145595f41a9d17efce0471ce815616a0" target="_blank">文档</a>。</li>
	<li>在 Cacti 界面下添加设备，在 Host Template 栏中选择第3步创建的 IIS Server 模板。</li>
	<li>给添加的设备创建图像，在 Device 界面下选中添加的设备，点击 “Create Graphs for this Host” 创建相关图像。</li>
	<li>等待 Poller 抓取数据并生成图像。</li>
	<li>大功告成！</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>今天突然收到一封邮件，邮件上说：“由于公司分支机构不断的扩大，所以公司的一个内部系统的访问量也大增，所以领导要求我对该系统进行必要的监控”。由于该应用是跑在 Windows Server 2008 下的 IIS 服务器上的，所以我决定对主机和服务器都进行必要的监控，监控 Windows 主机我以前实现过，可以说是轻车熟路，如果有感兴趣的朋友可以参考我博客中的 <a href="http://www.chenjunlu.com/2011/05/monitoring-windows-server-2008-with-cacti-by-using-snmp-informant/" target="_blank">文章</a> 。对于 IIS 服务器的监控，我还是第一次配置，由于以前配置过很多种服务器的监控，所以对我来说监控 IIS 应该不是难事，我很快就在 Cacti 的 <a href="http://forums.cacti.net/about12464.html" target="_blank">官方论坛</a> 找到了监控 IIS 服务器需要的相关模板，任务很快完成了，具体做法如下：</p>
<ol>
<li>下载 IIS 相关监控模板。</li>
<li>在 Cacti 界面下导入相关模板。</li>
<li>创建 Host 模板（IIS Server）并把刚刚导入的图像模板添加到创建的主机模板中。</li>
<li>配置 Windows Server 端的 SNMP 服务，如果有不清楚怎么配置的朋友，请参考这个 <a href="http://forums.cacti.net/download/file.php?id=16502&amp;sid=145595f41a9d17efce0471ce815616a0" target="_blank">文档</a>。</li>
<li>在 Cacti 界面下添加设备，在 Host Template 栏中选择第3步创建的 IIS Server 模板。</li>
<li>给添加的设备创建图像，在 Device 界面下选中添加的设备，点击 “Create Graphs for this Host” 创建相关图像。</li>
<li>等待 Poller 抓取数据并生成图像。</li>
<li>大功告成！</li>
</ol>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2201" title="IIS_Attemps_Statistics" src="http://www.chenjunlu.com/wp-content/uploads/2011/09/IIS_Attemps_Statistics.jpg" alt="IIS_Attemps_Statistics" width="538" height="247" /></p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年05月12日 -- <a href="http://www.chenjunlu.com/2011/05/monitoring-windows-server-2008-with-cacti-by-using-snmp-informant/" title="在 Cacti 下利用 SNMP Informant 实现 Windows 监控">在 Cacti 下利用 SNMP Informant 实现 Windows 监控</a> (0)</li><li>2011年05月26日 -- <a href="http://www.chenjunlu.com/2011/05/tips-for-improving-the-performance-of-cacti-server/" title="几个优化 Cacti 监控服务性能的技巧">几个优化 Cacti 监控服务性能的技巧</a> (0)</li><li>2011年03月23日 -- <a href="http://www.chenjunlu.com/2011/03/configure-cacti-0-8-7g-under-rhel-5-5/" title="在 RHEL 5.5 下配置 Cacti 0.8.7g">在 RHEL 5.5 下配置 Cacti 0.8.7g</a> (3)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年08月2日 -- <a href="http://www.chenjunlu.com/2011/08/debugging-skills-of-cacti/" title="Cacti 中的 Debugging 技巧">Cacti 中的 Debugging 技巧</a> (0)</li><li>2011年07月13日 -- <a href="http://www.chenjunlu.com/2011/07/configure-nagios-3-2-3-under-rhel-5-5/" title="在 RHEL 5.5 下配置 Nagios 3.2.3">在 RHEL 5.5 下配置 Nagios 3.2.3</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/09/how-to-monitor-iis-server-by-using-cacti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下安装 Oracle RAC</title>
		<link>http://www.chenjunlu.com/2011/08/how-to-install-oracle-rac-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-oracle-rac-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/08/how-to-install-oracle-rac-under-rhel-5-5/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 02:27:42 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[ASM]]></category>
		<category><![CDATA[Equivalency]]></category>
		<category><![CDATA[ocfs2]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[SAN]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2146</guid>
		<description><![CDATA[<span style="font-size: large;">1. 创建用户和用户组</span>

分别在 rac1 和 rac2 两个节点上执行以下命令：
<blockquote># groupadd -g 500 oinstall
# groupadd -g 501 dba
# useradd -u 504 -g oinstall -G dba -d /home/oracle -m oracle
# passwd oracle</blockquote>
<span style="font-size: large;">2. 配置 Secure Shell 的等效性</span>

在 rac1节点上执行：
<blockquote>[oracle@rac1 ~]$ mkdir ~/.ssh
[oracle@rac1 ~]$ chmod 700 ~/.ssh
[oracle@rac1 ~]$ ssh-keygen -t rsa
[oracle@rac1 ~]$ ssh-keygen -t dsa</blockquote>
在 rac2 节点上执行：
<blockquote>[oracle@rac2 ~]$ mkdir ~/.ssh
[oracle@rac2 ~]$ chmod 700 ~/.ssh
[oracle@rac2 ~]$ ssh-keygen -t rsa
[oracle@rac2 ~]$ ssh-keygen -t dsa</blockquote>
在 rac1 节点上执行：
<blockquote>[oracle@rac1 ~]$ cat ~/.ssh/id_rsa.pub &#62;&#62; ~/.ssh/authorized_keys
[oracle@rac1 ~]$ cat ~/.ssh/id_dsa.pub &#62;&#62; ~/.ssh/authorized_keys</blockquote>
提示：下列命令会提示你输入 rac2 的 oracle 密码，按照提示输入即可，如果失败可重新尝试执行命令。

在 rac1 节点上执行：
<blockquote>[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys</blockquote>
在 rac2 节点上执行：
<blockquote>[oracle@rac2 ~]$ cat ~/.ssh/id_rsa.pub &#62;&#62; ~/.ssh/authorized_keys
[oracle@rac2 ~]$ cat ~/.ssh/id_dsa.pub &#62;&#62; ~/.ssh/authorized_keys
[oracle@rac2 ~]$ scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys</blockquote>
在 rac1 节点上执行：
<blockquote>[oracle@rac1 ~]$ ssh rac1 date
[oracle@rac1 ~]$ ssh rac2 date
[oracle@rac1 ~]$ ssh rac1-priv date
[oracle@rac1 ~]$ ssh rac2-priv date</blockquote>
在 rac2 节点上执行：
<blockquote>[oracle@rac2 ~]$ ssh rac1 date
[oracle@rac2 ~]$ ssh rac2 date
[oracle@rac2 ~]$ ssh rac1-priv date
[oracle@rac2 ~]$ ssh rac2-priv date</blockquote>]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: large;">1. 创建用户和用户组</span></p>
<p>分别在 rac1 和 rac2 两个节点上执行以下命令：</p>
<blockquote><p># groupadd -g 500 oinstall<br />
# groupadd -g 501 dba<br />
# useradd -u 504 -g oinstall -G dba -d /home/oracle -m oracle<br />
# passwd oracle</p></blockquote>
<p><span style="font-size: large;">2. 配置 Secure Shell 的等效性</span></p>
<p>在 rac1节点上执行：</p>
<blockquote><p>[oracle@rac1 ~]$ mkdir ~/.ssh<br />
[oracle@rac1 ~]$ chmod 700 ~/.ssh<br />
[oracle@rac1 ~]$ ssh-keygen -t rsa<br />
[oracle@rac1 ~]$ ssh-keygen -t dsa</p></blockquote>
<p>在 rac2 节点上执行：</p>
<blockquote><p>[oracle@rac2 ~]$ mkdir ~/.ssh<br />
[oracle@rac2 ~]$ chmod 700 ~/.ssh<br />
[oracle@rac2 ~]$ ssh-keygen -t rsa<br />
[oracle@rac2 ~]$ ssh-keygen -t dsa</p></blockquote>
<p>在 rac1 节点上执行：</p>
<blockquote><p>[oracle@rac1 ~]$ cat ~/.ssh/id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys<br />
[oracle@rac1 ~]$ cat ~/.ssh/id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys</p></blockquote>
<p>提示：下列命令会提示你输入 rac2 的 oracle 密码，按照提示输入即可，如果失败可重新尝试执行命令。</p>
<p>在 rac1 节点上执行：</p>
<blockquote><p>[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys</p></blockquote>
<p>在 rac2 节点上执行：</p>
<blockquote><p>[oracle@rac2 ~]$ cat ~/.ssh/id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys<br />
[oracle@rac2 ~]$ cat ~/.ssh/id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys<br />
[oracle@rac2 ~]$ scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys</p></blockquote>
<p>在 rac1 节点上执行：</p>
<blockquote><p>[oracle@rac1 ~]$ ssh rac1 date<br />
[oracle@rac1 ~]$ ssh rac2 date<br />
[oracle@rac1 ~]$ ssh rac1-priv date<br />
[oracle@rac1 ~]$ ssh rac2-priv date</p></blockquote>
<p>在 rac2 节点上执行：</p>
<blockquote><p>[oracle@rac2 ~]$ ssh rac1 date<br />
[oracle@rac2 ~]$ ssh rac2 date<br />
[oracle@rac2 ~]$ ssh rac1-priv date<br />
[oracle@rac2 ~]$ ssh rac2-priv date</p></blockquote>
<p><span style="font-size: large;">3. 配置网络</span></p>
<blockquote><p>[root@rac1 ~]# cat /etc/hosts<br />
# Do not remove the following line, or  various programs<br />
# that require network functionality will  fail.<br />
127.0.0.1 localhost.localdomain localhost</p>
<p>10.10.6.203 rac1.company.com.cn rac1<br />
10.10.6.204  rac1-vip<br />
192.168.122.101 rac1-priv</p>
<p>10.10.6.207  rac2.company.com.cn rac2<br />
10.10.6.208??  rac2-vip<br />
192.168.122.102 rac2-priv</p>
<p>[root@rac2 ~]# cat /etc/hosts<br />
# Do not remove the following line, or  various programs<br />
# that require network functionality will  fail.<br />
127.0.0.1 localhost.localdomain localhost</p>
<p>10.10.6.203 rac1.company.com.cn rac1<br />
10.10.6.204  rac1-vip<br />
192.168.122.101 rac1-priv</p>
<p>10.10.6.207  rac2.company.com.cn rac2<br />
10.10.6.208??  rac2-vip<br />
192.168.122.102 rac2-priv</p></blockquote>
<p><span style="font-size: large;">4. 同步时间</span></p>
<blockquote><p>[root@rac1 ~]# crontab -l<br />
0 6 * * * /usr/sbin/ntpdate 10.1.4.30 ;  /sbin/hwclock -w? &gt; /dev/null 2&gt;&amp;1</p>
<p>[root@rac2 ~]# crontab -l<br />
0 6 * * * /usr/sbin/ntpdate 10.1.4.30 ;  /sbin/hwclock -w? &gt; /dev/null 2&gt;&amp;1</p></blockquote>
<p><span style="font-size: large;">5. 配置内核参数</span></p>
<p>分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/sysctl.conf 中去，然后分别在 shell 下运行 “sysctl -p” 命令。</p>
<blockquote><p>kernel.shmall = 2097152<br />
kernel.shmmax = 2147483648<br />
kernel.shmmni = 4096<br />
kernel.sem = 250 32000 100 128<br />
fs.file-max =  65536<br />
net.ipv4.ip_local_port_range = 1024 65000<br />
net.core.rmem_default =  262144<br />
net.core.rmem_max = 1048576<br />
net.core.wmem_default =  262144<br />
net.core.wmem_max = 1048576</p></blockquote>
<p><span style="font-size: large;">6. 设置用户限制</span></p>
<ol>
<li>在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/security/limits.conf 文件中：</li>
<blockquote><p>oracle soft nproc 2047<br />
oracle hard nproc 16384<br />
oracle soft nofile  1024<br />
oracle hard nofile 65536</p></blockquote>
<li>分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/pam.d/login 文件中：</li>
<blockquote><p>session required /lib/security/pam_limits.so</p></blockquote>
<li>分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/profile 文件中：</li>
<blockquote><p>if [ $USER = "oracle" ]; then<br />
if [ $SHELL = "/bin/ksh" ]; then<br />
ulimit  -p 16384<br />
ulimit -n 65536<br />
else<br />
ulimit -u 16384 -n  65536<br />
fi<br />
fi</p></blockquote>
</ol>
<p><span style="font-size: large;">7. 使用 HugePage 内存技术</span></p>
<p>分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/security/limits.conf 文件中：</p>
<blockquote><p>Oracle soft memlock 3145728<br />
Oracle hard memlock 3145728</p></blockquote>
<p><span style="font-size: large;">8. 配置 hangcheck-timer 模块</span></p>
<p>hangcheck-timer 是 Linux 提供的一个内核级的 IO-Fencing 模块， 这个模块会监控 Linux 内核运行状态，如果长时间挂起，这个模块会自动重启系统。 这个模块在 Linux 内核空间运行，不会受系统负载的影响。这个模块会使用 CPU 的 Time Stamp Counter 寄存器，这个寄存器的值会在每个时钟周期自动增加， 因此使用的是硬件时间，所以精度更高。配置这个模块需要2个参数：hangcheck_tick 和 hangcheck_margin。</p>
<p>hangcheck_tick 参数用于定义多长时间检查一次，缺省值是30秒。有可能内核本身很忙，导致这个检查被推迟，该模块还允许定义一个延迟上限，就是 hangcheck_margin，它的缺省值是180秒。hangcheck-timer 模块会根据 hangcheck_tick 参数定时检查内核。只要2次检查的时间间隔小于 hangcheck_tick 与  hangchec_margin 之和，都会认为内核运行正常，否则就意味着运行异常，这个模块会自动重启系统。</p>
<p>CRS 本身还有一个 MissCount 参数，可以通过“crsctl get css miscount”命令查看。</p>
<p>当 RAC 节点间的心跳信息丢失时， Clusterware 必须确保在进行重构时，故障结点确实是 Dead 状态，否则节点仅是临时负载过高导致心跳丢失，然后其他结点开始重构，但是结点没有重启，这样会损坏数据库。 因此 MissCount 必须大于  hangcheck_tick 与 hangcheck_margin 两个参数之和。</p>
<p>在 rac1 和 rac2 两个节点上都应执行如下操作，以 rac1 节点上的操作为例：</p>
<blockquote><p>[root@rac1 ~]# find /lib/modules -name “hangcheck-timer.ko”<br />
/lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko<br />
/lib/modules/2.6.18-164.el5xen/kernel/drivers/char/hangcheck-timer.ko</p>
<p>[root@rac1 ~]# modprobe hangcheck-timer</p>
<p>[root@rac1 ~]# vi /etc/rc.d/rc.local<br />
modprobe hangcheck-timer</p>
<p>[root@rac1 ~]# vi /etc/modprobe.conf<br />
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180</p>
<p>[root@rac1 ~]# grep Hangcheck /var/log/messages | tail -2<br />
Sep 7 19:53:03 rac1 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick  is 180 seconds, margin is 60 seconds).<br />
Sep 7 19:53:03 rac1 kernel: Hangcheck: Using  monotonic_clock().</p></blockquote>
<p><span style="font-size: large;">9. 划分网络共享存储</span></p>
<blockquote><p>[root@rac1 ~]# fdisk -l<br />
Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes<br />
255 heads, 32 sectors/track, 35132 cylinders<br />
Units = cylinders of 8160 * 512 = 4177920 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/cciss/c0d0p1   *           1          25      101984   83  Linux<br />
/dev/cciss/c0d0p2              26       35132   143236560   8e  Linux LVM</p>
<p>Disk /dev/sda: 149.9 GB, 149999992832 bytes<br />
255 heads, 63 sectors/track, 18236 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/sda1               1        3000    24097468+  83  Linux<br />
/dev/sda2            3001        6000    24097500   83  Linux<br />
/dev/sda3            6001        9000    24097500   83  Linux<br />
/dev/sda4            9001       12000    24097500   83  Linux</p>
<p>Disk /dev/sdb: 149.9 GB, 149999992832 bytes<br />
255 heads, 63 sectors/track, 18236 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes</p>
<p>Device Boot      Start         End      Blocks   Id  System<br />
/dev/sdb1               1        3000    24097468+  83  Linux<br />
/dev/sdb2            3001        6000    24097500   83  Linux<br />
/dev/sdb3            6001        9000    24097500   83  Linux<br />
/dev/sdb4            9001       12000    24097500   83  Linux<br />
[root@testrac1 rac]#</p>
<p>[root@rac2 ~]# partprobe</p></blockquote>
<p><span style="font-size: large;">10. 安装与配置 <a href="http://oss.oracle.com/projects/ocfs2/files/RedHat/RHEL5/x86_64/1.4.7-1/" target="_blank">ocfs2</a></span></p>
<p>实践中，我使用 ocfs2 来作为保存 OCR 与 Voting Disks 的文件系统。</p>
<blockquote><p>[root@rac1 ~]# rpm -Uvh ocfs2*</p>
<p>[root@rac1 ~]# vi /etc/ocfs2/cluster.conf</p>
<p>node:<br />
ip_port = 7777<br />
ip_address = 192.168.122.101<br />
number = 0<br />
name = testrac1<br />
cluster = ocfs2</p>
<p>node:<br />
ip_port = 7777<br />
ip_address = 192.168.122.102<br />
number = 1<br />
name = testrac2<br />
cluster = ocfs2</p>
<p>cluster:<br />
node_count = 2<br />
name = ocfs2</p>
<p>[root@rac1 ~]# /etc/init.d/o2cb offline ocfs2<br />
[root@rac1 ~]# /etc/init.d/o2cb upload<br />
[root@rac1 ~]# /etc/init.d/o2cb configure<br />
[root@rac1 ~]# reboot</p></blockquote>
<p>在 rac1 节点：</p>
<blockquote><p>[root@rac1 ~]# mkfs.ocfs2 -b 4k -C 32K -N 4 -L oracrsfiles /dev/sdb1</p></blockquote>
<p>在 rac1 和 rac2 节点上，以 rac1 上的操作为例：</p>
<blockquote><p>[root@rac1 ~]# mount -t ocfs2 -o datavolume, nointr /dev/sdb1 /ocfs<br />
[root@rac1 ~]# vi /etc/fstab<br />
/dev/sdb1 /ocfs ocfs_netdev,datavolume,nointr 0 0</p></blockquote>
<p><span style="font-size: large;">11.安装配置 <a href="http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html" target="_blank">oracleasm</a></span></p>
<blockquote><p>[root@rac1 ~]# rpm -Uvh oracleasm*<br />
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb2<br />
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdb3<br />
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdb4</p></blockquote>
<p>我没有使用 raw 分区来配置共享存储从而存储 OCR 和 Voting Disks 或数据库文件，如果你对这方面感兴趣请参考这篇 <a href="http://www.linuxidc.com/Linux/2010-08/27633.htm" target="_blank">文章</a>。</p>
<p><span style="font-size: large;">12. 修改用户配置文件</span></p>
<p>在 rac1 和 rac2 两个节点上都应执行如下操作，以 rac1 节点上的操作为例（两个节点仅 ORACLE_SID 变量不同）：</p>
<blockquote><p># User specific environment and startup programs</p>
<p>PATH=$PATH:$HOME/bin<br />
export ORACLE_BASE=/u01/app/oracle<br />
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1<br />
export ORA_CRS_HOME=$ORACLE_BASE/product/crs<br />
export ORACLE_SID=racdb1<br />
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin<br />
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin<br />
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin<br />
export ORACLE_TERM=xterm<br />
export TNS_ADMIN=$ORACLE_HOME/network/admin<br />
export ORA_NLS10=$ORACLE_HOME/nls/data<br />
export LD_LIBRARY_PATH=$ORACLE_HOME/lib<br />
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib<br />
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib<br />
export CLASSPATH=$ORACLE_HOME/JRE<br />
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib<br />
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib<br />
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib<br />
export THREADS_FLAG=native<br />
export TEMP=/tmp<br />
export TMPDIR=/tmp</p></blockquote>
<p><span style="font-size: large;">13. 安装与配置 <a href="http://www.oracle.com/technetwork/database/clusterware/overview/index-096607.html" target="_blank">Oracle Clusterware</a></span></p>
<p>你只需要按照官方文档一步一步操作，最后分别在 rac1 和 rac2 两个节点上以 root 身份依次执行 orainstRoot.sh 和 root.sh 脚本，Clusterware 安装结束后，可以确认一下：</p>
<blockquote><p>$ /u01/app/oracle/product/crs/bin/olsnodes -n<br />
rac1<br />
rac2</p>
<p>$ ls -l /etc/init.d/init.*<br />
-r-xr-xr-x 1 root root 1951 Oct 4 14:21 /etc/init.d/init.crs*<br />
-r-xr-xr-x 1 root root 4714 Oct 4 14:21 /etc/init.d/init.crsd*<br />
-r-xr-xr-x 1 root root 35394 Oct 4 14:21 /etc/init.d/init.cssd*<br />
-r-xr-xr-x 1 root root 3190 Oct 4 14:21 /etc/init.d/init.evmd*</p></blockquote>
<p>检查 CRS 安装启动情况：用 root 用户执行：</p>
<blockquote><p>$CRS_HOME/bin/crsctl check crs</p>
<p>CSS appears healthy</p>
<p>CRS appears healthy</p>
<p>EVM appears healthy</p></blockquote>
<p>表明 CRS 安装完成，并且启动成功。</p>
<blockquote><p>[root@rac1 bin]# ./crs_stat -t -v</p>
<p>Name           Type           R/RA   F/FT   Target    State     Host<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
ora.rac1.gsd   application    0/5    0/0    ONLINE    ONLINE    rac1<br />
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1<br />
ora.rac1.vip   application    0/0    0/0    ONLINE    ONLINE    rac1<br />
ora.rac2.gsd   application    0/5    0/0    ONLINE    ONLINE    rac2<br />
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2<br />
ora.rac2.vip   application    0/0    0/0    ONLINE    ONLINE    rac2</p></blockquote>
<p>注：如果 Clusterware 安装失败，再次运行安装程序，里面可以把之前的安装删除掉，删除之后在进行安装。</p>
<p><span style="font-size: large;">14. 安装 <a href="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html" target="_blank">Oracle</a> 数据库</span></p>
<p>在 rac1 节点上安装 Oracle 数据库软件，OUI 会自动将相关的软件文件拷贝到 rac2 节点上去，所以这部分的安装过程跟单机安装 Oracle 的过程基本一致，只是在安装模式的选择上勾选 Cluster Installation，另外就是在最后阶段需要根据 UI 界面的提示信息分别在两个节点上执行相关 shell 脚本。</p>
<p><span style="font-size: large;">15. 使用 netca 创建监听</span></p>
<ol>
<li>oracle 用户在 rac1 节点上运行 netca</li>
<li>选择所有节点</li>
<li>选择 Listener configuration</li>
<li>添加一个 LISTENER，端口号1521 ，然后结束配置。</li>
</ol>
<p>监听配置成功后， 2个节点上的 Listener 都会作为 Application Resource 注册到 CRS 中， 这样 CRS  就可以监控Listener 的运行状态。 我们可以通过 crs_stat -t -v  查看 Listener 状态。tnsnames.ora 配置文件内容如下：</p>
<blockquote><p>RACDB =<br />
(DESCRIPTION =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))<br />
(LOAD_BALANCE = yes)<br />
(CONNECT_DATA =<br />
(SERVER = DEDICATED)<br />
(SERVICE_NAME = racdb)<br />
)<br />
)</p>
<p>LISTENERS_RACDB =<br />
(ADDRESS_LIST =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))<br />
)</p>
<p>RACDB1 =<br />
(DESCRIPTION =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))<br />
(CONNECT_DATA =<br />
(SERVER = DEDICATED)<br />
(SERVICE_NAME = racdb)<br />
(INSTANCE_NAME = racdb1)<br />
)<br />
)</p>
<p>RACDB2 =<br />
(DESCRIPTION =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = testrac2-vip)(PORT = 1521))<br />
(CONNECT_DATA =<br />
(SERVER = DEDICATED)<br />
(SERVICE_NAME = racdb)<br />
(INSTANCE_NAME = racdb2)<br />
)<br />
)</p></blockquote>
<p><span style="font-size: large;">16. 创建 ASM 实例</span></p>
<ol>
<li>运行 DBCA 命令</li>
<li>选择 configure Automatic Storage Management， 来创建 ASM 实例。</li>
<li>选择所有节点。</li>
<li>输入密码。RAC 的 spfile 必须放在共享目录下。  参数文件我们选择第一个 initialization parameter。</li>
<li>修改 ASM 参数： asm_diskstring = ORCL:VOL*，这样能让 Oracle 自动发现这些硬盘。</li>
<li>ASM 实例创建完后，用 Create New 来创建 ASM 磁盘组。 我们用 VOL1 来创建一个 DATA 组， VOL2 创建FLASH_RECOVERY_AREA 组。<br />
注意： Redundancy 一般选 external 就是也就是不考虑冗余，假如选 normal 则是 mirror，至少要一个 FailGroup。选 High 就是 triple mirror，3倍镜像，需要三个 FailGroup。</li>
<li>创建完成后，能看到组的状态是 Mount，ASM 组必须 mount 之后才能使用。<br />
注意： ASM 对应的device 需要oracle 用户的权限，如：&nbsp;</p>
<blockquote><p>chown oracle:oinstall /dev/mapper/device_name</p></blockquote>
</li>
</ol>
<p><span style="font-size: large;">17. 使用 dbca 创建 RAC 数据库</span></p>
<ol>
<li>用 oracle 用户运行 dbca</li>
<li>选择 custom database</li>
<li>输入数据库的全局名，比如 racdb</li>
<li>输入系统的角色建立密码</li>
<li>选择 ASM 来存储， 分别选择我们刚创建的 DATA 和 FLASH_RECOVERY_AREA 组。</li>
<li>Database Services 这里，你选择 Add 你一个新的 service, 随便叫名字，比如 racdb。然后选择 TAF Policy,是 Basic。 这个服务在 RAC 的 Failover 中会用到，如果在这里没有配置，也可以通过 dbca 命令， 选择 Services Management 来进行配置。 具体参考 Blog：<a href="http://www.linuxidc.com/Linux/2011-05/36003.htm" target="_blank">Oracle RAC Failover 详解</a>。</li>
<li>开始创建数据库。</li>
</ol>
<p><span style="font-size: large;">18. 检查与测试</span></p>
<blockquote><p>[root@rac1 bin]# ./srvctl status database -d rac<br />
Instance rac2 is running on node rac1<br />
Instance rac1 is running on node rac2</p></blockquote>
<blockquote><p>[root@rac1 bin]# ./crs_stat -t<br />
Name           Type           Target    State     Host<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
ora.rac.db     application    ONLINE    ONLINE    rac1<br />
ora&#8230;.oltp.cs application    ONLINE    ONLINE    rac2<br />
ora&#8230;.ac1.srv application    ONLINE    ONLINE    rac2<br />
ora&#8230;.ac2.srv application    ONLINE    ONLINE    rac1<br />
ora&#8230;.c1.inst application    ONLINE    ONLINE    rac2<br />
ora&#8230;.c2.inst application    ONLINE    ONLINE    rac1<br />
ora&#8230;.SM2.asm application    ONLINE    ONLINE    rac1<br />
ora&#8230;.C1.lsnr application    ONLINE    ONLINE    rac1<br />
ora.rac1.gsd   application    ONLINE    ONLINE    rac1<br />
ora.rac1.ons   application    ONLINE    ONLINE    rac1<br />
ora.rac1.vip   application    ONLINE    ONLINE    rac1<br />
ora&#8230;.SM1.asm application    ONLINE    ONLINE    rac2<br />
ora&#8230;.C2.lsnr application    ONLINE    ONLINE    rac2<br />
ora.rac2.gsd   application    ONLINE    ONLINE    rac2<br />
ora.rac2.ons   application    ONLINE    ONLINE    rac2<br />
ora.rac2.vip   application    ONLINE    ONLINE    rac2</p></blockquote>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月11日 -- <a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" title="Oracle HA 脚本">Oracle HA 脚本</a> (0)</li><li>2011年09月6日 -- <a href="http://www.chenjunlu.com/2011/09/how-to-uninstall-oracle-10g-under-linux/" title="如何在 Linux 下完全卸载 Oracle 10g ?">如何在 Linux 下完全卸载 Oracle 10g ?</a> (0)</li><li>2011年05月18日 -- <a href="http://www.chenjunlu.com/2011/05/recovering-the-oracle-database-on-different-machine-with-rman-backup-flies/" title="RMAN 整库备份异机恢复流程">RMAN 整库备份异机恢复流程</a> (0)</li><li>2011年05月14日 -- <a href="http://www.chenjunlu.com/2011/05/restore-the-oracle-database-by-using-tivoli-storage-manager/" title="利用 Tivoli Storage Manager 磁带库中的备份恢复 Oracle">利用 Tivoli Storage Manager 磁带库中的备份恢复 Oracle</a> (0)</li><li>2011年05月13日 -- <a href="http://www.chenjunlu.com/2011/05/introduction-of-oracle-network-configuration-files/" title="详谈 Oracle 中的网络配置文件">详谈 Oracle 中的网络配置文件</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/08/how-to-install-oracle-rac-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comex — 年仅19岁的超级黑客</title>
		<link>http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=comex-a-hacker-with-nineteen-years-old</link>
		<comments>http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 03:01:32 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Comex]]></category>
		<category><![CDATA[Geohot]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[JailBreakMe]]></category>
		<category><![CDATA[Nicholas Allegra]]></category>
		<category><![CDATA[Wii]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2132</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2136" title="comex" src="http://www.chenjunlu.com/wp-content/uploads/2011/08/comex.jpg" alt="comex" width="280" height="280" /></p>
Nicholas Allegra 与他的父母住在 Chappaqua，纽约。一眼看去，你可能想不到这位身材高大，顶着一头蓬松的棕色头发，并戴着近视眼镜的大男孩实际上是一名超级黑客，年仅19岁就已经能够在越狱界呼风唤雨。因为他有一个在业界受到千万人追捧的网名：Comex。

Allegra 就读于布朗大学，目前已经开始进入休假期，并正在寻找合适的实习企业。在此期间，他一次又一次对计算机领域的安全防护发起冲击：不断从苹果的 iPhone 源代码内部寻找漏洞。要知道，这款手机拥有比市面上几乎任何一台电脑都要多的软件限制。而 Allegra 寻找漏洞的目的就是为了能够解开 iPhone 对任何黑客形成的“枷锁”，并造福于一系列的 iPhone 用户。

《福布斯》记者打通 Allegra 电话之后问他怎么评价越狱，他如是回答，“我认为这就像是编辑一份英文报刊一样。你只要做到细细核查，并寻找出其中的错误就可以了。”然后他还谦虚的说道，“其实我也不知道之前所做的一切（JailBreakMe）为什么会那么凑效”。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2136" title="comex" src="http://www.chenjunlu.com/wp-content/uploads/2011/08/comex.jpg" alt="comex" width="280" height="280" /></p>
<p>Nicholas Allegra 与他的父母住在 Chappaqua，纽约。一眼看去，你可能想不到这位身材高大，顶着一头蓬松的棕色头发，并戴着近视眼镜的大男孩实际上是一名超级黑客，年仅19岁就已经能够在越狱界呼风唤雨。因为他有一个在业界受到千万人追捧的网名：Comex。</p>
<p>Allegra 就读于布朗大学，目前已经开始进入休假期，并正在寻找合适的实习企业。在此期间，他一次又一次对计算机领域的安全防护发起冲击：不断从苹果的 iPhone 源代码内部寻找漏洞。要知道，这款手机拥有比市面上几乎任何一台电脑都要多的软件限制。而 Allegra 寻找漏洞的目的就是为了能够解开 iPhone 对任何黑客形成的“枷锁”，并造福于一系列的 iPhone 用户。</p>
<p>《福布斯》记者打通 Allegra 电话之后问他怎么评价越狱，他如是回答，“我认为这就像是编辑一份英文报刊一样。你只要做到细细核查，并寻找出其中的错误就可以了。”然后他还谦虚的说道，“其实我也不知道之前所做的一切（JailBreakMe）为什么会那么凑效”。</p>
<p>虽然目前基本上每个 iPhone 或 iPad 用户都知道他那个“Comex”网名，但Allegra在公众面前一直都很低调（直到《福布斯》通过 Twitter，Facebook 以及布朗目录公布他的名字后，Allegra 才同意了采访要求）。今年夏天，Allegra 先后两次更新了那串名为 JailBreakMe 的代码（我们都知道这是个什么软件程序），上百万的用户利用它在数十秒内就冲破了苹果在 iPhone 以及 iPad 身上设置得极为严格的围樯。</p>
<p>Allegra声明道，JailBreakMe 并不是拿来进行盗窃或是破坏，它只是让用户能够在自己的设备上安装任何想要安装的软件。但是作为越狱工具，它并不受到苹果的欢迎，因为它在苹果设备上利用的漏洞一旦到了那些不怀好意的黑客手上，可能会造成难以预料的后果。</p>
<p>虽然苹果一直没有对 Allegra 的所做所为做出任何针对他个人的官方回应声明，但我们知道绝对不会是双手赞成。回顾 Allegra 在上月发布的 JailBreakMe 3.0——可以越狱包括 iPad 2 在内的所有 iOS 设备（4.3.3），苹果随后就有发言人站出来声称将对之进行封杀，并在9天之后就发布了 iOS 4.3.4，封堵了可以被用以越狱的漏洞。尽管如此，还是有超过140万用户通过这款工具对 iOS 设备进行了越狱。而且在4.3.4出台后至今，使用 JailBreakMe 3.0 的用户又多了接近60万。这让苹果大为头疼，随后决定在零售店内的 Wi-Fi 网络上将 JailBreakMe.com 进行屏蔽。</p>
<p>“在成就上，我认为不会有任何人能够在近几年内超过他”，Charlie Miller，一名前美国国家安全局的网络开发分析师如是评价 Allegra。他曾在2007年首次尝试破解 iPhone，但是在见证了神奇小子 Geohot 以及 Allegra 的壮举后感叹道，“这件事居然让几个小毛孩办到了，真不可思议，我和他们差距太大了。”</p>
<p>为了表彰 JailBreakMe 做出的贡献，我们首先来看看苹果 CEO 史蒂夫.乔布斯是如何对付黑客的：从2008年开始，苹果就实行了一项名为“代码签名”的保障措施，目的在于防止黑客在其手机操作系统上运行任何一项指令。所以就算有黑客能够找到漏洞并成功进入 iOS 系统内部，他也只能够反复使用那些已存在于苹果产品软件里面的命令。</p>
<p>这还不算完。Allegra 于去年发布 JailBreakMe 2.0 之后，苹果迅速做出回应：随机变换代码在内存当中的位置，让黑客难以查找指令并进行任何形式的破解。一名程序安全研究员 Dino DaiZovi 认为，这就像是让黑客在一本他没阅读过的杂志里面找出某段特定的笔记一样，而且还是在黑暗当中进行。</p>
<p>但是，这些无比复杂的加锁程序似乎在 Allegra 面前显得不堪一击：在 JailBreakMe 3.0 当中，他找到了一个在 iOS 系统里面的 PDF 漏洞，能够同时进行查找并重复使用隐藏的命令：让一系列的安全漏洞能够完全控制 iOS 设备，并且完全无视那些因为设备重启而再次被用以越狱的代码。“我在这上面花费了相当多的时间”，Allegra 带着一丝自豪。</p>
<p>程序安全研究员 Dino DaiZovi 是《Mac Hacker’s Handbook》一书的联合撰稿人，他认为 JailBreakMe 的复杂性堪比当年的超级工厂病毒 Stuxne（这是世界上首个专门针对工业控制系统编写的破坏性病毒，曾造成伊朗核电站推迟发电）。DaiZovi 认为 Allegra 的破解技术可以和那些由国家扶持，并对企业及政府进行入侵的黑客相提并论，并赞扬他“其它黑客与之相比至少落后了五年”。</p>
<p>Allegra 所做的一切并不是为了追逐利益，因为我们都知道他网站上的东西是完全免费的，虽然他也会接受一些捐赠。另外，他也不会反对苹果想要控制那些越狱用户的做法。他自称是一名“果粉”，并把 Android 更开放的平台称为“敌人”，“我认为这是一项挑战任务，比其它任何事实都要有趣。” Allegra 如是说。</p>
<p>这名年轻的超级黑客9岁就已开始自学编程语言 Visual Basic 的代码，并从网上的论坛里面学习相关技能。“我在高中接触到计算机科学这门课程的时候，我才知道自己早就对这一切滚瓜烂熟了” ，Allegra 说道。他曾发现用户不能从任天堂的 Wii 视频游戏 Super Smash Brothers（明星大乱斗）当中截图并保存到电脑上，他便花了几个小时破解来相关的文件，并成功进入 Wii 隐藏的操作系统里，转向其它破解工作。</p>
<p>“我与其它安全社区孩子的背景不一样”，Allegra 这样评价自己，“对于他们来说，我似乎就是个不知道从哪蹦出来的怪人”。</p>
<p>Allegra认为他的越狱工作是合法的。美国版权局在去年夏天将 DMCA（Digital Millenium Copyright Act，《数字千年版权法案》）进行了修改，允许用户越狱自己的手机。苹果曾一再对此表示反对，认为这款条例等于是鼓动那些“卑鄙”的黑客随意玩弄手机，甚至可能会引来“灾难性”的攻击而导致手机信号塔的崩溃。</p>
<p>对于发布工具，并让其它人以此来破解设备的行为是否可取，目前还没有一个正式的定论。到目前为止，虽然有许多声音认为黑客破解电子设备是对DMCA的亵渎，但还是有三个法院都判定了破解是合法行为。比如在今年1月份的一声官司当中，索尼将破解 PlayStation 3 的神奇小子 Geohot 告上了法庭，但随后索尼就遭到一连串全球范围的报复性网络攻击，最终与 Geohot 和平解决纠纷。</p>
<p>Allegra 认为，越狱手机和那些恶意攻击手机的行为不一样，“它们太可怕了，虽然我也是使用和其它人一样的手机，但还是感到非常的不安全。” Allegra 担心的说。</p>
<p>注定名留越狱史的 JailBreakMe 3.0 出台之后，Allegra 还针对他发现的 PDF 漏洞发布了一个补丁，用户可以以此抹去越狱的“痕迹”，防止其它恶意黑客发现并利用相同的漏洞。在苹果发布官方的补丁之前，那些已经将手中的 iPhone 或者 iPad 越狱的用户在某些程度上还比没有越狱的用户安全。</p>
<p>最后，考虑到 Nicholas Allegra 与其它普通的大学生一样进入了实习阶段，《福布斯》建议苹果可以考虑将这名天才少年招至公司的安全团队当中。随后有外国媒体拿此事来开玩笑，“去苹果实习？6位数的薪水以及一间独立办公室怎么样？”</p>
<p>无论 Nicholas Allegra 的未来会如何发展，我们都不会忘记这名低调的大男孩对 iOS 用户做出的贡献，希望他前途一片光明。</p>
<p>Via  <a href="http://www.weiphone.com" target="_blank">威锋网</a></p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2010年06月22日 -- <a href="http://www.chenjunlu.com/2010/06/ios4-%e7%bb%88%e4%ba%8e%e5%87%ba%e6%9d%a5%e4%ba%86/" title="iOS4 终于出来了">iOS4 终于出来了</a> (0)</li><li>2011年12月2日 -- <a href="http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/" title="Kindle Keyboard 上手玩">Kindle Keyboard 上手玩</a> (0)</li><li>2011年11月3日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/" title="在 Mac OS X 下使用 IPython">在 Mac OS X 下使用 IPython</a> (0)</li><li>2011年07月14日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-edit-the-hosts-file-in-mac-os-x/" title="在 Mac OS X 下修改 hosts 文件">在 Mac OS X 下修改 hosts 文件</a> (3)</li><li>2011年03月28日 -- <a href="http://www.chenjunlu.com/2011/03/microsoft-mouse-driver-under-mac-os-x/" title="Mac OS X 下的 MicroSoft 鼠标驱动">Mac OS X 下的 MicroSoft 鼠标驱动</a> (2)</li><li>2011年03月16日 -- <a href="http://www.chenjunlu.com/2011/03/pes2011-for-android-and-ipad/" title="PES2011 for Android and iPad">PES2011 for Android and iPad</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RHEL 5.5 下解决 IBM DS4700 的多路径问题</title>
		<link>http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 03:05:05 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[DS4700]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[multipath]]></category>
		<category><![CDATA[RDAC]]></category>
		<category><![CDATA[RHEL]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2115</guid>
		<description><![CDATA[普通的电脑主机都是一个硬盘挂接到一个总线上，这里是一对一的关系。而到了有光纤组成的SAN环境，由于主机和存储通过了光纤交换机连接，这样的话，就构成了多对多的关系。也就是说，主机到存储可以有多条路径可以选择。主机到存储之间的 I/O 由多条路径可以选择，如下图：
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2119" title="multipath-server" src="http://www.chenjunlu.com/wp-content/uploads/2011/08/multipath-server.png" alt="multipath-server" width="306" height="323" /></p>
根据上图所示，每个主机到所对应的存储可以经过几条不同的路径，如果是同时使用的话，I/O 流量如何分配？其中一条路径坏掉了，如何处理？还有在操作系统的角度来看，每条路径，操作系统会认为是一个实际存在的物理盘，但实际上只是通向同一个物理盘的不同路径而已，这样是在使用的时候，就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。多路径的主要功能就是和存储设备一起配合实现如下功能：
<ol>
	<li>故障的切换和恢复</li>
	<li>I/O 流量的负载均衡</li>
	<li>磁盘的虚拟化</li>
</ol>
由于多路径软件是需要和存储在一起配合使用的，不同的厂商基于不同的操作系统，都提供了不同的版本。并且有的厂商，软件和硬件也不是一起卖的，如果要使用多路径软件的话，可能还需要向厂商购买 License 才行。比如EMC公司基于 Linux 下的多路径软件，就需要单独的购买 License。好在， RedHat 和 Suse 的2.6的内核中都自带了免费的多路径软件包，并且可以免费使用，同时也是一个比较通用的包，可以支持大多数存储厂商的设备，即使是一些不是出名的厂商，通过对配置文件进行稍作修改，也是可以支持并运行的很好的。但是，RedHat 自带的多路径软件包配置起来比较复杂一些，由于公司采购的是 IBM DS4700，所以我们采用了一种更简单便捷的方法来解决多路径问题。如果对如何配置 RedHat 自带的 multipath 多路径包感兴趣，请参考这篇 <a href="http://bowen.blog.51cto.com/136148/100199" target="_blank">文章</a>。下面我来具体介绍一下如何在 RHEL 5.5 下解决 IBM DS4700 的多路径问题：]]></description>
			<content:encoded><![CDATA[<p>普通的电脑主机都是一个硬盘挂接到一个总线上，这里是一对一的关系。而到了有光纤组成的SAN环境，由于主机和存储通过了光纤交换机连接，这样的话，就构成了多对多的关系。也就是说，主机到存储可以有多条路径可以选择。主机到存储之间的 I/O 由多条路径可以选择，如下图：</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2119" title="multipath-server" src="http://www.chenjunlu.com/wp-content/uploads/2011/08/multipath-server.png" alt="multipath-server" width="306" height="323" /></p>
<p>根据上图所示，每个主机到所对应的存储可以经过几条不同的路径，如果是同时使用的话，I/O 流量如何分配？其中一条路径坏掉了，如何处理？还有在操作系统的角度来看，每条路径，操作系统会认为是一个实际存在的物理盘，但实际上只是通向同一个物理盘的不同路径而已，这样是在使用的时候，就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。多路径的主要功能就是和存储设备一起配合实现如下功能：</p>
<ol>
<li>故障的切换和恢复</li>
<li>I/O 流量的负载均衡</li>
<li>磁盘的虚拟化</li>
</ol>
<p>由于多路径软件是需要和存储在一起配合使用的，不同的厂商基于不同的操作系统，都提供了不同的版本。并且有的厂商，软件和硬件也不是一起卖的，如果要使用多路径软件的话，可能还需要向厂商购买 License 才行。比如EMC公司基于 Linux 下的多路径软件，就需要单独的购买 License。好在， RedHat 和 Suse 的2.6的内核中都自带了免费的多路径软件包，并且可以免费使用，同时也是一个比较通用的包，可以支持大多数存储厂商的设备，即使是一些不是出名的厂商，通过对配置文件进行稍作修改，也是可以支持并运行的很好的。但是，RedHat 自带的多路径软件包配置起来比较复杂一些，由于公司采购的是 IBM DS4700，所以我们采用了一种更简单便捷的方法来解决多路径问题。如果对如何配置 RedHat 自带的 multipath 多路径包感兴趣，请参考这篇 <a href="http://bowen.blog.51cto.com/136148/100199" target="_blank">文章</a>。下面我来具体介绍一下如何在 RHEL 5.5 下解决 IBM DS4700 的多路径问题：</p>
<ol>
<li>使用 unmae -r 命令查看当前 Linux 系统的内核版本：<br />
<blockquote><p>[root@HQSUGAPP01 ~]# uname -r<br />
2.6.18-92.el5PAE<br />
[root@HQSUGAPP01 ~]#</p></blockquote>
</li>
<li>下载 RDAC 驱动，登陆 <a href="http://www.lsi.com/sep/Pages/rdac/index.aspx" target="_blank">rdac</a> 官方网站。例如：rdac-LINUX-09.03.0C05.0504-source.tar.gz 的描述，我们可以知道该驱动支持 RHEL5-u5 : 2.6.18-194</li>
<li>在 Linux 系统中安装驱动<br />
<blockquote><p>[root@HQSUGAPP01 media]# tar -zxvf rdac-LINUX-09.03.0C05.0504-source.tar.gz<br />
[root@HQSUGAPP01 media]# cd linuxrdac-09.03.0C05.0504/<br />
[root@HQSUGAPP01 linuxrdac-09.03.0C05.0504]# make<br />
[root@HQSUGAPP01 linuxrdac-09.03.0C05.0504]# make install</p></blockquote>
<p>编译时如果无法完成，请检查 RDAC 驱动版本是否与 Linux 系统内核版本一致，以及 Linux 是否安装了编译所需的相关组件。</li>
<li>安装成功后，可以在 /boot 目录下看到 mpp-2.6.18-92.el5PAE.img 的文件：<br />
<blockquote><p>[root@HQSUGAPP01 linuxrdac-09.03.0C05.0504]# ls /boot/mpp-2.6.18-92.el5PAE.img<br />
/boot/mpp-2.6.18-92.el5PAE.img</p></blockquote>
</li>
<li>编辑 grub 启动菜单，加入启动项(加粗字体表示添加或更改的信息)：<br />
<blockquote><p>[root@HQSUGAPP01 linuxrdac-09.03.0C05.0214]# vi /etc/grub.conf</p>
<p># grub.conf generated by anaconda<br />
#<br />
# Note that you do not have to rerun grub after making changes to this file<br />
# NOTICE:  You have a /boot partition.  This means that<br />
#               all kernel and initrd paths are relative to /boot/, eg.<br />
#               root (hd0,0)<br />
#               kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00<br />
#               initrd /initrd-version.img<br />
#               boot=/dev/sda<br />
<strong>default=2</strong><br />
timeout=5<br />
splashimage=(hd0,0)/grub/splash.xpm.gz<br />
hiddenmenu<br />
title Red Hat Enterprise Linux Server (2.6.18-92.el5)<br />
root (hd0,0)<br />
kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/VolGroup00/LogVol00 console=tty1 console=ttyS1,115200  rhgb quiet<br />
initrd /initrd-2.6.18-92.el5.img<br />
title Red Hat Enterprise Linux Server (2.6.18-92.el5xen)<br />
root (hd0,0)<br />
kernel /xen.gz-2.6.18-92.el5<br />
module /vmlinuz-2.6.18-92.el5xen ro root=/dev/VolGroup00/LogVol00 console=tty1 console=ttyS1,115200  rhgb quiet<br />
module /initrd-2.6.18-92.el5xen.img<br />
<strong>title Red Hat Enterprise Linux Server (2.6.18-92.el5PAE)<br />
root (hd0,0)<br />
kernel /vmlinuz-2.6.18-92.el5PAE ro root=/dev/VolGroup00/LogVol00 console=tty1 console=ttyS1,115200  rhgb quiet<br />
initrd /mpp-2.6.18-92.el5PAE.img</strong></p></blockquote>
</li>
<li>重新启动 Linux 系统</li>
<li>大功告成</li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年11月24日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Cognos Server">在 RHEL 5.5 下安装 Cognos Server</a> (0)</li><li>2011年07月12日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-configure-the-installed-apache-as-a-service-of-the-linux-server/" title="配置编译安装的 Apache 为系统服务">配置编译安装的 Apache 为系统服务</a> (0)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 1.962 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-17 15:46:49 -->

