V dnešním článku nastavíme replikaci CouchDB na Ubuntu 16.04. CouchDB je NoSQL databáze hodně podobná cassandře. Spíše než Cassandra's Java je CouchDB napsán Erlang a je to projekt Apache Software Foundation od roku 2008. Tato databáze je orientovaná na dokumenty, ne nepodobná MongoDB. Pro tento tutoriál potřebujete dva uzly se serverem Ubuntu 16.04. Ve svém notebooku budu používat instance KVM, můžete použít buď VM nebo fyzické stroje. Takže začneme.
Instalace a CouchDB na uzlu Ubuntu
Nejprve aktualizujeme seznam zdrojů
sudo apt update
Dále nainstalujeme balíček software-properties-common, který nám umožňuje přidávat PPA repozitáře. Možná je zahrnut ve výchozím nastavení, ale pokud není, musíte tento příkaz spustit
sudo apt install software-properties-common
Dále přidáme úložiště pro couchdb, odkud nainstalujeme databázový software
sudo add-apt-repository ppa:couchdb/stable
Poté můžeme nainstalovat couchdb jednoduchým příkazem:
sudo apt-get install couchdb
Po provedení tohoto příkazu se nainstaluje couchdb a poběžíme na portu 5984, můžeme použít curl k získání informací o databázi
curl localhost:5984
Jak vidíme, již běží.
Jak vytvořit a odstranit databázi
Couchdb je manipulováno prostřednictvím požadavků http. Když chcete něco udělat, zadáte požadavek na localhost na výchozím portu, na kterém běží CouchDB. To je port 5984. Z bezpečnostních důvodů to můžete provést pouze na localhost, na počítači, kde běží couchdb.
Pojďme přidat databázi:
miki@ubuntu-1:~$ curl -X PUT localhost:5984/new_database
{"ok":true}
Nyní vypíšeme všechny databáze v systému:
miki@ubuntu-1:~$ curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users","new_database"]
První dva tam jsou standardně, new_database je to, co jsme vytvořili. Tak to smažeme. Smazání databází se provádí následujícím příkazem
miki@ubuntu-1:~$ curl -X DELETE http://127.0.0.1:5984/new_database
{"ok":true}
Nyní znovu spusťte druhý příkaz
miki@ubuntu-1:~$ curl -X GET http://127.0.0.1:5984/_all_dbs
["_replicator","_users"]
Vidíme, že new_database chybí, protože jsme ji smazali.
Futon – grafické uživatelské rozhraní CouchDB
Pokud navštívíte http://localhost:5984/_utils
ve svém prohlížeči najdete Futon. Futon je rozhraní CouchDB GUI. Ale jak již bylo zmíněno, CouchDB z bezpečnostních důvodů umožňuje správu pouze z localhost, což znamená ze serveru, na který jste CouchDB nainstalovali. Nemůžete zadat IP adresu serveru místo localhost. Pokud tedy chcete spravovat server z vašeho notebooku, museli bychom použít malý trik. Potřebovali bychom vytvořit ssh tunel na server, vytvořit mini VPN a přimět váš server, aby si myslel, že požadavek přichází z localhost. Chcete-li to provést, zadejte na místním počítači následující příkaz:
miki@ThinkPad-X220T:~$ ssh -L5984:127.0.0.1:5984 [email protected]
Tím se vytvoří tunel, který potřebujeme, a poté můžete spustit prohlížeč a přejít na http://localhost:5984/_utils/index.html
Poskytne vám uživatelské rozhraní podobné tomuto
Protože se v další kapitole chystáme replikovat databázi, musíme naši cílovou databázi nastavit tak, aby přijímala repliku z jiných míst než localhost. To lze nastavit v parametru bind_address na konfigurační stránce Futonu. Musí být nastaven na 0.0.0.0
k poslechu na všech IP, nikoli pouze na localhost. Něco jako toto:
Můžete to udělat na obou svých uzlech (budete muset vytvořit nový ssh tunel pro další uzly), ale obecně pouze cíl, kde je vytvořena replika, potřebuje naslouchat na všech IP adresách. Zdroj může nadále poslouchat pouze localhost.
Místní replikace databáze
Replikace databáze je, stejně jako vše ostatní v CoucdDB, také provedena HTTP požadavkem. Musíte zadat zdrojovou a cílovou databázi. Cíl může být lokální nebo vzdálená databáze. Protože jsme již nastavili ubuntu-1 poslouchat všechny ip, pojďme vytvořit db, kterou budeme replikovat na hostiteli ubuntu-2.
miki@ubuntu-2:~$ curl -X PUT localhost:5984/db-replica
{"ok":true}
Nyní se podívejme, jak můžeme tuto databázi lokálně replikovat. Na stejném serveru
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"}
Tento příkaz by měl vytvořit databázi foo na místním hostiteli a jako zdroj by měla být použita replika databáze db, kterou jsme již vytvořili dříve. Povolili jsme také možnost kontinuální, což znamená, že databáze bude pravidelně synchronizována, když provedete jakékoli změny zdrojová databáze, což je v tomto případě db-replika. Po spuštění tohoto příkazu umožňuje zkontrolovat všechny dostupné databáze
miki@ubuntu-2:~$ curl -X GET localhost:5984/_all_dbs
["_replicator","_users","db-replica","foo"]
Databáze foo byla vytvořena.
Vzdálená replikace
Zkusme to nyní udělat vzdáleně, náš zdroj je opět db-replika na serveru ubuntu-2 a náš cíl bude vzdálený na našem serveru ubuntu-1. Pokud není přítomna, vytvoří novou databázi (parametr create_target) a repliku bude průběžně synchronizovat pro všechny změny, jakmile k nim dojde.
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"}
Pojďme zkontrolovat dbs na serveru ubuntu-1
miki@ubuntu-1:~$ curl -X GET localhost:5984/_all_dbs
["_replicator","_users","dbtest","remotefoo"]
Můžeme vidět, jak funguje vzdálená replikace. V případě, že chcete pouze jednorázovou replikaci, budete muset změnit kontinuální parametr na false nebo jej jednoduše vynechat. Pokud chcete zobrazit protokoly couchDB , najdete jej v adresáři /var/log/couchdb/couch.log. K přístupu k němu budete potřebovat oprávnění sudo nebo root, a pokud chcete interaktivně sledovat protokoly, udělá to tento příkaz
sudo tail -f /var/log/couchdb/couch.log
Závěr
Prošli jsme základní příkazy a použití CouchDB. Vytváření nové databáze, mazání, replikace lokálně nebo přes síť se provádí pomocí HTTP požadavků a lze je zakódovat do vaší aplikace. Kontrola protokolů se provádí normálním příkazem tail -f, a když je potřeba GUI, máme Futon, který je dostatečně intuitivní, aby vám pomohl dělat všechny úkoly, na které se v příkazovém řádku necítíte dostatečně pohodlně. To je pro tento článek vše, děkuji za přečtení a přeji hezký den.