<?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>PHPBSD.net &#187; cluster</title>
	<atom:link href="http://www.phpbsd.net/tag/cluster/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpbsd.net</link>
	<description>Blogueando sobre PHP, BSD, SEO, AJAX, Seguridad, Rendimiento... y mucho más</description>
	<lastBuildDate>Thu, 07 Oct 2010 11:57:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Servidor de actualizaciones software en un clúster FreeBSD</title>
		<link>http://www.phpbsd.net/2006/11/26/servidor-de-actualizaciones-software-en-un-cluster-freebsd/</link>
		<comments>http://www.phpbsd.net/2006/11/26/servidor-de-actualizaciones-software-en-un-cluster-freebsd/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 02:16:43 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[ports]]></category>
		<category><![CDATA[portupgrade]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2006/11/26/servidor-de-actualizaciones-software-en-un-cluster-freebsd/</guid>
		<description><![CDATA[Como culminación a la serie de post dedicados a instalaciones y  actualizaciones de software en FreeBSD voy a explicar como montar un servidor  de paquetes de software compilado en FreeBSD 6.1. Este procedimiento describe  como mantener actualizadas un grupo de máquinas con los mismos programas  instalados, como por ejemplo un clúster [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2006/11/14/actualiza-tu-freebsd-a-toda-pastilla-con-portsnap/' rel='bookmark' title='Permanent Link: Actualiza tu FreeBSD a toda pastilla con portsnap'>Actualiza tu FreeBSD a toda pastilla con portsnap</a></li><li><a href='http://www.phpbsd.net/2006/10/21/manten-al-dia-tu-freebsd-usando-cvsup/' rel='bookmark' title='Permanent Link: Mantén al día tu FreeBSD usando CVSup'>Mantén al día tu FreeBSD usando CVSup</a></li><li><a href='http://www.phpbsd.net/2007/04/26/instalacion-del-apc-alternative-php-cache-sobre-freebsd/' rel='bookmark' title='Permanent Link: Instalación del APC (Alternative PHP Cache) sobre FreeBSD'>Instalación del APC (Alternative PHP Cache) sobre FreeBSD</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Como culminación a la serie de post dedicados a instalaciones y  actualizaciones de software en FreeBSD voy a explicar como montar un servidor  de paquetes de software compilado en FreeBSD 6.1. Este procedimiento describe  como mantener actualizadas un grupo de máquinas con los mismos programas  instalados, como por ejemplo un clúster de servidores Apache con PHP.</p>
<p>A la serie de artículos acerca de cvsup, portsnap, buildworld, sólo le faltaba  uno explicando como usar portupgrade. En este post se mostrará un poco su uso,  aunque es una herramienta muy potente y con la que vas a tener que trabajar  bastante (como rpm para RedHat o apt para Debian), es  obligatorio un &#8220;man  portupgrade&#8221;.</p>
<p>El objetivo del invento es sencillo, la idea es que una máquina se encargue de  descargar el código fuente, compilarlo y generar paquetes binarios de los  programas para que las demás máquinas lo instalen directamente. De esta forma  invirtiendo el mínimo tiempo podemos trabajar controlando el código fuente  con todas las ventajas que esto conlleva (añadir opciones extra en un  Makefile del PHP o Apache, etc.), a parte de que en FreeBSD es necesario  pasar por la compilación de los ports para estar realmente a la última (en  rapidez en sacar las últimas versiones de software ganamos a la mayoría de  distros linux :)</p>
<p>Se asume que todas las máquinas que queremos mantener actualizadas son clones,  es decir, tienen el  mismo software instalado. Si tienes varios tipos de máquina una posible  solución es tener instalado todo el software en la que actúa de master,  aunque el sistema es suficientemente flexible como para tener varios  servidores de paquetes o servidores de determinados tipos de paquetes. Al  mismo tiempo si se muere el master cualquier otro clon del clúster puede  continuar  su función.</p>
<p>Es cierto que con FreeBSD para disponer de un clúster de servidores con  exactamente las  mismas versiones de ports instaladas podemos tirar por compartir /usr/local  por NFS pero con /usr/local/etc en local en cada máquina vía softlink. Con  esto sólo será necesario administrar el software en una máquina. El problema  es la dependencia que crea con el servidor de archivos (ya podemos tener un  buen failover) a parte de que el NFS tiene un límite y veremos que con unas  cuantas decenas de máquinas con el /usr/local compartido y con más  directorios compartidos (p.e. el document root del apache, caches de disco,  etc.), se empiezan a bloquear procesos por acceso a NFS&#8230;. entonces tendrás  que empezar a pensar  en un clúster de servidores de archivos. Es una opción viable y aplicada en  muchos casos pero en general es recomendable reducir al mínimo los  servicios extra entre las máquinas de un clúster.. ya tenemos ocupados los  recursos con su función principal (web, mail, etc.).</p>
<p><strong>Requisitos para los clones y el servidor</strong></p>
<p><strong>[1]</strong> Instalar portupgrade</p>
<p>Podemos instalarlo de binario:</p>
<p><code># pkg_add -r portupgrade</code></p>
<p>o compilando:</p>
<p><code># cd /usr/ports/sysutils/portupgrade<br />
# make install clean</code></p>
<p>Es recomendable conseguir instalar la misma versión del portupgrade tanto en  el servidor como en los clones. No es mala idea tirar del binario al  principio para ganar tiempo ya que igualmente si pretendemos estar al día de  versiones lo acabaremos compilando no muy tarde (es un paquete que se  actualiza con bastante frecuencia).</p>
<p><strong>[2]</strong> Preparar el entorno</p>
<p>Fijar las siguientes variables de entorno en tu .bash_profile (asumiendo  trabajas con bash):</p>
<p><code>PACKAGES=/var/portupgrade/packages; export PACKAGES<br />
PKG_PATH=/var/portupgrade/packages/All; export PKG_PATH<br />
PKG_TMPDIR=/var/portupgrade/temp; export PKG_TMPDIR<br />
PKG_FETCH=/usr/bin/false ; export PKG_FETCH</code></p>
<p><strong>Requisitos sólo para el servidor</strong></p>
<p><strong>[1]</strong> Crear el directorio para los paquetes</p>
<p>Crear un directorio con suficiente espacio para los paquetes, backups, y  archivos temporales. Dependiendo de la cantidad de  paquetes pueden ser centenares de megas.</p>
<p><code># mkdir -p /var/portupgrade/packages /var/portupgrade/temp</code></p>
<p><strong>Servidor de paquetes</strong></p>
<p><strong>[1]</strong> Iniciar el árbol de ports</p>
<p>Si no lo tienes ya seguir el post <a title="Actualiza tu FreeBSD a toda pastilla con portsnap" href="http://www.phpbsd.net/2006/11/14/actualiza-tu-freebsd-a-toda-pastilla-con-portsnap/">Actualiza tu FreeBSD a toda pastilla con portsnap</a> para tener /usr/ports bajo  control y al día con portsnap</p>
<p><strong>[2]</strong> Instalación de software</p>
<p>Para instalar ports y que portupgrade nos genere el binario en el directorio anteriormente creado:</p>
<p><code># portinstal -p [port]</code></p>
<p><strong>[3]</strong> Actualización de todo lo instalado</p>
<p>Para actualizar todos los ports instalados generando el paquete binario y  guardando backup.</p>
<p>- Actualizamos el árbol de ports con portsnap:</p>
<p><code># portsnap fetch update</code></p>
<p>- Solucionamos posibles problemas con la BD de paquetes instalados antes de  empezar (opcional pero recomendado):</p>
<p><code># pkgdb -F</code></p>
<p>- Descargamos todo lo que vamos a necesitar para no interrumpir el proceso de  actualización por un fallo de red (opcional pero recomendado):</p>
<p><code># portupgrade -aRF</code></p>
<p>- Actualizamos todo generando paquetes binarios y guardando backup de las  versiones actualmente instaladas:</p>
<p><code># portupgrade -abRp</code></p>
<p><strong>[4]</strong> Distribución de software</p>
<p>Ahora sólo falta disponer de los directorios /usr/ports y /var/portupgrade en  los clones. Para conseguir esto existen varias alternativas y no es  objetivo de este post su detalle, pero básicamente tenemos dos métodos:</p>
<ul>
<li>copiamos el contenido a los clones con algo como rsync o cualquier  otra utilidad.</li>
<li>compartimos los directorios, por ejemplo con NFS.</li>
</ul>
<p>Compartir el directorio es lo más cómodo y recomendado, lo ideal es contar con  un sistema redundante (algo como <a target="_blank" title="DRBD" href="http://www.drbd.org/">DRBD</a> p.e.) aunque si perdemos  estos directorios o al propio servidor que actúa como master cualquiera de las  máquinas puede pasar a ser master, sólo tiene que iniciar el árbol de ports  como se ha descrito anteriormente y crear los directorios en /var/portupgrade.</p>
<p><strong>Clones</strong></p>
<p>A continuación describo como instalar software en los clones. Es recomendable  no instalar y/o actualizar software en todas las máquinas a la vez, primero  deberiamos probar el proceso en un sólo clon o idealmente en una máquina  dedicada a test. En ocasiones desgraciadamente existen bugs y la  instalación del port desde el código fuente no tiene el mismo resultado que  la desde el paquete binario.</p>
<p><strong>[1]</strong> Instalación de software</p>
<p>Para instalar ports y que portupgrade utilice el binario generado por el  master:</p>
<p><code># portinstal -PP [port]</code></p>
<p><strong>[2]</strong> Actualización de todo lo instalado</p>
<p>Para actualizar todo lo instalado en uno de los clones:</p>
<p><code># portupgrade -aPPR</code></p>
<p>El procedimiento aquí descrito ha sido probado con éxito en varias  instalaciones realizadas por el autor.</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2006/11/14/actualiza-tu-freebsd-a-toda-pastilla-con-portsnap/' rel='bookmark' title='Permanent Link: Actualiza tu FreeBSD a toda pastilla con portsnap'>Actualiza tu FreeBSD a toda pastilla con portsnap</a></li><li><a href='http://www.phpbsd.net/2006/10/21/manten-al-dia-tu-freebsd-usando-cvsup/' rel='bookmark' title='Permanent Link: Mantén al día tu FreeBSD usando CVSup'>Mantén al día tu FreeBSD usando CVSup</a></li><li><a href='http://www.phpbsd.net/2007/04/26/instalacion-del-apc-alternative-php-cache-sobre-freebsd/' rel='bookmark' title='Permanent Link: Instalación del APC (Alternative PHP Cache) sobre FreeBSD'>Instalación del APC (Alternative PHP Cache) sobre FreeBSD</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2006/11/26/servidor-de-actualizaciones-software-en-un-cluster-freebsd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

