lunes, 22 de agosto de 2016

Instalación Básica del Servidor MongoDB usando el Código Fuente



En esta oportunidad vamos a instalar el servidor del sistema de base de datos NoSQL y orientado a documentos MongoDB en Debian GNU/Linux Jessie. Asumiremos una instalación básica en el sistema operativo que incluye el meta-paquete build-essential.

La compilación es costosa, tanto en tiempo como en el consumo de recursos (memoria RAM, CPU y espacio en disco), por lo que dispondremos de una máquina virtual para realizar esta tarea con las siguientes características: 4 CPU's, 4 GB de memoria RAM y 64 GB de disco.


Precondiciones
 
Lo primero que vamos a realizar es la instalación de todos aquellos paquetes que necesitamos para realizar una compilación exitosa:
  • git: es un conjunto de componentes lógicos que tienen como finalidad el manejo de versiones pensando en la eficiencia y la confiabilidad del mantenimiento de aplicaciones cuando éstas últimas poseen una gran cantidad de archivos de código fuente.
  • scons: es una herramienta para la construcción e instalación de software a través de scripts hechos en Python en los sistemas operativos tipo *nix.
  • libssl-dev: este paquete es parte de la implementación del proyecto OpenSSL que contiene bibliotecas de desarrollo, archivos de cabecera y páginas del manual para libssl y libcrypto que permiten la comunicación segura a través de Internet.
  • libboost-filesystem-dev: la biblioteca Boost Filesystem provee soluciones portables para consultar y manipular rutas, archivos y directorios facilitando las operaciones dentro de scripts o programas en C++.
  • libboost-program-options-dev: esta biblioteca le permite a los desarrolladores obtener las opciones de los programas mediante una dupla (clave, valor) a través de métodos convencionales tales como la línea de comandos y el archivo de configuración.
  • libboost-system-dev: la biblioteca Boost System ofrece objetos simples y livianos del tipo error_code que encapsulan los valores de los códigos de error específicos del sistema, y proporcionan acceso a las condiciones de error más abstractas a través de objetos del tipo error_condition. Dado que los objetos error_code pueden representar errores procedentes de distintas fuentes del sistema operativo, cada codigo_error y error_condition tiene un error_category asociado.
  • libboost-thread-dev: herramienta para la escritura de programas en C++ que se ejecutan como múltiples hilos de ejecución de forma asíncrono e independiente. Cada hilo tiene su propio estado de máquina incluyendo contador de instrucciones de programa y registros.
# apt-get  install  -y  git  scons  libssl-dev  libboost-filesystem-dev  libboost-program-options-dev  libboost-system-dev  libboost-thread-dev


Descarga del código fuente del core

Iniciaremos la descarga del código fuente desde el repositorio de git oficial, esta tarea demorará unos minutos.
$ git  clone  https://github.com/mongodb/mongo.git
Después de culminar con la clonación del proyecto entramos en la carpeta mongo/ y revisamos las etiquetas de las versiones tal y como se muestra a continuación.
$ cd  mongo/
$ git  tag  -l  |  grep  -v  rc
Podemos seleccionar cualquiera de las versiones del repositorio, sin embargo escogeremos la versión r3.2.9 por ser la última estable (al momento de realizar esta entrada).
$ git  checkout  r3.2.9


Compilación e instalación

Lo primero que vamos a realizar es ubicarnos dentro del directorio recién descargado mongo/ y desde allí vamos a iniciar el proceso, indicándole a la herramienta SCons que vamos a compilar todos los programas del core, trabajaremos hasta con 4 archivos de código fuente a la vez y que habilitaremos el soporte para conexiones SSL.
$ scons  -j  4  --ssl  all
Aproximadamente 72 minutos después obtendremos el mensaje “scons: done building targets.”. Cualquier otro mensaje nos indicaría la existencia de algún error en el proceso de compilación, lo cual nos llevaría a buscar una solución y posterior a esto el reinicio de la instrucción.

El siguiente paso es instalar los objetos construidos en nuestro sistema. Para ello utilizaremos la opción --prefix para especificar la ruta que contendrá la carpeta con los binarios.
# scons  -j  4  --ssl  --prefix=/usr  install
Al usar /usr como directorio padre, el proceso instalará los programas en /usr/bin, lo cual es muy recomendable para realizar la menor cantidad de modificaciones en los archivos de configuración.

Cuando termine, hallaremos el mensaje “scons: done building targets.” indicándonos la correcta creación de los programas mongo, mongod, mongos y mongoperf.


Configuración

El repositorio incluye algunos scripts que nos permiten realizar la mayor parte de la configuración recomendada para un entorno de producción en una máquina Debian. Así que nos moveremos a la carpeta debian/ y ejecutamos el archivo mongodb-org-server.postinst para que configure el usuario y grupo apropiado para la ejecución de MongoDB.
# cd  debian/
# sh  mongodb-org-server.postinst  configure
debian/mongod.conf es una copia de un archivo de configuración estándar del demonio mongod, por lo que procedemos a copiarlo en /etc.
# cp  ./debian/mongod.conf  /etc/
Después de copiar el archivo entramos a /etc/mongod.conf, ubicamos el apartado “storage:” y comentamos las líneas que tienen “journal:” y “enabled: true”.

Por último comentamos la línea que contiene “bindIp: 127.0.0.1” y agregamos otra con el siguiente contenido “bindIp: [0.0.0.0, 127.0.0.1]” con esto le indicamos al servidor de MongoDB que además de escuchar solicitudes de la máquina local, los acepte de cualquier otra máquina.


Script para la administración del servicio

Hasta ahora hemos definido el usuario y grupo con el que manejaremos el servicio de la base de datos y ya colocamos el archivo de configuración para MongoDB. El próximo paso será crear un archivo para gestionar el servicio. Este archivo de configuración que llamaremos mongodb.service lo ubicaremos en el directorio /etc/systemd/system/ y utilizando cualquier editor de texto agregaremos las siguientes líneas.
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target

[Service]
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=65536
LimitNPROC=65536
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target
La estructura del archivo se divide en tres secciones claramente definidas:
  • La sección [Unit] contiene la información general, como por ejemplo una descripción legible para el servicio así como las dependencias que se deben cumplir antes de que este se inicie. Para nuestro caso en particular MongoDB depende de una de red disponible.
  • En la sección [Service] se especifica cómo debe iniciarse el servicio. La primera línea incrementa el tamaño máximo de los archivos con los que podemos trabajar, la segunda extendemos el tiempo máximo de uso del CPU, la tercera aumenta el máximo de memoria virtual medido en kilobytes con el cual podemos trabajar. En la siguiente línea subimos el máximo número de descriptores de archivos que podemos tener abiertos; con la quinta línea incrementamos el número máximo de procesos por usuario. La directiva User especifica el usuario bajo el cual se ejecutará el servicio mongodb, y la directiva ExecStart define el comando de inicio para el servidor MongoDB.
  • La última sección es [Install] que le dice a systemd cuando el servicio debe iniciarse de forma automática. El valor de multi-user.target define la secuencia de inicio estándar del sistema, lo que significa que el servidor puede ser iniciado automáticamente durante el arranque.

Para subir el servicio necesitamos privilegios del administrador y usaremos la siguiente instrucción.
# systemctl  start  mongodb
Para bajar el servicio de MongoDB necesitaremos ejecutar el comando.
# systemctl  stop  mongodb
Para bajar el servicio de MongoDB necesitaremos ejecutar el comando.
# systemctl  status  mongodb
Hasta ahora la ejecución del servicio se realiza de forma manual, pero si queremos que inicie de forma automática cuando el sistema operativo arranque, debemos ejecutar la siguiente instrucción.
# systemctl  enable  mongodb


Entrar a MongoDB usando la consola

Para probar nuestro primer ingreso al servidor de base de datos y corroborar que la instalación y configuración quedó bien, podemos entrar a la consola desde el mismo servidor.
$ mongo
MongoDB  shell  version:  3.2.9
connecting  to:  test
>


Herramientas de MongoDB

Cuando clonamos el código fuente desde Git el proyecto solamente trae las fuentes para compilar 4 ejecutables: mongo que comprende el cliente (modo consola), mongod que es el núcleo de la base de datos, mongos que es el programa que permite trabajar mediante el esquema shard o datos fragmentados y mongoperf que chequea el desempeño de entrada y salida en disco. Estos archivos comprenden el core de la base de datos.

Sin embargo, existen otros programas que son muy útiles a la hora de trabajar con MongoDB y que no vienen incluidos en el código fuente. Estos ejecutables fueron desarrollados en el lenguaje de programación diseñado por Google llamado Go y tienen su repositorio aparte alojado en GitHub.

Estos utilitarios son: bsondump que permite mostrar de forma entendible a las personas el contenido de un archivo BSON; mogoimport/mongoexport que pueden convertir desde formatos JSON, TSV o CSV hacia una colección y viceversa; mongodump/mongorestore permiten realizar y restaurar respaldos hacia o desde archivos BSON; mongostat/mongotop permiten monitorizar el servidor, conjunto de replica o un clúster fragmentado para el primero y verificar las actividades de lectura/escritura que se realizan en el servidor con el segundo programa; mongofiles es utilizado para gestionar los archivos a utilizar bajo la especificación de almacenamiento GridFS y mongooplog utilizado para repetir las entradas oplog entre distintos servidores MongoDB.


Resolviendo Dependencias

Vamos a instalar las dependencias necesarias para compilar las herramientas de MongoDB:
  • golang: este meta-paquete garantiza la instalación de un completo ambiente de desarrollo para el lenguaje Go.
  • libsasl2-dev: este paquete incluye archivos de desarrollo para la elaboración de programas con soporte Cyrus SASL versión 2. SASL (Simple Authentication Security Layer) es un método para añadir soporte de autenticación de protocolos orientados a conexiones remotas.
  • pkg-config: es un programa que provee una interfaz unificada para llamar bibliotecas instaladas cuando se está compilando un programa a partir del código fuente.
# apt-get  install  golang  libsasl2-dev  pkg-config


Descarga del código fuente de los utilitarios

Con las dependencias resueltas procedemos a la descarga del código fuente de todas las herramientas necesarias desde su repositorio de git oficial.
$ git  clone  https://github.com/mongodb/mongo-tools.git
Después de culminar con la clonación del proyecto entramos en la carpeta mongo-tools/ y al igual que hicimos con el core, revisaremos las etiquetas de las versiones para buscar la versión que coincida con la versión del core.
$ cd  mongo-tools/
$ git  tag  -l  |  grep  -v  rc
Seleccionamos la versión r3.2.9 por coincidir con la del core con la siguiente instrucción:
$ git  checkout  r3.2.9


Configuración del entorno de trabajo

Ahora necesitamos configurar todas las rutas que necesita el compilador de Go. Lo primero a realizar es asegurarnos de estar dentro de la carpeta mongo-tools/ y crear el directorio bin/.
$ mkdir  bin/
Luego asignamos las rutas a las variables requeridas ejecutando el script set_gopath.sh.
$ source  ./set_gopath.sh
Validamos que la variable GOPATH ya no este vacía.
$ echo  $GOPATH
/home/[usuario]/mongo-tools/.gopath:/home/[usuario]/mongo-tools/vendor


Compilación e instalación de los utilitarios

Si todo ha transcurrido sin problemas, ahora comenzaremos con la compilación de cada una de las herramientas con las siguientes instrucciones, una por cada programa utilitario.

El directorio objetivo donde quedará el ejecutable será la carpeta bin/ que recién creamos, además los programas tendrán soporte para SSL y SASL.
# go  build  -o  bin/bsondump  -tags  "ssl sasl"  bsondump/main/bsondump.go
# go  build  -o  bin/mongoimport  -tags  "ssl sasl"  mongoimport/main/mongoimport.go
# go  build  -o  bin/mongoexport  -tags  "ssl sasl"  mongoexport/main/mongoexport.go
# go  build  -o  bin/mongodump  -tags  "ssl sasl"  mongoimport/main/mongoimport.go
# go  build  -o  bin/mongorestore  -tags  "ssl sasl"  mongorestore/main/mongorestore.go
# go  build  -o  bin/mongostat  -tags  "ssl sasl"  mongostat/main/mongostat.go
# go  build  -o  bin/mongofiles  -tags  "ssl sasl"  mongofiles/main/mongofiles.go
# go  build  -o  bin/mongooplog  -tags  "ssl sasl"  mongooplog/main/mongooplog.go
# go  build  -o  bin/mongotop  -tags  "ssl sasl"  mongotop/main/mongotop.go
Después de haber compilado los programas, entramos al directorio bin/ y copiamos los ejecutables a la carpeta /usr/bin/ donde se encuentran los otros cuatro ejecutables correspondientes al core de MongoDB.

Con esto concluimos la compilación e instalación de los programas core y utilitarios de la base de datos MongoDB.


No hay comentarios.:

Publicar un comentario