<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Mia mamma usa Linux! &#187; Raoul Scarazzini</title>
	<atom:link href="http://www.miamammausalinux.org/author/rasca/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Mon, 02 Jan 2012 11:31:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Seminario &#8220;Evoluzione dell&#8217;alta affidabilita&#8217; su Linux&#8221;: video cinque e sei di sei &#8211; &#8220;Il Progetto&#8221;</title>
		<link>http://www.miamammausalinux.org/2011/08/seminario-evoluzione-dellalta-affidabilita-su-linux-video-cinque-e-sei-di-sei-il-progetto/</link>
		<comments>http://www.miamammausalinux.org/2011/08/seminario-evoluzione-dellalta-affidabilita-su-linux-video-cinque-e-sei-di-sei-il-progetto/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 12:59:26 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[Corosync]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[OpenAIS]]></category>
		<category><![CDATA[Pacemaker]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1444</guid>
		<description><![CDATA[Ecco le parti finali del seminario di miamammausalinux.org, intitolato &#8220;Evoluzione dell&#8217;alta affidabilita&#8217; su Linux&#8221; che si è svolto nella giornata del 24 giugno 2011, presso l&#8217;hotel Holiday Inn di Rho. La quinta e la sesta parte descrivono nel dettaglio la soluzione operativa di un sistema cluster in modalità active-active, mediante configurazioni e test funzionali. Parte [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2008/11/miamammausalinux_avatar.png" alt="" title="miamammausalinux" width="124" height="125" class="alignnone size-full wp-image-761" /></p>
<p>Ecco le parti finali del seminario di <em>miamammausalinux.org</em>, intitolato &#8220;<strong>Evoluzione dell&#8217;alta affidabilita&#8217; su Linux</strong>&#8221; che si è svolto nella giornata del 24 giugno 2011, presso l&#8217;hotel Holiday Inn di Rho.</p>
<p>La quinta e la sesta parte descrivono nel dettaglio la soluzione operativa di un sistema cluster in modalità active-active, mediante configurazioni e test funzionali.</p>
<p>Parte cinque di sei &#8211; Il Progetto (parte prima):</p>
<p><script type='text/javascript' src='http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/html/flashembed.min.js'></script>
<div >
<div id='hana_flv_flow_1'>*Video:evoluzione dell'alta affidabilita' su linux &#8211; 5 di 6 &#8211; il progetto, parte prima</div>
</div>

<script type='text/javascript'>
    flashembed('hana_flv_flow_1',
      { src:'http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/FlowPlayerDark.swf', wmode: 'transparent', width: 342,  height: 192 },
      { config: { videoFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%205%20di%206%20-%20Il%20Progetto,%20parte%20prima.flv', autoPlay: false ,loop: false, autoRewind: false, autoBuffering: false,
			splashImageFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%205%20di%206%20-%20Il%20Progetto,%20parte%20prima.jpg', initialScale: 'scale' 

	    }}
    );
</script></p>
<p>Parte sei di sei &#8211; Il Progetto (parte seconda):</p>
<p>
<div >
<div id='hana_flv_flow_2'>*Video:evoluzione dell'alta affidabilita' su linux &#8211; 6 di 6 &#8211; il progetto, parte seconda</div>
</div>

<script type='text/javascript'>
    flashembed('hana_flv_flow_2',
      { src:'http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/FlowPlayerDark.swf', wmode: 'transparent', width: 342,  height: 192 },
      { config: { videoFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%206%20di%206%20-%20Il%20Progetto,%20parte%20seconda.flv', autoPlay: false ,loop: false, autoRewind: false, autoBuffering: false,
			splashImageFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%206%20di%206%20-%20Il%20Progetto,%20parte%20seconda.jpg', initialScale: 'scale' 

	    }}
    );
</script></p>
<p>Serie completa:</p>
<ul>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-uno-e-due-di-sei-introduzione-e-cluster/" title="Prima parte">video uno e due di sei – “Introduzione” e “Cluster”</a>
</li>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-tre-e-quattro-di-sei-heartbeatcorosync-e-drbd/" title="Seconda parte">video tre e quattro di sei – “Heartbeat/Corosync” e “DRBD”</a>
</li>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/08/seminario-evoluzione-dellalta-affidabilita-su-linux-video-cinque-e-sei-di-sei-il-progetto/" title="Terza parte">video cinque e sei di sei – “Il Progetto”</a>
</li>
</ul>
<p><em>Un ringraziamento particolare a <strong>Lorenzo</strong>, per il preziosissimo supporto video che ci ha permesso di condividere l&#8217;evento con quanti non sono riusciti a partecipare.</em></p>
<p><strong>Buona visione!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/08/seminario-evoluzione-dellalta-affidabilita-su-linux-video-cinque-e-sei-di-sei-il-progetto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seminario &#8220;Evoluzione dell&#8217;alta affidabilita&#8217; su Linux&#8221;: video tre e quattro di sei &#8211; &#8220;Heartbeat/Corosync&#8221; e &#8220;DRBD&#8221;</title>
		<link>http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-tre-e-quattro-di-sei-heartbeatcorosync-e-drbd/</link>
		<comments>http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-tre-e-quattro-di-sei-heartbeatcorosync-e-drbd/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 09:34:08 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Corosync]]></category>
		<category><![CDATA[DRBD]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Seminari]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[OpenAIS]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1429</guid>
		<description><![CDATA[Ecco presentate le parti centrali del seminario di miamammausalinux.org, intitolato &#8220;Evoluzione dell&#8217;alta affidabilita&#8217; su Linux&#8221; che si è svolto nella giornata del 24 giugno 2011, presso l&#8217;hotel Holiday Inn di Rho. La terza parte introduce Heartbeat e Corosync, mentre nella quarta si approfondisce l&#8217;argomento DRBD. Parte tre di sei &#8211; Heartbeat e Corosync: *Video: evoluzione [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2008/11/miamammausalinux_avatar.png" alt="" title="miamammausalinux" width="124" height="125" class="alignnone size-full wp-image-761" /></p>
<p>Ecco presentate le parti centrali del seminario di <em>miamammausalinux.org</em>, intitolato &#8220;<strong>Evoluzione dell&#8217;alta affidabilita&#8217; su Linux</strong>&#8221; che si è svolto nella giornata del 24 giugno 2011, presso l&#8217;hotel Holiday Inn di Rho.</p>
<p>La terza parte introduce Heartbeat e Corosync, mentre nella quarta si approfondisce l&#8217;argomento DRBD.</p>
<p>Parte tre di sei &#8211; Heartbeat e Corosync:</p>
<p>
<div >
<div id='hana_flv_flow_3'>*Video:evoluzione dell'alta affidabilita' su linux &#8211; 3 di 6 &#8211; heartbeat e corosync</div>
</div>

<script type='text/javascript'>
    flashembed('hana_flv_flow_3',
      { src:'http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/FlowPlayerDark.swf', wmode: 'transparent', width: 342,  height: 192 },
      { config: { videoFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%203%20di%206%20-%20Heartbeat%20e%20Corosync.flv', autoPlay: false ,loop: false, autoRewind: false, autoBuffering: false,
			splashImageFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%203%20di%206%20-%20Heartbeat%20e%20Corosync.jpg', initialScale: 'scale' 

	    }}
    );
</script></p>
<p>Parte quattro di sei &#8211; DRBD:</p>
<p>
<div >
<div id='hana_flv_flow_4'>*Video:evoluzione dell'alta affidabilita' su linux &#8211; 4 di 6 &#8211; drbd</div>
</div>

<script type='text/javascript'>
    flashembed('hana_flv_flow_4',
      { src:'http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/FlowPlayerDark.swf', wmode: 'transparent', width: 342,  height: 192 },
      { config: { videoFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%204%20di%206%20-%20DRBD.flv', autoPlay: false ,loop: false, autoRewind: false, autoBuffering: false,
			splashImageFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%204%20di%206%20-%20DRBD.jpg', initialScale: 'scale' 

	    }}
    );
</script></p>
<p>Serie completa:</p>
<ul>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-uno-e-due-di-sei-introduzione-e-cluster/" title="Prima parte">video uno e due di sei – “Introduzione” e “Cluster”</a>
</li>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-tre-e-quattro-di-sei-heartbeatcorosync-e-drbd/" title="Seconda parte">video tre e quattro di sei – “Heartbeat/Corosync” e “DRBD”</a>
</li>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/08/seminario-evoluzione-dellalta-affidabilita-su-linux-video-cinque-e-sei-di-sei-il-progetto/" title="Terza parte">video cinque e sei di sei – “Il Progetto”</a>
</li>
</ul>
<p><em>Un ringraziamento particolare a <strong>Lorenzo</strong>, per il preziosissimo supporto video che ci ha permesso di condividere l&#8217;evento con quanti non sono riusciti a partecipare.</em></p>
<p><strong>Buona visione!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-tre-e-quattro-di-sei-heartbeatcorosync-e-drbd/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%203%20di%206%20-%20Heartbeat%20e%20Corosync.flv" length="286582745" type="video/x-flv" />
<enclosure url="http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%204%20di%206%20-%20DRBD.flv" length="220475208" type="video/x-flv" />
		</item>
		<item>
		<title>Seminario &#8220;Evoluzione dell&#8217;alta affidabilita&#8217; su Linux&#8221;: video uno e due di sei &#8211; &#8220;Introduzione&#8221; e &#8220;Cluster&#8221;</title>
		<link>http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-uno-e-due-di-sei-introduzione-e-cluster/</link>
		<comments>http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-uno-e-due-di-sei-introduzione-e-cluster/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 09:58:33 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Corosync]]></category>
		<category><![CDATA[DRBD]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Seminari]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[OpenAIS]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1400</guid>
		<description><![CDATA[Nella giornata del 24 giugno 2011, presso l&#8217;hotel Holiday Inn di Rho si è svolto il primo seminario di miamammausalinux.org, intitolato &#8220;Evoluzione dell&#8217;alta affidabilita&#8217; su Linux&#8220;. Viste le numerose richieste ricevute e rispettando sempre la filosofia alla base del progetto miamammausalinux.org, il video del seminario viene proposto integralmente nelle sue sei parti, insieme alla documentazione [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2008/11/miamammausalinux_avatar.png" alt="" title="miamammausalinux" width="124" height="125" class="alignnone size-full wp-image-761" /></p>
<p>Nella giornata del 24 giugno 2011, presso l&#8217;hotel Holiday Inn di Rho si è svolto il primo seminario di <em>miamammausalinux.org</em>, intitolato &#8220;<strong>Evoluzione dell&#8217;alta affidabilita&#8217; su Linux</strong>&#8220;.</p>
<p>Viste le numerose richieste ricevute e rispettando sempre la filosofia alla base del progetto <strong>miamammausalinux.org</strong>, il video del seminario viene proposto integralmente nelle sue sei parti, insieme alla documentazione fornita ai partecipanti.</p>
<p>Ecco le prime due parti.</p>
<p>Parte uno di sei &#8211; Introduzione:</p>
<p>
<div >
<div id='hana_flv_flow_5'>*Video:evoluzione dell'alta affidabilita' su linux &#8211; 1 di 6 &#8211; introduzione</div>
</div>

<script type='text/javascript'>
    flashembed('hana_flv_flow_5',
      { src:'http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/FlowPlayerDark.swf', wmode: 'transparent', width: 342,  height: 192 },
      { config: { videoFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%201%20di%206%20-%20Introduzione.flv', autoPlay: false ,loop: false, autoRewind: false, autoBuffering: false,
			splashImageFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%201%20di%206%20-%20Introduzione.jpg', initialScale: 'scale' 

	    }}
    );
</script></p>
<p>Parte due di sei &#8211; Cluster:</p>
<p>
<div >
<div id='hana_flv_flow_6'>*Video:evoluzione dell'alta affidabilita' su linux &#8211; 1 di 6 &#8211; cluster</div>
</div>

<script type='text/javascript'>
    flashembed('hana_flv_flow_6',
      { src:'http://www.miamammausalinux.org/wp-content/plugins/hana-flv-player/flowplayer/FlowPlayerDark.swf', wmode: 'transparent', width: 342,  height: 192 },
      { config: { videoFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%202%20di%206%20-%20Cluster.flv', autoPlay: false ,loop: false, autoRewind: false, autoBuffering: false,
			splashImageFile: 'http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%202%20di%206%20-%20Cluster.jpg', initialScale: 'scale' 

	    }}
    );
</script></p>
<p>Ed ecco il link alla documentazione:</p>
<div id="attachment_1420" class="wp-caption alignnone" style="width: 210px"><a href="http://www.miamammausalinux.org/wp-content/uploads/2011/07/Evoluzione-dellalta-affidabilita-su-Linux-Libretti.pdf"><img src="http://www.miamammausalinux.org/wp-content/uploads/2011/07/Evoluzione-dellalta-affidabilita-su-Linux-Copertina.png" alt="Evoluzione dell&#039;alta affidabilita&#039; su Linux - Documentazione" title="Evoluzione dell&#039;alta affidabilita&#039; su Linux - Documentazione" width="200" height="150" class="size-full wp-image-1420" /></a><p class="wp-caption-text">Evoluzione dell&#039;alta affidabilita&#039; su Linux - Documentazione</p></div>
<p>Serie completa:</p>
<ul>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-uno-e-due-di-sei-introduzione-e-cluster/" title="Prima parte">video uno e due di sei – “Introduzione” e “Cluster”</a>
</li>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-tre-e-quattro-di-sei-heartbeatcorosync-e-drbd/" title="Seconda parte">video tre e quattro di sei – “Heartbeat/Corosync” e “DRBD”</a>
</li>
<li>Seminario “Evoluzione dell’alta affidabilita’ su Linux”: <a href="http://www.miamammausalinux.org/2011/08/seminario-evoluzione-dellalta-affidabilita-su-linux-video-cinque-e-sei-di-sei-il-progetto/" title="Terza parte">video cinque e sei di sei – “Il Progetto”</a>
</li>
</ul>
<p><em>Un ringraziamento particolare a <strong>Lorenzo</strong>, per il preziosissimo supporto video che ci ha permesso di condividere l&#8217;evento con quanti non sono riusciti a partecipare.</em></p>
<p><strong>Buona visione!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/07/seminario-evoluzione-dellalta-affidabilita-su-linux-video-uno-e-due-di-sei-introduzione-e-cluster/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
<enclosure url="http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%201%20di%206%20-%20Introduzione.flv" length="49884991" type="video/x-flv" />
<enclosure url="http://www.miamammausalinux.org/wp-content/uploads/videos/20110624%20-%20Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux/Evoluzione%20dell%27alta%20affidabilita%27%20su%20Linux%20-%202%20di%206%20-%20Cluster.flv" length="124588471" type="video/x-flv" />
		</item>
		<item>
		<title>I seminari di Mia Mamma Usa Linux: evoluzione dell&#8217;alta affidabilità su Linux</title>
		<link>http://www.miamammausalinux.org/2011/05/i-seminari-di-mia-mamma-usa-linux-evoluzione-dellalta-affidabilita-su-linux/</link>
		<comments>http://www.miamammausalinux.org/2011/05/i-seminari-di-mia-mamma-usa-linux-evoluzione-dellalta-affidabilita-su-linux/#comments</comments>
		<pubDate>Mon, 16 May 2011 10:36:50 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Corosync]]></category>
		<category><![CDATA[DRBD]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Seminari]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[OpenAIS]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1341</guid>
		<description><![CDATA[MMUL e Linbit, nell&#8217;ambito del progetto &#8220;I seminari di Mia Mamma Usa Linux&#8220;, sono liete di invitarvi all&#8217;evento gratuito: Evoluzione dell&#8217;alta affidabilità su Linux Venerdì 24 Giugno 2011 9:00 &#8211; 17:30 HOLIDAY INN MILAN RHO FAIR Via Alessandro Volta, snc 20017 Rho Milano &#8211; Italy Evoluzione dell&#039;alta affidabilita&#039; su Linux Un seminario gratuito, che nel [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mmul.it">MMUL</a> e <a href="http://www.linbit.com">Linbit</a>, nell&#8217;ambito del progetto &#8220;<em>I seminari di Mia Mamma Usa Linux</em>&#8220;, sono liete di invitarvi all&#8217;evento gratuito:</p>
<p><strong>Evoluzione dell&#8217;alta affidabilità su Linux</strong><br />
<strong><em>Venerdì 24 Giugno 2011</em></strong><br />
<strong><em>9:00 &#8211; 17:30</em></strong><br />
<em>HOLIDAY INN MILAN RHO FAIR<br />
Via Alessandro Volta, snc<br />
20017 Rho Milano &#8211; Italy</em></p>
<div id="attachment_1355" class="wp-caption alignnone" style="width: 590px"><a href="http://www.miamammausalinux.org/2011/05/i-seminari-di-mia-mamma-usa-linux-evoluzione-dellalta-affidabilita-su-linux/"><img src="http://www.miamammausalinux.org/wp-content/uploads/2011/05/MMUL-Evoluzione-dellalta-affidabilita-su-Linux-Locandina.png" alt="Evoluzione dell&#039;alta affidabilita&#039; su Linux" title="MMUL - Evoluzione dell&#039;alta affidabilita&#039; su Linux - Locandina" width="580" height="823" class="size-full wp-image-1355" /></a><p class="wp-caption-text">Evoluzione dell&#039;alta affidabilita&#039; su Linux</p></div>
<p>Un seminario gratuito, che nel corso di una giornata tratterà di <em>Linux</em>, <em>Opensource</em> ed <em>alta affidabilità</em>, affrontando nel dettaglio argomenti quali <em>Heartbeat</em>, <em>Corosync</em> e <em>DRBD</em> per arrivare ad implementare nel laboratorio una soluzione <em>NFS active-active</em> completamente operativa.</p>
<p><strong>L&#8217;evento è <strong>completamente gratuito</strong> e comprende il pranzo offerto da MMUL. I posti sono limitati a venti.</strong></p>
<p>Per iscriversi, compilare il seguente form:</p>
The event have ended - no more registrations are allowed.
<p>Per qualsiasi informazione, chiarimento o problema tecnico, scrivete una mail a <a href="mailto:info@miamammausalinux.org">info@miamammausalinux.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/05/i-seminari-di-mia-mamma-usa-linux-evoluzione-dellalta-affidabilita-su-linux/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Una data storica: è uscita Debian Squeeze!</title>
		<link>http://www.miamammausalinux.org/2011/02/una-data-storica-e-uscita-debian-squeeze/</link>
		<comments>http://www.miamammausalinux.org/2011/02/una-data-storica-e-uscita-debian-squeeze/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 18:14:11 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Notizie]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1264</guid>
		<description><![CDATA[Finalmente, dopo mesi di interminabile attesa, gli sviluppatori del progetto hanno ufficializzato l&#8217;uscita della nuova release del sistema operativo Debian GNU/Linux: Squeeze, la release 6.0. Indicata da molti come la migliore Debian di sempre senza proclami altisonanti è forse il caso di sottolineare come questa release del sistema operativo abbia effettivamente numerose frecce all&#8217;arco, nell&#8217;ambito [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.miamammausalinux.org/wp-content/uploads/2009/03/debian.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/03/debian.png" alt="" title="debian" width="100" height="123" class="size-full wp-image-490" /></a></p>
<p>Finalmente, dopo mesi di interminabile attesa, gli sviluppatori del progetto hanno ufficializzato l&#8217;uscita della nuova release del sistema operativo <strong>Debian GNU/Linux</strong>: <strong>Squeeze</strong>, la release <strong>6.0</strong>.<br />
Indicata da molti come <em>la migliore Debian di sempre</em> senza proclami altisonanti è forse il caso di sottolineare come questa release del sistema operativo abbia effettivamente numerose frecce all&#8217;arco, nell&#8217;ambito Desktop e, soprattutto, nell&#8217;ambito Server.<br />
In particolare tra i software di natura <em>Enterprise</em>, vanno citati:</p>
<p>Sistema:<br />
 * GNU Compiler Collection 4.4.5<br />
 * Linux 2.6.32</p>
<p>Database:<br />
 * PostgreSQL 8.4.6<br />
 * MySQL 5.1.49</p>
<p>Web:<br />
 * Apache 2.2.16<br />
 * OpenJDK 6b18<br />
 * Tomcat 6.0.18</p>
<p>Integrazione:<br />
 * Samba 3.5.6</p>
<p>Monitoring:<br />
 * Nagios 3.2.3</p>
<p>Clustering:<br />
 * Pacemaker 1.0.9<br />
 * Heartbeat 3.0.3<br />
 * Corosync 1.2.1</p>
<p>Virtualizzazione:<br />
 * Xen Hypervisor 4.0.1 (con il supporto per dom0 e per domU)<br />
 * Qemu-KVM 0.12.5<br />
 * libvirt 0.8.3</p>
<p>Come è facile intuire, questa nuova Debian risulta certamente una scelta vincente in ambiti produttivi professionali. Tutte le informazioni su come scaricare, installare ed utilizzare questa nuova Debian sono sul rinnovato sito ufficiale:</p>
<p><a href="http://www.debian.org/distrib/">http://www.debian.org/distrib/</a></p>
<p>Un nuovo importante capitolo è stato quindi aggiunto alla storia dei sistemi operativi!</p>
<p>Buon lavoro a tutti <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/02/una-data-storica-e-uscita-debian-squeeze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evoluzione dell&#8217;alta affidabilità su Linux: creare un cluster Tomcat utilizzando la soluzione nativa, Heartbeat e Pacemaker</title>
		<link>http://www.miamammausalinux.org/2011/01/evoluzione-dellalta-affidabilita-su-linux-creare-un-cluster-tomcat-utilizzando-la-soluzione-nativa-heartbeat-e-pacemaker/</link>
		<comments>http://www.miamammausalinux.org/2011/01/evoluzione-dellalta-affidabilita-su-linux-creare-un-cluster-tomcat-utilizzando-la-soluzione-nativa-heartbeat-e-pacemaker/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 11:31:36 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1241</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tomcat è un Application Server: un contenitore di applicazioni sviluppate attraverso il linguaggio di programmazione Java. Tomcat viene impiegato generalmente per l&#8217;esposizione di web service e questa sua attitudine, in caso di applicazioni critiche per importanza, deve essere obbligatoriamente associata all&#8217;alta affidabilità. Esso nativamente supporta un modello di cluster, che consente a diverse istanze [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2011/01/tomcat.png" alt="" title="tomcat" width="100" height="63" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux-ha.png" alt="" title="linux-ha" width="100" height="100" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/11/pacemaker.png" alt="" title="pacemaker" width="100" height="100" /></p>
<p>Tomcat è un Application Server: un contenitore di applicazioni sviluppate attraverso il linguaggio di programmazione Java. Tomcat viene impiegato generalmente per l&#8217;esposizione di web service e questa sua attitudine, in caso di applicazioni critiche per importanza, deve essere obbligatoriamente associata all&#8217;alta affidabilità. Esso nativamente supporta un modello di cluster, che consente a diverse istanze di condividere le sessioni, in modo da garantire la sopravvivenza del servizio: se quindi un&#8217;istanza smette di funzionare, il suo ruolo viene assunto dall&#8217;istanza sopravvissuta.<br />
Ma chi si occupa del controllo delle istanze stesse?<br />
Questo articolo descrive un caso di studio relativo ad un cluster nativo Tomcat le cui istanze vengono gestite da Heartbeat attraverso il Cluster Resource Manager Pacemaker.</p>
<p><strong>Installazione di Java</strong></p>
<p>Java è essenziale per il funzionamento di Tomcat ed è anche il primo software da configurare per ottenere il risultato prefissato in questo articolo. Per prima cosa quindi sarà necessario scaricare il pacchetto di installazione dal sito ufficiale di SUN presso il link <a href="http://www.java.com/it/download/linux_manual.jsp?locale=it&#038;host=www.java.com">http://www.java.com/it/download/linux_manual.jsp?locale=it&#038;host=www.java.com</a>.<br />
Ottenuto il file <em>jre-6u23-linux-i586.bin</em>, il cui nome potrà variare a seconda della versione, questo va eseguito:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># chmod +x jre-6u23-linux-i586.bin 
# ./jre-6u23-linux-i586.bin</pre></div></div>

<p>L&#8217;esecuzione del file creerà una cartella nominata <em>jre1.6.0_23</em> che sarà possibile spostare in un path consono, ad esempio <em>/usr/local</em>, per il quale potrà essere creato un link simbolico:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># mv jre1.6.0_23 /usr/local
# ln -s /usr/local/jre1.6.0_23 /usr/local/java</pre></div></div>

<p>In questo modo sarà possibile far riferimento al path <em>/usr/local/java</em> per il raggiungimento degli eseguibili java ed inoltre, in caso di installazioni di versioni diverse di Java, basterà cambiare il puntamento del link simbolico.</p>
<p><strong>Installazione di Tomcat</strong></p>
<p>L&#8217;installazione di Tomcat viene descritta in maniera generalista, indipendente quindi dalla distribuzione utilizzata.<br />
Per prima cosa quindi è necessario scaricare l&#8217;ultima versione dell&#8217;application server Tomcat, andando sul sito ufficiale di Tomcat (<a href="http://tomcat.apache.org/download-70.cgi">http://tomcat.apache.org/download-70.cgi</a>) oppure scaricando il pacchetto da uno dei mirror:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># wget http://it.apache.contactlab.it/tomcat/tomcat-7/v7.0.6/bin/apache-tomcat-7.0.6.tar.gz -o /tmp/apache-tomcat-7.0.6.tar.gz</pre></div></div>

<p>una volta terminato lo scaricamento, è possibile decomprimere il pacchetto in un path di sistema, ad esempio (e per convenzione) <em>/usr/local</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># cd /usr/local
# tar -xzvf /tmp/apache-tomcat-7.0.6.tar.gz
# ln -s apache-tomcat-7.0.6 tomcat</pre></div></div>

<p>L&#8217;ultimo comando lanciato crea un link simbolico, in modo che in futuro per accedere alla directory di Tomcat sarà sufficiente utilizzare il percorso <em>/usr/local/tomcat</em>.</p>
<p><strong>Installazione di Heartbeat e Pacemaker</strong></p>
<p>L&#8217;installazione dell&#8217;apparato cluster offerto dal progetto <em>Linux-ha</em> non verrà descritta in questo articolo, in quanto ampiamente trattata nei precedenti articoli della serie, in particolare nella puntata <a href="http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/">confronto pratico tra Heartbeat classico ed Heartbeat con Pacemaker</a>.</p>
<p><strong>Configurazione di Tomcat</strong></p>
<p>La configurazione prevede due fasi: la prima relativa alle credenziali di accesso, la seconda relativa alle impostazioni per il clustering.<br />
All&#8217;interno del file <em>/usr/local/tomcat/conf/tomcat-users.xml</em> sono definite le utenze di accesso alle diverse componenti dell&#8217;application server, in particolare, per permettere all&#8217;utente <em>tomcat</em> di gestire l&#8217;installazione di nuove applicazioni attraverso l&#8217;interfaccia web disponibile, il contenuto del file dovrà essere il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">'1.0'</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">'utf-8'</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tomcat-users<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">rolename</span>=<span style="color: #ff0000;">&quot;manager-gui&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">username</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">&quot;tomcat&quot;</span> <span style="color: #000066;">roles</span>=<span style="color: #ff0000;">&quot;manager,manager-gui,tomcat&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tomcat-users<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Inutile dire come il campo password debba essere modificato in base alla password scelta.<br />
L&#8217;abilitazione del cluster Tomcat, data la natura introduttiva dell&#8217;articolo, verrà fatta nella modalità più semplice, così come illustrato dalla documentazione ufficiale di Tomcat (<a href="http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html">http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html</a>), abilitando cioè la seguente riga all&#8217;interno del file <em>/usr/local/tomcat/conf/server.xml</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Cluster</span> <span style="color: #000066;">className</span>=<span style="color: #ff0000;">&quot;org.apache.catalina.ha.tcp.SimpleTcpCluster&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>La configurazione preliminare dell&#8217;application server è così completa.</p>
<p><strong>Configurazione di Heartbeat e Pacemaker</strong></p>
<p>Appena avviato il demone Heartbeat:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /etc/init.d/heartbeat start</pre></div></div>

<p>è possibile definire le configurazioni preliminari del cluster:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure property stonith-enabled=&quot;false&quot;
# crm configure property no-quorum-policy=&quot;ignore&quot;
# crm configure primitive ping ocf:pacemaker:ping params host_list=&quot;192.168.0.254&quot; name=&quot;ping&quot; op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot; op start timeout=&quot;60s&quot; op stop timeout=&quot;60s&quot;
# crm configure clone ping_clone ping meta globally-unique=&quot;false&quot;</pre></div></div>

<p>Come spiegato nei precedenti articoli queste configurazioni preliminari indicano di non utilizzare <em>stonith</em>, ignorare l’assenza di quorum e creare una risorsa <em>ping</em> che controlli la connettività in entrambi i nodi attraverso il <em>clone</em> della risorsa stessa.<br />
Maggiori informazioni e spiegazioni approfondite si trovano nella <a href="http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/">seconda parte del secondo articolo della serie</a>.<br />
In particolare l&#8217;ultima definizione, ossia la risorsa clonata per il controllo della connettività, favorisce lo spunto per la configurazione della risorsa Tomcat per la quale esiste un resource agent apposito: <a href="http://www.linux-ha.org/doc/re-ra-tomcat.html">http://www.linux-ha.org/doc/re-ra-tomcat.html</a>. Essendo obiettivo del progetto la gestione per mezzo di Pacemaker delle istanze di Tomcat, ed essendo le istanze di Tomcat in tutto e per tutto simili su entrambi nodi, queste potranno essere assimilate ad un&#8217;unica risorsa clonata.<br />
Nel dettaglio, la configurazione sarà la seguente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="console" style="font-family:monospace;">crm configure primitive cluster_tomcat ocf:heartbeat:tomcat params java_home=&quot;/usr/local/java/&quot; catalina_home=&quot;/usr/local/tomcat/&quot; op monitor interval=&quot;60s&quot; timeout=&quot;30s&quot; op start interval=&quot;0&quot; timeout=&quot;60s&quot; op stop interval=&quot;0&quot; timeout=&quot;120s&quot;
crm configure clone cluster_tomcat_clone cluster_tomcat meta globally-unique=&quot;false&quot; target-role=&quot;Started&quot;
crm configure location cluster_tomcat_on_connected_node cluster_tomcat_clone -inf: not_defined ping or ping lte 0</pre></td></tr></table></div>

<p>Nel dettaglio:</p>
<ol>
<li>Viene definita la risorsa <em>cluster_tomcat</em> i cui parametri sono il path in cui è installato Java (<em>java_home</em>) ed il path di tomcat stesso (<em>catalina_home</em>);</li>
<li>La risorsa <em>cluster_tomcat</em> viene clonata dalla nuova risorsa <em>cluster_tomcat_clone</em>. Così come per la risorsa <em>ping_clone</em> che risiederà su ciascun nodo definito, anche questa avrà lo stesso comportamento;</li>
<li>Viene definita una <em>location</em>, ossia un vincolo che obbliga la risorsa clonata a funzionare unicamente sui nodi la cui connettività è comprovata (nodi su cui cioè la risorsa ping esiste e restituisce un risultato positivo);</li>
</ol>
<p>A questo punto, la situazione del cluster dovrebbe essere la seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">============
Last updated: Mon Jan 24 10:17:05 2011
Stack: Heartbeat
Current DC: tomcatcluster-nodo2 (b091eddc-aa64-4d7d-8407-65a7dddafbdf) - partition with quorum
Version: 1.0.10-da7075976b5ff0bee71074385f8fd02f296ec8a3
2 Nodes configured, unknown expected votes
2 Resources configured.
============
&nbsp;
Online: [ tomcatcluster-nodo1 tomcatcluster-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ tomcatcluster-nodo1 tomcatcluster-nodo2 ]
 Clone Set: cluster_tomcat_clone
     Started: [ tomcatcluster-nodo1 tomcatcluster-nodo2 ]</pre></div></div>

<p>Ed entrambe le istanze di Tomcat dovrebbero essersi avviate su ciascun nodo. E&#8217; possibile verificarlo provando ad accedere all&#8217;interfaccia web di amministrazione presente su ciascun nodo:</p>
<p><a href="http://tomcatcluster-nodo1:8080/manager/html">http://tomcatcluster-nodo1:8080/manager/html</a><br />
<a href="http://tomcatcluster-nodo2:8080/manager/html">http://tomcatcluster-nodo2:8080/manager/html</a></p>
<p>Entrambi link dovrebbero essere funzionanti e richiedere uno username con password per accedervi. Una volta inserite le credenziali definite in fase di configurazione di Tomcat, sarà visibile l&#8217;interfaccia di amministrazione delle applicazioni.</p>
<p><strong>Analisi dei log</strong></p>
<p>L&#8217;avvio dei servizi Tomcat da parte del cluster può essere seguito dai file di log dell&#8217;application server stesso, all&#8217;interno dei quali è possibile verificare se il cluster nativo di Tomcat viene attivato correttamente.</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># cat /usr/local/tomcat/logs/catalina.out
...
INFO: Cluster is about to start
...
INFO: Setting cluster mcast soTimeout to 500
...
INFO: Server startup in 3153 ms
...
21-gen-2011 17.05.47 org.apache.catalina.ha.tcp.SimpleTcpCluster memberAdded
INFO: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 0, 1}:4000,{192, 168, 0, 2},4000, alive=1259, securePort=-1, UDP Port=-1, id={101 64 89 59 2 -44 67 123 -73 23 4 -50 -57 105 8 58 }, payload={}, command={}, domain={}, ]
...</pre></div></div>

<p>Il server è avviato e certamente ha considerato la configurazione, includendo l&#8217;host (<em>memberAdded</em>) <em>192.168.0.52</em> nel cluster.</p>
<p><strong>Configurazione applicazione di Test</strong></p>
<p>La configurazione può dirsi completa. E&#8217; possibile quindi installare una semplice applicazione di test per verificare nell&#8217;effettivo il funzionamento delle sessioni condivise. Per fare ciò è sufficiente creare un&#8217;applicazione configurata con il parametro &#8220;<distributable/>&#8221; che indica al cluster di sfruttare la configurazione cluster per la condivisione delle sessioni.<br />
L&#8217;applicazione <em>TestSession</em>, scaricabile dal portale è stata configurata proprio a questo scopo:</p>
<p><a href='http://www.miamammausalinux.org/wp-content/uploads/2011/01/TestSession.war'>TestSession</a></p>
<p>Una volta scaricato il file <em>TestSession.war</em>, attraverso la console Tomcat e su ciascun nodo, sarà possibile installare l&#8217;applicazione nella sezione &#8220;WAR file to deploy&#8221;, selezionando il fie &#8220;war&#8221; scaricato e premendo il tasto &#8220;deploy&#8221;. Se l&#8217;esito sarà &#8220;OK&#8221;, entrambe le applicazioni saranno disponibili attraverso l&#8217;indirizzo:</p>
<p><a href="http://tomcatcluster-nodo1:8080/TestSession">http://tomcatcluster-nodo1:8080/TestSession</a><br />
<a href="http://tomcatcluster-nodo2:8080/TestSession">http://tomcatcluster-nodo2:8080/TestSession</a></p>
<p>E&#8217; possibile dunque avviare i test.</p>
<p><strong>Test di funzionamento</strong></p>
<p>Il principio di funzionamento del cluster è quello di rispondere alle richieste. Generalmente in questo tipo di architettura, gli Application Server risiedono dietro a <em>bilanciatori</em>, cioè apparati hardware o software che distribuiscono il carico attraverso batterie di macchine che offrono servizi.<br />
L&#8217;architettura di test predisposta non prevede l&#8217;utilizzo di un bilanciatore, a per simulare il bilanciamento del carico tra i due host sarà sufficiente inserire nel file <em>/etc/hosts</em> della propria macchina queste due righe:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">192.168.0.1 tomcatcluster
#192.168.0.2 tomcatcluster</pre></div></div>

<p>Come scritto in precedenza quindi, l&#8217;applicazione potrà essere chiamata come segue, senza far riferimento all&#8217;IP:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">http://tomcatcluster:8080/TestSession/</pre></div></div>

<p>Il test funzionerà in modo che chiamato l&#8217;url relativo al quale si passa un parametro, ad esempio:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">http://tomcatcluster:8080/TestSession/session.jsp?aaa=111</pre></div></div>

<p>la pagina visualizzi quanto segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Server info
&nbsp;
    * Name: tomcatcluster-nodo1
    * Address: 192.168.0.1
&nbsp;
Session Attributes
&nbsp;
    * aaa = 111</pre></div></div>

<p>Ovviamente le chiamate successive con parametri differenti aggiungeranno nuovi attributi.<br />
Nella fattispecie, chiamare:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">http://tomcatcluster:8080/TestSession/session.jsp?bbb=222</pre></div></div>

<p>produrrà:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Server info
&nbsp;
    * Name: tomcatcluster-nodo1
    * Address: 192.168.0.1
&nbsp;
Session Attributes
&nbsp;
    * aaa = 111
    * bbb = 222</pre></div></div>

<p>Il test a questo punto è semplicissimo, modificando il file /etc/hosts in modo che appaia come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">#192.168.0.1 tomcatcluster
192.168.0.2 tomcatcluster</pre></div></div>

<p>Di fatto il secondo nodo ora sarà quello attivo. Richiamando nuovamente lo script:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">http://tomcatcluster:8080/TestSession/session.jsp?ccc=333</pre></div></div>

<p>Si otterrà il seguente output:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Server info
&nbsp;
    * Name: tomcatcluster-nodo2
    * Address: 192.168.0.2
&nbsp;
Session Attributes
&nbsp;
    * aaa = 111
    * bbb = 222
    * ccc = 333</pre></div></div>

<p>Da notare come nel Server info ora il nodo sia tomcatcluster-nodo2, mentre i dati di sessione sono stati mantenuti.</p>
<p>Il corretto funzionamento è verificabile anche accedendo singolarmente a ciascun tomcat ai link presenti nella pagina manager nella colonna &#8220;Sessions&#8221;, dove vengono elencate le sessioni, che ovviamente hanno lo stesso codice su entrambi gli Application server.</p>
<p><strong>Conclusioni</strong></p>
<p>Terminata questa carrellata di concetti e test una cosa è chiara: come sempre questo è solo l&#8217;inizio. Sono moltissimi gli ambiti in cui soluzioni come (o simili) a quella presentata possono essere messe in produzione per ottenere infrastrutture stabili, sicure e funzionali. Sempre e comunque altamente affidabili.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2011/01/evoluzione-dellalta-affidabilita-su-linux-creare-un-cluster-tomcat-utilizzando-la-soluzione-nativa-heartbeat-e-pacemaker/feed/</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>Samba: installazione di un fileserver gestito con gruppi di accesso locali</title>
		<link>http://www.miamammausalinux.org/2010/12/samba-installazione-di-un-fileserver-gestito-con-gruppi-di-accesso-locali/</link>
		<comments>http://www.miamammausalinux.org/2010/12/samba-installazione-di-un-fileserver-gestito-con-gruppi-di-accesso-locali/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 16:10:57 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Samba]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1207</guid>
		<description><![CDATA[Questo articolo illustra come ottenere un&#8217;installazione coerente di un fileserver Linux basato su SAMBA, che amministri l&#8217;accesso alle condivisioni attraverso utenti che appartengano a gruppi di sistema, gestiti in una forma riconoscibile. Gli utenti, pur essendo a tutti gli effetti parte del sistema, avranno permessi di accesso unicamente attraverso il protocollo CIFS, gestito dalle macchine [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.miamammausalinux.org/wp-content/uploads/2009/01/samba.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/samba.png" alt="" title="samba" class="alignnone size-full wp-image-196" /></a></p>
<p>Questo articolo illustra come ottenere un&#8217;installazione coerente di un fileserver Linux basato su SAMBA, che amministri l&#8217;accesso alle condivisioni attraverso utenti che appartengano a gruppi di sistema, gestiti in una forma riconoscibile.<br />
Gli utenti, pur essendo a tutti gli effetti parte del sistema, avranno permessi di accesso unicamente attraverso il protocollo CIFS, gestito dalle macchine <em>Microsoft Windows</em>.</p>
<p><strong>Installazione di SAMBA</strong></p>
<p>La procedura descritta fa riferimento al sistema operativo <em>Ubuntu Server 10.4</em>, ed all&#8217;ultima release stabile disponibile in esso per il progetto libero SAMBA, la versione 3.4.7.<br />
L&#8217;installazione per Ubuntu ed i sistemi Debian, può essere effettuata come di consueto:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># apt-get install samba</pre></div></div>

<p>mentre nei sistemi che fanno uso di rpm e di yum il comando sarà invece:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># yum install samba</pre></div></div>

<p>Prima di effettuare qualsiasi operazione è bene salvare il file di configurazione originale di SAMBA:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># cd /etc/samba
# mv smb.conf smb.conf.org</pre></div></div>

<p>nel corso dell&#8217;articolo partiremo da un file completamente vuoto, per sottolineare come sia possibile impostare pochi parametri per essere operativi nel minor tempo possibile.</p>
<p><strong>Configurazione di SAMBA (impostazioni globali)</strong></p>
<p>Le configurazioni descritte fanno hanno come presupposto il fatto che l&#8217;utente con cui si sta operando all&#8217;interno del sistema sia &#8220;root&#8221;. Attraverso l&#8217;editor preferito sarà possibile creare un nuovo file smb.conf:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># sudo su -
# vi /etc/samba/smb.conf</pre></div></div>

<p>All&#8217;interno del quale dovranno essere impostati i seguenti parametri:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">[global]
   security = user
   workgroup = NETWORK.LOCAL
   server string = %h server (Samba, Ubuntu) 
&nbsp;
   wins support = yes 
   dns proxy = no 
&nbsp;
   log file = /var/log/samba/log.%m 
   max log size = 1000 
   syslog = 0 
&nbsp;
   encrypt passwords = true 
   passdb backend = tdbsam
&nbsp;
   directory mask = 2770 
   create mask = 0660</pre></div></div>

<p>Le configurazioni indicano che il server è di tipo <em>standalone</em> (<em>security = user</em>), ossia non collegato a sistemi di autenticazione centralizzati. Il server è parte del gruppo di lavoro “NETWORK.LOCAL” (opzione <em>workgroup</em>, che andrà modificata a seconda delle impostazioni relative propria rete <em>Microsoft Windows</em>) e funzionerà da server WINS (<em>wins support = yes</em>) in modo da gestire la risoluzione dei nomi <em>Microsoft Windows</em> per la rete, ma non controllerà però i nomi effettuando query sul server dns di sistema (<em>dns proxy = no</em>).<br />
Il sistema registrerà un log per ciascuna macchina che si collegherà (<em>log file = /var/log/samba/log.%m</em>), tale log non potrà eccedere un megabyte di grandezza (<em>max log size = 1000</em>). Inoltre nessuna informazione verrà registrata nel file <em>/var/log/syslog</em> (<em>syslog = 0</em>), il file di log generale relativo al sistema. Tutte le informazioni relative all&#8217;esecuzione del demone saranno reperibili all&#8217;interno del file <em>/var/log/samba/log.smbd</em>.<br />
Il sistema di autenticazione cripterà le password (<em>encrypt passwords</em>) ed utilizzerà il backend <em>tdbsam</em> (opzione <em>passdb backend</em>), ossia il database locale.<br />
Le ultime due opzioni indicate definiscono la maschera attraverso la quale verranno create le directory (<em>directory mask = 2770</em>) ed i file (<em>create mask = 0660</em>). Le directory verranno quindi create con permessi di lettura, scrittura ed esecuzione per il proprietario ed il gruppo, mentre per tutti gli altri saranno inaccessibili. I file verranno creati con i medesimi permessi ad eccezione dell&#8217;esecuzione.<br />
Particolarità aggiuntiva della modalità di creazione delle cartelle è quella di possedere il bit <em>setgid</em> (<a href="http://it.wikipedia.org/wiki/Setuid_e_setgid">http://it.wikipedia.org/wiki/Setuid_e_setgid</a>) che impone l&#8217;appartenenza al gruppo della cartella padre per tutti i file e le cartelle create al suo interno. Questo significa che chiunque appartenga al gruppo della cartella padre potrà creare file e cartelle al suo interno, tali file e cartelle apparterranno al gruppo della cartella padre. In questo modo i permessi specifici di accesso per i gruppi definiti nelle cartelle governeranno la totalità degli accessi.</p>
<p><strong>Configurazione di un gruppo</strong></p>
<p>Ciascun gruppo di accesso verrà nominato in questo modo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># groupadd samba_rwx_Amministrazione</pre></div></div>

<p>Il criterio con cui i gruppi vengono creati e nominati è ottenibile scomponendo il nome attraverso i caratteri &#8220;_&#8221; (underscore), dove &#8220;samba&#8221; indica che il gruppo è inerente al servizio samba, &#8220;rwx&#8221; indica il tipo di accesso che può essere appunto &#8220;rwx&#8221; (permessi di lettura e scrittura) o &#8220;rx&#8221; (sola lettura), mentre &#8220;Amministrazione&#8221; indica il nome della condivisione a cui il gruppo si riferisce.</p>
<p><strong>Aggiunta di un&#8217;utenza</strong></p>
<p>Ogni utenza creata nel sistema che farà riferimento al servizio samba, avrà come gruppo primario samba, con identificativo &#8220;999&#8243;, creato con il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># groupadd -g 999 samba</pre></div></div>

<p>In questo modo, la separazione degli ambiti operativi sarà oltre che configurata nel sistema, anche ben visibile.<br />
Per aggiungere un&#8217;utenza al sistema i passi da compiere sono quindi i seguenti:</p>
<ol>
<li>Lanciare il comando:

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># useradd -g samba -s /bin/false -d -c &quot;Utente di test&quot; user1</pre></div></div>

<p>In cui <em>user1</em> rappresenta il nome attraverso il quale l&#8217;utente dovrà accedere alle condivisioni. A <em>user1</em> viene assegnato il gruppo primario &#8220;samba&#8221; (<em>-g samba</em>), una shell di login nulla in modo che non possa mai effettuare il login nel sistema (<em>-s /bin/false</em>) ed una breve descrizione dell&#8217;utenza (<em>-d</em>, generalmente nome e cognome, oppure un indicativo della funzione svolta).
</li>
<li>L&#8217;utente creato va poi aggiunto al database locale SAMBA, attraverso questo comando:

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># smbpasswd -a user1</pre></div></div>

<p>indicando per due volte la password scelta, che può essere anche omessa nel caso in cui lo si decida (è sempre consigliabile inserirne una).
</li>
<li>L&#8217;utente va quindi aggiunto ad uno dei gruppi disponibili. Aggiungere utenti al gruppo è possibile con il seguente comando:

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># adduser user1 samba_rwx_Amministrazione</pre></div></div>

</li>
</ol>
<p>Per controllare quali utenti appartengono al gruppo è sufficiente digitare il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># cat /etc/group | grep &quot;samba_rwx_Amministrazione&quot;
samba_rwx_Amministrazione:user1,user2,user3</pre></div></div>

<p>Mentre per controllare un singolo utente a quali gruppi appartiene, il comando sarà invece:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># groups user1
user1 : samba samba_rwx_Amministrazione</pre></div></div>

<p><strong>Aggiunta di una condivisione</strong></p>
<p>Ciascuna condivisione fa riferimento ad un path locale, nel caso descritto viene creata una cartella /share:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># mkdir /share</pre></div></div>

<p> al di sotto della quale tutte le cartelle condivise verranno create:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="console" style="font-family:monospace;"># mkdir /share/Amministrazione
# chgrp samba_rwx_Amministrazione /share/Amministrazione
# chmod 2770 /share/Amministrazione</pre></td></tr></table></div>

<p>Queste operazioni andranno eseguite per ciascuna nuova condivisione creata e si riassumono come segue:</p>
<ol>
<li>Creazione effettiva della cartella;</li>
<li>Assegnazione della cartella al gruppo creato;</li>
<li>Impostazione del permesso <em>setgid</em> (vedi sopra) ricorsivo sulla cartella appena creata;</li>
</ol>
<p>Le condivisioni verranno definite nel file di configurazione <em>smb.conf</em> in coda alle dichiarazioni globali, in un formato simile al seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">[Amministrazione] 
comment = Amministrazione 
read only = no 
write list = @samba_rwx_Amministrazione
read list = 
path = /share/Amministrazione</pre></div></div>

<p>Il codice illustrato definisce una condivisione denominata “Amministrazione” a cui possono accedere in scrittura nella directory “/share/Amministrazione” unicamente gli utenti appartenenti al gruppo “samba_rwx_Amministrazione”.</p>
<p>Pertanto, per aggiungere una condivisione sarà quindi sufficiente eseguire la creazione e l&#8217;assegnazione dei permessi come descritto sopra ed inserire all&#8217;interno del file <em>/etc/samba/smb.conf</em> una dichiarazione seguendo il modello indicato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">[&lt;NOMECONDIVISIONE&gt;] 
comment = &lt;Descrizione condivisione&gt;
read only = no 
write list = @&lt;gruppo con permessi di scrittura&gt;
read list = @&lt;gruppo con permessi di lettura&gt;
path = &lt;path della condivisione&gt;</pre></div></div>

<p>Nel caso l&#8217;accesso venga deciso unicamente in lettura o unicamente in scrittura, è possibile omettere le righe relative (write list o read list) dalla dichiarazione.</p>
<p><strong>Attivazione delle configurazioni</strong></p>
<p>Per applicare le nuove configurazioni, il servizio SAMBA necessita di essere ricaricato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># service smbd reload</pre></div></div>

<p>Da questo momento in poi sarà possibile utilizzare una qualsiasi macchina Microsoft Windows per testare l&#8217;effettivo successo delle configurazioni impostate.</p>
<p><strong>Note</strong></p>
<p>Quanto descritto consente di configurare SAMBA affinché possa interagire con client o server <em>Microsoft Windows</em> come se fosse un file e print server <em>Microsoft</em>.<br />
E&#8217; possibile variare le configurazioni in modo che SAMBA agisca da Primary Domain Controller (PDC), Backup Domain Controller o prendere parte ad un dominio Active Directory.<br />
Sul portale tecnico sono disponibili diversi articoli che approfondiscono questi argomenti:</p>
<p>Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (<a href="http://www.miamammausalinux.org/2008/01/realizzare-un-primary-domain-controller-con-samba-openldap-e-smbldap-tools-1-di-6/">1 di 6</a>)<br />
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (<a href="http://www.miamammausalinux.org/2008/01/realizzare-un-primary-domain-controller-con-samba-openldap-e-smbldap-tools-2-di-6/">2 di 6</a>)<br />
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (<a href="http://www.miamammausalinux.org/2008/01/realizzare-un-primary-domain-controller-con-samba-openldap-e-smbldap-tools-3-di-6/">3 di 6</a>)<br />
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (<a href="http://www.miamammausalinux.org/2008/01/realizzare-un-primary-domain-controller-con-samba-openldap-e-smbldap-tools-4-di-6/">4 di 6</a>)<br />
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (<a href="http://www.miamammausalinux.org/2008/01/realizzare-un-primary-domain-controller-con-samba-openldap-e-smbldap-tools-5-di-6/">5 di 6</a>)<br />
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (<a href="http://www.miamammausalinux.org/2008/02/realizzare-un-primary-domain-controller-con-samba-openldap-e-smbldap-tools-6-di-6/">6 di 6</a>)</p>
<p>Samba e Active Directory (1 di 3): <a href="http://www.miamammausalinux.org/2009/04/samba-e-active-directory-1-di-3-diventare-parte-di-un-dominio/">diventare parte di un Dominio</a><br />
Samba e Active Directory (2 di 3): <a href="http://www.miamammausalinux.org/2009/05/samba-e-active-directory-2-di-3-interrogare-il-dominio/">interrogare il dominio</a><br />
Samba e Active Directory (3 di 3): <a href="http://www.miamammausalinux.org/2009/05/samba-e-active-directory-3-di-3-configurare-pam-per-lautenticazione-locale/">configurare pam per l&#8217;autenticazione locale</a></p>
<p>In attesa quindi di saggiare le meraviglie dell&#8217;annunciato SAMBA 4, che conterrà un motore interno volto ad eguagliare l&#8217;efficienza e la funzionalità di <em>Microsoft Active Directory</em>, è chiaro come sia già possibile adottare SAMBA in ambiti produttivi di svariato genere, con successo, e senza costi di licenza.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2010/12/samba-installazione-di-un-fileserver-gestito-con-gruppi-di-accesso-locali/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Evoluzione dell’alta affidabilità su Linux: realizzare un NAS con Pacemaker, DRBD ed exportfs</title>
		<link>http://www.miamammausalinux.org/2010/09/evoluzione-dellalta-affidabilita-su-linux-realizzare-un-nas-con-pacemaker-drbd-ed-exportfs/</link>
		<comments>http://www.miamammausalinux.org/2010/09/evoluzione-dellalta-affidabilita-su-linux-realizzare-un-nas-con-pacemaker-drbd-ed-exportfs/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 19:40:13 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[DRBD]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[NFS]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=1128</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Nel precedente articolo è stato effettuato un confronto tra le tipologie possibili di utilizzo relativo ad Heartbeat, nella modalità classica ed in quella mediante CRM (Cluster Resource Manager) per l&#8217;erogazione in alta affidabilità del servizio Apache. In quest&#8217;ultimo articolo verrà proposto un vero case study relativo alla configurazione di un cluster erogante uno storage [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux-ha.png" alt="linux-ha" title="linux-ha" width="100" height="100" class="alignnone size-full wp-image-259" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/11/pacemaker.png" alt="Pacemaker" title="pacemaker" width="100" height="100" class="size-full wp-image-872" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2010/09/drbd.png" alt="" title="drbd" width="100" height="100" class="alignnone size-full wp-image-1190" /></p>
<p>Nel precedente articolo è stato effettuato un confronto tra le tipologie possibili di utilizzo relativo ad Heartbeat, nella modalità classica ed in quella mediante <em>CRM</em> (<em>Cluster Resource Manager</em>) per l&#8217;erogazione in alta affidabilità del servizio <em>Apache</em>.<br />
In quest&#8217;ultimo articolo verrà proposto un vero case study relativo alla configurazione di un cluster erogante uno <em>storage</em> NFS in alta affidabilità i cui dati verranno ridondati via <em>DRBD</em> (<em>Network Raid 1</em>), mediante la configurazione di <em>Pacemaker</em>.<br />
Peculiarità del progetto sarà l&#8217;utilizzo per l&#8217;erogazione delle directory NFS di entrambi i nodi, in modo da sfruttare tutte le macchine presenti, per un cluster di tipo <em>active-active</em>.</p>
<p><strong>Il progetto</strong></p>
<p>Quanto si propone di realizzare è un sistema in alta affidabilità che consenta di impiegare tutte le macchine presenti all&#8217;interno del cluster per rendere disponibile spazio all&#8217;interno di una rete. In altre parole, un <em>Network Attached Storage</em> (<em>NAS</em>), un&#8217;entità composta da due macchine collegate alla rete che consentano a dei client di montare le partizioni e fruire dello spazio reso disponibile.<br />
Le componenti impiegate all&#8217;interno del progetto saranno:</p>
<ol>
<li><em>Heartbeat e Pacemaker</em>: per la gestione del cluster;</li>
<li><em>DRBD</em>: per la replica dei dati fra le due macchine attraverso un <em>network raid 1</em>;</li>
<li><em>NFS</em>: per la condivisione attraverso la rete dello spazio;</li>
</ol>
<p>Il progetto si rifà nelle sue fondamenta a quanto illustrato nella <a href="http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/">seconda parte del precedente articolo</a> e, se non lo si è ancora fatto, è bene dare una rapida lettura in modo da poter applicare i concetti lì illustrati senza perplessità.<br />
Il cluster verrà costruito su due sistemi (<em>debian-lenny-nodo1</em> e <em>debian-lenny-nodo2</em>) collegati ciascuno alla rete locale (<em>192.168.1.0/24</em>) e l’uno all&#8217;altro da un cavo cross (<em>10.0.0.0/24</em>, connessione necessaria per realizzare <em>il network raid 1</em> con <em>DRBD</em>), lo spazio locale verrà esportato attraverso il protocollo <em>NFS</em>. In particolare verranno definite due condivisioni distinte, corrispondenti a due cartelle locali chiamate <em>/share-a</em> e <em>/share-b</em>.<br />
Obiettivo ultimo è quello di ottenere ciascuna condivisione esportata da un nodo, in modo da avere (a regime ed in condizioni ottimali) un cluster in cui nessun nodo risulti passivo.<br />
Unico requisito richiesto sui nodi è la presenza dei pacchetti <em>heartbeat</em> e <em>pacemaker</em> (la cui installazione è descritta nell&#8217;articolo precedente) e del demone <em>NFS</em>. Nei sistemi Debian ed Ubuntu sarà quindi necessario installare il pacchetto <em>nfs-kernel-server</em> mentre in RedHat/SuSe il pacchetto sarà <em>nfs</em>.</p>
<p><strong>La gestione locale dei dati: device, md, LVM o tutti e tre?</strong></p>
<p>Prima di iniziare a configurare il cluster è bene decidere come verranno gestiti sulle macchine i dati che andranno esposti. Questa scelta, la più delicata poiché intacca direttamente le performance, va fatta sulla base dell&#8217;hardware disponibile, partendo da tre ambiti operativi:</p>
<ul>
<li><em>device</em>: partizioni fisiche (ad esempio /dev/sda3, /dev/sda4 e via dicendo);</li>
<li><em>md (Multiple Disk)</em>: gestione locale dei raid, i dati sono ridondati sulle singole macchine (oltre che in rete);</li>
<li><em>LVM (Logical Volume Manager)</em>: volumi logici, per una gestire più elastica dello spazio locale;</li>
</ul>
<p>Partendo dal presupposto che l&#8217;utilizzo dei <em>device</em> è indispensabile (visto che si sta parlando di dischi locali), scegliere se configurare raid locali o <em>LVM</em> dipende da quanto si dispone.<br />
Se le macchine utilizzate possiedono una <a href="http://it.wikipedia.org/wiki/RAID#Hardware_o_software">controller RAID hardware</a>, allora si potrà evitare di configurare i dispositivi <em>md</em>, così come se si ritiene la ridondanza locale superflua (del resto i dati verranno comunque ridondati in rete).<br />
Se il sistema necessiterà di frequenti variazioni in termini di spazio sulle partizioni esposte sarà doveroso impiegare volumi logici in modo da gestire con facilità operazioni di ridimensionamento. Inoltre la gestione dei volumi logici potrebbe essere preferita dai più, proprio per la semplicità con cui è possibile apportare variazioni allo spazio disponibile, soprattutto in situazioni complesse.<br />
Lampante è come più livelli di complessità si aggiungono, maggiore sarà il carico che graverà sul sistema operativo e maggiore dovrà essere la capacità di gestire eventuali malfunzionamenti.<br />
Come sempre quindi, la libertà di scelta è totale e dipende unicamente dell&#8217;utente.<br />
Nel caso illustrato la scelta è caduta sull&#8217;impiego di LVM su due partizioni (/dev/sda3 e /dev/sdb3), in quanto le macchine su cui la soluzione viene implementata possiedono una <em>controller RAID</em> integrata che si occupa di ridondare i due dischi disponibili.<br />
Su entrambe le macchine sono stati definiti due <em>Physical Volume</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># pvcreate /dev/sd[ab]3</pre></div></div>

<p>Ai quali è stato associato un <em>Volume Group</em> denominato <em>vg_share</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># vgcreate vg_share /dev/sd[ab]3</pre></div></div>

<p>Ed infine sono stati creati due <em>Logical Volume</em>, denominati <em>lv_drbd0</em> ed <em>lv_drbd1</em>, i quali rappresenteranno le due condivisioni relative ai device drbd che verranno in seguito creati:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># lvcreate -n lv_drbd0 -L 1G vg_share
# lvcreate -n lv_drbd1 -L 1G vg_share</pre></div></div>

<p>l&#8217;opzione &#8220;-L&#8221; definisce lo spazio massimo occupabile dal volume logico, chiaramente essendo un progetto con fini puramente didattici lo spazio è stato ridotto per facilitare e velocizzare le operazioni di creazione ed aggiornamento.<br />
All&#8217;interno della cartella /dev/mapper/ saranno quindi visibili i seguenti file:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># ls -la /dev/mapper/
totale 0
drwxr-xr-x  2 root root     100 2010-09-14 12:15 .
drwxr-xr-x 17 root root    3700 2010-09-14 12:15 ..
crw-rw----  1 root root  10, 59 2010-09-14 12:15 control
brw-rw----  1 root disk 251,  0 2010-09-14 12:15 vg_share-lv_drbd0
brw-rw----  1 root disk 251,  1 2010-09-14 12:15 vg_share-lv_drbd1</pre></div></div>

<p>a dimostrazione che i volumi logici sono pronti ad essere utilizzati.</p>
<p><strong>Configurazione preliminare di Heartbeat</strong></p>
<p>La configurazione preliminare di Heartbeat si rifà totalmente a quanto illustrato nel <a href="http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/">precedente articolo</a> al paragrafo &#8220;Configurazione di Heartbeat in modalità CRM con Pacemaker&#8221;:</p>
<p><em>/etc/ha.d/ha.cf</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">autojoin none
keepalive 1
deadtime 10
warntime 5
initdead 20
mcast eth0 239.0.0.43 694 1 0
bcast eth1
node    debian-lenny-nodo1
node    debian-lenny-nodo2
crm respawn</pre></div></div>

<p><em>/etc/ha.d/authkeys</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">auth 1
1 crc</pre></div></div>

<p>Quindi una volta avviato Heartbeat:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /etc/init.d/heartbeat start</pre></div></div>

<p>è possibile definire le configurazioni preliminari del cluster:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure property stonith-enabled=&quot;false&quot;
# crm configure property no-quorum-policy=&quot;ignore&quot;
# crm configure primitive ping ocf:pacemaker:ping params host_list=&quot;192.168.1.1&quot; name=&quot;ping&quot; op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot; op start timeout=&quot;60s&quot; op stop timeout=&quot;60s&quot;
# crm configure clone ping_clone ping meta globally-unique=&quot;false&quot;</pre></div></div>

<p>In breve viene disabilitato lo <em>stonith</em>, viene imposto al cluster di ignorare l&#8217;assenza di <em>quorum</em> e viene definita una risorsa <em>ping</em> che controlla la connettività in entrambi i nodi attraverso il <em>clone</em> della risorsa stessa.<br />
La situazione del cluster viene così riassunta:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm status
============
Last updated: Tue Sep 14 12:17:29 2010
Stack: Heartbeat
Current DC: debian-lenny-nodo1 (1627f3ec-ec7e-4f0c-b69e-e9729933a2cc) - partition with quorum
Version: 1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd
2 Nodes configured, unknown expected votes
1 Resources configured.
============
&nbsp;
Online: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ debian-lenny-nodo1 debian-lenny-nodo2 ]</pre></div></div>

<p>Per qualsiasi dubbio in merito alle configurazioni sopra riportate, come già detto, è bene far riferimento al <a href="http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/">precedente articolo</a>.</p>
<p><strong>Configurazione preliminare di DRBD</strong></p>
<p>In questa fase del progetto è necessario configurare i due volumi logici creati in precedenza affinché possano essere utilizzati con DRBD. Per prima cosa il sistema deve essere predisposto per supportare DRBD, il che significa che vanno installati i pacchetti relativi al <em>modulo</em> che verrà inserito all&#8217;interno del <em>kernel</em>. Come sempre tutto dipende dalla distribuzione che si sta utilizzando, nel caso illustrato Debian offre il meta pacchetto <em>drbd8-modules-2.6-686</em> che si occupa di installare la corretta versione associata al kernel utilizzato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">apt-get install drbd8-modules-2.6-686 drbd8-utils</pre></div></div>

<p>Con Ubuntu è sufficiente installare il pacchetto <em>drbd8-utils</em> che risolverà le dipendenze ed installerà il modulo, stesso dicasi per SuSe, mentre per RedHat è necessario utilizzare i pacchetti Extra di CentOS.<br />
Maggiori informazioni sulle versioni disponibili sono qui: <a href="http://www.drbd.org/download/packages/">http://www.drbd.org/download/packages/</a>.</p>
<p>Installato il modulo, per configurare i due volumi logici i passi da seguire sono semplicissimi. In prima istanza va modificato il file /etc/drbd.conf come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">global { usage-count no; }
&nbsp;
common { protocol C; syncer { rate 100M; } }
&nbsp;
resource r0 {
        device /dev/drbd0;
        meta-disk internal;
        disk /dev/mapper/vg_share-lv_drbd0;
&nbsp;
        on debian-lenny-nodo1 {
                address 10.0.0.1:7788;
        }
&nbsp;
        on debian-lenny-nodo2 {
                address 10.0.0.2:7788;
        }
}
&nbsp;
resource r1 {
        device /dev/drbd1;
        meta-disk internal;
        disk /dev/mapper/vg_share-lv_drbd1;
&nbsp;
        on debian-lenny-nodo1 {
                address 10.0.0.1:7789;
        }
&nbsp;
        on debian-lenny-nodo2 {
                address 10.0.0.2:7789;
        }
}</pre></div></div>

<p>Le dichiarazioni presenti nel file sono auto esplicative: Il tipo di algoritmo con cui verrà gestita la sincronizzazione è C (replicazione sincrona, standard, <a href="http://www.drbd.org/users-guide/s-replication-protocols.html">qui i dettagli sui diversi protocolli disponibili</a>), mentre la velocità a cui i dati verranno sincronizzati è 100 Mega (<a href="http://www.drbd.org/users-guide/s-resync.html">qui come calcolare la corretta velocità di sincronizzazione</a>).<br />
sono state definite due risorse (<em>resource</em>) che poggeranno su volumi logici interni (<em>disk</em>) e registreranno i meta-dati relativi alla sincronizzazione internamente (<em>meta-disk</em>), ciascuna risorsa farà viaggiare le informazioni per la sincronizzazione sull&#8217;interfaccia locale relativa alla rete 10.0.0.0 (<em>address</em>) ad una porta differente (<em>7788</em> e <em>7789</em>).</p>
<p>A questo punto i volumi logici vanno inizializzati in modo che il sistema possa iniziare a servirsi dei device. Le operazioni da compiere in sequenza, su entrambi i nodi, sono le seguenti:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="console" style="font-family:monospace;"># modprobe drbd
# drbdadm create-md r0
# drbdadm create-md r1
# drbdadm up r0
# drbdadm up r1</pre></td></tr></table></div>

<p>Linea per linea, ecco quanto fatto:</p>
<ol>
<li>Caricamento del modulo drbd: il sistema è in grado di supportare dispositivi drbd;</li>
<li>Creazione del <em>meta-device</em> sopra il volume logico r0, così come dichiarato nel file di configurazione, il volume /dev/mapper/vg_share-lv_drbd0 viene inizializzato;</li>
<li>Creazione del <em>meta-device</em> sopra il volume logico r1, così come dichiarato nel file di configurazione, il volume /dev/mapper/vg_share-lv_drbd1 viene inizializzato;</li>
<li>Attivazione del <em>meta-device</em>, da questo momento il sistema &#8220;vede&#8221; /dev/drbd0;</li>
<li>Attivazione del <em>meta-device</em>, da questo momento il sistema &#8220;vede&#8221; /dev/drbd1;</li>
</ol>
<p>Come ultima fase per l&#8217;inizializzazione dei dispositivi è necessario effettuare la prima sincronizzazione in modo che i volumi remoti vengano allineati. Per far ciò è necessario lanciare il seguente comando su uno solo dei due nodi:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># drbdadm -- --overwrite-data-of-peer primary all</pre></div></div>

<p>Il comando forza lo stato primario del nodo su cui è stato lanciato ed avvia nel contempo la prima sincronizzazione, al termine della quale lo stato dei meta-device drbd sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># cat /proc/drbd 
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@debian-lenny-nodo1, 2010-09-13 18:03:02
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
 1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0</pre></div></div>

<p>Per concludere la configurazione preliminare di drbd andrà creato un filesystem su ciascuno dei device creati:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># mkfs.ext3 /dev/drbd0
# mkfs.ext3 /dev/drbd1</pre></div></div>

<p>E rimosso l&#8217;avvio automatico del demone dal sistema, poiché questo verrà gestito totalmente dal cluster. Per Debian ed Ubuntu il comando da lanciare sarà:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># update-rc.d -f drbd remove</pre></div></div>

<p>mentre nel caso di RedHat/CentOS/SuSe:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># chkconfig --level 123456 drbd off</pre></div></div>

<p>E&#8217; giunto il momento di configurare lo storage condiviso.</p>
<p><strong>Configurazione di Heartbeat e DRBD</strong></p>
<p>Prima implementare l&#8217;esposizione dello spazio che abbiamo creato via NFS è necessario configurare il cluster affinché gestisca i dispositivi DRBD e ne amministri lo stato. Come stabilito in precedenza infatti, il controllo di tali componenti sarà totalmente nelle mani del cluster e non del sistema operativo. In altre parole i due componenti DRBD non saranno gestiti come demoni, ma come due risorse distinte.<br />
DRBD, rispetto a quanto illustrato sinora, non è una risorsa standard: non è assimilabile infatti alle risorse comuni poiché necessità di risiedere su (almeno) due nodi, questa peculiarità però non permette comunque di creare un clone della risorsa da ripartire sulle altre macchine, poiché in ciascuno dei nodi su cui essa sarà attiva questa dovrà assumere uno stato differente.<br />
Per questa ragione, dopo aver definito le risorse standard associate ai dispositivi DRBD in precedenza creati (r0 ed r1):</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure primitive drbd0 ocf:linbit:drbd params drbd_resource=&quot;r0&quot; op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; op start interval=&quot;0&quot; timeout=&quot;240s&quot; op stop interval=&quot;0&quot; timeout=&quot;100s&quot;
# crm configure primitive drbd1 ocf:linbit:drbd params drbd_resource=&quot;r1&quot; op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; op start interval=&quot;0&quot; timeout=&quot;240s&quot; op stop interval=&quot;0&quot; timeout=&quot;100s&quot;</pre></div></div>

<p> è necessario configurare due risorse <em>multi-state</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure ms ms-drbd0 drbd0 meta master-max=&quot;1&quot; notify=&quot;true&quot;
# crm configure ms ms-drbd1 drbd1 meta master-max=&quot;1&quot; notify=&quot;true&quot;</pre></div></div>

<p>I due comandi, ciascuno relativo ad una risorsa DRBD, definiscono una risorsa <em>multi-state</em> che può avere un solo nodo master (<em>master-max</em>) il quale una volta assunto il proprio stato (master o slave che sia) deve notificare il successo agli altri nodi (<em>notify</em>), in modo che la risorsa sia in uno stato coerente su entrambi i nodi.<br />
Dopo qualche secondo sarà possibile osservare all&#8217;interno dello stato del cluster quanto realizzato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">============
Last updated: Wed Sep 15 20:16:44 2010
Stack: Heartbeat
Current DC: debian-lenny-nodo1 (1627f3ec-ec7e-4f0c-b69e-e9729933a2cc) - partition with quorum
Version: 1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd
2 Nodes configured, unknown expected votes
3 Resources configured.
============
&nbsp;
Online: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
 Master/Slave Set: ms-drbd0
     Masters: [ debian-lenny-nodo1 ]
     Slaves: [ debian-lenny-nodo2 ]
 Master/Slave Set: ms-drbd1
     Masters: [ debian-lenny-nodo1 ]
     Slaves: [ debian-lenny-nodo2 ]</pre></div></div>

<p>Come si evince dall&#8217;output mostrato il nodo master per entrambe le risorse è <em>debian-lenny-nodo1</em>.</p>
<p>Ora che il cluster controlla i dispositivi è necessario esporli. Per fare ciò sono necessarie tre componenti:</p>
<ol>
<li>Indirizzo IP: ossia l&#8217;indirizzo di riferimento per l&#8217;intera rete a quela specifica condivisione;</li>
<li>Filesystem: ovvero il <em>mount</em> del filesystem relativo alla risorsa DRBD in modo che ci si possa scrivere sopra;</li>
<li>NFS: in modo da esporre la condivisione con il protocollo NFS e permettere il mount da parte di client di rete;</li>
</ol>
<p>Esisteranno quindi due gruppi di risorse contenenti le tre risorse descritte, tali gruppi verranno nominati come le cartelle che dovranno esporre, così come definito in fase di studio del progetto: <em>share-a</em> e <em>share-b</em>.</p>
<p><em>Indirizzo IP</em></p>
<p>La configurazione degli indirizzi IP è identica a quanto illustrato nel precedente articolo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure primitive share-a-ip ocf:heartbeat:IPaddr2 params ip=&quot;192.168.1.33&quot; nic=&quot;eth0&quot; op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot;
# crm configure primitive share-b-ip ocf:heartbeat:IPaddr2 params ip=&quot;192.168.1.34&quot; nic=&quot;eth0&quot; op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot;</pre></div></div>

<p>al gruppo che eroga <em>share-a</em> pertanto verrà associato l&#8217;indirizzo 192.168.1.33 mentre a <em>share-b</em> 192.168.1.34, entrambe le risorse sono gestite dal il <em>resource agent IPAddr2</em>.</p>
<p><em>Filesystem</em></p>
<p>Il dispositivo <em>/dev/drbd0</em> verrà associato a <em>share-a</em> ed alla directory <em>/share-a</em>, così come <em>share-b</em> monterà <em>/dev/drbd1</em> sulla directory <em>/share-b</em>.<br />
Andranno quindi create le directory per i mount su entrambi i nodi:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># mkdir /share-a
# mkdir /share-b</pre></div></div>

<p>Ed infine configurate le risorse attraverso il <em>resource agent Filesystem</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure primitive share-a-fs ocf:heartbeat:Filesystem params device=&quot;/dev/drbd0&quot; directory=&quot;/share-a&quot; fstype=&quot;ext3&quot; op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; op start interval=&quot;0&quot; timeout=&quot;60s&quot; op stop interval=&quot;0&quot; timeout=&quot;60s&quot; meta is-managed=&quot;true&quot; 
# crm configure primitive share-b-fs ocf:heartbeat:Filesystem params device=&quot;/dev/drbd1&quot; directory=&quot;/share-b&quot; fstype=&quot;ext3&quot; op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; op start interval=&quot;0&quot; timeout=&quot;60s&quot; op stop interval=&quot;0&quot; timeout=&quot;60s&quot; meta is-managed=&quot;true&quot;</pre></div></div>

<p><em>NFS</em></p>
<p>Per permettere l&#8217;esportazione di ciascuna share in maniera indipendente, fermo restando che su ogni sistema il demone NFS deve essere in esecuzione, è possibile utilizzare un <em>resource agent</em> denominato <em>exportfs</em>.<br />
Questo <em>resource agent</em> creato da <em>Holger Teutsch</em>, potrebbe non essere disponibile se non si possiede una versione recente di Heartbeat (successiva al marzo 2010). In questo caso il problema è facilmente risolvibile installando il resource agent su entrambi i nodi come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># cd /usr/lib/ocf/resource.d/heartbeat/
# wget http://hg.linux-ha.org/agents/raw-file/c8d8b1126ffd/heartbeat/exportfs
# chmod +x exportfs</pre></div></div>

<p>In questo modo sarà possibile dichiarare due risorse exportfs affinché espongano le due cartelle:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure primitive share-a-exportfs ocf:heartbeat:exportfs params directory=&quot;/share-a&quot; clientspec=&quot;192.168.1.0/24&quot; options=&quot;rw,async,no_subtree_check,no_root_squash&quot; fsid=&quot;1&quot; op monitor interval=&quot;10s&quot; timeout=&quot;30s&quot; op start interval=&quot;0&quot; timeout=&quot;40s&quot; op stop interval=&quot;0&quot; timeout=&quot;40s&quot;
# crm configure primitive share-b-exportfs ocf:heartbeat:exportfs params directory=&quot;/share-b&quot; clientspec=&quot;192.168.1.0/24&quot; options=&quot;rw,async,no_subtree_check,no_root_squash&quot; fsid=&quot;2&quot; op monitor interval=&quot;10s&quot; timeout=&quot;30s&quot; op start interval=&quot;0&quot; timeout=&quot;40s&quot; op stop interval=&quot;0&quot; timeout=&quot;40s&quot;</pre></div></div>

<p>Il <em>resource agent exportfs</em> si occupa di aggiornare in tempo reale lo stato delle export NFS di sistema, utilizzando appunto il comando <em>exportfs</em>.<br />
Come è facile notare la dichiarazione del resource agent si rifà totalmente alla sintassi del comando exportfs, o più semplicemente al contenuto del file <em>/etc/exports</em> (ossia il file di configurazione di NFS), in particolare:</p>
<ul>
<li><em>directory</em> definisce la directory locale che verrà esportata;</li>
<li><em>client_spec</em> definisce quali client potranno accedere alla condivisione;</li>
<li><em>options</em> contiene le opzioni di esportazione: lettura/scrittura (<em>rw</em>), l&#8217;allineamento del filesystem sarà asincrono (<em>async</em>) e tutto il volume verrà esportato senza controllo alle sotto directory (<em>no_subtree_check</em>), infine sarà possibile per l&#8217;utente root del client remoto avere privilegi di root sulla condivisione (no_root_squash);</li>
<li><em>fsid</em> definisce un identificatore univoco per la condivisione;</li>
</ul>
<p><em>Raggruppare le risorse create</em></p>
<p>Ora che è terminata la creazione delle risorse, è facile notare come queste abbiano nomi riconducibili al loro utilizzo, ma  siano in realtà slegate le une dalle altre. Necessitano quindi, per una corretta gestione, di essere raggruppate. Pacemaker permette di creare quindi gruppi di risorse, la cui definizione sequenziale stabilisce anche l&#8217;ordine con cui le risorse verranno avviate:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure group share-a share-a-fs share-a-exportfs share-a-ip
# crm configure group share-b share-b-fs share-b-exportfs share-b-ip</pre></div></div>

<p>Sono stati quindi definiti due gruppi <em>share-a</em> e <em>share-b</em> che avvieranno innanzitutto il filesystem, seguito dall&#8217;export dello stesso via NFS ed infine l&#8217;indirizzo IP. Chiaramente in fase di stop l&#8217;ordine sarà logicamente invertito, garantendo in caso di disservizi ai client remoti in prima istanza di perdere connettività con il server (i client non rilevando più l&#8217;indirizzo del server tratterranno le connessioni esistenti in stato di attesa, <em>TIME_WAIT</em>) e, una volta che le risorse saranno ripristinate sul nodo attivo, di continuare a scrivere senza alcuna perdita di dati.</p>
<p><em>Collocazione, ordinamento e controllo connettività delle risorse</em></p>
<p>La configurazione del cluster non è però ancora completa. Le risorse <em>drbd</em> ed i gruppi <em>share</em> al momento non sono correlati. Infatti per come è stato configurato il sistema su un nodo potrebbe avviarsi <em>share-a</em>, ma non esserci la risorsa <em>drbd0</em> promossa allo stato di <em>master</em>, quindi non utilizzabile come mount point, né scrivibile.<br />
Per ovviare a questa potenziale situazione, è necessario associare i gruppi <em>share</em> ai nodi su cui la risorsa <em>drbd</em> è <em>master</em>.<br />
Pacemaker gestisce queste operazioni attraverso le <em>colocation</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure colocation share-a_on_ms-drbd0 inf: share-a ms-drbd0:Master
# crm configure colocation share-b_on_ms-drbd1 inf: share-b ms-drbd1:Master</pre></div></div>

<p>Viene definita per entrambi i gruppi <em>share</em> una <em>colocation</em> di peso infinito (<em>inf</em>, quindi senza possibilità di variazione) per cui il gruppo si avvierà solo laddove la risorsa <em>multi-state</em> è in stato <em>master</em>.</p>
<p>E&#8217; necessaria un&#8217;altra condizione per aggiungere coerenza alla configurazione e riguarda l&#8217;ordinamento nell&#8217;avvio delle risorse. Chiaramente ciascun gruppo <em>share</em> non ha ragione di avviarsi se non dopo che il dispositivo <em>drbd</em> è attivo. Pacemaker gestisce la cosa attraverso le definizioni <em>order</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure order share-a_after_ms-drbd0 inf: ms-drbd0:promote share-a:start
# crm configure order share-a_after_ms-drbd1 inf: ms-drbd1:promote share-b:start</pre></div></div>

<p>Viene definita una <em>order</em> di peso infinito in cui l&#8217;operazione di promozione a <em>master</em> della risorsa <em>multi-state</em> vincola l&#8217;avvio del gruppo <em>share</em>.</p>
<p>A completamento della configurazione non rimane che associare le risorse ai nodi con connettività, facendo riferimento alla risorsa <em>ping</em> dichiarata in precedenza e clonata in tutti i nodi:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure location share-a_on_connected_node share-a rule -inf: not_defined ping or ping lte 0
# crm configure location share-b_on_connected_node share-b rule -inf: not_defined ping or ping lte 0</pre></div></div>

<p>Viene definita una <em>location</em> relativa ai gruppi <em>share</em> la cui regola di peso meno infinito (<em>-inf</em>) si verifica in assenza di connettività: la risorsa ping non è definita oppure restituisce un valore negativo.<br />
In questo modo quando un nodo che ospita un gruppo perderà la connettività Pacemaker tenterà di effettuare uno <em>switch</em> del gruppo su un altro nodo attivo.</p>
<p><em>Cleanup finale</em></p>
<p>Ora che la configurazione del cluster è completa è facile immaginare come tutte le operazioni effettuate possano aver falsato lo stato generale del cluster, quindi, al fine di partire da una situazione pura, è possibile lanciare i seguenti comandi:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm resource cleanup share-a
# crm resource cleanup share-b</pre></div></div>

<p>L&#8217;operazione di cleanup della risorsa come dice il nome, azzera il conteggio degli errori per le risorse e le riavvia ordinatamente in modo da, come detto, partire da zero a vagliare eventuali problemi.<br />
Lo stato del cluster a configurazione ultimata dovrebbe essere quindi il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm status
============
Last updated: Fri Sep 17 14:33:16 2010
Stack: Heartbeat
Current DC: debian-lenny-nodo1 (1627f3ec-ec7e-4f0c-b69e-e9729933a2cc) - partition with quorum
Version: 1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd
2 Nodes configured, unknown expected votes
5 Resources configured.
============
&nbsp;
Online: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
 Master/Slave Set: ms-drbd0
     Masters: [ debian-lenny-nodo2 ]
     Slaves: [ debian-lenny-nodo1 ]
 Master/Slave Set: ms-drbd1
     Masters: [ debian-lenny-nodo1 ]
     Slaves: [ debian-lenny-nodo2 ]
 Resource Group: share-a
     share-a-fs (ocf::heartbeat:Filesystem):    Started debian-lenny-nodo1
     share-a-exportfs   (ocf::heartbeat:exportfs):      Started debian-lenny-nodo1
     share-a-ip (ocf::heartbeat:IPaddr2):       Started debian-lenny-nodo1
 Resource Group: share-b
     share-b-fs (ocf::heartbeat:Filesystem):    Started debian-lenny-nodo2
     share-b-exportfs   (ocf::heartbeat:exportfs):      Started debian-lenny-nodo2
     share-b-ip (ocf::heartbeat:IPaddr2):       Started debian-lenny-nodo2</pre></div></div>

<p><strong>Creare una configurazione active active</strong></p>
<p>Il progetto iniziale prevede che nessun nodo, in condizioni normali, sia passivo. Pertanto per completare la configurazione del cluster è necessario assegnare ciascun gruppo <em>share</em> ad uno specifico nodo.<br />
Tale risultato è ottenibile mediante l&#8217;aggiunta di due ulteriori regole di tipo <em>location</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">location cli-prefer-share-a share-a rule inf: #uname eq debian-lenny-nodo1
location cli-prefer-share-b share-b rule inf: #uname eq debian-lenny-nodo2</pre></div></div>

<p>In questo modo, la regola creata impone che <em>share-a</em> venga associata al nodo <em>debian-lenny-nodo1</em> mentre <em>share-b</em> al nodo <em>debian-lenny-nodo2</em>: i due nodi saranno entrambi operativi, completando così l&#8217;obiettivo deciso in fase di progettazione.</p>
<p><em>Considerazioni sulla stickiness</em></p>
<p>La politica del cluster in merito al posizionamento di una risorsa dipende dal peso che questa ha. Il peso viene stabilito in base alle condizioni del cluster e della risorsa stessa. Molte delle regole relative a definizioni di <em>location</em> e <em>order</em> fanno infatti riferimento a pesi infiniti in modo che se queste si verificano lo stato del cluster DEVE variare.<br />
Lo <em>stickiness</em> di una risorsa rappresenta il peso necessario al suo spostamento dalla posizione attuale nel momento in cui il cluster subisce variazioni.</p>
<p><em>Ad esempio&#8230;</em></p>
<p>Il valore di default della <em>stickyness</em> è 0.  se una risorsa viene migrata a mano, il cluster aggiunge una regola di <em>location</em> come quelle descritte poco sopra. Se il nodo che eroga la risorsa perde di connettività, allora questa, per la sua sopravvivenza, verrà migrata sul nodo attivo. Quando però il nodo originale tornerà a vivere, la risorsa, per via della regola impostata, verrà nuovamente migrata in quanto non ha vincoli (la <em>stickiness</em> è 0) che la legano al nodo attuale. Questo significa che nel giro i poco tempo si assisterà a due <em>switch</em> della risorsa, assimilabili a due interruzioni di servizio.<br />
Facile capire come non sempre questo possa essere il comportamento desiderato. Basti pensare al caso di database Oracle, ed a tutti i problemi che comporta uno <em>switch</em>.<br />
Inutile dire che meno sono, meglio è.<br />
Fortunatamente Pacemaker consente di impostare il valore di default di <em>stickiness</em> a infinito:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">crm configure property default-resource-stickiness=INFINITY</pre></div></div>

<p>In questo modo se una risorsa associata ad un nodo migra, alla ricomparsa del nodo questa rimarrà dov&#8217;è, limitando ulteriori disservizi.<br />
A seconda della decisione presa in merito alla stickiness, si dovrà quindi scegliere se questa dovrà rimanere al suo valore di default o avere altri valori (numeri maggiori di zero per arrivare ad <em>INFINITY</em>).</p>
<p><strong>Configurazione finale</strong></p>
<p>La configurazione estesa (modificabile attraverso il comando <em>crm configure edit</em>) è la seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">node $id=&quot;1627f3ec-ec7e-4f0c-b69e-e9729933a2cc&quot; debian-lenny-nodo1
node $id=&quot;f4380aee-c67b-4472-9449-5fa8e5ddae34&quot; debian-lenny-nodo2
primitive drbd0 ocf:linbit:drbd \
	params drbd_resource=&quot;r0&quot; \
	op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;240s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;100s&quot;
primitive drbd1 ocf:linbit:drbd \
	params drbd_resource=&quot;r1&quot; \
	op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;240s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;100s&quot;
primitive ping ocf:pacemaker:ping \
	params host_list=&quot;192.168.1.1&quot; name=&quot;ping&quot; \
	op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;60s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;60s&quot;
primitive share-a-exportfs ocf:heartbeat:exportfs \
	params directory=&quot;/share-a&quot; clientspec=&quot;192.168.1.0/24&quot; options=&quot;rw,async,no_subtree_check,no_root_squash&quot; fsid=&quot;1&quot; \
	op monitor interval=&quot;10s&quot; timeout=&quot;30s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;40s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;40s&quot;
primitive share-a-fs ocf:heartbeat:Filesystem \
	params device=&quot;/dev/drbd0&quot; directory=&quot;/share-a&quot; fstype=&quot;ext3&quot; \
	op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;60s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;60s&quot; \
	meta is-managed=&quot;true&quot;
primitive share-a-ip ocf:heartbeat:IPaddr2 \
	params ip=&quot;192.168.1.33&quot; nic=&quot;eth0&quot; \
	op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot;
primitive share-b-exportfs ocf:heartbeat:exportfs \
	params directory=&quot;/share-b&quot; clientspec=&quot;192.168.1.0/24&quot; options=&quot;rw,async,no_subtree_check,no_root_squash&quot; fsid=&quot;2&quot; \
	op monitor interval=&quot;10s&quot; timeout=&quot;30s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;40s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;40s&quot;
primitive share-b-fs ocf:heartbeat:Filesystem \
	params device=&quot;/dev/drbd1&quot; directory=&quot;/share-b&quot; fstype=&quot;ext3&quot; \
	op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;60s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;60s&quot; \
	meta is-managed=&quot;true&quot;
primitive share-b-ip ocf:heartbeat:IPaddr2 \
	params ip=&quot;192.168.1.34&quot; nic=&quot;eth0&quot; \
	op monitor interval=&quot;20s&quot; timeout=&quot;40s&quot;
group share-a share-a-fs share-a-exportfs share-a-ip
group share-b share-b-fs share-b-exportfs share-b-ip
ms ms-drbd0 drbd0 \
	meta master-max=&quot;1&quot; notify=&quot;true&quot;
ms ms-drbd1 drbd1 \
	meta master-max=&quot;1&quot; notify=&quot;true&quot;
clone ping_clone ping \
	meta globally-unique=&quot;false&quot;
location cli-prefer-share-a share-a \
	rule $id=&quot;cli-prefer-rule-share-a&quot; inf: #uname eq debian-lenny-nodo1
location cli-prefer-share-b share-b \
	rule $id=&quot;cli-prefer-share-b-rule&quot; inf: #uname eq debian-lenny-nodo2
location share-a_on_connected_node share-a \
	rule $id=&quot;share-a_on_connected_node-rule&quot; -inf: not_defined ping or ping lte 0
location share-b_on_connected_node share-b \
	rule $id=&quot;share-b_on_connected_node-rule&quot; -inf: not_defined ping or ping lte 0
colocation share-a_on_ms-drbd0 inf: share-a ms-drbd0:Master
colocation share-b_on_ms-drbd1 inf: share-b ms-drbd1:Master
order share-a_after_ms-drbd0 inf: ms-drbd0:promote share-a:start
order share-a_after_ms-drbd1 inf: ms-drbd1:promote share-b:start
property $id=&quot;cib-bootstrap-options&quot; \
	dc-version=&quot;1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd&quot; \
	cluster-infrastructure=&quot;Heartbeat&quot; \
	stonith-enabled=&quot;false&quot; \
	no-quorum-policy=&quot;ignore&quot; \
	last-lrm-refresh=&quot;1284661245&quot;</pre></div></div>

<p><strong>Test funzionale</strong></p>
<p>Una volta montato da parte di un client lo share NFS:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># mount -t nfs 192.168.1.33:/share-a /mnt/</pre></div></div>

<p>è possibile lanciare sempre sul client una copia arbitraria di file:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">cp -av /usr/ /mnt/</pre></div></div>

<p>partirà la copia dei file e sarà possibile agire quindi sul cluster, tenendo monitorato sia la copia che lo stato attraverso <em>crm_mon</em>.</p>
<p><em>Primo test: disconnessione cavo LAN nodo master</em></p>
<p>Alla disconnessione del cavo la risorsa <em>ping</em> avverte immediatamente l&#8217;assenza di connettività e forza la migrazione del gruppo <em>share-a</em> al nodo rimanente, in questo caso il debian-lenny-nodo1. Il tutto è osservabile dal file /var/log/syslog:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Sep 17 18:05:35 debian-lenny-nodo2 heartbeat: [1079]: info: Link debian-lenny-nodo1:eth0 dead.
...
Sep 17 18:05:46 debian-lenny-nodo2 kernel: [20384.996634] block drbd1: peer( Primary -&gt; Secondary ) 
...
Sep 17 18:05:50 debian-lenny-nodo2 Filesystem[27581]: [27636]: INFO: Running start for /dev/drbd0 on /share-a
...
Sep 17 18:05:50 debian-lenny-nodo2 kernel: [20389.636665] EXT3-fs: mounted filesystem with ordered data mode.
...
Sep 17 18:05:51 debian-lenny-nodo2 exportfs[27676]: [27739]: INFO: File system exported
...
Sep 17 18:05:52 debian-lenny-nodo2 IPaddr2[27764]: [27817]: INFO: ip link set eth0 up
...</pre></div></div>

<p>Lato client, la scrittura su NFS si ferma per qualche secondo e riparte appena l&#8217;ultima operazione di start è eseguita da Pacemaker.</p>
<p><em>Secondo test: migrazione manuale delle risorse</em></p>
<p>Lanciando il comando <em>migrate</em> sulla risorsa <em>share-a</em> viene forzato manualmente lo switch della risorsa dal nodo attuale al nodo indicato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">crm resource migrate share-a debian-lenny-nodo1</pre></div></div>

<p>Quanto il cluster fa in questo genere di operazione è quello di modificare la stessa <em>location</em> descritta poco sopra:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure show
...
...
location cli-prefer-share-a share-a \
	rule $id=&quot;cli-prefer-rule-share-a&quot; -inf: #uname eq debian-lenny-nodo1
...
...</pre></div></div>

<p>In sostanza la <em>location</em> prima impostata su <em>share-a</em> è stata modificata da Pacemaker da <em>inf</em> a <em>-inf</em> invertendo il vincolo che legava la risorsa al nodo <em>debian-lenny-nodo1</em>.<br />
E&#8217; necessario porre particolare attenzione a questa regola, poiché il peso <em>-inf</em> implica che la risorsa sarà da qui in poi SEMPRE associata al nodo <em>debian-lenny-nodo2</em>, poiché non potrà più risiedere sul nodo originale.</p>
<p>Per ripristinare la situazione originaria e rimuovere la regola aggiunta esistono due modi:</p>
<ol>
<li>Lanciare il comando precedente utilizzando <em>unmigrate</em>, in modo che la risorsa torni sul nodo originale (e la regola verrà cancellata, eliminando anche l&#8217;impostazione della configurazione originale);</li>
<li>Modificare a mano la configurazione del cluster attraverso il comando <em>crm configure edit</em> rimuovendo la linea aggiunta automaticamente, in modo da lasciare la risorsa dove si trova ora senza vincolarne i futuri spostamenti;</li>
</ol>
<p>Lato client l&#8217;operazione è ancora più indolore di prima: dai log il comportamento è simile al precedente test e la scrittura sullo share NFS si ferma il tempo che la risorsa migra.</p>
<p><em>Terzo test: spegnimento improvviso nodo master</em></p>
<p>Lo spegnimento improvviso del nodo <em>master</em> rende il comportamento del cluster del tutto simile a quello illustrato primo test, con una differenza sostanziale:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">...
Sep 17 18:36:37 debian-lenny-nodo2 heartbeat: [1079]: WARN: node debian-lenny-nodo1: is dead
...
Sep 17 18:36:37 debian-lenny-nodo2 crmd: [1120]: WARN: check_dead_member: Our DC node (debian-lenny-nodo1) left the cluster
...
Sep 17 18:36:37 debian-lenny-nodo2 kernel: [22236.912107] block drbd0: peer( Primary -&gt; Unkno
wn ) conn( Connected -&gt; NetworkFailure ) pdsk( UpToDate -&gt; DUnknown ) 
...</pre></div></div>

<p>Il cluster ha dovuto rimpiazzare il proprio <em>DC</em> (<em>Designated Coordinator</em>) poiché spento ed ovviamente il dispositivo drbd è in stato <em>Primary</em> sul nodo sopravvissuto, ma ovviamente in stato <em>Unknown</em> nella sua replica.</p>
<p>Anche in questo caso, lato client tutto si è svolto in maniera trasparente, la copia si è fermata per qualche secondo per poi ripartire.</p>
<p><strong>Conclusioni</strong></p>
<p>La soluzione illustrata descrive a pieno le potenzialità del progetto Pacemaker. E&#8217; possibile combinare i suggerimenti espressi in questo lungo articolo immaginando di disporre di un cluster composto da più di due macchine, o segmentando ulteriormente le <em>share</em> esposte, creando ulteriori <em>volumi logici</em> e dispositivi <em>drbd</em>.<br />
Il tutto con dei costi decisamente contenuti rispetto alle soluzioni <em>NAS</em> in commercio: in pratica il solo prezzo dell&#8217;hardware!<br />
Bene, con quest&#8217;ultima parte la serie &#8220;Evoluzione dell&#8217;alta affidabilità su Linux&#8221; può dirsi conclusa. Sicuramente &#8220;Mia Mamma Usa Linux&#8221; tornerà su temi inerenti l&#8217;argomento, magari trattando l&#8217;integrazione delle tecniche di virtualizzazione nel cluster, utilizzando <em>virtual machines</em> come fossero risorse da migrare, magari senza necessità che i sistemi virtualizzati vengano spenti!<br />
Commenti sulla serie sono ben accetti, suggerimenti su futuri argomenti anche di più, proposte di collaborazione sono in assoluto il meglio.<br />
Lunga vita al software libero.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2010/09/evoluzione-dellalta-affidabilita-su-linux-realizzare-un-nas-con-pacemaker-drbd-ed-exportfs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Evoluzione dell’alta affidabilità su Linux: confronto pratico tra Heartbeat classico ed Heartbeat con Pacemaker</title>
		<link>http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/</link>
		<comments>http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 07:00:44 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=966</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160; Nel precedente articolo è stata affrontata l&#8217;evoluzione del progetto Heartbeat, dalla versione iniziale in cui il supporto era limitato a due macchine e con un CRM (Cluster Resource Manager) dalle funzionalità ridotte, per arrivare all&#8217;evoluzione del progetto culminata in Pacemaker, il CRM avanzato con il quale è possibile specificare priorità, ordini e dipendenze delle [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux-ha.png" alt="linux-ha" title="linux-ha" width="100" height="100" class="alignnone size-full wp-image-259" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/11/pacemaker.png" alt="Pacemaker" title="pacemaker" width="100" height="100" class="size-full wp-image-872" /></p>
<p>Nel precedente articolo è stata affrontata l&#8217;evoluzione del progetto Heartbeat, dalla versione iniziale in cui il supporto era limitato a due macchine e con un <em>CRM</em> (<em>Cluster Resource Manager</em>) dalle funzionalità ridotte, per arrivare all&#8217;evoluzione del progetto culminata in <em>Pacemaker</em>, il CRM avanzato con il quale è possibile specificare priorità, ordini e dipendenze delle risorse al fine di ottenere il controllo totale su quanto erogato dal cluster.<br />
In questo nuovo articolo viene analizzata a fondo, con un esempio pratico, la configurazione delle due modalità operative di Heartbeat, al fine di effettuare un confronto sul funzionamento del cluster con e senza <em>Pacemaker</em>.</p>
<p><strong>Versioni di Heartbeat ed installazione</strong></p>
<p>Fino alla versione 3 il progetto Heartbeat era un unico monolite contenente tutte le componenti funzionali all&#8217;esecuzione del software. L&#8217;evoluzione del programma ha comportato la suddivisione dello stesso in sotto progetti, ciascuno sviluppato indipendentemente rispetto agli altri, ma critico per una specifica funzione all&#8217;interno dell&#8217;architettura cluster.<br />
Ad oggi l&#8217;intero progetto Heartbeat è quindi suddiviso in tre componenti:</p>
<ol>
<li><em><strong>Heartbeat</strong></em>: comprendente il demone heartbeat, fornitore dell&#8217;infrastruttura cluster;</li>
<li><strong><em>Cluster Glue</em></strong>: un insieme di librerie con scopi specifici:
<ul>
<li><em>LRM</em> (<em>Local Resource Manager</em>): incaricato di ricevere le istruzioni dal CRM, passarle ai <em>Resource Agents</em> e riportarne l&#8217;esito;</li>
<li><em>STONITH</em> (<em>Shoot The Other Node In The Head</em>): incaricato di gestire situazioni ambigue in cui una risorsa potrebbe essere utilizzata contemporaneamente da più nodi;</li>
<li><em>hb_report</em>: incaricato di fornire dettagli sugli errori che si verificano nel sistema;</li>
<li><em>Cluster Plumbing Library</em>:una libreria per la comunicazioni interne al cluster;</li>
</ul>
<li><strong><em>Resource Agents</em></strong>: comprendente un insieme di script standard per le risorse del cluster;</li>
</ol>
<p>A ciascuna di queste componenti corrisponde un pacchetto scaricabile dalla sezione downloads del sito di Heartbeat: <a href="http://www.linux-ha.com/wiki/Downloads">http://www.linux-ha.com/wiki/Downloads</a>.<br />
Le maggiori distribuzioni al momento distribuiscono ancora pacchetti di Heartbeat nelle versioni precedenti alla 3.<br />
Scegliendo di utilizzare la versione più recente di ciascun software, è quindi possibile ricompilare manualmente i pacchetti partendo dai sorgenti oppure utilizzare pacchetti ricompilati.<br />
Nel caso si usasse <em>Debian Lenny</em> è possibile dichiarare il seguente repository all&#8217;interno del file <em>/etc/apt/sources.list</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">deb http://people.debian.org/~madkiss/ha lenny main</pre></div></div>

<p>Mentre per <em>Ubuntu Hardy Heron</em> i repository sono i seguenti:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">deb http://ppa.launchpad.net/ubuntu-ha/ppa/ubuntu karmic main</pre></div></div>

<p><em>Ubuntu Lucid Lynx</em> supporta invece la versione più recente della suite Heartbeat.</p>
<p>Per l&#8217;installazione sarà quindi necessario utilizzare lo strumento di gestione pacchetti fornito con la propria distribuzione: <em>apt</em> per <em>Debian</em> ed <em>Ubuntu</em>, <em>yast</em> per <em>SuSe/OpenSuse</em> e <em>yum</em> per <em>CentOS/RedHat</em>.</p>
<p>L&#8217;esempio che verrà implementato nel corso dell&#8217;articolo prevede la messa in alta affidabilità di due servizi nelle due versioni di Heartbeat: un indirizzo IP ed il webserver apache2. Il presupposto da cui si partirà è quello di avere un cluster composto da due nodi, collegati ciascuno alla rete locale (192.168.1.0/24) e l&#8217;uno all&#8217;altro da un cavo cross (10.0.0.0/24).</p>
<p><strong>Configurazione di Heartbeat in modalità classica (senza CRM)</strong></p>
<p>Sebbene Heartbeat sia giunto ormai alla versione 3.0.3 ed il CRM sia stato introdotto dalla versione 2, la modalità predefinita con cui il software viene avviato è quella senza CRM.<br />
Qualsiasi configurazione Heartbeat 1.x quindi funzionerà verosimilmente su tutte le versioni successive.<br />
Al di là delle innovazioni a livello software apportate al progetto, il principio di funzionamento senza CRM rimane quindi invariato, così come i file di configurazione necessari al funzionamento del cluster, come illustrato nel precedente articolo.<br />
Il primo di questi è <em>/etc/ha.d/ha.cf</em>, il cui contenuto dovrà essere simile a quanto segue (ed identico in entrambi i nodi):</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">##      keepalive: how long between heartbeats?
keepalive 1
##      deadtime: how long-to-declare-host-dead?
deadtime 10
##      warntime: how long before issuing &quot;late heartbeat&quot; warning?
warntime 5
##      Very first dead time (initdead)
initdead 20
##      What interfaces to unicast heartbeats over?
ucast eth1 10.0.0.1
ucast eth1 10.0.0.2
ucast eth0 192.168.1.86
ucast eth0 192.168.1.66
##      Should we autofailback?
auto_failback off
##      Who is part of the cluster?
node    debian-lenny-nodo1
node    debian-lenny-nodo2
##      Network monitoring
ping 192.168.1.50
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster</pre></div></div>

<p>I commenti presenti all&#8217;interno del listato rendono le opzioni autoesplicative. Particolare attenzione va posta relativamente ad alcune opzioni:</p>
<p><em>auto_failback</em> si riferisce alle risorse: se impostata ad &#8220;on&#8221; nel momento in cui una risorsa effettua uno switch su un nodo differente dall&#8217;attuale (per via di un malfunzionamento di quest&#8217;ultimo) nel momento in cui il nodo tornerà attivo la risorsa effettuerà un nuovo switch.</p>
<p><em>ping</em> definisce un indirizzo ip che verrà usato come riferimento per capire se un nodo è parte della rete: &#8220;vedendo&#8221; l&#8217;indirizzo indicato il nodo avrà coscienza di essere presente sulla rete. A tutti gli effetti l&#8217;ip indicato è considerato un nodo del cluster, pertanto dovrà essere un ip affidabile, ad esempio quello del gateway di rete. E&#8217; inoltre possibile definire un gruppo di ip, attraverso la direttiva <em>ping_group</em> in modo da non affidarsi ad un unico host per il monitoring.</p>
<p><em>respawn</em> e <em>apiauth</em> definiscono rispettivamente un comando e l&#8217;utente con cui questo deve essere lanciato. Insieme alla definizione del nodo ping completano la parte di monitoraggio della connettività necessaria ad Heartbeat per regolarsi in caso di connettività limitata od assente.</p>
<p>Le ultime tre opzioni descritte, come apparirà chiaro in seguito, risultano di importanza critica in configurazioni senza CRM.</p>
<p>Il secondo file essenziale alla costruzione del cluster è <em>/etc/ha.d/haresources</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">debian-lenny-nodo1 IPaddr::192.168.1.200/24/eth0 apache2</pre></div></div>

<p>Il contenuto definisce il nodo master per le due risorse definite: l&#8217;indirizzo ip 192.168.1.200 (associato all&#8217;interfaccia eth0) e apache2, il demone che controlla il webserver. Entrambe le risorse verranno quindi, in condizioni normali, avviate sul nodo identificato come <em>debian-lenny-nodo1</em>.</p>
<p>L&#8217;ultimo file ad essere creato è <em>/etc/ha.d/authkeys</em> e contiene le informazioni per la sicurezza delle comunicazioni tra i due nodi. Non essendo vincolante ai fini del progetto avere una comunicazione criptata tra i nodi, il contenuto del file può essere il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">auth 1
1 crc</pre></div></div>

<p>Che sta ad indicare come non esisterà sicurezza nella comunicazione fra i nodi (eccettuato il controllo sulla corruzione dei pacchetti).</p>
<p>Prima di avviare il demone per la prima volta ed effettuare i test è necessario accertarsi che il demone apache non venga avviato al boot del sistema, poiché verrà gestito da heartbeat. In <em>Debian/Ubuntu</em> si può rimuovere così:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># update-rc.d -f apache2 remove</pre></div></div>

<p>Mentre in <em>RedHat/Centos/Opensuse</em> il comando da usare è chkconfig:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># chkconfig --level 123456 apache2 off</pre></div></div>

<p>A questo punto è possibile avviare su entrambi i nodi il demone heartbeat:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /etc/init.d/heartbeat start</pre></div></div>

<p>dopo alcuni minuti i servizi dovrebbero salire sul nodo che secondo quanto impostato nella configurazione sarà master, <em>debian-lenny-nodo1</em>. Il tutto è verificabile attraverso il controllo sullo stato dell&#8217;interfaccia <em>eth0:0</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr 08:00:27:59:18:22  
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:10 Base address:0xd020</pre></div></div>

<p>E sull&#8217;effettiva esecuzione del demone apache2:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># ps -ef| grep apache
root      2052     1  0 11:30 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  2053  2052  0 11:30 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  2054  2052  0 11:30 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  2057  2052  0 11:30 ?        00:00:00 /usr/sbin/apache2 -k start</pre></div></div>

<p><strong>Test di Heartbeat in modalità classica (senza CRM)</strong></p>
<p>Il comportamento nelle varie situazione del demone heartbeat è osservabile attraverso il principale file di log di sistema, su entrambi i nodi:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">tail -f /var/log/syslog</pre></div></div>

<p><span style="color: #505050;"><em>Primo test: disconnessione cavo LAN</em></span></p>
<p>Il primo test riguarderà la disconnessione del cavo di rete LAN relativo al nodo master, l&#8217;operazione genererà alcune righe di log, la più importante delle quali, sull&#8217;unico nodo rimasto attivo in rete, riporterà quanto segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">...
ResourceManager[14403]: [14415]: info: Acquiring resource group: debian-lenny-nodo1 IPaddr::192.168.1.200/24/eth0 apache2
...</pre></div></div>

<p>l&#8217;indicazione è chiara: le risorse sono state acquisite dal nodo secondario. A rilevare l&#8217;assenza di connettività è stato, come precedentemente illustrato, l&#8217;esegubile <em>ipfail</em>.</p>
<p><span style="color: #505050;"><em>Secondo test: disconnessione cavo Heartbeat</em></span></p>
<p>Il secondo test prevede la rimozione del cavo che collega i due nodi del cluster:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">...
Apr  8 16:24:16 debian-lenny-nodo1 kernel: [17722.012482] eth1: link down
Apr  8 16:24:25 debian-lenny-nodo1 heartbeat: [14269]: info: Link debian-lenny-nodo2:eth1 dead.
Apr  8 16:24:25 debian-lenny-nodo1 ipfail: [14297]: info: Link Status update: Link debian-lenny-nodo2/eth1 now has status dead
Apr  8 16:24:25 debian-lenny-nodo1 ipfail: [14297]: debug: Found ping node 192.168.1.50!
Apr  8 16:24:26 debian-lenny-nodo1 ipfail: [14297]: info: Asking other side for ping node count.
Apr  8 16:24:26 debian-lenny-nodo1 ipfail: [14297]: debug: Message [num_ping] sent.
Apr  8 16:24:26 debian-lenny-nodo1 ipfail: [14297]: info: Checking remote count of ping nodes.
Apr  8 16:24:27 debian-lenny-nodo1 ipfail: [14297]: debug: Got asked for num_ping.
Apr  8 16:24:27 debian-lenny-nodo1 ipfail: [14297]: debug: Found ping node 192.168.1.50!
Apr  8 16:24:28 debian-lenny-nodo1 ipfail: [14297]: info: Ping node count is balanced.
Apr  8 16:24:28 debian-lenny-nodo1 ipfail: [14297]: debug: Abort message sent.
Apr  8 16:24:28 debian-lenny-nodo1 ipfail: [14297]: info: No giveup timer to abort.
...</pre></div></div>

<p>I messaggi riguardano l&#8217;interfaccia secondaria e, come è osservabile, la perdita di questa interfaccia non provoca alcun tipo di switch, in quanto la comunicazione tra i nodi funziona ancora attraverso l&#8217;interfaccia primaria, quindi attraverso la LAN.</p>
<p><span style="color: #505050;"><em>Terzo test: spegnimento improvviso nodo master</em></span></p>
<p>Il terzo test consiste nella rimozione improvvisa dell&#8217;alimentazione relativa al nodo master:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Apr  8 16:24:16 debian-lenny-nodo2 heartbeat: [8170]: WARN: node debian-lenny-nodo1: is dead
Apr  8 16:24:16 debian-lenny-nodo2 ipfail: [8233]: info: Status update: Node debian-lenny-nodo1 now has status dead
...
...
Apr  8 16:24:16 debian-lenny-nodo2 ResourceManager[8913]: [8925]: info: Acquiring resource group: debian-lenny-nodo1 IPaddr::192.168.1.200/24/eth0 apache2
Apr  8 16:24:17 debian-lenny-nodo2 ipfail: [8233]: debug: Found ping node 192.168.1.50!
Apr  8 16:24:17 debian-lenny-nodo2 IPaddr[8937]: [8972]: INFO:  Resource is stopped
Apr  8 16:24:17 debian-lenny-nodo2 ResourceManager[8913]: [8987]: info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0 start
Apr  8 16:24:17 debian-lenny-nodo2 ipfail: [8233]: info: NS: We are still alive!
...
...</pre></div></div>

<p>Lo switch avviene in maniera corretta, è possibile notare il messaggio &#8220;We are still alive!&#8221; che indica come il nodo secondario abbia rilevato che il nodo primario sia assente, acquisendone le risorse, una volta accertato il proprio grado di connettività con la rete.</p>
<p><span style="color: #505050;"><em>Quarto test: migrazione manuale delle risorse</em></span></p>
<p>Heartbeat dispone di un ristretto set di comandi che consentono di interagire con le risorse. Questi comandi sono contenuti nella cartella <em>/usr/share/heartbeat/</em>, ed il comando che consente di gestire le risorse dichiarate è <em>hb_takeover</em>, la cui sintassi d&#8217;impiego è la seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /usr/share/heartbeat/hb_standby all|foreign|local|failback</pre></div></div>

<p>I parametri passabili al comando comprendono la possibilità da parte di un nodo di acquisire tutte le risorse (<em>all</em>), le risorse del nodo secondario (<em>foreign</em>), le risorse di proprietà (<em>local</em>), le risorse precedentemente migrate (<em>failback</em>).<br />
Nel caso che si vuole simulare il nodo secondario lancerà il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /usr/share/heartbeat/hb_standby foreign</pre></div></div>

<p>Ed il comportamento del cluster, osservabile dal nodo primario, sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Apr  8 16:28:36 debian-lenny-nodo1 heartbeat: [14269]: info: debian-lenny-nodo1 wants to go standby [local]
Apr  8 16:28:36 debian-lenny-nodo1 heartbeat: [14269]: info: standby: debian-lenny-nodo2 can take our local resources
Apr  8 16:28:36 debian-lenny-nodo1 heartbeat: [14859]: info: give up local HA resources (standby).
Apr  8 16:28:36 debian-lenny-nodo1 ResourceManager[14872]: [14884]: info: Releasing resource group: debian-lenny-nodo1 IPaddr::192.168.1.200/24/eth0 apache2
Apr  8 16:28:36 debian-lenny-nodo1 ResourceManager[14872]: [14895]: info: Running /etc/init.d/apache2  stop
Apr  8 16:28:38 debian-lenny-nodo1 ResourceManager[14872]: [14929]: info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0 stop
Apr  8 16:28:38 debian-lenny-nodo1 IPaddr[14956]: [14968]: INFO: ifconfig eth0:0 down
Apr  8 16:28:38 debian-lenny-nodo1 IPaddr[14930]: [14972]: INFO:  Success</pre></div></div>

<p>Le risorse sono state correttamente spostate su <em>debian-lenny-nodo2</em>.</p>
<p><span style="color: #505050;"><em>Quinto test: standby manuale di un nodo</em></span></p>
<p>Il quinto test della serie prevederà la messa in standby del nodo attivo, al fine di verificare il corretto spostamento delle risorse. Il controllo di questa funzionalità da parte del cluster è possibile mediante lo stesso comando precedentemente illustrato, lanciato senza argomenti (che equivale a lanciarlo parametro &#8220;all&#8221;) sul secondo nodo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /usr/share/heartbeat/hb_standby</pre></div></div>

<p>Il comportamento è il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Apr  8 16:29:48 debian-lenny-nodo1 heartbeat: [14269]: info: debian-lenny-nodo2 wants to go standby [all]
Apr  8 16:29:49 debian-lenny-nodo1 ipfail: [14297]: debug: Other side is unstable.
Apr  8 16:29:51 debian-lenny-nodo1 heartbeat: [14269]: info: standby: acquire [all] resources from debian-lenny-nodo2
Apr  8 16:29:51 debian-lenny-nodo1 heartbeat: [14974]: info: acquire all HA resources (standby).
Apr  8 16:29:51 debian-lenny-nodo1 ResourceManager[14987]: [14999]: info: Acquiring resource group: debian-lenny-nodo1 IPaddr::192.168.1.200/24/eth0 apache2
Apr  8 16:29:52 debian-lenny-nodo1 IPaddr[15011]: [15046]: INFO:  Resource is stopped
Apr  8 16:29:52 debian-lenny-nodo1 ResourceManager[14987]: [15061]: info: Running /etc/ha.d/resource.d/IPaddr 192.168.1.200/24/eth0 start
Apr  8 16:29:53 debian-lenny-nodo1 IPaddr[15088]: [15121]: INFO: Using calculated netmask for 192.168.1.200: 255.255.255.0
Apr  8 16:29:53 debian-lenny-nodo1 IPaddr[15088]: [15143]: INFO: eval ifconfig eth0:0 192.168.1.200 netmask 255.255.255.0 broadcast 192.168.1.255
Apr  8 16:29:53 debian-lenny-nodo1 IPaddr[15062]: [15162]: INFO:  Success
Apr  8 16:29:53 debian-lenny-nodo1 ResourceManager[14987]: [15183]: info: Running /etc/init.d/apache2  start</pre></div></div>

<p>Tutte le risorse vengono acquisite dal nodo <em>debian-lenny-nodo2</em>.</p>
<p><span style="color: #505050;"><em>Sesto test: interruzione manuale di un servizio</em></span></p>
<p>L&#8217;ultimo test della serie comprende lo stop manuale di uno dei servizi erogati. Ad esempio apache:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /etc/init.d/apache2 stop</pre></div></div>

<p>è facile verificare come nessuna azione venga svolta da Heartbeat, il servizio infatti rimane spento, e l&#8217;unica via per fare in modo che il cluster lo riavvii è quella di mandare in standby manualmente il nodo.</p>
<p>Gli ultimi tre test mostrano come in realtà il controllo manuale del cluster sia unicamente la simulazione della messa in standby di un nodo o lo stop di un servizio attivo. Lo standby non avviene in maniera totale, il nodo non viene escluso dal cluster, semplicemente rilascia le proprie risorse e lo stesso vale per i servizi.<br />
Quanto descritto rappresenta una grossa differenza nei confronti dell&#8217;utilizzo del CRM Pacemaker, ed il concetto sarà ancora più chiaro nei paragrafi successivi.</p>
<p><strong>Configurazione di Heartbeat in modalità CRM con Pacemaker</strong></p>
<p>L&#8217;esecuzione di Heartbeat in modalità CRM prevede che nel sistema sia installato il pacchetto Pacemaker. Questo pacchetto è disponibile nelle maggiori distribuzioni (e nei repository indicati nel primo capitolo dell&#8217;articolo) e tra le varie librerie e file che installa uno su tutti sarà fondamentale nel proseguo dell&#8217;articolo: <em>/usr/sbin/crm</em>. Come verrà illustrato in seguito il comando <em>crm</em> consente di interagire direttamente con il cluster, il suo comportamento e la sua configurazione.<br />
Prima di procedere è necessario predisporre nuovamente il file di configurazione <em>/etc/ha.d/ha.cf</em> con questo contenuto, su entrambi i nodi:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">autojoin none
keepalive 1
deadtime 10
warntime 5
initdead 20
mcast eth0 239.0.0.43 694 1 0
bcast eth1
node    debian-lenny-nodo1
node    debian-lenny-nodo2
crm respawn</pre></div></div>

<p>Le differenze con la precedente configurazione sono subito evidenti. Esiste una nuova opzione chiamata <em>autojoin none</em> che disabilita la funzione automatica di scoperta ed aggiunta di nodi sulla rete, inoltre sono state modificate le informazioni relative alla rete: non viene più definito un <a href="http://it.wikipedia.org/wiki/Unicast">unicast</a> per ciascuna interfaccia interessate alla comunicazione del cluster, i pacchetti viaggeranno in <a href="http://it.wikipedia.org/wiki/Multicast">multicast</a> per la rete locale ed in <a href="http://it.wikipedia.org/wiki/Broadcasting_(informatica)">broadcast</a> per la rete non condivisa (il cavo cross che collega le due macchine).<br />
Infine, l&#8217;opzione <em>crm respawn</em> indica che il cluster userà il Cluster Resource Manager, Pacemaker.<br />
Va sottolineato come siano assenti i parametri relativi al monitoraggio della connettività, che verrà gestita in maniera totale da Pacemaker.<br />
E&#8217; chiaro come in questa configurazione il file /etc/ha.d/haresources non ha più ragione di esistere in quanto, così come spiegato nel precedente articolo, a preoccuparsi della gestione delle risorse è il CRM stesso.<br />
Il file relativo al protocollo di comunicazione e sicurezza <em>/etc/ha.d/authkeys</em> rimane invece identico.</p>
<p>E&#8217; quindi possibile avviare Heartbeat per la prima volta:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># /etc/init.d/heartbeat start</pre></div></div>

<p>Le fasi di avvio sono visibili attraverso il log, oppure utilizzando il già citato comando <em>crm</em> con il parametro <em>status</em>.<br />
Inizialmente lo stato del cluster sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm status
============
Last updated: Wed Jun 16 11:34:38 2010
Current DC: NONE
0 Nodes configured, unknown expected votes
0 Resources configured.
============</pre></div></div>

<p>Dopo qualche minuto, una volta che i nodi avranno avviato le comunicazioni la situazione varierà in questa forma:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm status
============
Last updated: Wed Jun 16 11:35:48 2010
Stack: Heartbeat
Current DC: debian-lenny-nodo2 (e1f7faf3-7152-4c51-bfc4-b5382944a62e) - partition with quorum
Version: 1.0.8-2c98138c2f070fcb6ddeab1084154cffbf44ba75
2 Nodes configured, unknown expected votes
0 Resources configured.
============
&nbsp;
Online: [ debian-lenny-nodo1 debian-lenny-nodo2 ]</pre></div></div>

<p>Il cluster può dirsi così avviato. Sebbene non ci siano risorse configurate (&#8220;<em>0 Resources configured.</em>&#8220;) i due nodi configurati risultano &#8220;Online&#8221;, pronti cioè ad erogare risorse e <em>debian-lenny-nodo2</em> ha il ruolo di <em>DC</em>, <em>Designated Coordinator</em>, il nodo &#8220;master&#8221; che guiderà cioè le operazioni.</p>
<p>Qualsiasi tipo di configurazione sul cluster può essere effettuata attraverso il comando <em>crm</em>, mediante il parametro <em>configure</em> seguito dalle impostazioni da modificare.<br />
Di seguito in quattro fasi viene illustrata una configurazione che rispetti fedelmente quanto fatto per la versione senza CRM.</p>
<p><span style="color: #505050;"><strong>Prima fase: comportamento generale del cluster</strong></span></p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure property stonith-enabled=&quot;false&quot;</pre></div></div>

<p>Disabilitazione dello <em>stonith</em>: come anticipato in apertura di articolo, lo stonith prevede la configurazione di device specifici che possano essere guidati al fine di spegnere immediatamente un nodo in situazioni in cui non si ha la certezza di quale nodo sia ancora vivo. Nel caso illustrato la configurazione dello stonith verrà pertanto disabilitato.<br />
Una interessante documentazione su come configurare lo stonith su Heartbeat è disponibile sul sito Novell, a <a href="http://www.novell.com/documentation/sles10/heartbeat/?page=/documentation/sles10/heartbeat/data/b8nrkl5.html"><br />
questo indirizzo</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure property no-quorum-policy=&quot;ignore&quot;</pre></div></div>

<p>Non considerazione dell&#8217;assenza di quorum: se la locazione comune dei dati relativi al cluster (quorum) non sarà accessibile da parte dei nodi, il cluster non dovrà prendere alcun provvedimento. Le opzioni disponibili sono <em>ignore</em>, <em>stop</em>, <em>freeze</em> e <em>suicide</em>.<br />
Il valore <em>stop</em> porterà il cluster a fermare ordinatamente tutte le risorse.<br />
Il valore <em>freeze</em> consentirà al cluster di continuare ad erogare le risorse in esecuzione senza però avviarne di nuove.<br />
Il valore <em>suicide</em> obbligherà il cluster a spegnere immediatamente tutti i nodi con limitato accesso al quorum.</p>
<p>Chiaramente le due opzioni <em>stonith-enabled</em> e <em>no-quorum-policy</em> non vengono considerate nella configurazione classica. Il concetto di <em>quorum</em> e <em>stonith</em> si applica solo a cluster gestiti da CRM, in cui esiste una memoria comune.</p>
<p><span style="color: #505050;"><strong>Seconda fase: controllo della connettività</strong></span></p>
<p>Il controllo della connettività con Pacemaker è possibile attraverso la definizione di una risorsa denominata &#8220;ping&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure primitive ping ocf:pacemaker:ping params host_list=&quot;192.168.1.1&quot; name=&quot;ping&quot; op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot; op start timeout=&quot;60s&quot; op stop timeout=&quot;60s&quot;</pre></div></div>

<p>Il comando crea una risorsa (<em>primitive</em>) denominata <em>ping</em>, il cui <em>Resource Agent</em> (RA) è di tipo <em>ocf</em>, fornito da <em>pacemaker</em>: il path effettivo dell&#8217;eseguibile sarà quindi <em>/usr/lib/ocf/resource.d/pacemaker/ping</em> (si veda l&#8217;articolo precedente per l&#8217;approfondimento sulle tipologie di resource agent e loro posizionamento).<br />
Il RA supporta diversi parametri, fra questi <em>host_list</em> deve contenere la lista degli host da controllare per verificare la connettività (in questo caso il gateway di rete) e <em>name</em> dovrà corrispondere al nome interno della risorsa (si veda la quarta fase).<br />
Infine le indicazioni che seguono le voci &#8220;op&#8221; (abbreviazione di <em>operations</em>) consentono di definire le politiche di monitoring della risorsa: come deve essere controllata (ad intervalli di 10 secondi e con 60 secondi di timeout) ed in quanto tempo si deve avviare e fermare (entro i 60 secondi di timeout).</p>
<p>La definizione della risorsa ping non è però sufficiente per fornire ad ogni nodo uno strumento per il controllo della connettività, poiché, definita nel modo indicato, la risorsa <em>ping</em> verrà eseguita su un unico nodo. Proprio per ovviare a questo problema e fare in modo che la stessa risorsa possa girare su più nodi è possibile <em>clonarla</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure clone ping_clone ping meta globally-unique=&quot;false&quot;</pre></div></div>

<p>Il comando indica al cluster di creare la risorsa <em>ping_clone</em> che girerà su tutti i nodi, indistintamente (meta globally-unique=&#8221;false&#8221;).</p>
<p><span style="color: #505050;"><strong>Terza fase: definizione delle risorse</strong></span></p>
<p>Per riprodurre il test e confrontarlo con il precedente rimangono da definire le due risorse scelte ip e apache. La risorsa ip verrà dichiarata come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure primitive cluster-ip ocf:heartbeat:IPaddr2 params ip=&quot;192.168.1.200&quot; nic=&quot;eth0&quot; op monitor interval=&quot;10s&quot; timeout=&quot;20s&quot; op start timeout=&quot;20s&quot; op stop timeout=&quot;20s&quot;</pre></div></div>

<p>il nome della risorsa è <em>cluster-ip</em> ed il resource agent utilizzato sarà di tipo OCF, con fornitore heartbeat.<br />
I parametri comprendono l&#8217;indirizzo ip che verrà erogato ed il nic (la scheda di rete) a cui verrà associato.<br />
Per quanto riguarda le politiche di monitoring vale quanto detto poco sopra per la risorsa ping.</p>
<p>Il servizio apache2 verrà dichiarato in maniera similare:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">crm configure primitive cluster-apache2 ocf:heartbeat:apache params configfile=&quot;/etc/apache2/apache2.conf&quot; httpd=&quot;/usr/sbin/apache2&quot; port=&quot;80&quot; op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot; op start timeout=&quot;40s&quot; op stop timeout=&quot;60s&quot;</pre></div></div>

<p>E&#8217; da notare che il Resource Agent utilizzato non è, come per la configurazione di Heartbeat senza CRM, lo script di avvio del demone presente in /etc/init.d, ma un vero e proprio resource agent di tipo OCF. I parametri necessari al funzionamento sono il file di configurazione (configfile), l&#8217;eseguibile del demone (httpd) e la porta su cui apache sarà in ascolto (port).<br />
Anche in questo caso per le opzioni di monitoring vale quanto espresso in precedenza.</p>
<p>Per completare la configurazione delle risorse verrà definito un gruppo, denominato <em>cluster</em>, a cui verranno associate le risorse definite:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure group cluster cluster-ip cluster-apache2</pre></div></div>

<p>Il gruppo <em>cluster</em> potrà essere utilizzato nella configurazione come un unica risorsa, le cui operazioni di avvio e stop rispetteranno l&#8217;ordine indicato nella definizione: in fase di start del gruppo cluster verrà avviato prima <em>cluster-ip</em> e poi <em>cluster-apache2</em>, in fase di stop verrà prima stoppato <em>cluster-apache2</em> e poi <em>cluster-ip</em>.</p>
<p><span style="color: #505050;"><strong>Quarta fase: associazione delle risorse al nodo attivo</strong></span></p>
<p>La configurazione del cluster, definiti i parametri di monitoraggio della connessione ed il gruppo delle risorse, potrebbe sembrare a questo punto completa:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm status
============
Last updated: Wed Jun 16 15:36:43 2010
Stack: Heartbeat
Current DC: debian-lenny-nodo2 (e1f7faf3-7152-4c51-bfc4-b5382944a62e) - partition with quorum
Version: 1.0.8-2c98138c2f070fcb6ddeab1084154cffbf44ba75
2 Nodes configured, unknown expected votes
2 Resources configured.
============
&nbsp;
Online: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
 Resource Group: cluster
     cluster-ip	(ocf::heartbeat:IPaddr2):	Started debian-lenny-nodo1
     cluster-apache2	(ocf::heartbeat:apache):	Started debian-lenny-nodo1</pre></div></div>

<p>Ma non è così. E&#8217; vero che al momento il cluster eroga quanto stabilito, ma non è ancora stato definito il comportamento da assumere in caso di assenza di connettività. Se infatti si dovesse rimuovere il cavo di rete LAN dal nodo debian-lenny-nodo1 le risorse non verrebbero automaticamente migrate sul secondo nodo.<br />
Questo perché il cluster non è istruito a dovere in merito al comportamento da assumere a fronte di un esito negativo delle operazioni effettuate dalla risorsa clonata ping.<br />
Quanto descritto rappresenta un&#8217;altra grossa differenza tra le due tipologie di funzionamento: in un caso la definizione di ipfail forzava lo standby delle risorse in autonomia (e minor controllo), con Pacemaker la filosofia cambia: tutto va definito, aggiungendo certamente complessità all&#8217;architettura, ma rendendo il controllo sul cluster totale.<br />
Per definire quindi un vincolo sull&#8217;erogazione delle risorse è necessario definire una &#8220;location&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure location cluster_on_connected_node cluster rule -inf: not_defined ping or ping lte 0</pre></div></div>

<p>Viene definita cioè una regola denominata <em>cluster_on_connected_node</em> associata alla risorsa <em>cluster</em> che prevede di dare il peso di meno infinito (<em>-inf</em>, rendere cioè incapace di erogare risorse) al nodo in cui la risorsa nominata <em>ping</em> non sia definita (<em>not_defined</em>) o il cui codice di uscita sia minore o uguale a zero (<em>lte 0</em> e quindi il comando ping non ha avuto esito positivo, il ping node non risponde).</p>
<p>Grazie a questa regola la struttura realizzata con Heartbeat e Pacemaker risulta l&#8217;esatta replica della soluzione Heartbeat senza CRM per comportamento e configurazione.</p>
<p><span style="color: #505050;"><strong>La configurazione completa</strong></span></p>
<p>E&#8217; possibile ottenere il resoconto della configurazione, completo di <em>highlight</em> attraverso il comando <em>crm configure show</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm configure show
node $id=&quot;1984521f-539f-4967-b0ff-eb23f3cf9ccf&quot; debian-lenny-nodo1
node $id=&quot;e1f7faf3-7152-4c51-bfc4-b5382944a62e&quot; debian-lenny-nodo2
primitive cluster-apache2 ocf:heartbeat:apache \
	params configfile=&quot;/etc/apache2/apache2.conf&quot; httpd=&quot;/usr/sbin/apache2&quot; port=&quot;80&quot; \
	op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;40s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;60s&quot;
primitive cluster-ip ocf:heartbeat:IPaddr2 \
	params ip=&quot;192.168.1.200&quot; nic=&quot;eth0&quot; \
	op monitor interval=&quot;10s&quot; timeout=&quot;20s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;20s&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;20s&quot;
primitive ping ocf:pacemaker:ping \
	params host_list=&quot;192.168.1.1&quot; name=&quot;ping&quot; \
	op stop interval=&quot;0&quot; timeout=&quot;60s&quot; \
	op start interval=&quot;0&quot; timeout=&quot;60s&quot; \
	op monitor interval=&quot;10s&quot; timeout=&quot;60s&quot;
group cluster cluster-ip cluster-apache2
clone ping_clone ping \
	meta globally-unique=&quot;false&quot;
location cluster_on_connected_node cluster \
	rule $id=&quot;cluster_on_connected_node-rule&quot; -inf: not_defined ping or ping lte 0
property $id=&quot;cib-bootstrap-options&quot; \
	dc-version=&quot;1.0.8-2c98138c2f070fcb6ddeab1084154cffbf44ba75&quot; \
	cluster-infrastructure=&quot;Heartbeat&quot; \
	stonith-enabled=&quot;false&quot; \
	no-quorum-policy=&quot;ignore&quot; \
	last-lrm-refresh=&quot;1276694458&quot;</pre></div></div>

<p>E&#8217; da notare che oltre ad essere un comando invocabile con specifiche opzioni, <em>crm</em> può essere lanciato senza argomenti, in modo da accedere alla console di amministrazione interattiva che permette di controllare il cluster su tutti i livelli. Ad esempio digitando in sequenza:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm
crm(live)# configure
crm(live)configure# edit</pre></div></div>

<p>Si accederà alla configurazione riportata sopra all&#8217;interno dell&#8217;editor di testo <em>vi</em>, questa configurazione potrà essere modificata a piacimento e salvata attraverso il comando <em>vi</em> &#8220;:wq&#8221;.<br />
Le modifiche verranno applicate digitando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">crm(live)configure# commit</pre></div></div>

<p>L&#8217;interfaccia analizzerà quanto digitato ed applicherà alla configurazione effettiva del cluster le modifiche, ovviamente se e soltanto se queste rispettano la sintassi e la struttura del cluster.</p>
<p><strong>Test di Heartbeat in modalità CRM con Pacemaker</strong></p>
<p>Anche nella configurazione con Pacemaker il comportamento di Heartbeat è osservabile dal file di log di sistema <em>/var/log/syslog</em>. La quantità di log relativa a questa configurazione di Heartbeat è decuplicata rispetto alla configurazione classica, il che rende a volte complicato seguire quanto avviene nel cluster. Un buon approccio in caso di disservizi o comportamenti divergenti da quanto ci si aspetta è quello di cercare parole chiave come &#8220;error&#8221; o &#8220;warning&#8221; in modo da evidenziare subito potenziali problemi.</p>
<p><span style="color: #505050;"><em>Primo test: disconnessione cavo LAN</em></span></p>
<p>Il comportamento di Heartbeat nei confronti della disconnessione del cavo LAN è il seguente (vengono riportate solo alcune righe del log del nodo attivo):</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Jun 17 17:11:42 debian-lenny-nodo1 attrd: [2426]: info: attrd_trigger_update: Sending flush op to all hosts for: ping (0)
...
Jun 17 17:11:43 debian-lenny-nodo1 lrmd: [2424]: info: rsc:cluster-apache2:16: stop
...
Jun 17 17:11:46 debian-lenny-nodo1 lrmd: [2424]: info: rsc:cluster-ip:17: stop
...
Jun 17 17:11:49 debian-lenny-nodo1 lrmd: [2424]: info: perform_op:2873: operation monitor[11] on ocf::ping::ping:1 for client 2427, its parameters: CRM_meta_clone=[1] host_list=[192.168.1.1]</pre></div></div>

<p>Il nodo attivo segnala di aver perso connettività (leggendo la risposta del comando clonato ping) e procede con lo stop delle due risorse interessate (che verranno attivate sul nodo secondario, ovviamente se questo ha connettività).<br />
Il nodo debian-lenny-nodo1 continua a tentare la connessione al nodo ping.<br />
Da notare che debian-lenny-nodo1 non viene in alcuna maniera escluso dal cluster poiché l&#8217;interfaccia Heartbeat (il cavo che collega fra loro le due macchine) è attiva, garantendo la comunicazione dei due nodi.</p>
<p><span style="color: #505050;"><em>Secondo test: disconnessione cavo Heartbeat</em></span></p>
<p>La rimozione del cavo heartbeat, così come il secondo test di Heartbeat senza CRM, non comporta alcuna variazione nello stato del cluster:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Jun 18 10:57:12 debian-lenny-nodo1 kernel: [ 3020.112982] eth1: link down
Jun 18 10:57:20 debian-lenny-nodo1 heartbeat: [11076]: info: Link debian-lenny-nodo2:eth1 dead.</pre></div></div>

<p>Viene unicamente rilevata (sia dal kernel che da heartbeat) l&#8217;assenza di connettività sull&#8217;interfaccia eth1, ma la comunicazione del cluster è ancora garantita dal link <em>eth0</em>.</p>
<p><span style="color: #505050;"><em>Terzo test: spegnimento improvviso nodo master</em></span></p>
<p>Ecco cosa avviene all&#8217;atto di spegnimento improvviso del nodo erogante i servizi:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="console" style="font-family:monospace;">Jun 18 11:00:44 debian-lenny-nodo1 heartbeat: [11076]: WARN: node debian-lenny-nodo2: is dead
Jun 18 11:00:44 debian-lenny-nodo1 heartbeat: [11076]: info: Link debian-lenny-nodo2:eth0 dead.
Jun 18 11:00:44 debian-lenny-nodo1 heartbeat: [11076]: info: Link debian-lenny-nodo2:eth1 dead.
...
Jun 18 11:00:45 debian-lenny-nodo1 crmd: [11091]: WARN: check_dead_member: Our DC node (debian-lenny-nodo2) left the cluster
...
Jun 18 11:00:48 debian-lenny-nodo1 crmd: [11091]: info: do_dc_takeover: Taking over DC status for this partition
...
Jun 18 11:00:53 debian-lenny-nodo1 pengine: [12660]: notice: unpack_config: On loss of CCM Quorum: Ignore
...
Jun 18 11:00:53 debian-lenny-nodo1 lrmd: [11088]: info: rsc:cluster-ip:13: start
...
Jun 18 11:00:53 debian-lenny-nodo1 lrmd: [11088]: info: rsc:cluster-apache2:15: start</pre></td></tr></table></div>

<p>In sequenza quanto avviene sul nodo sopravvissuto è:</p>
<ul>
<li>linea 1,2,3) Rilevazione della perdita di connettività totale con l&#8217;altro nodo;</li>
<li>linea 5) Rilevazione della perdita di <em>DC</em>;</li>
<li>linea 7) Presa i carico da parte del nodo attuale del ruolo di <em>DC</em>;</li>
<li>linea 9) Come da configurazione l&#8217;assenza di quorum viene ignorata;</li>
<li>linea 11,13) Avvio dei servizi;</li>
</ul>
<p>Il nodo <em>debian-lenny-nodo1</em> ha quindi preso in carico la totalità delle risorse, in maniera automatica.</p>
<p><span style="color: #505050;"><em>Quarto test: migrazione manuale delle risorse</em></span></p>
<p>La migrazione manuale delle risorse è possibile sempre attraverso l&#8217;utilizzo del comando <em>crm</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="console" style="font-family:monospace;"># crm resource migrate cluster debian-lenny-nodo2</pre></td></tr></table></div>

<p>In questo caso, il gruppo di risorse <em>cluster</em> viene migrato dal nodo attuale al nodo <em>debian-lenny-nodo2</em>: è possibile migrare indistintamente un gruppo o una singola risorsa, ma se questa fa parte del gruppo, allora tutto il gruppo verrà migrato.<br />
La migrazione della risorsa genera automaticamente un&#8217;aggiunta nella configurazione del cluster di questo tipo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">location cli-prefer-cluster cluster \
	rule $id=&quot;cli-prefer-rule-cluster&quot; inf: #uname eq debian-lenny-nodo2</pre></div></div>

<p>il cui scopo è chiaro: la regola infatti indica al cluster di dare priorità <em>inf</em> (ossia infinità) all&#8217;esecuzione della risorsa cluster sul nodo il cui comando <em>uname</em> equivale a <em>debian-lenny-nodo2</em>. Non a caso, la regola viene automaticamente battezzata &#8220;cli-prefer-cluster&#8221;. Va chiarito che sebbene il peso della regola sia infinito, questa decade in caso il nodo preferito smetta di funzionare.<br />
E&#8217; possibile ripristinare la migrazione attraverso il comando inverso:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm resource unmigrate cluster</pre></div></div>

<p>Tale operazione ripristinerà la situazione precedente, rimuovendo la regola aggiunta all&#8217;interno della configurazione.</p>
<p><span style="color: #505050;"><em>Quinto test: standby manuale di un nodo</em></span></p>
<p>Anche la messa in standby di un nodo è effettuabile attraverso il comando <em>crm</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm node standby debian-lenny-nodo1</pre></div></div>

<p>Lo stato del cluster al termine di questa operazione sarà quindi il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">...
Node debian-lenny-nodo1 (1984521f-539f-4967-b0ff-eb23f3cf9ccf): standby
Online: [ debian-lenny-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ debian-lenny-nodo2 ]
     Stopped: [ ping:0 ]
 Resource Group: cluster
     cluster-ip (ocf::heartbeat:IPaddr2):       Started debian-lenny-nodo2
     cluster-apache2    (ocf::heartbeat:apache):        Started debian-lenny-nodo2</pre></div></div>

<p>Le risorse vengono correttamente migrate sul nodo secondario ed il nodo primario viene messo in stato &#8220;standby&#8221;. Per ripristinare la situazione è sufficiente anche in questo caso forzare <em>debian-lenny-nodo1</em> a tornare online:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm node online debian-lenny-nodo1</pre></div></div>

<p><span style="color: #505050;"><em>Sesto test: interruzione manuale di un servizio</em></span></p>
<p>L&#8217;ultimo test della serie prevede l&#8217;interruzione manuale di un servizio. Verrà simulato il <em>crash</em> del servizio <em>apache2</em> tramite un comando <em>kill</em>, Il presupposto è che il servizio <em>apache2</em> sia in esecuzione su <em>debian-lenny-nodo1</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># killall apache2</pre></div></div>

<p>Ecco le operazioni che il cluster esegue per porre rimedio alla situazione:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="console" style="font-family:monospace;">Jun 18 11:29:21 debian-lenny-nodo1 apache[24129]: [24187]: INFO: apache not running
...
Jun 18 11:29:21 debian-lenny-nodo1 crmd: [11091]: WARN: update_failcount: Updating failcount for cluster-apache2 on debian-lenny-nodo1 after failed monitor: rc=7 (update=value++, time=1276853361)
...
Jun 18 11:29:22 debian-lenny-nodo1 lrmd: [11088]: info: rsc:cluster-apache2:45: start</pre></td></tr></table></div>

<p>In sequenza quello che avviene è:</p>
<ul>
<li>linea 1) Il monitor ha rilevato che il servizio non sta funzionando;</li>
<li>linea 3) Pacemaker aggiorna il conteggio dei disservizi relativi alla risorsa cluster-apache2;</li>
<li>linea 5) La risorsa viene nuovamente eseguita;</li>
</ul>
<p>La risorsa è di nuovo attiva e funzionante.</p>
<p>E&#8217; possibile monitorare in maniera costante lo stato del cluster attraverso il comando <em>crm_mon</em> il cui funzionamento consiste nell&#8217;esecuzione del comando <em>crm status</em> ad intervalli regolari. <em>crm_mon</em> supporta il parametro <em>&#8211;failcount</em> che permette di avere un sommario dei disservizi rilevati sul cluster. Nell&#8217;esempio illustrato, l&#8217;output del comando sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">...
Online: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
&nbsp;
 Clone Set: ping_clone
     Started: [ debian-lenny-nodo1 debian-lenny-nodo2 ]
 Resource Group: cluster
     cluster-ip (ocf::heartbeat:IPaddr2):       Started debian-lenny-nodo1
     cluster-apache2    (ocf::heartbeat:apache):        Started debian-lenny-nodo1
&nbsp;
Migration summary:
* Node debian-lenny-nodo1: 
   ping:0: migration-threshold=1000000 fail-count=1
   cluster-apache2: migration-threshold=1000000 fail-count=1
* Node debian-lenny-nodo2:</pre></div></div>

<p>Il Migration summary presenta la situazione relativa alle risorse intaccate dai nostri test, il cui conteggio dei disservizi è 1 (fail-count=1).<br />
E&#8217; possibile azzerare tale conteggio effettuando un cleanup della risorsa:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># crm resource cleanup cluster-apache2
Cleaning up cluster-apache2 on debian-lenny-nodo1
Cleaning up cluster-apache2 on debian-lenny-nodo2</pre></div></div>

<p><strong>Conclusioni</strong></p>
<p>Giunti al termine di questo lunghissimo articolo le conclusioni da trarre sono molteplici. La prima di queste è che l&#8217;argomento Heartbeat/Pacemaker risulta tutt&#8217;altro che esaurito: esistono moltissime altre componenti del progetto che qui non sono state nemmeno accennate. Certo è che da questo confronto balza subito all&#8217;occhio come le differenze tra i due tipi di impiego siano sostanziali. La soluzione Heartbeat/Pacemaker sebbene sia evidentemente complicata offre un controllo insperato su tutte le componenti del cluster, oltre ad un monitoraggio costante di tutte le risorse configurate. L&#8217;implementazione della soluzione classica è immediata, ma come si è visto limitata.<br />
La scelta su quale sia la scelta migliore per la propria infrastruttura è unicamente dell&#8217;utente, che come sempre nel mondo OpenSource è libero di scegliere, sperimentare e realizzare.<br />
Nel prossimo articolo verrà presentata una soluzione Heartbeat/Pacemaker per implementare uno <em>Storage NFS Active/Active</em> basato su <em>DRBD</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2010/06/evoluzione-dellalta-affidabilita-su-linux-confronto-pratico-tra-heartbeat-classico-ed-heartbeat-con-pacemaker/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Evoluzione dell’alta affidabilità su Linux: come orientarsi fra Hertbeat, Pacemaker, OpenAIS e Corosync</title>
		<link>http://www.miamammausalinux.org/2010/04/evoluzione-dellalta-affidabilita-su-linux-come-orientarsi-fra-hertbeat-pacemaker-openais-e-corosync/</link>
		<comments>http://www.miamammausalinux.org/2010/04/evoluzione-dellalta-affidabilita-su-linux-come-orientarsi-fra-hertbeat-pacemaker-openais-e-corosync/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 12:51:39 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Corosync]]></category>
		<category><![CDATA[Heartbeat]]></category>
		<category><![CDATA[Linux HA]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[Alta affidabilità]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[OpenAIS]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=871</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160; Orientarsi nell&#8217;attuale panorama dei cluster sotto Linux potrebbe essere, particolarmente per un neofita, molto complicato. L&#8217;insieme di progetti, nomi e versioni è certamente variegato. Ottenere alta affidabilità di servizi sotto Linux è possibile in svariati modi: si può optare per una soluzione completamente commerciale come Veritas Cluster (http://www.symantec.com/it/it/business/cluster-server), si può considerare un prodotto Opensource [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux-ha.png" alt="linux-ha" title="linux-ha" width="100" height="100" class="alignnone size-full wp-image-259" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/11/pacemaker.png" alt="Pacemaker" title="pacemaker" width="100" height="100" class="size-full wp-image-872" /></p>
<p>Orientarsi nell&#8217;attuale panorama dei cluster sotto Linux potrebbe essere, particolarmente per un neofita, molto complicato. L&#8217;insieme di progetti, nomi e versioni è certamente variegato.<br />
Ottenere alta affidabilità di servizi sotto Linux è possibile in svariati modi: si può optare per una soluzione completamente commerciale come <em>Veritas Cluster</em> (<a href="http://www.symantec.com/it/it/business/cluster-server">http://www.symantec.com/it/it/business/cluster-server</a>), si può considerare un prodotto Opensource sponsorizzato da un&#8217;azienda commerciale come la <em>RedHat Cluster Suite</em> (<a href="http://www.redhat.com/cluster_suite/">http://www.redhat.com/cluster_suite/</a>), prodotta e manutenuta come dice il nome stesso da RedHat (ma disponibile per quasi tutte le distribuzioni) oppure utilizzare <em>Hertbeat</em> (<a href="http://www.linux-ha.org/">http://www.linux-ha.org/</a>) prodotto e manutenuto dalla comunità del progetto <strong>Linux-HA</strong>.<br />
Questo primo articolo cerca di analizzare l&#8217;evoluzione del progetto Heartbeat, facendo luce su quali siano oggi i software da utilizzare per creare un&#8217;architettura ad alta affidabilità attraverso i software OpenSource disponibili: Hertbeat stesso, Pacemaker sino ad arrivare alla Standard Based Cluster Framework con OpenAIS e Corosync.</p>
<p><strong>In principio era Heartbeat</strong></p>
<p>Il progetto Heartbeat nasce nel 1999 con l&#8217;obiettivo di creare e diffondere un software Opensource in grado di garantire l&#8217;alta affidabilità nei servizi erogati da sistemi Linux.<br />
Heartbeat è di fatto un software per creare cluster di servizi. Un cluster di servizi è composto da un insieme di macchine, definite <em>nodi</em>, sulle quali vengono distribuiti programmi definiti <em>risorse</em>. Se un nodo per qualsiasi ragione smette di funzionare, al suo posto ne subentra un altro in grado di garantire il funzionamento delle stesse risorse, con lo scopo di recare il minor disservizio possibile all&#8217;utente finale.<br />
Questa tipologia di funzionamento è definita <em>active-passive</em>. Una risorsa è attiva su un nodo <em>active</em> mentre gli altri nodi <em>passive</em> sono in attesa, pronti ad erogare la risorsa in caso di malfunzionamenti relativi al nodo attivo.</p>
<p>Prima della versione 2.0, Heartbeat supportava cluster composti unicamente da due macchine ed aveva strumenti integrati in grado di svolgere operazioni sulle risorse stesse in maniera limitata. Non era possibile definire priorità nell&#8217;avvio delle risorse o dipendenze di una risorsa rispetto ad un&#8217;altra. Relativamente alla singola risorsa Heartbeat si preoccupava solamente dell&#8217;avvio, del termine e del posizionamento della stessa all&#8217;interno di un nodo specifico.<br />
Il modo in cui il cluster gestiva una risorsa era definito dall&#8217;<em>RA</em>, il <em>Resource Agent</em>.<br />
Un Resource Agent era uno script a cui il sistema faceva riferimento per avviare, fermare e controllare lo stato delle risorse. I Resource Agent di Heartbeat 1 erano contenuti all&#8217;interno delle directory <em>/etc/ha.d/resource.d</em> e <em>/etc/init.d</em>. Questi altro non erano che script di avvio dei demoni che supportavano operazioni di start, stop e status. Potenzialmente quindi QUALSIASI servizio poteva essere posto sotto cluster (purché supportasse le tre operazioni citate), sebbene il controllo da parte del sistema di questi servizi fosse essenzialmente nullo.</p>
<p>I limiti insiti in un&#8217;architettura simile sono subito evidenti. Basti pensare ad uno scenario in cui Heartbeat eroga il database MySQL. Il cluster si preoccupa di avviare il servizio sul nodo attivo. Se però MySQL per qualsiasi ragione (carico di utenti eccessivo, saturazione del buffer, mancanza di spazio o banalmente uno stop manuale) smette di funzionare, Heartbeat non ovvia in alcuna maniera all&#8217;inconveniente e solo un eventuale crash del nodo attivo provoca il cosiddetto <em>switch della risorsa</em>, lo spostamento cioè della stessa sul nodo rimanente, che a sua volta diventa attivo.<br />
La possibilità di effettuare controlli sullo stato di salute delle risorse e di agire autonomamente in funzione di disservizi nelle versioni precedenti alla 2.0 di Heartbeat poteva essere abilitata mediante l&#8217;utilizzo di programmi esterni (ad esempio <a href="http://www.keepalived.org/">keepalived</a>), ma non era parte integrante del cluster.</p>
<p><strong>L&#8217;avvento del CRM</strong></p>
<p>Un gestore delle risorse è sempre esistito all&#8217;interno del software Heartbeat. In origine infatti le informazioni relative al posizionamento della risorse ed alla struttura del cluster venivano lette in fase di avvio da due file di testo:</p>
<ul>
<li><em>/etc/ha.d/ha.cf</em> contenente la definizione della struttura del cluster (numero ed indirizzo dei nodi, tempistiche di controllo, politica relativa ai log);
</li>
<li><em>/etc/ha.d/haresources</em> contenente la definizione delle risorse erogate dal cluster;
</li>
</ul>
<p>Questi file (identici su entrambi i nodi) contenevano informazioni che così come erano scritte, tali rimanevano sino al termine dell&#8217;esecuzione del programma Heartbeat.<br />
La configurazione era quindi statica ed una variazione, per essere assimilata dal sistema, comportava il cosiddetto <em>reload</em> del servizio Heartbeat, una rilettura totale dei file di configurazione.</p>
<p>Questo limite unito a quelli descritti nel paragrafo precedente sono stati al centro dell&#8217;evoluzione del progetto Heartbeat e sono culminati nel <em>CRM</em>, il <em>Cluster Resource Manager</em>.<br />
Il CRM introdotto con Heartbeat 2 evolve radicalmente la funzione del gestore delle risorse attraverso una gestione dinamica delle stesse, un totale controllo sui servizi erogati ed il supporto ad un numero di nodi maggiore di due.<br />
Se abilitato (esplicitamente, all&#8217;interno della configurazione di Heartbeat) il CRM consente infatti di gestire l&#8217;avvio e la destinazione delle risorse, raggrupparle, controllarne lo stato di salute e definire priorità di esecuzione di una risorsa rispetto ad un&#8217;altra. Se non abilitato Heartbeat continua a funzionare nella maniera classica descritta in precedenza.<br />
Utilizzando il CRM, tutte le informazioni relative alla configurazione dei nodi, delle risorse ed dello stato generale del cluster sono mantenute all&#8217;interno di un unico file XML denominato <em>CIB</em>, <em>Cluster Information Base</em>.<br />
I file che dalla versione 2 di Heartbeat permettono di definire il cluster sono quindi due:</p>
<ul>
<li><em>/etc/ha.d/ha.cf</em> contenente la definizione della struttura del cluster (che dichiara anche l&#8217;opzione crm=on, ed indica al sistema di utilizzare il CRM);
</li>
<li><em>/var/lib/heartbeat/crm/cib.xml</em> contenente tutte le informazioni relative alle risorse ed allo stato attuale del cluster;
</li>
</ul>
<p>I file illustrati sono identici in tutti i nodi. E va sottolineato come le operazioni manuali dirette sul CIB siano sconsigliate, in quanto esistono tool appositi (primo fra tutti il comando <em>crm</em>, che verrà illustrato nei successivi articoli di questa serie) che permettono di interagire con esso.<br />
L&#8217;altra grande novità di Heartbeat 2 risiede nel modo in cui le risorse vengono gestite. Infatti il metodo attraverso Resource Agent classici (sebbene supportato) viene sconsigliato in funzione di Resource Agent di tipo <em>OCF</em>, <em>Open Clustering Framework</em>. Questi Resource Agent oltre a possedere le medesime proprietà di quelli classici (quindi start, stop e status) supportano anche ulteriori opzioni che consentono di definire in maniera approfondita il comportamento della risorsa nelle varie situazioni, per aumentare il più possibile il controllo del sistema.<br />
A differenza degli RA classici, gli RA di tipo OCF risiedono nella cartella <em>/usr/lib/ocf/resource.d/</em>.<br />
Maggiori dettagli sui Resoruce Agent di tipo OCF verranno introdotti nei successivi articoli e sono consultabili all&#8217;indirizzo <a href="http://www.linux-ha.org/HeartbeatResourceAgent">http://www.linux-ha.org/HeartbeatResourceAgent</a>.</p>
<p><strong>L&#8217;evoluzione della specie: Pacemaker</strong></p>
<p>La necessità di creare un <em>CRM</em> sempre più evoluto che potesse occuparsi a trecentosessanta gradi delle risorse, rendendo più flessibile la gestione delle stesse ed ovviando ai limiti della componente integrata è stata evidenziata a partire dal 2004, anno in cui al progetto Heartbeat è stata affiancato lo sviluppo di un CRM indipendente.<br />
Il nome di questo progetto è <a href="http://www.clusterlabs.org">Pacemaker</a>.<br />
Pacemaker rappresenta un progetto di CRM a sé stante, indipendente dalla piattaforma cluster di Heartbeat, il cui obiettivo è quello di proporre un&#8217;interfaccia comune alla gestione delle risorse del cluster.<br />
Le figure riportate di seguito (ottenute dal sito ufficiale <a href="http://www.clusterlabs.org">http://www.clusterlabs.org</a>) riassumono le diverse tipologie di funzionamento di Pacemaker, partendo dalla classica Active-Passive:</p>
<div id="attachment_951" class="wp-caption alignnone" style="width: 310px"><a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/pacemaker-active-passive.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/pacemaker-active-passive-300x225.png" alt="Figura 1" title="pacemaker-active-passive" width="300" height="225" class="size-medium wp-image-951" /></a><p class="wp-caption-text">Figura 1</p></div>
<p>passando dal supporto di più nodi:</p>
<div id="attachment_953" class="wp-caption alignnone" style="width: 310px"><a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/pacemaker-n-plus-1.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/pacemaker-n-plus-1-300x225.png" alt="Figura 2" title="pacemaker-n-plus-1" width="300" height="225" class="size-medium wp-image-953" /></a><p class="wp-caption-text">Figura 2</p></div>
<p>per arrivare al supporto di più nodi collegati al medesimo storage:</p>
<div id="attachment_954" class="wp-caption alignnone" style="width: 310px"><a href="http://www.miamammausalinux.org/wp-content/uploads/2010/03/pacemaker-n-to-n.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2010/03/pacemaker-n-to-n-300x225.png" alt="Figura 3" title="pacemaker-n-to-n" width="300" height="225" class="size-medium wp-image-954" /></a><p class="wp-caption-text">Figura 3</p></div>
<p>Ciascuna di queste tipologie di cluster rappresenta i diversi livelli di complessità ottenibili mediante l&#8217;impiego di Pacemaker.<br />
In questo primo articolo le informazioni illustrate vanno prese con beneficio di inventario, in quanto temi come DRBD o Load Balancing non sono ancora stati trattati. Ciò che però è importante capire sono i tre livelli nei quali il cluster viene diviso:</p>
<ul>
<li><em>Il livello hardware</em>: rappresentato dai nodi fisici;</li>
<li><em>Il cluster stack</em>: rappresentato dall&#8217;unione del CRM con il sistema di gestione della comunicazione dei nodi;</li>
<li><em>Il livello servizi</em>: rappresentato dall&#8217;insieme dei servizi del sistema che verranno fruiti;</li>
</ul>
<p>Balzerà all&#8217;occhio il fatto che all&#8217;interno del <em>cluster stack</em>, il sistema di gestione della comunicazione dei nodi è identificato come OpenAIS e non come Heartbeat. ll motivo di questo è spiegato nell&#8217;ultimo paragrafo di questo primo articolo. </p>
<p><strong>OpenAIS: l&#8217;avvento dello Standard Based Cluster Framework</strong></p>
<p>In tutte le immagini illustrate nel precedente paragrafo il cosiddetto <em>cluster stack</em> è rappresentato dall&#8217;unione di due componenti: la prima è il CRM su cui è stata fatta sufficiente chiarezza, la seconda è OpenAIS.<br />
Secondo la definizione ufficiale, OpenAIS è uno <em>Standard Based Cluster Framework</em> (ossia una struttura di supporto standard per i cluster) che implementa una serie di <em>API</em> (<em>Application Programming Interface</em>, un insieme di strumenti specifici) e di politiche volte a sviluppare applicazioni che mantengono attivi i servizi nonostante potenziali malfunzionamenti.<br />
OpenAIS rappresenta quindi il mezzo utilizzato dal sistema per garantire la comunicazione tra i nodi e permettere al CRM di interagire con gli stessi.<br />
Questo spiega la presenza di OpenAIS nelle figure presentate: la decisione su cosa utilizzare per rendere disponibile la struttura di supporto del cluster a Pacemaker è dell&#8217;utente, poiché Heartbeat non è il solo strumento utilizzabile che supporta lo <em>Standard Based Cluster Framework</em>.<br />
In origine il progetto OpenAIS oltre al Framework rendeva disponibile anche il <em>cluster engine</em>, il programma per la gestione dell&#8217;infrastruttura del cluster. Dal Luglio 2008 la parte relativa al cluster engine di OpenAIS è stata separata in un progetto a sé stante denominato <a href="http://www.corosync.org">Corosync</a>.<br />
Corosync è un <em>cluster engine</em> che si pone allo stesso livello di Heartbeat, il cui modello di configurazione verrà illustrato nei prossimi articoli.</p>
<p><strong>Conclusioni</strong></p>
<p>Il numero di nomi e definizioni illustrate in quest&#8217;articolo è oggettivamente enorme e giustifica la difficoltà nel mettere insieme le cose. La stesura di questo articolo ha richiesto molto più tempo del previsto proprio per via del fatto che oltre ai nomi, anche i concetti esposti sono moltissimi e parecchio complicati.<br />
Il rischio è quindi che queste tecnologie, che sono alla portata di tutti, rimangano confinate ai margini dell&#8217;utilizzo per via di tutte le variazioni che nel tempo hanno riguardato i vari progetti.<br />
Questo non deve succedere: le potenzialità di Pacemaker (con Hertbeat o Corosync) sono enormi e sarà evidente nel corso dei successivi articoli in cui finalmente verrà illustrato come mettere in pratica tutte queste tecnologie OpenSource.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2010/04/evoluzione-dellalta-affidabilita-su-linux-come-orientarsi-fra-hertbeat-pacemaker-openais-e-corosync/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

