<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[linux下集群其实并不难——自写服务器心跳集群脚本]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 14 Oct 2010 15:21:39 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	linux的优势我想大家都知道，就是作为服务器，它非常高效稳定。然后对于一些24*7的服务器系统来说，即使系统非常稳定，也不能保证服务器时时刻刻都在运行，比如断电，服务进程异常停止，受到攻击崩溃点情况。为了解决这些问题，现在比较流行两台或者多台服务器集群，一台作为主服务器，令一台作为备用服务器，当主服务器的服务停止后，备用服务器立刻能够接管起主服务器的工作。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过研究，发现linux下的这种工具很丰富。有免费的，也有收费的，比如linux-HA（http://www.linux-ha.org/），cman（也是不错的软件，通过图形界面来管理服务器节点）。还看到一个日本人开发的集群套件，单价几百万日元，当然这是因为收费的大多数原因是他们提供技术支持。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;既然如此，到底这些集群软件是怎么实现的呢？其实并不复杂。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我写个简单的脚本来示范一下集群软件的工作原理，一台服务器是否在工作，我们可以形象地解释它有没有“心跳”<br/><br/><div class="code">#!bin/bash<br/>#description: I have created a cluster with two computers<br/>#One is the master with IP--192.168.0.1<br/>#The other one is the slave with IP--192.168.0.2<br/>#The float_ip is 192.168.0.111<br/>while true<br/>&nbsp;&nbsp;&nbsp;&nbsp;do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ping 192.168.0.111 -c3 #&amp;&gt;/dev/null<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result=$?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;if &#91; $result -ne 0 &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wget -t3 http://192.168.0.1 -O /dev/null #&amp;&gt;/dev/null<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#91; $? -ne 0 &#93; &amp;&amp; ifconfig eth0:1 192.168.0.111<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; echo &quot;Master apache service is down&quot;&gt;&gt;/var/log/ha.log<br/>&nbsp;&nbsp;&nbsp;&nbsp;if &#91; $result -eq 0 &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ifconfig eth0:0&#124;grep $float_ip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#91; $? -ne 0 &#93; &amp;&amp; ifconfig eth0:1 down<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;done</div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试主机心跳点评脚本：我是以局域网中两台配置相同的机器，一台作为主服务器master(ip 192.168.0.1)，令一台作<br/>为备用服务器slave(ip 192.168.0.2,来提供httpd网站服务，网站的地址是192.168.0.111，属于master上一个浮动ip。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先让主服务器开启网站服务，然后备用服务器关闭网站服务，运行如上脚本，然后slave会去ping master的IPI，并把<br/>结果存入变量。光能ping通主机并不能保证网站服务还是可用的，于是我们用抓包软件抓取master的一张，若成功了，隔<br/>三秒后再去重复以上步骤,ping不通slave就直接新建一个浮动ip，并开启httpd服务<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若ping的通而抓不到包则slave也接管服务，并将master上的httpd服务当掉的消息存入日志。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当主服务器重新开机后，备用服务器应该把ip还给主服务器。于是当重新ping通master并抓包成功后，slave放弃浮动ip<br/>并停止服务。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基本工作原理就是这样，区别在于集群软件用的相互之间测试心跳的途径不同，我用的是较为简单的icmp协议和测试服务<br/>相结合的办法。简单实用，但是要考虑防火墙的具体配置情况，仅让192.168.0.2的icmp能通过，不让其他主机有机可趁于是<br/>在master上配置防火墙。<br/><br/><div class="code">iptables -I INPUT -p icmp --snat 192.168.0.2 -j accept<br/>iptables -I INPUT -P icmp -j drop</div>对于基于TCP协议80端口的httpd服务也类似配置，这样就可以既实用又保证安全性了。<br/>来源：http://www.linuxdiyf.com/bbs/thread-70819-1-1.html
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] linux下集群其实并不难——自写服务器心跳集群脚本]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>