v) base de datos. - dockertips.com con docker v base de... · amazon aurora es una base de datos...

Post on 15-Mar-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Contenedores con Docker.V) Base de datos.

Daniel A. Cialdella C. y José M. Cousiño.

Espacio ofrecido por

Travel Labs Madrid 11-2019

¿ Cuántos vinieron a los MeetUp anteriores ?

● Cuántos a la I) II) III) IV) ? Experiencia anterior? Contenedores? Kubernetes?

● Conocimientos de los que no vinieron?

● Se han apuntado en https://Dockertips.com?

● Subiremos la presentación en unos dias.

● Cuantos usan Windows? Linux ? OSX?

● Ejemplos :

○ SQL Server.

○ MySQL.

○ Oracle.

○ Postresql.

○ MongoDB.

○ Coachdb.

○ Redis.

¿Quiénes somos y porqué hicimos Dockertips?

2015. Comenzamos probando Docker.

2016. Implementaciones para desarrolladores.

2017. www.dockertips.com y publicaciones.

2018. Puesta en marcha de varios Proyectos.

2019. Comunidad establecida, compartiendo

experiencias y dando servicios.

Presentación.

Componentes de una aplicación.

● Estructura tradicional de una aplicación:

○ Clientes en Internet.

○ DNS.

○ Balanceador/Firewall.

○ Capa App Frontales. (DMZ).

○ Firewall.

○ Red interna (MZ). - Clientes internos.

○ Capa App Negocios.

○ Base de datos.

● Existen soluciones para todos esos servicios provistas en la “nube”, existe la

posibilidad de montar un server completo y dentro de los servicios …

● y también el uso de contenedores y soluciones “as a service”.

● También se pueden usar más un servicio (clouds o locales).

Comparativa bases de datos vs. otros.

● Características de una base de datos y comparación con otros productos.

SQL (SQL, NoSQL, Caches) vs. otros (APPs, web, wordpress, repos, ficheros,

proxys, balanceadores, monitorización).

○ Beneficios de la destrucción y construcción inmediata.

○ Posibilidad de suspender, copiar y activar nuevamente.

○ Asignación de recursos de manera dinámico con un costo asociado por servidor

(no por contenedor).

○ Aprovechamiento de tiempos muertos en los recursos compartidos.

○ Necesidad de acceso a DISCO, CPU, RED Y MEMORIA en un DB.

○ Asignación del 100% de recursos o de una parte del 100%.

○ Cantidad de bases de datos en funcionamiento.

○ Opciones de escalamiento en base de datos.

○ Latencia en los procesos que realiza.

○ Disco vs. Memoria vs. CPU vs. RED.

○ Cada dato debe ser enviado al storage para ser guardado efectivamente.

○ Uso intensivo de RAM y Disco.

○ Problemas con la construcción del entorno.

○ Tiempo de recuperación de server + datos en caso de D.R.

○ Definición de backups, copias y movimiento de datos.

○ Actualización de Redundancia. Dos o más servidores redundantes requieren

tráfico entre ellos para sincronización de datos.

○ Doble almacenamiento compartimentado en sitios distintos.

○ Tipos de escalamientos según solución implementada.

○ Todos los contenedores correrán sobre el mismo Hardware.

○ Gestión de seguridad por otros equipos, clusters o Cloud.

Comparativa Server vs. Contenedores.

● No hay una solución perfecta para todos los tipos de problemas, dependiendo de

varios factores algunas son mejores que otras:○ Personal interno calificado.

○ Mantenimiento automático o manual.

○ Costo mensual deseado, fijo o variable.

○ Escalamiento deseado, costo asociado fijo o variable.

○ A quien brindar el servicio en el mundo, país, zona y QoS.

○ Volúmen de datos, cantidad de bases de datos, App, otros componentes

○ Cantidad de cambios, evolutivos, etc …

○ Necesidad de cluster del producto (Oracle RAC, galera, Cluster AAA, otros).

○ Latencia de respuesta en DB para aplicaciones críticas.

○ Motor deseado a usar, en RDS no están todos.

○ Privacidad de datos, normativa sobre seguridad y responsabilidad.

○ Sistema de parcheado de aplicaciones y base de datos.

Donde obtenemos más beneficios si usamos Contenedores.

Desarrollo, pruebas, QA, migraciones, ETL, test evolutivos, MVP, betas, certificaciones de compatibilidad de

motor. Revisión de distintas versiones de Motores DB.

Planificación de migración a distintas versiones de motores. Comparativas de velocidad.

Donde es mejor no usarlo.

CLUSTERs productivos con muy muy alta necesidad de recursos y baja latencia. Evaluar costos propio vs.

OnCloud vs. Contenedores.

Donde no se desee en escalar de manera horiz. o vertical. Si se requiere un kernel específico.

Situaciones especiales, versiones especiales de productos, entornos de alta seguridad, etc.

Normativa Europea sobre datos.

PROBAR, PROBAR, PROBAR !!!

AuroraDB - MySQL o Postgresql.

● Un caso especial son los servicios RDS.

● Amazon Aurora es una base de datos relacional compatible con MySQL y PostgreSQL creada para la nube y

que combina el rendimiento y la disponibilidad de las bases de datos tradicionales con la simplicidad y la

rentabilidad de las bases de datos de código abierto.

● Amazon Aurora es hasta cinco veces más rápida que las bases de datos de MySQL estándar y tres veces más

rápida que las bases de datos de PostgreSQL estándar. Ofrece la seguridad, disponibilidad y fiabilidad de las

bases de datos de nivel comercial a una décima parte del costo. Amazon Aurora está completamente

administrada por Amazon Relational Database Service (RDS), que automatiza las tareas administrativas

demandantes como el aprovisionamiento de hardware, la configuración de bases de datos, la aplicación de

parches y las copias de seguridad.

● Amazon Aurora ofrece un sistema de almacenamiento distribuido, tolerante a errores y de recuperación

automática que ajusta su escala automáticamente hasta 64 TB por instancia de base de datos. Amazon Aurora

suministra alto rendimiento y disponibilidad con hasta 15 réplicas de lectura de baja latencia, recuperación a

un momento dado, generación de copias de seguridad continua en Amazon S3 y replicación en tres zonas de

disponibilidad (AZ).

● Amazon Aurora ofrece un sistema de almacenamiento distribuido, tolerante a errores y de recuperación

automática que ajusta su escala automáticamente hasta 64 TB por instancia de base de datos. Amazon Aurora

suministra alto rendimiento y disponibilidad con hasta 15 réplicas de lectura de baja latencia, recuperación a

un momento dado, generación de copias de seguridad continua en Amazon S3 y replicación en tres zonas de

disponibilidad (AZ).

● Un clúster de base de datos Amazon Aurora se compone de una instancia de base de datos compatible con

MySQL o PostgreSQL y de un volumen de clúster que representa los datos del clúster de base de datos,

copiado en tres zonas de disponibilidad como un único volumen virtual. De forma predeterminada, el clúster

de base de datos contiene una instancia principal de base de datos de escritor y, opcionalmente, hasta 15

réplicas de Aurora (instancias de base de datos de lector). Para obtener más información acerca de los

clústeres de base de datos Aurora, consulte Clústeres de base de datos Amazon Aurora

https://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html

Demos.

Sql Server.

● En Septiembre de 2017 Microsoft anunció la versión de Sql Server 2017 para Linux.

● El motor de base de datos es igual en Windows o Linux.

● Esta versión junto con la de Windows pasaban a poder ser utilizadas en contenedores

Docker.

● La versión de Linux es mucho más liviana que la de Windows.

Versión SO Tamaño

Sql Server 2017 | 2019 (Windows) 15.1 Gb

Sql Server 2017 (Linux) 1.35 Gb

Sql Server 2019 (Linux) 1.57 Gb

● Los contenedores de Sql Server se ejecutan en una versión Docker 1.8 o superior.

● Los sistemas operativos aceptados son:

○ Windows Server 2016 o superior.

○ Ubuntu 16.04 o superior.

○ Red Hat Enterprise 7.3 o superior.

○ Suse Linux v12 SP2, SP3 y SP4.

● Se recomienda 2 Gb de espacio en disco.

● Se recomienda 2 Gb de memoria Ram.

● Variables de entorno:

○ SA_PASSWORD: password del usuario administrador

○ ACCEPT_EULA: aceptación de la licencia

○ MSSQL_PID: versión de Sql Server que se va a ejecutar

○ MSSQL_DATA_DIR: cambia la ubicación de los ficheros (.mdf, .ldf) de la base

de datos

○ MSSQL_LOG_DIR: cambie el directorio en el que se crean los archivos (.ldf)

de la base de datos

○ MSSQL_BACKUP_DIR: establece la ubicación del directorio de copia de

seguridad predeterminado

○ MSSQL_LCID: establece el identificador de idioma a usar en sql server

○ MSSQL_COLLATION: establece la intercalación para sql server

○ MSSQL_MEMORY_LIMIT_MD: establece la cantidad máxima de memoria

(en MB) que pueda usar Sql Server. De forma predeterminada es el 80% de la

memoria física.

○ MSSQL_TCP_PORT: configura el puerto TCP en el que escucha SQL server.

El valor predeterminado es 1433.

○ MSSQL_IP_ADDRESS: establece la dirección IP.

○ MSSQL_DUMP_DIR: establece el directorio donde sql server va a depositar

sus volcados de memoria y otros archivos de problemas.

○ MSSQL_AGENT_ENABLE: habilita el Agente de Sql Server (true/false)

○ MSSQL_MASTER_DATA_FILE: establece la ubicación del fichero

master.mdf de la base de datos maestra.

○ MSSQL_MASTER_LOG_FILE: establece la ubicación del fichero master.ldf

de la base de datos maestra.

○ MSSQL_ERROR_LOG_FILE: establece la ubicación de los archivos del

registro de errores.

○ attach_dbs: configuración para adjuntar una base de datos.

● Versiones de Sql Server:

○ Evaluation (free, no production, 180 días).

○ Developer (free, no production).

○ Express (free).

○ Web.

○ Standard.

○ Enterprise.

○ Enterprise Core.

○ Clave de producto

(se tiene que especificar la clave #####-#####-#####-#####-#####)

● Para crear un contenedor :

docker run -e <variables> -p <puertos> --name <nombre contenedor> imagen_sql

server

● Para acceder al contenedor :

docker exec -it <identificador> <shell>

● Para hacer login y acceder a la base de datos se utiliza el comando sqlcmd :

/opt/mssql-tools/bin/sqlcmd

● Se puede acceder desde Sql Server Management Studio :

● En Linux se puede utilizar Azure Studio.

● Para crear un contenedor :

docker run -e <variables> -p <puertos> --name <nombre contenedor> imagen_sql

server

● Para acceder al contenedor :

docker exec -it <identificador> <shell>

Sql Server sobre Linux.

● SqlServer sobre Linux:○ # docker pull mcr.microsoft.com/mssql/server ○ # docker run -d -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD=Passw0rd! ○ -e MSSQL_DATA_DIR=/home/jose/data -e MSSQL_LOG_DIR=/home/jose/data -u 0:0 ○ --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/home/jose/data ○ --name sql mcr.microsoft.com/mssql/server○ # root@ubu1910:~/Docker1/mysql-docker/5.6# ll /var/lib/docker/volumes/sqlvolume/_data○ -rw-r----- 1 root root 8388608 nov 23 22:21 test_log.ldf○ -rw-r----- 1 root root 8388608 nov 23 22:21 test.mdf

○ root@ubu1910:~/Docker1/mysql-docker/5.6# nmap 127.0.0.1○ Starting Nmap 7.80 ( https://nmap.org ) at 2019-11-23 22:24 CET○ PORT STATE SERVICE○ 22/tcp open ssh○ 631/tcp open ipp○ 1433/tcp open ms-sql-s

○ # apt update; apt upgrade; apt install htop○ # docker ps○ CONTAINER ID IMAGE COMMAND CREATED ○ 57470ef1ec19 microsoft/mssql-server-linux:latest "/opt/mssql/bin/sqls…" 5 seconds ago

Up 4 seconds 0.0.0.0:1401->1433/tcp sql

# docker ps -a

root@d1d10c2128b8:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U sa

# Str0ngPassword!

1> create database test;

1> select @@version; go;

Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)

Nov 30 2018 12:57:58

Copyright (C) 2017 Microsoft Corporation

Developer Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS)

MySql - MariaDB - Percona.

● Los contenedores con Bases de datos requieren una MiniDistro para correr, puede ser

Ubuntu, RedHat, Windows o otros S.O.

● Medir velocidad de disco en Contenedor.

○ dd if=/dev/zero of=/var/lib/mysql/testfile bs=1G count=1 oflag=direct

● Instalar varias versiones de MySQL para comparar velocidad.

○ git clone https://github.com/mysql/mysql-docker

○ ./build.sh

○ # cd 5.6

○ # docker build -t mysql56 .

○ # docker run --name mysql5638 -p 13306:3306 -e

MYSQL_ROOT_PASSWORD=testing -d mysql56

○ # cd ../5.7

○ # docker build -t mysql57 .

○ # docker run --name mysql5720 -e MYSQL_ROOT_PASSWORD=testing -d

mysql57

○ # cd ../8.0

● # docker build -t mysql80 .

○ # docker run --name mysql803 -e MYSQL_ROOT_PASSWORD=testing -d

mysql80

○ # docker exec -it mysql5638 mysql -uroot -p

○ # docker exec -it mysql5720 mysql -uroot -p

○ # docker exec -it mysql803 mysql -uroot -p

○ # docker exec -it mysql803 /bin/bash # correr un bash en el contenedor

○ Para exponer un puerto al exterior.

■ docker run --name mysql2 -p 13306:3306 -e

MYSQL_ROOT_PASSWORD=testing -d 4a748c5c641d

○ # docker exec -it mysql2 /bin/bash

○ # telnet 127.0.0.1 13306

○ # mysql -P13306 -utesting -ptesting -h127.0.0.1

● PROBAR WORKBENCH.

Oracle.

● Oracle server sobre Linux:

○ ver página guardada con el step/step.

○ requiere descargar un fichero ZIP de la página de Oracle (usuario registrado)

○ han quitado varios proyectos de hub.

PostgreSQL.

● Como instalar Postgres 9.6:

Creamos un volumen para almacenar los datos.

# docker volume create pgdata

# docker pull postgres:9.6

# docker run --name postgres1 -e POSTGRES_PASSWORD=Clave2020 -d -p

54320:5432 -v pgdata:/var/lib/postgresql/data postgres:9.6

# docker exec -i postgres1 psql -U postgres -c "CREATE DATABASE dotips

WITH ENCODING='UTF8' OWNER=postgres;"

o también se puede acceder al contenedor y correrlo desde el BASH.

# psql -U postgres -c "CREATE DATABASE dotips WITH

ENCODING='UTF8' OWNER=postgres;"

# psql -U postgres

postgres=# help

You are using psql, the command-line interface to PostgreSQL.

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help with psql commands

\g or terminate with semicolon to execute query

\q to quit

postgres=# \h

MongoDB.

● MongoDB:

Pondremos a correr un servidor MongoDB y al mismo tiempo nos conectaremos

usando un cliente mongo.

○ # docker pull mongo

○ # docker run -it --name mongotips mongo

○ puerto 27017

○ # docker exec -it mongotips /bin/bash

○ # mongo

○ # ifconfig

○ # htop

○ # uname -a

CoachDB.

● CoachDB:

Pondremos a correr un servidor CouchDB y al mismo tiempo nos conectaremos

usando un cliente.

○ # docker pull couchdb

○ # docker run -p 5984:5984 -d couchdb

○ # docker exec -it 8bbb55b8a148 /bin/bash

○ ifconfig

○ htop

○ uname -a

http://127.0.0.1:5984

Redis.

● Redis en contenedores.

○ # docker run --name redissrv -d redis

○ # docker run -it --rm redis redis-cli -h 172.17.0.2

○ 172.17.0.2:6379> set aa 21

○ OK

○ 172.17.0.2:6379> get aa

○ "21"

Preguntas.

Gracias por participar.

dockertipshelp@gmail.com

top related