Instalación

Instalación de Ambiente de Mercap FIX Engine

Prerequisitos

Para instalar correctamente el servicio Mercap FIX Engine, se debe considerar un sistema que cumpla con los siguientes requisitos mínimos:

  • Ubuntu Server (18.04, LTS u otro Linux similar)

  • Memoria RAM: 8 GB

  • Disco: 50 GB

Partiendo de esta base, se debe tener un usuario a disposición, que sea distinto de root y que no pertenezca al grupo de usuarios sudoers, con permisos de ejecución para los siguientes comandos instalados:

A modo de ejemplo, proponemos las siguientes sentencias a ejecutar durante la configuración, para permitir la ejecución de los comandos docker y docker-compose por parte del usuario disponibilizado (al que en el presente documento llamaremos usr-mercap y recordemos, no debe ser root ni tener permisos de sudoer) a traves del grupo de usuarios de docker:

usermod -aG docker usr-mercap
chmod a+x /usr/local/bin/docker-compose

Al finalizar las configuraciones previas, el usuario usr-mercap debería ser capaz de ejecutar los siguientes comandos de ejemplo sin necesidad de invocar el programa sudo:

docker ps
docker -v
docker-compose --version

El servicio Mercap FIX Engine será ejecutado mediante docker, usando los contenedores entregados por Mercap e instalados en un registry local, para evitar acceder a registries públicos en Internet. Para que docker pueda acceder a dicho registry local, es necesaria la siguiente configuración en el archivo /etc/docker/daemon.json.

Si dicho archivo existe, agregar las siguientes líneas a la configuración. Sino, crearlo con el siguiente contenido:

/etc/docker/daemon.json
{"insecure-registries": [ "localhost:5000" ]}

Importante: Cabe destacar, que el aplicativo docker hace uso de redes internas para comunicar los diferentes contenedores, dentro de una subnet en particular. La misma por default es 172.17.0.0/16.

De ser necesario modificar dicha red y su máscara (por ya estar en uso, por políticas de seguridad o por cualquier otro motivo), en este mismo archivo json (ubicado en /etc/docker/daemon.json) se puede agregar la siguiente configuración, cambiando la subnet default por ejemplo a la 10.20.30.0/26:

Todo junto nos quedaría de la siguiente manera:

/etc/docker/daemon.json
{
 "bip": "10.20.30.0/26",
 "insecure-registries": [ "localhost:5000" ]
}

Se debe reiniciar el servidor una vez configurado el archivo. Por otro lado, el servicio Mercap FIX Engine se puede instalar en cualquier directorio. Como ejemplo, en esta guía tomaremos el path: /opt/mercap.

Importante: Cabe aclarar que el usuario usr-mercap debe tener permisos de lectura, escritura y ejecución sobre dicho path y sus subdirectorios.

Por último, mencionaremos que el servicio hace uso de tres contenedores, cada uno requiere una dirección IP. Sumando la dirección IP utilizada por el servidor de docker, se requerirán cuatro direcciones IP en total, que serán mapeadas dentro de un nuevo segmento de red exclusivo para Mercap FIX Engine. Cuando profundicemos en la configuración del servicio, entraremos en detalle sobre este punto particular.

Nota: El segmento default de docker (configurado previamente) puede quedar disponible para futuros servicios que hagan uso de docker y sean ajenos a Mercap, por lo que nos despreocuparemos del mismo.

Además, el servicio se comunica con el aplicativo Mercap Order Management mediante un puerto en el servidor host. Dicho puerto también se especificará en la configuración del Mercap FIX Engine y debe ser alcanzable desde fuera del servidor.

Nota: El puerto default para la comunicación entre Mercap Order Management y Mercap FIX Engine es el5672.

Finalmente debe ser posible rutear los paquetes hacía la dirección pública (y el puerto) del mercado contra cual se realizará la conexión mediante Internet (ya sea IP ó DNS). Para tal fin, será necesario agregar reglas de firewall, etc. La responsabilidad de esta configuración es ajena a Mercap.

Esquema general del servicio Mercap FIX Engine

Preparando el ambiente

Tomaremos el archivo Mercap_FIX_Engine.zip de la ruta de entrega y lo descomprimimos en el directorio /opt/mercap/. Corroboramos que tenemos todos los archivos necesarios en dicho path del servidor:

  • mercap-fix-engine.bundle

  • docker-images.tar.gz

  • registry.tar.gz

Nota: También se podría incluír el archivo tcpdump.tar.gz, para analizar el intercambio de mensajes a nivel TCP y analizar situaciones anómalas que eventualmente puedan surgir. El funcionamiento del engine no depende de él. Es una herramienta extra. Mas adelante aclararemos como instalarlo y utilizarlo.

Dentro de dicho path crearemos el directorio registry y moveremos allí el archivo registry.tar.gz. Finalmente clonamos la versión del engine y preparamos el ambiente, todo con los siguientes comandos:

cd /opt/mercap
mkdir registry
mv registry.tar.gz registry/registry.tar.gz
git clone mercap-fix-engine.bundle mercap-fix-engine
cd mercap-fix-engine
git checkout bancor
mv docker-images.tar.gz mercap-fix-engine/.deploy/docker-images.tar.gz

Ya estamos en condiciones de instalar las imágenes entregadas.

Instalación del Registry Local

La instalación se divide en dos etapas. Primero hay que instalar el registry local. Recién luego instalaremos el aplicativo Mercap FIX Engine. Para ello copiamos el inicializador del registry, provisto dentro de la carpeta oculta deploy:

cp mercap-fix-engine/.deploy/initialize-registry.sh registry/initialize-registry.sh

Una vez hecho esto, podemos configurar el inicializador con el id del usuario adecuado:

id -u && id -g

Supongamos que obtenemos los siguientes resultados:

2083
2083

Con los id’s devueltos, editamos las variables USER_ID y GROUP_ID del inicializador (con vim, nano, etc), guardamos los cambios y lo ejecutamos:

cd registry
nano initialize-registry.sh
./initialize-registry.sh

Si no ocurre ningún inconveniente, al finalizar el proceso deberíamos poder ejecutar los siguientes comandos y observar un resultado similar:

docker ps | grep registry
Resultado de: docker ps | grep registry
docker images | grep registry
Resultado de: docker images | grep registry

Instalación del FIX Engine

Ahora que ya tenemos preparado el ambiente y el registry local está levantado, debemos cargar el resto de las imágenes, correspondientes con la versión entregada de Mercap FIX Engine:

cd /opt/mercap/mercap-fix-engine/.deploy
./load-into-registry.sh

Como fue mencionado al principio de este documento, Mercap FIX Engine se compone de tres contenedores (el core mercap-fix-engine, el broker de mensajes rabbitmq y el cifrador de conexiones stunnel). Debemos corroborar que las tres imágenes fueron correctamente cargadas en el registry local. Para ello, nuevamente, si no surge ningún error, podremos ejecutar los siguientes comandos y esperar obtener resultados similares:

docker images | grep mercap-fix-engine
Resultado de: docker images | grep mercap-fix-engine
docker images | grep rabbitmq
Resultado de: docker images | grep rabbitmq
docker images | grep stunnel
Resultado de: docker images | grep stunnel

De esta manera, comparamos que la versión entregada sea equivalente a la cargada en el registry y corroboramos que el aplicativo está listo para ser usado.

Configuración del servicio

Nuevamente necesitaremos el User ID del usuario que levantará el servicio (no root, no sudoer) y su Group ID. Los podemos volver a obtener con el siguiente comando:

id -u && id -g

Nuevamente, supongamos que el resultado es:

2083
2083

Editaremos el archivo /opt/mercap/mercap-fix-engine/.env (mediante nano, vim, etc) con los valores de User ID y Group ID devueltos. Se pueden cambiar otros parámetros presentes en el archivo de ser necesario, especialmente los relacionados con la comunicación FIX, provistos por el mercado. Se detallan a continuación los mas relevantes:

Parámetro

Obligatorio

Default

Descripción

USER_ID

SI

N/A

ID de usuario para Docker

GROUP_ID

SI

N/A

ID de grupo para el usuario de Docker

SUBNET

SI

N/A

Segmento de subred a utilizar

STUNNEL_CONNECT_PORT

SI

N/A

Puerto del mercado

STUNNEL_CONNECT_IP

SI

N/A

Dirección del mercado

QFIX_TARGET

SI

N/A

Nombre FIX del mercado

QFIX_SENDER

SI

N/A

Nombre FIX del broker en dicho mercado

QFIX_USERNAME

SI

N/A

Usuario provisto por el mercado

QFIX_PASSWORD

SI

N/A

Contraseña provista por el mercado

QFIX_ACCOUNT

SI

N/A

Nombre de la cuenta FIX provista por el mercado

QFIX_APPL_DATA_DICT

SI

FIX50SP2.xml

Nombre del archivo del diccionario FIX de aplicación (solo nombre, sin el path)

QFIX_TRANSPORT_DICT

SI

FIXT11.xml

Nombre del archivo del diccionario FIX de transporte (solo nombre, sin el path)

RABBIT_MQ_HOST_PORT

NO

5672

Puerto de RabbitMQ. Debe ser accesible desde el servidor de Mercap OM.

Notar que en el presente archivo de configuración (además de muchas otras variables con sus respectivos valores default), figura el puerto para comunicarse con RabbitMQ, el servicio de mensajería utilizado para vincular Mercap FIX engine con el aplicativo Mercap Order Management (parámetro RABBIT_MQ_HOST_PORT).

Importante: Recordamos que dicho puerto debe ser alcanzable por Mercap Order Management. De ser necesario se puede cambiar por otro (si esta bloqueado por un firewall o por estar en uso por otro servicio, etc), modificando el valor de RABBIT_MQ_HOST_PORT .

Finalmente, guardamos los cambios.

Iniciar el servicio

Solo resta levantar el servicio con el siguiente comando (en modo verbose, es decir mostrará todo el log por el standard output):

cd /opt/mercap/mercap-fix-engine
docker-compose up

Ó podemos levantar el servicio en background (agregando el flag -d):

cd /opt/mercap/mercap-fix-engine
docker-compose up -d

Si igualmente se utiliza la opción de background, será útil el siguiente comando, que mostrará por ejemplo las últimas 20 líneas del archivo de log mas completo (el más descriptivo, llamado all.log, de nivel debug):

tail -n 20 -f logs/all.log

Con el flag -n especificamos la cantidad de líneas (que claramente puede ser distinta a 20). Por el otro lado, con el flag -f, lograremos que si una nueva línea se agrega al final del log, la misma aparezca en la consola, renovando continuamente los últimos 20 mensajes.

También existen otros dos logs relevantes. El archivo info.log, que es menos verbose que el anterior:

tail -n 20 -f logs/info.log

Y finalmente, errors.log que solo contiene los mensajes que produjeron errores (si es que existe alguno), para una consulta mas rápida de los mismos:

tail -n 20 -f logs/errors.log

Por último, si observamos algo como lo indicado en la imagen siguiente (ya sea visualizando los logs o el stdout) el servicio Mercap FIX Engine ya estaría listo para operar.

Intercambio satisfactorio de mensajes entre el engine y el mercado.

Detener el servicio

Para detener el servicio Mercap FIX engine, se debe ejecutar las siguientes instrucciones en una consola de comandos del sistema operativo:

cd /opt/mercap/mercap-fix-engine
docker-compose down

Reiniciar el servicio

Para reiniciar el servicio Mercap FIX engine, se debe ejecutar las siguientes instrucciones en una consola de comandos del sistema operativo:

cd /opt/mercap/mercap-fix-engine
docker-compose restart
cd /opt/mercap/mercap-fix-engine
docker-compose down
docker-compose up –build -d
tail -n 20 -f logs/info.log

Mantenimiento de los contenedores de Docker

Puede darse el caso (poco probable) que luego de iniciar y detener el servicio de Mercap FIX Engine varias veces seguidas, queden contenedores de Docker consumiendo recursos. Docker dispone de varios comandos para estas tareas de mantenimiento, cada uno de ellos mas recomendable para ciertas situaciones.

A modo de ejemplo, a continuación se menciona el comando mas drástico

cd /opt/mercap/mercap-fix-engine
docker system prune –force –all --volumes

Instalando una nueva versión

De ser necesario instalar una nueva versión entregada por Mercap, el proceso será muy similar a las secciones:

  1. Preparando el ambiente

  2. Instalación del FIX Engine

  3. Iniciar el servicio

Repasemoslos brevemente:

Obtener el archivo Mercap_FIX_Engine.zip de la ruta de entrega y descomprimirlo en el directorio /opt/mercap/, reemplazando el posible contenido preexistente. Actualizaremos el ambiente, no sin antes corroborar que tenemos todos los archivos necesarios en dicho path del servidor (notar que el .zip no incluye un archivo registry, ya que el mismo se instala una única vez, solo debe contener los archivos mercap-fix-engine.bundle y docker-images.tar.gz):

cd /opt/mercap/mercap-fix-engine
git pull

Instalar la nueva versión:

cd /opt/mercap/mercap-fix-engine/.deploy
mv ../../docker-images.tar.gz docker-images.tar.gz
./load-into-registry.sh

Corroborar que las imágenes se cargaron correctamente chequeando sus versiones:

docker images | grep mercap-fix-engine
docker images | grep rabbitmq
docker images | grep stunnel

Y finalmente, iniciar el servicio:

cd /opt/mercap/mercap-fix-engine
docker-compose up -d

Tcpdump

Existe la posibilidad de requerir observar el tráfico TCP entre el engine y el mercado. Para dicho propósito se adjunta con la instalación un cuarto contenedor de Docker, con el aplicativo tcpdump. El mismo se encuentra dentro del zip de la entrega, en el archivo tcpdump.tar.gz. Para instalarlo, procedemos a ejecutar los siguientes comandos:

cd /opt/mercap
mv tcpdump.tar.gz mercap-fix-engine/.deploy/tcpdump.tar.gz
cd mercap-fix-engine/.deploy
./load-tcpdump-into-registry.sh

Podemos corroborar que la imagen de tcpdump se haya registrado exitosamente:

docker images | grep tcpdump

Finalmente, como el componente genera un archivo “dump” del tráfico TCP, no es la idea ejecutarlo todo el tiempo, solo cuando se requiera analizar situaciones particulares. Dicho esto, se proveen dos scripts para iniciarlo y detenerlo. Los mismos son:

Nota: Iniciar tcpdump:

cd/opt/mercap/mercap-fix-engine/.deploy/
./start-tcpdump.sh

Nota: Detener tcpdump:

cd/opt/mercap/mercap-fix-engine/.deploy/
./stop-tcpdump.sh

El resultado obtenido es un archivo con formato pcap, cuyo nombre será el timestamp del momento capturado. Dicho archivo se puede visualizar en herramientas de redes como Wireshark.

Last updated

Was this helpful?