Réplica de datos en tiempo real desde Oracle a Couchbase con GoldenGate

English

A menudo los datos de las organizaciones se encuentran en distintos repositorios o sistemas de información. Imaginemos un Catálogo de Productos. Como ejemplo, supongamos que los datos maestros se encuentran en una base de datos Oracle, dando servicio a aplicaciones de logística, aprovisionamiento, control de existencias y otros sistemas de back-end.

Por otro lado, consideremos un portal web que actúa de frontal para nuestros clientes finales. Esta aplicación tendrá un gran número de clientes concurrentes, y para dar la mejor experiencia de usuario necesitaremos de un excelente rendimiento en el acceso al Catálogo de Productos.

Este es un caso de uso típico de Couchbase. Gracias al cache incluido en Couchbase conseguiremos un excelente rendimiento en el acceso a datos, y podremos escalar nuestro sistema con un coste y esfuerzo mucho menores. Además, es frecuente utilizar Couchbase en este tipo de escenarios para almacenar perfiles de usuarios, sesiones de aplicación o como una capa de consolidación para otras fuentes de datos.

En este punto, tenemos los datos de nuestro catálogo de productos replicados en dos almacenamientos: Oracle y Couchbase. Al hacer la carga inicial de datos, nuestro catálogo esta sincronizado con la base de datos origen, y los datos son consistentes.

Ahora se produce una escritura en la base de datos Oracle de origen. Puede ser que se añada un nuevo producto, o cambie el precio de un determinado producto. ¿Cómo aseguramos que este cambio se propague a Couchbase para seguir manteniendo la consistencia?

Esto es precisamente lo que hace Oracle GoldenGate: recoge transacciones ejecutadas sobre una base de datos Oracle y las propaga a otro almacén de datos. Aunque en estos momentos Couchbase no es una base de datos soportada de forma nativa por Oracle GoldenGate,  podemos utilizar el Adaptador Oracle GoldenGate para Java para hacer la integración entre ambos extremos.

cb_ggadapter

Algunos aspectos a considerar:

Modelado de Datos. Oracle es una base de datos relacional, con datos estructurados en tablas, filas y columnas. Por otro lado, Couchbase es una base de datos documental, que almacena documentos en formato JSON. Estos documentos no tienen un esquema o estructura predefinida. A menudo los documentos en Couchbase contienen datos referenciados en el mismo documento. Así se consigue evitar queries con joins y se mejora el rendimiento y la sencillez.

Carga de datos. El primer paso será hacer una carga inicial de datos desde Oracle a Couchbase. A partir de aquí podremos activar la propagación de cambios desde Oracle hacia Couchbase.

Es siguiente paso es desarrollar el adaptador. En este repositorio github se puede encontrar una implementación de ejemplo. En el mismo se encuentra el código del mismo, una versión compilada del adaptador lista para desplegar y una utilidad para hacer la carga inicial desde Oracle.

Las instrucciones detalladas se pueden encontrar en este repositorio. En resumen, los pasos son los siguientes:

  1. Hacer la carga inicial desde Oracle a Couchbase
  2. Instalar GoldenGate en las máquinas origen y destino
  3. Configurar la base de datos Oracle de origen
  4. Instalar el adaptador: CouchbaseGoldenGateAdapter
  5. Configurar los procesos de GoldenGate: extract, pump y replicat
  6. Arrancar los procesos de GoldenGate

En este punto, para probar la replicación podemos utilizar Oracle SQLPlus y Couchbase cbq como clientes SQL. En este ejemplo utilizamos el esquema HR, incluido como ejemplo en todas las bases de datos Oracle, y que simula un departamento de Recursos Humanos. Empecemos por un INSERT.

Vamos a insertar una fila en la tabla “regions”, con “region_id=5”. Comprobamos antes que este registro no está presente en Oracle y tampoco en Couchbase:

(Oracle SQLPlus)

before5

(Couchbase cbq)

before5_cb

Ahora hacemos el insert desde Oracle SQLPlus, seguido de un commit.

after5

Comprobamos que el documento se ha propagado a Couchbase:

after5_cb

Así que aquí lo tenemos; GoldenGate replicando transacciones Oracle a Couchbase. Se pueden comprobar también otras sentencias de escritura como DELETE y UPDATE. ¡Feliz sincronización!

Transfiriendo datos entre Oracle y Couchbase

Una pregunta frecuente en clientes es sobre cómo mover datos entre Oracle y Couchbase. Oracle es una base de datos relacional muy popular, y clientes que migran a Couchbase tienen este desafío inicial. ¿Cómo cargo mi base de datos Couchabse a partir de las tablas de datos en Oracle?

La primera consideración es que estamos hablando de distintos formatos de datos. Las tablas de bases de datos relacionales se organizan en filas. Cada tabla tiene un conjunto determinado de columnas, cada fila se determina de manera única por un conjunto de campos que forman la clave primaria. Una instancia de base de datos contiene múltiples tablas

Por otro lado, Couchbase es una base de datos Documental de propósito general. Couchbase sigue el patrón clave-valor, donde la clave está fomrada por un conjunto de caracteres, y el valor no tiene un formato predefinido. Normalmente utilizamos Couchbase como una base de datos Documental, donde el valor es un documento en formato JSON. De este modo, podremos utilizar funcionalidades como índices globales secundarios, vistas y N1QL, una implementación del popular lenguaje SQL para acceso a nuestros datos en JSON.

En Couchbase no hay un esquema fijo para almacenar los datos. Cada documento JSON puede tener atributos diferentes. In caso de un nuevo dato, no hace falta modificar el esquema ni crear una nueva tabla, como en el mundo relacional. Esta flexibilidad es una de las razones por la que los clientes están adoptando Couchbase.

Otra diferencia importante con las bases de datos relacionales es sobre la normalización de los datos. Una de los mantras de las bases de datos relacionales es organizar los datos de modo que se minimice la redundancia de los mismos. Esto ayuda a mantener la consistencia de los datos, pero obliga a hacer consultas complejas, con accesos a varias tablas (JOINs).

En Couchbase, por otro lado, buscamos maximizar el rendimiento en el acceso al dato, de modo que de-normalizar los datos es una práctica común.

En este ejercicio de migración usaremos las convenciones siguientes:

  • Cada documento JSON incluirá un atributo raíz igual al nombre de la tabla.
  • Todos los atributos estarán en minúsculas.
  • Couchbase es una base de datos clave-valor. El formato de la clave lo derivaremos de la clave primaria relacional de la siguiente manera:
[nombre de tabla en minúsculas]::[valor del campo1 de la PK]::[ valor del campo2 de la PK]:: ...
  • Los tipos de dato (Numeric, boolean, text …) se conservarán en la migración.
  • Los datos en Oracle de tipo Date and Timestamps se almacenarán con el formato milisegundos desde  1 de enero , 1970, 00:00:00 GMT

oracle2couchbase_1

Ahora es el momento de escribir código para hacer la magia …. No asustarse! Mientras algunos intrépidos se pongan a la tarea os ofrecemos una implementación.

Usaremos la herramienta oracle2couchbase, disponible aquí. (Atención, esta herramienta no tiene soporte oficial) Se proporciona el código fuente. Echar un vistazo al mismo para comprobar que no es muy complicado.

En el repositorio github se incluyen instrucciones de cómo usar la herramienta.

Como origen de datos en Oracle, utilizaremos el esquema HR, que contiene un conjunto de tablas que modelan un departamento de recursos humanos, y que se incluye como ejemplo en todas las distribuciones de Oracle.

Crearemos en Couchbase un repositorio llamado HR como destino de nuestros datos.

La línea de comando que utilizamos es la siguiente:

java -cp ./oracle2couchbase.jar:./lib/couchbase-java-client-2.2.2.jar:./lib/couchbase-core-io-1.2.2.jar:./lib/rxjava-1.0.15.jar:./lib/ojdbc6.jar -DcbClusterAddress=couchbaseMachine -DcbBucketName=HR -DoraAddress=oracleMachine -DoraUser=HR -DoraPassword=oracle -DoraService=XE -DoraTables=COUNTRIES,DEPARTMENTS,EMPLOYEES,JOBS,JOB_HISTORY,LOCATIONS,REGIONS com.oracle2couchbase.Loader

Ahora que hemos hecho la migración, echemos un vistazo a nuestros datos. Utilizaremos consultas SQL en Oracle y N1QL en Couchbase.

Primera consulta: busquemos las filas de “locations” cuyo campo “city_name” empiece por ‘B’.

Oracle SQLPlus

sqlplus1

Couchbase Query Workbench Developer

n1ql1

En este ejemplo hemos utilizado la misma sintaxis para la query.

Hagamos ahora algo más complejo. Contaremos el número de “locations” para cada país. Incluiremos el campo “country_name” haciendo una JOIN con el documento JSON “countries” asociado (¡o con la correspondiente tabla, en el caso relacional!). Ordenaremos por este valor, y luego por el campo nombre. En este ejemplo vemos cómo se mantienen las relaciones en la migración.

Oracle SQLPlus

sqlplus2

Couchbase Query Workbench Developer

n1ql2

En este caso la sintaxis no es idéntica, pero muy similar.

Para terminar, recalcamos que esto es sólo un ejemplo. Un primer paso para movimiento de datos entre Oracle y Couchbase. Un diseño de datos más apropiado para una base de datos Documental como Couchbase puede incluir desnormalizar algunos datos, incluyéndoles en documentos JSON “padres”.

Para profundizar en estos aspectos de diseño resultan muy interesantes las referencias siguientes:

Couchbase ¿qué es? ¿para qué sirve?

Llegan las Navidades. Vacaciones, regalos, comidas familiares. Te toca al lado de tu cuñado favorito. Si, aquel con el que terminaste discutiendo de política el año pasado. Este año intentas dirigir la conversación a otros temas. Trabajo. – ¿Y a qué te dedicas ahora? – Bueno, ahora trabajo con una base de datos NoSQL. Couchbase – ¿Eh? ¿y eso qué es?

No puedo ayudarte en la relación con tu cuñado, pero te ofrezco esta entrada para que puedas salir del paso. Buen provecho.

Couchbase: ¿qúe es?

  • Couchbase es una base de datos NoSQL orientada a documentos, distribuida, de alto rendimiento, fácilmente escalable y de propósito general
  • Couchbase integra un modelo con una capa de cache integrada, y una capa de persistencia en disco. De este modo, las lecturas y escrituras son en memoria, lo que explica su excelente rendimiento.
  • Couchbase integra una solución de movilidad (Couchbase Mobile), que incluye una base de datos simplificada en el dispositivo móvil (Couchbase Lite) que se sincroniza con una base de datos centralizada, y permite su funcionamiento en modo offline: cuando no hay conectividad con el servidor central la aplicación sigue funcionando en modo local
  • Couchbase soporta integración y réplica de datos entre centros de datos remotos (Cross Data Center Replication – XDCR)
  • Como base de datos documental, Couchbase utiliza JSON como formato de documento. Esto permite una gran flexibilidad en el dato, al no forzar un esquema predeterminado
  • Couchbase permite la ejecución de queries mediante una implementación de SQL desarrollada a medida: N1QL. Este lenguaje permite que los desarrolladores no tengan que aprender nuevas APIs propietarias, así como su integración con soluciones actuales de reporting, basadas en SQL
  • Couchbase incluye APIs de programación en los principales lenguajes: Java, C/C++, .Net, Node.js, PHP, Python , Ruby, Go, y no está ligada a ninguna tecnología ni servidor de aplicaciones en particular.
  • Couchbase y Big Data: En el ecosistema de Big Data, Couchbase se posiciona como una base de datos operacional, orientada al tiempo real, frente al enfoque analítico y batch más propio de entornos Hadoop, e incluye conectores nativos para Hadoop, Spark, Kafka, etc

cb_que_es

Couchbase: ¿para qué sirve?

Couchbase es una base de datos NoSQL. A la hora de decidirse por este tipo de base de datos, en vez de las tradicionales bases de datos relacionales, los criterios y beneficios son los que buscan el rendimiento, escalabilidad, desarrollo más ágil y ahorro en costes.

El siguiente gráfico, obtenido de un artículo que puedes descargar aquí, nos da pistas de por que las empresas se deciden por NoSQL.

why_nosql

Los casos de uso mas habituales son los relacionados con iniciativas de transformación digital, aplicaciones con altos requerimientos de rendimiento, concurrencia y volumen de datos.

Perfiles de usuario, internet de las cosas (IoT), aplicaciones móviles, catálogos, sistemas de cache, se encuentran entre los casos de uso más habituales

cb_usos

¿Dónde puedo encontrar más información?

Para profundizar en las capacidades de Couchbase ofrecemos algunos enlaces que resultarán de utilidad:

Casos de uso

Top 10 Enterprise NoSQL Use Cases

Why NoSQL?

Couchbase whitepapers

Configurando un entorno productivo con MongoDB y Couchbase

English

¡Enhorabuena! Tu nuevo proyecto sobre una base de datos noSQL está listo para salir a producción. Tu entorno de desarrollo, con un solo nodo, ha sido realmente simple de instalar, configurar y utilizar. Pero … un momento …

¿Aguantará tu entorno los requerimientos de producción del sistema? ¿Has pensado en un posible fallo de una máquina? ¿Has probado un volumen de datos comparable al de producción? ¿Confías en soportar la carga de usuarios concurrentes requerida?

Si pensabas salir a producción con un entorno de un solo nodo probablemente te equivocas. Necesitas un entorno de producción en condiciones. Necesitas un cluster.

En esta entrada haremos una comparación del esfuerzo necesario para configurar un entorno de producción en cluster con dos bases de datos noSql muy  populares: MongoDB y Couchbase.

Para este ejercicio, vamos a configurar un entorno de producción en cluster con los siguientes requerimientos:

  • Los datos se distribuirán de uniformemente en tres particiones (shards)
  • El cluster debe soportar el fallo de un nodo sin pérdida de datos ni pérdida de servicio
  • El cluster soportará el balanceo de peticiones de clientes externos
  • Seguiremos la documentación oficial del fabricante para ambos productos, MongoDB y Couchbase

Para los que no os gusta esperar, vamos a mostrar los resultados en una tabla y  un resumen a continuación. Después entraremos en detalles:

mongo1 couchbase1

Número de máquinas requeridas

14

3

Balanceador

de carga

1

No  requerido

Número de comandos ejecutados

128

27

Número de ficheros editados

28

0

Las arquitecturas desplegadas son estas:

mongo1 couchbase1

mongo2

couchbase2

 

Resumen

Con esta comparación, que corresponde a una instalación siguiendo la documentación oficial de MongoDB y Couchbase, es fácil comprobar las diferencias entre ambas aproximaciones desde el punto de vista operacional. Es mucho más fácil crear, administrar y operar Couchbase, con un número de servidores sensiblemente inferior, y con un reflejo inmediato en los costes de operación.

Con Couchbase es también más sencillo configurar réplica de clusters entre Centros de Datos separados geográficamente para soportar recuperación ante desastres y alta disponibilidad.

Desde un punto de vista de desarrollo, con MongoDB es necesario activar sharding al nivel de database y de collection. Además, para conseguir que los datos se repartan de manera uniforme entre los servidores es necesario elegir cuidadosamente la sharding key, lo que no resulta sencillo, y no puede ser cambiado después de la inserción de datos [1] [2].

Para tener una idea de esta complejidad con MongoDB, observamos en la documentación de MongoDB, que mantenemos en el ingles original [3]:

IMPORTANT

It takes time and resources to deploy sharding. If your system has already reached or exceeded its capacity, it will be difficult to deploy sharding without impacting your application.

As a result, if you think you will need to partition your database in the future, do not wait until your system is over capacity to enable sharding.

[IMPORTANTE

Desplegar sharding requiere tiempo y recursos. Si tu sistema ya ha alcanzado o excedido su capacidad, va a resultar difícil desplegar sharding sin impactar a la aplicación.

Como resultado, si piensas que tu base de datos va a necesitar particionamiento en el futuro, no esperes a que tu sistema exceda su capacidad para activar sharding]

Detalles de arquitectura

Arquitectura con MongoDB

En la configuración de la arquitectura estamos siguiendo la documentación de MongoDB:

De acuerdo a estas recomendaciones y a nuestros requerimientos iniciales:

  1. Necesitaremos tres Config Servers, cada uno desplegado en su propia máquina.
  2. El punto de entrada de los clientes es el proceso Router (mongos). Utilizaremos dos Routers, cada uno en su propia máquina.
  3. Necesitaremos un balanceador de carga con afinidad de cliente. [NOTA: como alternativa a los puntos 2 y 3, podemos desplegar una instancia mongos en cada servidor de aplicaciones]
  4. Utilizaremos tres shards, con un Replica Set en cada uno.
  5. Cada Replica Set contendrá tres instancias mongod, cada una en su propia máquina. En total utilizaremos 9 máquinas para sharding (3 shards x 3 mongod/shards x 1 máquina/mongod)

Nuestra arquitectura con MongoDB se muestra en la siguiente figura:

mongo2

  • Cada Replica Set tiene tres procesos (mongod), cada uno ejecutándose en una máquina diferente. Uno de ellos actúa como nodo primario, y se encarga de la escritura de datos, y los otros dos actúan como nodos de réplica, almacenando copias de los datos para soportar alta disponibilidad en caso de caída del nodo primario
  • Cada shard es responsable de un subconjunto de los datos. El modo de particionamiento se basa en utilizar una sharding key o por un algoritmo de hash para las claves de los documentos.
  • Desplegaremos un Replica Set en cada shard [5].
  • El acceso a la base de datos se realiza mediante nodos de enrutado (mongos).
  • Los clientes se comunican con los mongos a través de un balanceador de carga con afinidad de cliente.

Con este despliegue necesitamos catorce máquinas y un balanceador de carga.

Arquitectura con Couchbase

Estamos siguiendo la siguiente documentación de Couchbase:

De acuerdo a estas recomendaciones y a nuestros requerimientos iniciales:

  1. En Couchbase, cada keyspace se llama bucket, y lo podemos asimilar a una instancia de base de datos. Cada bucket se divide en un número fijo de particiones (1024), que llamamos vBuckets. Los vBuckets se distribuyen de forma uniforme entre los distintos nodos del cluster. Si pretendemos tener los datos en tres shards, necesitaremos tres nodos, cada uno ejecutándose en una máquina dedicada. De este modo, cada nodo almacena la tercera parte de los datos.
  2. Los datos se distribuyen así de modo uniforme en los tres nodos.
  3. Cada documento se repica automáticamente a un nodo diferente del cluster, asegurando así la alta disponibilidad en caso de fallo de servidor.
  4. El enrutado del cliente al nodo correspondiente del cluster en cada interacción se realiza mediante la librería de acceso (Couchbase client SDK). No se requiere ningún nodo de enrutado ni balanceador de carga.

En nuestro caso, la arquitectura de cluster con Couchbase queda así:

couchbase2

Con este despliegue necesitaremos tres máquinas.

Detalle de instalación de los entornos

Para este ejercicio utilizaremos 14 máquinas virtuales Linux CentOS 7, con 2 Gb RAM cada una.

Llamaremos a cada máquina: dbbox1, dbbox2, … dbbox14.

Para facilitar la instalación hemos utilizado IPs fijas y un mapeo nombre/IP en el fichero hosts (/etc/hosts) para todas las máquinas.

Instalación del cluster de MongoDB

Instalación de MongoDB

Instalamos MongoDB en las 14 máquinas. En cada máquina ejecutamos:

vi /etc/yum.repos.d/mongodb-org-3.0.repo 
[EDIT FILE]>>>> 
[mongodb-org-3.0] 
name=MongoDB Repository 
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/ 
gpgcheck=0 
enabled=1 
<<<< 
sudo yum install -y mongodb-org 
vi /etc/selinux/config 
[EDIT FILE]>>>> 
SELINUX=disabled #SELINUX=enforcing 
<<<<< 
chkconfig mongod off 
systemctl disable firewalld 
reboot

Hemos ejecutado:

(6 comandos + 2 ficheros editados) x 14 máquinas = 84 comandos + 28 ficheros editados

Configuration Servers

En 3 máquinas (dbbox10, dbbox11, dbbox12)

mkdir -p /mongodb/config
export LC_ALL=C
mongod --configsvr --logpath /mongodb/config/log --logappend --dbpath /mongodb/config --fork

3 comandos x 3 máquinas = 9 comandos

Routers (mongos)

En dos machines (dbbox13, dbbox14)

mkdir /mongodb
mongos --configdb dbbox10:27019,dbbox11:27019,dbbox12:27019 --fork --logappend --logpath /mongodb

2 comandos x 2 máquinas = 4 comandos

Shards (mongod)

En nueve máquinas (dbbox1, dbbox2, …, dbbox9)

Primero configuramos los replica sets:

mkdir -p /mongodb/rs1_1
# Note different replica set and port for each process
mongod --shardsvr --replSet rs1 --dbpath /mongodb/rs1_1 --logpath /mongodb/log.rs1 --fork --logappend --smallfiles --oplogSize 50 --port 27001

(en cada máquina especificamos el nombre del replica set para reflejar la figura de arquitectura que hemos definido previamente, es decir los valores rs1, rs1_1 cambiarán a rs2, rs2_1, etc …)

2 comandos x 9 máquinas = 18 comandos

En dbbox1:

mongo --port 27001
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "dbbox1:27001",
"ok" : 1
}
rs1:OTHER> rs.add("dbbox4:27001")
{ "ok" : 1 }
rs1:PRIMARY> rs.add("dbbox7:27001")
{ "ok" : 1 }

3 comandos

En dbbox2:

mongo --port 27001
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "dbbox2:27001",
"ok" : 1
}
rs2:OTHER> rs.add("dbbox5:27001")
{ "ok" : 1 }
rs2:PRIMARY> rs.add("dbbox8:27001")
{ "ok" : 1 }

3 comandos

En dbbox3:

mongo --port 27001
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "dbbox3:27001",
"ok" : 1
}
rs3:OTHER> rs.add("dbbox6:27001")
{ "ok" : 1 }
rs3:PRIMARY> rs.add("dbbox9:27001")
{ "ok" : 1 }

3 comandos

Configuración Shards:

En dbbox10:

mongo
mongos> sh.addShard("rs1/dbbox1:27001")
{ "shardAdded" : "rs1", "ok" : 1 }
mongos> sh.addShard("rs2/dbbox2:27001")
{ "shardAdded" : "rs2", "ok" : 1 }
mongos> sh.addShard("rs3/dbbox3:27001")
{ "shardAdded" : "rs3", "ok" : 1 }

4 comandos

Chequeo de configuración:

mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5612784c13c13614cd1e823b")
}
shards:
{  "_id" : "rs1",  "host" : "rs1/dbbox1:27001,dbbox4:27001,dbbox7:27001" }
{  "_id" : "rs2",  "host" : "rs2/dbbox2:27001,dbbox5:27001,dbbox8:27001" }
{  "_id" : "rs3",  "host" : "rs3/dbbox3:27001,dbbox6:27001,dbbox9:27001" }
balancer:
Currently enabled:  yes
Currently running:  no
Failed balancer rounds in last 5 attempts:  0
Migration Results for the last 24 hours:
No recent migrations
databases:
{  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

Total:

128 comandos

28 ficheros editados

Instalación del cluster de Couchbase

Instalación de Couchbase

Instalamos Couchbase en tres máquinas (dbbox1, dbbox2, dbbox3). En cada máquina ejecutamos:

# Disable swappiness
sudo echo 0 > /proc/sys/vm/swappiness
sudo echo '' >> /etc/sysctl.conf
sudo echo '#Set swappiness to 0 to avoid swapping' >> /etc/sysctl.conf
sudo echo 'vm.swappiness = 0' >> /etc/sysctl.conf
# Disable THP
sudo echo never > /sys/kernel/mm/transparent_hugepage/enabled
sudo echo never > /sys/kernel/mm/transparent_hugepage/defrag
# Download binary
wget http://packages.couchbase.com/releases/4.0.0/couchbase-server-enterprise-4.0.0-centos7.x86_64.rpm
sudo rpm --install couchbase-server-enterprise-4.0.0-centos7.x86_64.rpm

8 comandos x 3 máquinas = 24 comandos

Configuración del Cluster

Aunque esto se puede hacer desde un navegador accediendo a la console da administración, en este ejercicio lo haremos por línea de comando.

Esto se puede hacer desde una sola máquina (dbbox1).

El primer comando inicializa el cluster. El segundo comando añade el nodo 2 al cluster. El tercer comando añade el nodo 3 al cluster.

/optó/couchbase/bin/couchbase-cli cluster-init -c dbbox1.mysite.com:8091 -u Administrator -p change_it --cluster-username=Administrator --cluster-password=change_it --cluster-ramsize=256 --services=data,index,query

/opt/couchbase/bin/couchbase-cli server-add -c dbbox1.mysite.com:8091 –u Administrator –p change_it --server-add=dbbox2.mysite.com:8091 --services=data,index,query

/opt/couchbase/bin/couchbase-cli server-add -c dbbox1.mysite.com:8091 -u Administrator -p change_it --server-add=dbbox3.mysite.com:8091 --server-add-username=Administrator --server-add-password=change_it --services=data,index,query

3 comandos

Total:

27 comandos

REFERENCIAS

[1] (MongoDB)  Shard Keys –  http://docs.mongodb.org/manual/core/sharding-shard-key/

[2] (MongoDB)  Considerations for Selecting Shard Keys –  http://docs.mongodb.org/manual/tutorial/choose-a-shard-key/

[3] (MongoDB)  Sharded Cluster Requirements –

http://docs.mongodb.org/manual/core/sharded-cluster-requirements/

[4] (MongoDB)  Production Cluster Architecture –

http://docs.mongodb.org/manual/core/sharded-cluster-architectures-production/

[5] (MongoDB)  Deploy a Sharded Cluster –

http://docs.mongodb.org/manual/tutorial/deploy-shard-cluster/

[6] (MongoDB)  Deploy a Replica Set –

http://docs.mongodb.org/manual/tutorial/deploy-replica-set/

[7] (Couchbase) Cluster Setup – http://developer.couchbase.com/documentation/server/4.0/clustersetup/manage-cluster-intro.html

[8] (Couchbase) Command Line Interface reference – http://developer.couchbase.com/documentation/server/4.0/cli/cli-intro.html

[9] (Couchbase) Client Toplogy Awareness –  http://developer.couchbase.com/documentation/server/4.0/concepts/client-topology-awareness.html