Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

miércoles, 5 de junio de 2013

PostgreSQL Cluster con pgpool-II

Ve el documento en slideshare




Ve la demostracion en Youtube, no olvides ponerlo en HD




EQUIPO DE TRABAJO

Henry Ernesto Renderos ZaldañaDavid Alberto García Cardona
rz07002@ues.edu.svgc07011@ues.edu.sv





PostgreSQL Cluster con PGPOOL-II

Henry Renderos, David García

Objetivos:

  • Aprender los conceptos básicos sobre el manejo de un clúster utilizando PostgreSQL 9.1 y PGPOOL-II en Linux.
  • Comprender el funcionamiento de un clúster.
  • Establecer los parámetros de inicialización para el clúster.
  • Realizar un escenario demostrativo sobre el uso de un clúster empleando replicación de bases de datos y sentencias SQL.
  • Visualizar el comportamiento de la replicación en la red.

Conceptos:

¿Qué es un clúster?
Un clúster es simplemente una colección de componentes que se unen y trabajan como un solo componente para proveer alta disponibilidad. Cuando hablamos de clúster de bases de datos, nos referimos a una arquitectura en la que tenemos varios equipos con parte de los datos del usuario trabajando al unísono como un solo sistema. La arquitectura de un clúster de base de datos viene definida por la manera en que se almacenan los datos en cada nodo.
¿Qué es PostgreSQL?
PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su código fuente disponible libremente. Es el sistema de gestión de bases de datos de código abierto más potente del mercado y en sus últimas versiones no tiene nada que envidiarle a otras bases de datos comerciales. PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto y el sistema continuará funcionando.
¿Qué es PGPOOL-II?
pgpool-II es un middleware que se encuentra entre los servidores de PostgreSQL y un cliente de base de datos PostgreSQL. Ofrece las siguientes características: Agrupación de conexiones pgpool-II mantiene las conexiones establecidas a los servidores PostgreSQL, y los reutiliza cada vez que una nueva conexión con las mismas propiedades (es decir, nombre de usuario, bases de datos, la versión del protocolo) entra en juego reduce la sobrecarga de la conexión, y mejora el rendimiento global del sistema.
Replicación
pgpool-II puede gestionar múltiples servidores PostgreSQL. La activación de la función de replicación hace que sea posible la creación de una copia de seguridad en tiempo real en 2 o más grupos PostgreSQL, de manera que el servicio pueda continuar sin interrupción si uno de esos grupos falla.
Balanceo de carga
Si se replica una base de datos (ya que se ejecuta en el modo replicación o modo maestro / esclavo), la realización de una consulta SELECT en cualquier servidor devolverá el mismo resultado. pgpool-II se aprovecha de la función de replicación con el fin de reducir la carga en cada servidor PostgreSQL. Lo hace mediante la distribución de las consultas SELECT entre los servidores disponibles, mejorando el rendimiento global del sistema. En un escenario ideal, el rendimiento de lectura podría mejorar proporcionalmente al número de servidores PostgreSQL. El equilibrio de carga funciona mejor en un escenario donde hay una gran cantidad de usuarios que ejecutan muchas consultas de sólo lectura al mismo tiempo. Limitar el exceso de conexiones Hay un límite en el número máximo de conexiones simultáneas con PostgreSQL, y nuevas conexiones son rechazados cuando se alcanza este número. Al aumentar este número máximo de conexiones, sin embargo, aumenta el consumo de recursos y tiene un impacto negativo en el rendimiento general del sistema. pgpool-II también tiene un límite en el número máximo de conexiones, pero las conexiones adicionales se pondrán en cola en lugar de devolver un error de inmediato.
Consultas en paralelo
Con la función de consultas en paralelo, los datos se pueden dividir entre varios servidores, por lo que una consulta se puede ejecutar en todos los servidores al mismo tiempo, reduciendo el tiempo de ejecución total. La consulta paralela es la que funciona mejor en la búsqueda de datos a gran escala. pgpool-II habla backend de PostgreSQL y el protocolo de interfaz, y transmite mensajes entre un backend y un frontend. Por lo tanto, una aplicación de base de datos (frontend) piensa que pgpool-II es el servidor PostgreSQL actual, y el servidor (backend) ve a pgpool-II como uno de sus clientes. Debido a que pgpool-II es transparente para el servidor y el cliente, una aplicación de base de datos existente se puede utilizar con pgpool-II casi sin un cambio en su código fuente.

Desarrollo:

INSTALACIÓN
  1. Utilidades para la gestión y el mantenimiento del clúster.
  2. # apt-get install ntp openssl file psmisc sysstat bzip2 unzip nmap dstat rsync wget ccze tcpdump pciutils dnsutils host

  3. Configuraremos dos archivos del sistema de Debian, esto nos facilitará hacer referencias a nombres de host y no a direcciones IP.
  4. # nano /etc/hostname

    Acá le colocaremos el nombre de pgsql1 en el nodo 1 y pgsql2 en el nodo 2.

    # nano /etc/hosts

    Acá agregaremos los nombres de host pertenecientes al clúster con sus respectivas direcciones IP.

    En este momento tenemos configurados los nodos del clúster de la siguiente forma, luego de esto debemos reiniciar los nodos: Nodo 1 Hostname: pgsql1 Dirección IP: 192.168.1.7 Nodo 2 Hostname: pgsql2 Dirección IP: 192.168.1.4 Máscara de red de 24 bits. Dirección IP del enrutador: 192.168.1.1

  5. Comenzaremos a configurar PostgreSQL en ambos nodos pero pgpool-II solo en el nodo pgsql1. Los comandos deberán ejecutarse como root (#) o como el usuario postgres ($).
  6. Instalaremos las cabeceras de la librería de PostgreSQL, el paquete de desarrollo de PostgreSQL y las utilidades de compilación de GNU)
  7. # apt-get install libpq-dev postgresql-server-dev-9.1 bison build-essential

  8. Una vez instalado, instalaremos PostgreSQL en ambos nodos del clúster:
  9. # apt-get install postgresql-9.1 postgresql-contrib-9.1 postgresl-doc-9.1 uuid libdbd-pg-perl

  10. Finalmente instalamos pgpool-II en el nodo identificado como pgsql1
  11. # apt-get install pgpool2 libpgpool0

    CONFIGURACIÓN DE POSTGRESQL

    Los siguientes pasos se aplican a las instancias de PosgreSQL en los nodos pgsql1 y pgsql2.

  1. Comenzaremos, como usuario postgres, añadiendo el usuario de base de datos (role) pgpool2, sin contraseña:
  2. # su – postgres $ createuser –superuser pgpool2

  3. Editamos ahora el fichero /etc/postgresql/9.1/main/pg_hba.conf y añadimos el acceso para todos los usuarios desde cualquier dirección IP. (NOTA: esto se hace por motivos de enseñanza, el acceso sólo debe permitirse para el usuario pgpool2 desde la dirección IP en donde está instalado.)
  4. # nano /etc/postgresql/9.1/main/pg_hba.conf

    El fichero deberá quedarnos de la siguiente manera:

  5. Por último indicaremos a PostgreSQL que escuche en todas las interfaces pues, por defecto, sólo lo hace en el localhost. Editamos el fichero /etc/postgresql/9.1/main/postgresql.conf y cambiamos la siguiente directiva.
  6. listen_addresses = ‘*’

    También podemos restringirlo a que solo escuche peticiones provenientes de la dirección IP en donde se encuentra pgpool-II

  7. Reiniciamos PostgreSQL para activa los cambios.
  8. # service postgresql restart

    CONFIGURACIÓN DE PGPOOL-II

    La configuración de pgpool-II la realizaremos únicamente en el nodo pgsql1, pues sólo ese host lo posee.

  1. Editaremos el archivo /etc/pgpool2/pgpool.conf
  2. Deberemos editar el archivo para configurarlo a nuestra medida. Se configurarán: Pool de conexiones Replicación Balanceo de carga Las únicas directivas que modificaremos se muestran a continuación, las demás las dejaremos intactas:

    listen_addresses = ‘*’
    port = 9999
    backend_hostname0 = ‘pgsql1’
    backend_port0 = ‘5432’
    backend_weight0 = 1
    backend_hostname1= ‘pgsql2’
    backend_port1 = ‘5432’
    backend_weight1 = 1
    replication_mode = true
    load_balance_mode = true
    replicate_select = true
    pgpool2_hostname = ‘pgsql1’

  3. Para arrancar pgpool-II lo haremos con el siguiente comando (start o restart):
  4. # service pgpool2 start

  5. Si queremos arrancar pgpool-II en modo de depuración primero lo detendremos con el comando “service pgpool2 stop” y lo arrancaremos en modo debug con de la siguiente manera:
  6. # pgpool –n –d –f /etc/pgpool2/pgpool.conf

  7. En otra pestaña o ventana de la terminal probaremos conectarnos a través de pgpool-II con el siguiente comando:
  8. # psql –h pgsql1 –p 9999 –U pgpool2 –d postgres

    El significado del comando anterior se detalla a continuación: -h es el nombre del host al que nos vamos a conectar y en donde está instalado pgpool-II. -p es el puerto que definimos en el archivo /etc/pgpool2/pgpool.conf -U es el usuario que creamos en los dos nodos del clúster. -d es la base de datos a la que nos vamos a conectar Si todo va bien podremos ver que en la terminal se nos muestra algo como sigue:

    postgres=#

    Lo que nos indica que nos hemos podido conectar a través de pgpool-II

    PRUEBAS DE REPLICACIÓN
  1. Crearemos una base de datos que será replicada a través de pgpool-II de la siguiente forma:
  2. # createdb –h pgsql1 –p 9999 –U pgpool2 basesdedatosues

  3. Si nos loggeamos como usuario postgres en los dos nodos del clúster (su – postgres) y ejecutamos el siguiente comando para visualizar las bases de datos, nos debería de aparecer en cada nodo la base de datos que creamos en el paso anterior:
  4. $ psql -l

    POSTGRESQL Y PGPOOL-II EN LA RED

    A continuación se muestran algunas capturas de lo que sucede en la red al momento de que se realiza una sentencia SQL a través de pgpool-II en los nodos pertenecientes al clúster.

  1. Instalaremos el sniffer wireshark y luego lo ejecutaremos:
  2. # apt-get install wireshark
    # wireshark &

  3. Seleccionaremos la interfaz eth0 y capturaremos algunos paquetes, realizaremos una consulta insert a través de pgpool-II y observaremos que aparecerán los siguientes paquetes en nuestra escucha:
  4. Observaremos con más detenimiento el paquete 874 y veremos que al momento de la replicación lo que se transporta a través de la red son las sentencias SQL. La query que fue introducida en el nodo pgsql1 a través de pgpool-II fue “insert into usuario values (‘Base’,’Pass’); y efectivamente vemos en el paquete que esa sentencia es la replicada en el nodo pgsql2 con dirección IP 192.168.1.4.

Referencias:

  • Jaume Sabater (2008). Replicación y alta disponibilidad de PostgreSQL con pgpool-II. (1 Nov – 2008) http://linuxsilo.net/articles/postgresql-pgpool.html
  • pgpool Global Development Group (2003 – 2011). Pgpool-II user manual http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-en.html


Leer nota completa...

jueves, 17 de febrero de 2011

tutorial de instalacion

INGRESEN AL AULA VIRTUAL PARA DESCARGAR EL TUTORIAL DE INSTALACION PASO A PASO DE ORACLE

Tutorial instalar Oracle 11g en linux 

 este tutorial muestra las capturas del pantalla del instalador, y de las opciones que deben elegir, ello sera de mucha utilidad inclusive para los que lo instalen en Windows.

se explican los tutoriales del tipo de instalacion, de la activacion de los esquemas de ejemplo, de colocar una contrasena general a todos los usuarios de administracion, y demas detalles comunes a las plataformas.

 

.... Detalle del articulo completo a publicar

Leer nota completa...

lunes, 24 de enero de 2011

MySQL Cluster + Linux

Este tutorial muestra cómo configurar un cluster con MySQL y Linux. Antes, debemos tener claro algunos conceptos.


¿QUÉ ES MYSQL CLUSTER?

MySQL Cluster es una tecnología que permite clustering de bases de datos en memoria en un entorno de no compartición. La arquitectura de no compartición permite que el sistema funcione con hardware barato, y sin ningún requerimiento especial de hardware o software. Tampoco tienen ningún punto único de fallo porque cada componente tiene su propia memoria y disco. MySQL Cluster integra el servidor MySQL estándar con un motor de almacenamiento clusterizado en memoria llamado NDB...
Este tutorial muestra cómo configurar un cluster con MySQL y Linux. Antes, debemos tener claro algunos conceptos.


¿QUÉ ES MYSQL CLUSTER?

MySQL Cluster es una tecnología que permite clustering de bases de datos en memoria en un entorno de no compartición. La arquitectura de no compartición permite que el sistema funcione con hardware barato, y sin ningún requerimiento especial de hardware o software. Tampoco tienen ningún punto único de fallo porque cada componente tiene su propia memoria y disco. MySQL Cluster integra el servidor MySQL estándar con un motor de almacenamiento clusterizado en memoria llamado NDB.





Un MySQL Cluster tiene organización física y lógica, con máqu
inas como elementos físicos. Los elementos lógicos son los nodos, y una máquina hospedando un nodo es un huésped cluster. Idealmente, habrá un nodo por huésped cluster, aunque es posible ejecutar más de un nodo en una máquina. Hay tres tipos de nodos, cada uno correspondiente a un rol específico en el cluster:
a) nodo de administración (nodo MGM) : Proporciona servicios de administración para todo el cluster, incluyendo arranque, parada, copias de seguridad, y datos de configuración en otros nodos. El nodo de administración se implementa como la aplicación ndb_mgmd; el cliente de administración usado para controlar MySQL Cluster via nodo MGM es ndb_mgm.

b) nodo de datos: Almacena y replica datos. La funcionalidad de los nodos de datos la trata una instancia del proceso NDB ndbd.

c) nodo SQL: Símplemente es una instancia de MySQL Server (mysqld) arrancado con la opción --ndb-cluster.

CONSIDERACIONES SOBRE EL CLUSTER EN MYSQL
1. Se debe instalar la versión 5.0 de MySQL ya que esta incluye el motor NDB y las herramientas para gestionar cada nodo dentro del cluster.

2. Su rendimiento depende directamente en la velocidad de conexión entre las máquinas del cluster. Los requerimientos de conectividad mínimo para cluster incluyen una red típica 100-megabit Ethernet o equivalente. Recomendamos usar Ethernet cuando sea posible.

3. Tenga en cuenta que MySQL Cluster no está diseñado para una conectividad de red menor a 100 Mbps. Por esta razón (entre otras), intentar ejecutar un MySQL Cluster en una red pública como Internet no funcionará y no está recomendado.


NUESTRO EJEMPLO

Para nuestro caso, vamos a partir de que ya se cuenta con los siguientes requisitos:

REQUERIMIENTOS DE SOFTWARE
• Administrador: XUbuntu 10.04 (MySQL 5.0)
• Nodo 1: Ubuntu 10.04 (MySQL 5.0)
• Nodo 2: Ubuntu 10.04 (MySQL 5.0)


Escenario:


Tenemos 3 equipos con las siguientes IPs:
• Administrador: 192.168.2.3
• Nodo 1: 192.168.2.2
• Nodo 2: 192.168.2.4


Instalación

Importante es tener instalados los paquetes de mysql en el sistema. Para saber si los tenemos o no, podemos ir al Gestor de Paquetes Synaptic y se nos abrirá una pantalla como la siguiente después de haber introducido la contraseña de root. Introduciremos la palabra “mysql” en el buscador para que nos muestre todos los paquetes relacionados.


Aquellos paquetes que se acompañen con un recuadro verde son los que están instalados en el sistema. Dicho paquete mysql contiene, para Ubuntu 10.04, soporte para MySQL Cluster por lo que no hemos de descargar ningún otro archivo para poder utilizarlo.
Existen dos archivos que se deben modificar para configurar el cluster, estos se encuentran en los directorios descritos a continuación:

? /etc/ donde el sistema añade un directorio mysql que, podríamos decir, guarda la información relacionada con su motor y arranque. Aquí es donde encontraremos el archivo que necesitaremos más adelante, my.cnf (Nodos de datos y MySQL).

? /var/lib/ donde el sistema añade tantas carpetas como sean necesarias para describir su “contenido”. Aquí encontraremos un directorio llamado mysql-cluster que es donde crearemos su archivo de configuración, config.ini (Nodo de administración).

1. NODO DE ADMINISTRACIÓN

Archivo de configuración config.ini para la configuración de MySQL-Cluster.
Abrimos la consola e insertamos la siguiente línea:

cd /var/lib/mysql-cluster
Una vez en el directorio tendremos que crear el archivo de configuración. Como root escribiremos la siguiente línea:

sudo gedit config.ini e introduciremos la contraseña de root que tengamos. Nos abrirá el gedit es un programa de edición de texto muy sencillo. Al detectar que dicho archivo no existe en el directorio escogido, lo crea automáticamente. Una vez abierto, copiaremos las siguientes líneas:

# file "config.ini" - showing minimal setup consisting of 1 data node,
# 1 management server, and 3 MySQL servers.
# The empty default sections are not required, and are shown only for
# the sake of completeness.
# Data nodes must provide a hostname but MySQL Servers are not required
# to do so.
# If you don't know the hostname for your machine, use localhost.
# The DataDir parameter also has a default value, but it is recommended to
# set it explicitly.
# Note: DB, API, and MGM are aliases for NDBD, MYSQLD, and NDB_MGMD
# respectively. DB and API are deprecated and should not be used in new
# installations.
[NDBD DEFAULT]
NoOfReplicas= 1
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]

[NDB_MGMD]
HostName= 192.168.2.3

[NDBD]
HostName= 192.168.2.2
DataDir= /var/lib/mysql-cluster
[NDBD]
Hostname=192.168.2.4
DataDir= /var/lib/mysql-cluster

[MYSQLD]
[MYSQLD]
[MYSQLD]

Nota: HostName de NDB_MGM (nodo administración) y NDBD (nodo datos)

Iniciar nodo:
/etc/init.d/mysql-ndb-mgm start

2. NODOS DE DATOS

La configuración de cada uno de estos nodos debe hacerse en el archivo my.cnf que se encuentra en el directorio /etc/. Si no existe debe crearse y debe contener las siguientes líneas. Esto en cada nodo de datos y cada nodo SQL:
[mysqld]
ndbcluster
ndb-connectstring=192.168.2.3



#y al final del archivo
[mysql_cluster]
ndb-connectstring=192.168.2.3


Inicio de los nodos de datos
Los nodos de datos se inician y mysql se reinicia:
/etc/init.d/mysql restart
/etc/init.d/mysql-ndb start



3. Luego regresamos al nodo de administración y verificamos si los nodos son reconocidos:
ndb_mgm> show;
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @192.168.2.2 (Version: 5.0.51, Nodegroup: 0)
id=3 @192.168.2.4 (Version: 5.0.51, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.2.3 (Version: 5.0.51)
[mysqld(API)] 2 node(s)
id=4 @192.168.2.2 (Version: 5.0.51)
id=5 @192.168.2.4 (Version: 5.0.51)

4. Probando el Cluster
Entramos a mysql
$> mysql -u root -p
Enter password:


Creamos una base de datos de prueba
mysql> create database clustertest;
Query OK, 1 row affected (0.00 sec)

Creamos una base de datos:
mysql> use clustertest;
Database changed
mysql> create table test (i int) engine=ndbcluster;
Query OK, 0 rows affected (0.71 sec)

mysql> insert into test values (1);
Query OK, 1 row affected (0.05 sec)

mysql> select * from test;
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.03 sec)

Verificar después si estas han sido creadas:
mysql> show tables;


Para mayor informacion puedes revisar los siguientes enlaces:

AUTORES ??
talvez algunos preguntaran quienes son los autores intelectuales de todo esto, pues somos estudiantes cursando la materia Bases de Datos en Quinto Año de Ingenieria de Sistemas Informaticos de la Facultad Multidisciplinaria de Occidente de la Universidad El Salvador

Todo esto lo hicimos con el fin de aprender nuevas herramientas que nos pueden ser muy utiles ya estando en la area laboral.

integrantes:
  • Flores Flores, Melvin Joel
  • Linares Herrera, Gustavo Ernesto
  • Zarceño Ruano, Mauricio Ernesto
  • Marroquin Argueta, Hector Oswaldo
  • Martinez Monterroza, Ricardo Enrique...



Leer nota completa...