En el artículo de hoy, configuraremos la replicación de CouchDB en Ubuntu 16.04. CouchDB es una base de datos NoSQL muy similar a Cassandra. En lugar de Java de Cassandra, CouchDB está escrito en Erlang y es un proyecto de Apache Software Foundation desde 2008. Esta base de datos está orientada a documentos, no muy diferente de MongoDB. Para este tutorial, necesita dos nodos que ejecuten Ubuntu 16.04 Server. Usaré instancias KVM en mi computadora portátil, puede usar VM o máquinas físicas. Así que comencemos.
Instalación y CouchDB en el nodo de Ubuntu
Primero actualicemos la lista de fuentes
sudo apt update
A continuación, instalamos el paquete software-properties-common que nos permite agregar repositorios PPA. Es posible que esté incluido de forma predeterminada, pero si no lo está, debe ejecutar este comando
sudo apt install software-properties-common
Luego agregamos el repositorio para couchdb desde donde instalaremos el software de la base de datos
sudo add-apt-repository ppa:couchdb/stable
Luego podemos instalar couchdb con un comando simple:
sudo apt-get install couchdb
Después de ejecutar este comando, se instala couchdb y lo ejecutaremos en el puerto 5984. ¿Podemos usar curl para obtener información sobre la base de datos?
curl localhost:5984
Como vemos, ya se ejecuta.
Cómo crear y eliminar una base de datos
Couchdb se manipula a través de solicitudes http. Cuando desea que se haga algo, realiza una solicitud en localhost en el puerto predeterminado en el que se ejecuta CouchDB. Ese es el puerto 5984. Por razones de seguridad, solo puede hacer esto en localhost, en la máquina donde se está ejecutando couchdb.
Agreguemos la base de datos:
miki@ubuntu-1:~$ curl -X PUT localhost:5984/new_database
{"ok":true}
Hagamos ahora una lista de todas las bases de datos del sistema:
miki@ubuntu-1:~$ curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users","new_database"]
Los dos primeros están ahí por defecto, new_database es lo que creamos. Entonces eliminémoslo. La eliminación de bases de datos se realiza con el siguiente comando
miki@ubuntu-1:~$ curl -X DELETE http://127.0.0.1:5984/new_database
{"ok":true}
Ahora ejecuta el segundo comando de nuevo
miki@ubuntu-1:~$ curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users"]
Vemos que falta la nueva_base de datos, ya que la eliminamos.
Futon:la GUI de CouchDB
Si visita http://localhost:5984/_utils
con tu navegador, encontrarás el Futón. Futon es la interfaz gráfica de usuario de CouchDB. Pero como se mencionó, CouchDB por razones de seguridad solo permite la administración desde localhost, lo que significa que desde el servidor que instaló CouchDB. No puede escribir la dirección IP del servidor en lugar de localhost. Entonces, si desea administrar su servidor desde su computadora portátil, necesitaríamos usar un pequeño truco. Necesitaríamos hacer un túnel ssh al servidor, hacer una mini VPN y hacer que su servidor piense que la solicitud proviene de localhost. Para hacerlo, en su computadora local, escriba el siguiente comando:
miki@ThinkPad-X220T:~$ ssh -L5984:127.0.0.1:5984 [email protected]
Esto creará el túnel que necesitamos, y luego puede iniciar su navegador y navegar a http://localhost:5984/_utils/index.html
Le dará una interfaz de usuario similar a esta
Como vamos a replicar una base de datos en el próximo capítulo, debemos configurar nuestra base de datos de destino para aceptar réplicas de ubicaciones que no sean localhost. Esto se puede configurar en el parámetro bind_address en la página de configuración de Futon. Debe establecerse en 0.0.0.0
para escuchar en todas las ip en lugar de solo localhost. Algo como esto:
Puede hacer esto en ambos nodos (necesitaría crear un nuevo túnel ssh para otros nodos), pero generalmente solo el objetivo donde se realiza la réplica necesita escuchar en todas las direcciones IP. La fuente puede continuar escuchando solo localhost.
Replicar una base de datos localmente
La replicación de una base de datos, como todo lo demás en CoucdDB, también se realiza mediante una solicitud HTTP. Debe especificar la base de datos de origen y de destino. El destino puede ser una base de datos local o remota. Dado que ya configuramos ubuntu-1 para escuchar todas las ip, creemos una base de datos que replicaremos en el host ubuntu-2.
miki@ubuntu-2:~$ curl -X PUT localhost:5984/db-replica
{"ok":true}
Ahora veamos cómo podemos replicar esta base de datos localmente. En el mismo servidor
curl -H 'Content-Type: application/json' -X POST http://localhost:5984/_replicate -d ' {"source": "http://localhost:5984/db-replica", "target": "http://localhost:5984/foo", "create_target": true, "continuous": true} '
{"ok":true,"_local_id":"f8fa7b615b4e951d7ab7254ed58d049d+continuous+create_target"}
Este comando debería crear una base de datos foo en el host local, y como fuente debería tomar la base de datos db-replica que ya creamos anteriormente. También habilitamos la opción continua, lo que significa que la base de datos se sincronizará periódicamente cuando realice cambios en la base de datos de origen, que en este caso es db-replica. Después de ejecutar este comando, verifiquemos todas las bases de datos disponibles
miki@ubuntu-2:~$ curl -X GET localhost:5984/_all_dbs
["_replicator","_users","db-replica","foo"]
Se ha creado la base de datos foo.
Replicación remota
Intentemos ahora hacerlo de forma remota, nuestra fuente es nuevamente db-replica en el servidor ubuntu-2 y nuestro objetivo será remoto en nuestro servidor ubuntu-1. Creará una nueva base de datos si no está presente (parámetro create_target) y sincronizará la réplica continuamente para todos los cambios a medida que ocurran.
miki@ubuntu-2:~$ curl -H 'Content-Type: application/json' -X POST http://localhost:5984/_replicate -d ' {"source": "http://localhost:5984/db-replica", "target": "http://192.168.122.223:5984/remotefoo", "create_target": true, "continuous": true} '
{"ok":true,"_local_id":"cf7f6399835a893ab48282cb269eb1ab+continuous+create_target"}
Comprobemos los dbs en el servidor ubuntu-1
miki@ubuntu-1:~$ curl -X GET localhost:5984/_all_dbs
["_replicator","_users","dbtest","remotefoo"]
Podemos ver cómo funciona la replicación remota. En caso de que solo desee una replicación única, deberá cambiar el parámetro continuo a falso o simplemente omitirlo. Si desea ver los registros de CouchDB , puede encontrarlo en el directorio /var/log/couchdb/couch.log. Necesitaría privilegios de sudo o root para acceder a él, y si desea ver los registros de forma interactiva, este comando lo hará
sudo tail -f /var/log/couchdb/couch.log
Conclusión
Hemos repasado los comandos básicos y el uso de CouchDB. La creación de una nueva base de datos, la eliminación, la replicación localmente o en la red se realizan mediante solicitudes HTTP y se pueden codificar para su aplicación. La verificación de registros se realiza mediante el comando normal tail -f, y cuando se necesita GUI, tenemos Futon, que es lo suficientemente intuitivo como para ayudarlo a realizar todas las tareas que no se siente lo suficientemente cómodo para hacer en la línea de comandos. Eso es todo por este artículo, gracias por leer y buenos días.