X

News, tips, partners, and perspectives for the Oracle Solaris operating system

Introducción a PxFS e información sobre montaje global

Guest Author

Si utiliza el software Sun Cluster, también utiliza el sistema de archivos Proxy (PxFS). Gracias a PxFS, es posible utilizar dispositivos globales, que son un elemento central para la administración de dispositivos en un clúster. Esta tecnología ya está presente en nuestras vidas y ahora es un buen momento para explicar parte de las características de PxFS. Presentaré la arquitectura de PxFS con referencias de código fuente. Para ello, utilizaré un blog en el que iré publicando entradas. En esta, presentaré PxFS y explicaré el montaje global.

PxFS es una capa de protocolos que distribuye un sistema de archivos basado en disco en un sistema compatible con POSIX y con gran disponibilidad en los nodos del clúster. Se puede proporcionar acceso simultáneo y compatible con POSIX desde varios nodos sin la necesidad de solicitar un bloqueo en el nivel de archivos desde las aplicaciones. El único requisito para que el administrador realice un montaje global es asegurarse de que el punto de montaje existe en todos los nodos del clúster. A continuación, agregue una "-g" al comando de montaje y éste será global. En la siguiente entrada de blog, se explica la terminología.

En primer lugar, permítame mostrar lo fácil que es crear y montar un sistema de archivos UFS globalmente, incluso sin utilizar un dispositivo físico dedicado. Crearé un dispositivo lofi, lo formatearé como UFS y lo montaré globalmente.

Nota: no intente realizar este proceso en Solaris 9, ya que esta versión de Solaris presenta un error de lofs que puede bloquear el sistema.


# mkfile 100m /var/tmp/100m
# LOFIDEV=`lofiadm -a /var/tmp/100m`
# yes | newfs ${LOFIDEV}

Montemos el clúster de dispositivos lofi anterior (asegúrese de que el directorio de destino exista en todos los nodos).



# mount -g ${LOFIDEV} /mnt

¡Ya está! Puede acceder a /mnt en cualquier nodo del clúster y llegar al sistema de archivos UFS en el dispositivo lofi en el nodo1 de forma transparente.

Ahora explicaremos más detalladamente el montaje global. Para ello, utilizaremos el ejemplo de un montaje global de un sistema de archivos de un almacenamiento compartido. Contamos con un clúster de tres nodos, con el nodo2 y nodo3, con conexión directa al almacenamiento compartido. El metadispositivo svm "/dev/md/mydg/dsk/d42" se montará de forma global en el directorio "/global/answer" desde el nodo1.

Para conocer la referencia de código, el inicio de los servicios PxFS se produce aquí.

El sistema secundario de montaje es un servicio HA (alta disponibilidad). Un servicio HA en la jerga de clúster significa que el servicio cuenta con capacidad de conmutación por error. Cualquier servicio HA cuenta con un equipo principal y uno o más secundarios. Cualquiera de estos equipos secundarios se puede convertir en principal si éste tiene un fallo. Este cambio de secundario a principal es transparente para las aplicaciones.

En todas las configuraciones de clúster, siempre hay un único equipo principal de servicio de montaje. El resto de nodos tendrán equipos secundarios de servicio de montaje. Todos los nodos del clúster también tendrán un cliente de montaje creado cuando los montajes globales se habiliten por primera vez para el nodo.

El equipo principal y secundario de montaje son dos caras del objeto de repetición de montaje, que se crea cuando el nodo se une al clúster. Este es el código que crea el servidor de repetición de montaje. El marco de repetición garantiza que sólo habrá un equipo principal cada vez y que cambiará un secundario a un principal siempre que sea necesario.

Para ver la secuencia de operaciones mientras se realiza un montaje global, consulte la imagen que aparece a continuación. Se muestran en secuencia numérica varios pasos que se producen durante el montaje global. Si coloca el ratón en el número, aparecerá una explicación del paso, con vínculos al código correspondiente.




Step 1href="javascript:void(0)"
onmouseover="Tip('El comando de montaje global, mount -g, se puede emitir desde cualquier nodo del clúster. Accede al núcleo y un montaje genérico redirige la llamada a PxFS. En este punto, el directorio que se va a montar está bloqueado.
onnv-gate/usr/src/uts/common/syscall/mount.c#125
ohac/ohac/usr/src/common/cl/pxfs/client/pxvfs.cc#594', WIDTH, 400, TITLE, 'Paso 1 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 2href="javascript:void(0)"
onmouseover="Tip('El cliente PxFS notifica al servidor de montaje esta solicitud de montaje global mediante el cliente de montaje en dicho nodo. El cliente de montaje tendrá la referencia del servidor.
ohac/ohac/usr/src/common/cl/pxfs/client/pxvfs.cc#999', WIDTH, 400, TITLE, 'Paso 2 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 3href="javascript:void(0)"
onmouseover="Tip('A su vez, el servidor de montaje solicita a todos los clientes, excepto al nodo de origen, en nuestro caso, el nodo1, que bloqueen el punto de montaje.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1204', WIDTH, 400, TITLE, 'Paso 3 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 3href="javascript:void(0)"
onmouseover="Tip('A su vez, el servidor de montaje solicita a todos los clientes, excepto al nodo de origen, en nuestro caso, el nodo1, que bloqueen el punto de montaje.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1204', WIDTH, 400, TITLE, 'Paso 3 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 4href="javascript:void(0)"
onmouseover="Tip('

Para los dispositivos compartidos, el servidor de montaje crea un dispositivo principal y uno secundario. El nodo en el que el dispositivo es principal es el equipo principal PxFS. Para los dispositivos locales, el montaje no es de HA y se crea un servidor PxFS sin repetición. El ejemplo de dispositivo lofi que se muestra anteriormente provocará la creación de un servidor PxFS sin repetición en el nodo1.

El servidor PxFS realiza un montaje oculto del dispositivo. Los detalles del montaje se encuentran en el objeto de servidor PxFS.

ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1237
ohac/ohac/usr/src/common/cl/pxfs/server/repl_pxfs_server.cc#125', WIDTH, 400, TITLE, 'Paso 4 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 4href="javascript:void(0)"
onmouseover="Tip('

Para los dispositivos compartidos, el servidor de montaje crea un dispositivo principal y uno secundario. El nodo en el que el dispositivo es principal es el equipo principal PxFS. Para los dispositivos locales, el montaje no es de HA y se crea un servidor PxFS sin repetición. El ejemplo de dispositivo lofi que se muestra anteriormente provocará la creación de un servidor PxFS sin repetición en el nodo1.

El servidor PxFS realiza un montaje oculto del dispositivo. Los detalles del montaje se encuentran en el objeto de servidor PxFS.

ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1237
ohac/ohac/usr/src/common/cl/pxfs/server/repl_pxfs_server.cc#125', WIDTH, 400, TITLE, 'Paso 4 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 5href="javascript:void(0)"
onmouseover="Tip('El servidor de montaje transfiere una referencia al servidor creado recientemente para todos los clientes de montaje y solicita a los clientes que realicen un montaje PxFS visible para los usuarios.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1438
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1684', WIDTH, 400, TITLE, 'Paso 5 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 5href="javascript:void(0)"
onmouseover="Tip('El servidor de montaje transfiere una referencia al servidor creado recientemente para todos los clientes de montaje y solicita a los clientes que realicen un montaje PxFS visible para los usuarios.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1438
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1684', WIDTH, 400, TITLE, 'Paso 5 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 5href="javascript:void(0)"
onmouseover="Tip('El servidor de montaje transfiere una referencia al servidor creado recientemente para todos los clientes de montaje y solicita a los clientes que realicen un montaje PxFS visible para los usuarios.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1438
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1684', WIDTH, 400, TITLE, 'Paso 5 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 6href="javascript:void(0)"
onmouseover="Tip('El cliente de montaje crea y agrega una entrada vfs_t del mismo tipo que el sistema de archivos subyacente.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1804
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1817', WIDTH, 400, TITLE, 'Paso 6 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 6href="javascript:void(0)"
onmouseover="Tip('El cliente de montaje crea y agrega una entrada vfs_t del mismo tipo que el sistema de archivos subyacente.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1804
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1817', WIDTH, 400, TITLE, 'Paso 6 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />
Step 6href="javascript:void(0)"
onmouseover="Tip('El cliente de montaje crea y agrega una entrada vfs_t del mismo tipo que el sistema de archivos subyacente.
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1804
ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1817', WIDTH, 400, TITLE, 'Paso 6 para un montaje global', SHADOW, true, FADEIN, 300, FADEOUT, 300, STICKY, 1, CLOSEBTN, true, CLICKCLOSE, true)"
onmouseout="UnTip()" />

A continuación se muestran los pasos de la imagen anterior para una lectura más sencilla.


  1. El comando de montaje global, mount -g, se puede emitir desde cualquier nodo del clúster. Accede al núcleo y un montaje genérico redirige la llamada a PxFS. En este punto, el directorio que se va a montar está bloqueado.

    http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/syscall/mount.c#125
    http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/client/pxvfs.cc#594

  2. El cliente PxFS notifica al servidor de montaje esta solicitud de montaje global mediante el cliente de montaje en dicho nodo. El cliente de montaje tendrá la referencia del servidor.

    http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/client/pxvfs.cc#999

  3. A su vez, el servidor de montaje solicita a todos los clientes, excepto al nodo de origen, en nuestro caso, el nodo1, que bloqueen el punto de montaje.

    http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1204

  4. Para los dispositivos compartidos, el servidor de montaje crea un dispositivo PxFS principal y uno secundario. El nodo en el que el dispositivo es principal es el equipo principal PxFS. Para los dispositivos locales, el montaje no es de HA y se crea un servidor PxFS sin repetición. El ejemplo de dispositivo lofi mostrado anteriormente provocará la creación de un servidor PxFS sin repetición en el nodo1.

    El servidor PxFS realiza un montaje oculto del dispositivo. Los detalles del montaje se encuentran en el objeto de servidor PxFS.

    http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1237 http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/server/repl_pxfs_server.cc#125

  5. El servidor de montaje transfiere una referencia al servidor creado recientemente para todos los clientes de montaje y solicita a los clientes que realicen un montaje PxFS visible para los usuarios.

    http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/mount/mount_server_impl.cc#1237 http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/server/repl_pxfs_server.cc#125

  6. El cliente de montaje crea y agrega una entrada vfs_t del mismo tipo que el sistema de archivos subyacente.

    http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1804 http://src.opensolaris.org/source/xref/ohac/ohac/usr/src/common/cl/pxfs/mount/mount_client_impl.cc#1817

Ahora, el montaje es visible en todos los clientes. Todavía hay más aspectos interesantes sobre las tareas del sistema secundario de montaje, como el inicio de una repetición fs cuando el nodo se une al clúster o la creación de un dispositivo principal o secundario PxFS cuando un nodo que está conectado al almacenamiento se une al clúster, etc. La siguiente aportación será sobre cómo funciona el acceso habitual a archivos en PxFS.

Quiero expresar mi agradecimiento a Walter Zorn por la biblioteca javascript que hizo que las sugerencias fueran mucho más sencillas.


Binu Philip
, Departamento de ingeniería de Solaris Cluster

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.