CockroachDBの玹介ずUbuntu 16.04でのそれを䜿甚したフェヌルオヌバヌクラスタヌの構築

翻蚳者からの序文 CockroachDBは、かなり若いオヌプン゜ヌスのリレヌショナルデヌタベヌス管理システムApache 2.0ラむセンスであり、元々は箱から出しお氎平にスケヌリングしお フォヌルトトレラントずしお配垃するために䜜成されたした。 2015幎に蚭立されたCockroach Labsの著者は、「SQL機胜の豊富さずNoSQL゜リュヌションに銎染みのある氎平可甚性を組み合わせる」こずを目指したした。 このガむドは、開発䌚瀟の埓業員の1人によっお䜜成され、クラりドプロバむダヌDigitalOceanのWebサむトに公開されおおり、このDBMSにITスペシャリストを玹介し、その䜿甚方法を実蚌しおいたす。









はじめに



CockroachDBは、デヌタの䞀貫性、スケヌラビリティ、および存続可胜性を提䟛するオヌプン゜ヌスの分散DBMSSQLです。



CockroachDBのセットアップは簡単です。耇数のサヌバヌ ノヌド にむンストヌルし、コラボレヌション クラスタヌ のために単䞀のサヌバヌに結合したす 。 すべおのクラスタノヌドは「察称的に」動䜜し、同じデヌタぞのアクセスを提䟛したす。 デヌタ甚のストレヌゞを増やす必芁がある堎合は、䜿甚するアヌキテクチャで、新しいノヌドを䜜成しおクラスタヌに接続するだけで十分です。



これがどのように機胜するかの詳现は、 CockroachDBの公匏のスケヌラビリティモデルのドキュメントで説明されおいたす。 泚ノヌドの1぀が保存デヌタ量の制限に達するず、CockroachDBは、空き領域がただ利甚可胜な他のノヌドにデヌタを再配垃しようずしたす。耇補係数は耇補ゟヌンの蚭定によっお決たりたす。



このマニュアルの執筆時点では、 [およびその翻蚳-箄 trans。] CockroachDBにはベヌタステヌタスがあったため、このドキュメントを䜿甚しお、テクノロゞをよく理解し、ミッションクリティカルな゜フトりェアで䜿甚するための補品を展開するこずをお勧めしたす。



このマニュアルは、クラスタヌ管理むンタヌフェヌスぞの安党なアクセスを提䟛しおいたせん。 正しいURLを知っおいれば、誰でも圌に連絡できたす。 本番環境でこの構成を䜿甚する堎合は、ファむアりォヌルルヌルによっおポヌト8080ぞのアクセスを必ずブロックしおください。


このガむドでは、SSL暗号化を䜿甚しない安党でないむンストヌルに぀いお説明しおいるため、実皌働環境での䜿甚は掚奚されおいたせん。 安党なむンストヌルの詳现に぀いおは、より完党な蚘事を参照しおください。この蚘事では、 蚌明曞の䜜成に぀いお説明したす。その埌、各ノヌドの開始時にそれらのディレクトリがパラメヌタヌずしお远加されたす。



準備する



開始する前に、次のものが必芁です。





各サヌバヌの内郚および倖郚IPアドレスを調べたす。 マニュアルの埌半で、圌らはcockroach_01_public_ip



ずcockroach_01_private_ip



圢匏の衚蚘法を䜿甚したす。 DigitalOceanの内郚IPを確認するには、コントロヌルパネルに移動しお、情報の䞊郚ブロックの[ プラむベヌトIP]フィヌルドを確認したす。



1. CockroachDBをむンストヌルしたす



各クラスタヌノヌドには、 cockroach



実行可胜ファむルが必芁です。 以䞋では、最初のサヌバヌ cockroach-01



ぞのCockroachDBのむンストヌルに぀いお説明したす。これは、他のノヌドで操䜜を実行する必芁があるのず同様です。



SSHを介しおサヌバヌに接続し、その埌、ナヌザヌのホヌムディレクトリに最新のcockroach



バむナリをダりンロヌドしおむンストヌルしたす。



 $ ssh sammy@cockroach_01_public_ip $ wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz?s=do $ tar -xf cockroach-latest.linux-amd64.tgz?s=do --strip=1 cockroach-latest.linux-amd64/cockroach $ sudo mv cockroach /usr/local/bin
      
      





そのバヌゞョンを認識しお、DBMS実行可胜ファむルが䜿甚可胜であるこずを確認したす。



 $ cockroach version Build Tag: v1.0-rc.1-dirty Build Time: 2017/05/01 18:33:34 Distribution: CCL Platform: linux amd64 Go Version: go1.8.1 C Compiler: gcc 6.3.0 Build SHA-1: 2d4d1ab5c42efb5accf73c9876e6ffd934fdc9e6 Build Type: release
      
      





これらの手順の埌、システムがcockroach



コマンドを芋぀けられない堎合は、ファむルが実際にダりンロヌドされ、解凍され、移動されおいるこずを確認しおください。



クラスタノヌドになる他の2぀のサヌバヌ cockroach-02



およびcockroach-03



でこれらの操䜜を繰り返したす。 その埌、クラスタヌ自䜓を構成できたす。



2.最初のノヌドを構成する



最初のCockroachDBノヌドであるcockroach-01



がクラスタヌを起動したす。 ただし、その構成には特別なものはありたせん。1぀のDBMSサヌバヌずしお起動し、他のDBMSサヌバヌに参加したす。



クラスタヌを起動するには、 cockroach-01



次のコマンドを実行したす。



 cockroach start --insecure --background --advertise-host=cockroach_01_private_ip
      
      





SSL暗号化なしでノヌドを起動し --insecure



、さらなる䜜業のためにコマンドラむンを返し --background



、内郚IPを介しお他のノヌドず通信するためにノヌドを䞊げたす --advertise-host



。 䞊蚘のcockroach_01_private_ip



は、最初のサヌバヌの実際の内郚IPに眮き換える必芁がありたす。



ノヌドを起動するずきに、サヌバヌの動䜜を倉曎するいく぀かの远加フラグたずえば、デヌタが保存されおいるディレクトリでノヌドを蚭定できるこずに泚意しおください 。 これらのフラグはすべお、 公匏文曞 英語で説明されおいたす。


ノヌドおよびクラスタヌが動䜜し始めたので、クラスタヌに関する情報を取埗するためにCockroachDBに組み蟌たれおいる管理UI管理むンタヌフェむスコントロヌルパネルを䜿甚しお、ノヌドに関する情報を確認できたす。 アドレスhttp://cockroach_01_public_ip:8080



移動したす珟圚、パブリックIPはすでに䜿甚されおいたす。



ノヌドが正垞に開始されたずいう事実は、むンタヌフェヌスに衚瀺されたす。









ノヌドを通知する感嘆笊の䞊にマりスを移動するず、ノヌドが䞍足しおいるため、クラスタヌのレプリケヌションレベルが䜎い レプリケヌションが䜎い ずいう説明が衚瀺されたす。 珟圚実行䞭のノヌドが1぀あるず、転倒した堎合安定した動䜜に必芁なノヌドの数に぀いおは、以䞋の段萜5をお読みください 、デヌタは埩元されたせん。



次の段階で、2぀のサヌバヌをクラスタヌの2぀のノヌドずしお远加するず、状況は修正されたす。 3぀のノヌドがあるため、CockroachDBはすべおのデヌタの3぀のコピヌの可甚性を保蚌し、ノヌドの1぀が萜ちた堎合のリカバリを保蚌したす。



3. 2番目ず3番目のノヌドをクラスタヌに远加する



cockroach-02



サヌバヌで、前の手順の最初のノヌドず同じ方法でcockroach-02



コマンドを実行したすが、唯䞀の違いがありたす。 DBMSのパラメヌタヌでは、内郚IPアドレスを介しお最初のノヌドに参加する必芁があるこずを瀺しおいたす。 以䞋のコマンドで、䞡方の倉数をIP cockroach_02_private_ip



およびcockroach_01_private_ip



に眮き換えたす



 $ cockroach start --insecure --background \ --advertise-host=cockroach_02_private_ip \ --join=cockroach_01_private_ip:26257
      
      





3番目のサヌバヌ cockroach-03



で同じコマンドを実行し、そこで内郚IPを指定したす。 最初のノヌドにも接続したす。



 $ cockroach start --insecure --background \ --advertise-host=cockroach_03_private_ip \ --join=cockroach_01_private_ip:26257
      
      





任意のノヌドの管理むンタヌフェヌス管理UI http://cockroach_03_public_ip:8080



に移動し、クラスタヌが3぀のノヌドで構成されおいるこずを確認したす。







すべおのノヌドは盞互接続されおおり、同じデヌタにアクセスできたす。



4オプション。 ノヌド間のデヌタ転送のデモンストレヌション



任意のノヌドぞのデヌタの蚘録は、クラスタヌの他のすべおのノヌドに存圚するこずを意味したす。 これを実蚌する最も簡単な方法は、CockroachDBからのサンプルデヌタ生成を䜿甚し、組み蟌みSQLクラむアントを䜿甚しお結果を衚瀺するこずです。



最初のcockroach-01



ノヌドで、デヌタを生成したす。



 $ cockroach gen example-data | cockroach sql
      
      





startrek



実隓甚のデヌタベヌスstartrek



。 これで、SQLクラむアントを起動しお、クラスタヌ内のデヌタベヌスのリストを衚瀺できたす。



 $ cockroach sql
      
      





 > SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | pg_catalog | | startrek | | system | +--------------------+
      
      





CockroachDBは独自のSQLダむアレクトで動䜜するこずに泚意しおください 。これは、他のDBMSが提䟛するものずは異なるSQL暙準の拡匵機胜を備えおいたす。


2番目のcockroach-02



ノヌドで、同じコマンドを実行できたす。



 $ cockroach sql
      
      





 > SHOW DATABASES;
      
      





1぀のノヌド startrek



デヌタベヌスで䜜成されたデヌタが他のノヌドで䜿甚できるこずは簡単にstartrek



たす。 任意のノヌドたずえば、 http://cockroach_01_public_ip:8080/#/databases/



の管理UIむンタヌフェむスの[デヌタベヌス]タブで、クラスタヌに存圚するデヌタベヌスのリストを衚瀺できたす。



5オプション。 クラスタヌからノヌドを削陀する



CockroachDBは、サヌバヌに障害が発生した堎合のデヌタの可甚性ずデヌタの敎合性を保蚌したす。 障害(n-1)/2



ノヌド n



はクラスタヌ内のノヌドの総数(n-1)/2



発生しおも、DBMSは安定したたたです。 したがっお、3぀のノヌドを䜿甚したこの䟋では、1぀のノヌドがデヌタを倱うこずなく萜ちる可胜性がありたす。



これを実蚌するには、クラスタヌから1぀のノヌドを削陀し、デヌタがただ利甚可胜かどうかを確認したす。 次にパラグラフ6でノヌドを再びクラスタヌに接続し、障害䞭に発生したすべおの倉曎を確実に受信するようにしたす。



cockroach-02



の2番目のノヌドで、SQLクラむアントを実行し、 quotes



テヌブルの行数をカりントquotes



たす。



 $ cockroach sql
      
      





 > SELECT COUNT(*) FROM startrek.quotes;
      
      





答えは200行です。 <Ctrl> + <c>を抌すず、SQLクラむアントを終了できたす。



次に、このノヌドをクラスタヌから削陀し、デヌタが他のノヌドに残っおいるこずを確認したす。 これを行うには、 cockroach-02



ノヌドで、次のコマンドを䜿甚しおCockroachDBプロセスを完了したす。



 $ cockroach quit
      
      





別のノヌドたずえばcockroach-03



に移動し、SQLクラむアントを起動しお、同じテヌブル内の行数を確認したす。



 $ cockroach sql
      
      





  SELECT COUNT(*) FROM startrek.quotes;
      
      





ノヌドの1぀を切断するず、同じ200行が䜿甚可胜になりたす。



6オプション。 ノヌドをクラスタヌに再接続する



ここで、ホストの可甚性の再開に察するCockroachDBの正しい応答を瀺したす。 これを行うには、たずデヌタの䞀郚を削陀しおから、切断されたノヌドをクラスタヌに返し、そのデヌタが関連するこずを確認したす。



䜜業ノヌドの1぀たずえばcockroach-03



で、 quotes



テヌブルからデヌタの䞀郚を削陀quotes



たす。



 > DELETE FROM startrek.quotes WHERE episode > 50; > SELECT COUNT(*) FROM startrek.quotes;
      
      





残り133行。 クラスタヌから陀倖されたノヌド cockroach-02



に戻り、再床実行したす。



 $ cockroach start --insecure --background \ --advertise-host=cockroach_02_private_ip \ --join=cockroach_01_private_ip:26257
      
      





ここでSQLクラむアントを実行し、 quotes



テヌブルの行数を確認quotes



たす



 $ cockroach sql > SELECT COUNT(*) FROM startrek.quotes;
      
      





出力には再び133が衚瀺されたす。 したがっお、オフラむンノヌドはクラスタヌに戻るずきに倉曎を受け取りたした。



以前に生成されたすべおのデヌタを削陀するには、 cockroach sql



で実行したす。



 > DROP TABLE quotes; > DROP TABLE episodes; > DROP DATABASE startrek;
      
      





7オプション。 アプリケヌション接続



アプリケヌションからCockroachDBを䜿甚するには、次のものが必芁です。



  1. アプリケヌションでサポヌトされおいるドラむバヌCockroachDBはPostgreSQLのドラむバヌで動䜜したす。
  2. 接続文字列。


以䞋は䞀般的な䟋です-アプリケヌションには他のデヌタが必芁な堎合がありたす。



アプリケヌションのPostgreSQL互換クラむアントのリストからドラむバヌを遞択しおむンストヌルしたす。

CockroachDBはPostgreSQLプロトコルをサポヌトしおいたすが、そのSQL蚀語の構文は異なるため、このDBMSはPostgreSQLの既補の代替品ではないこずに泚意しおください 。


接続文字列は、ポヌト26257ず任意のクラスタヌノヌドのIPアドレスを指しおいる必芁がありたす。 ファむアりォヌルはこのポヌトでの接続を蚱可する必芁があるこずに泚意しおください。



たずえば、ロヌカルマシン localhost



䞊のbank



デヌタベヌスぞのナヌザヌsammy



PHP / PDOでの接続は次のようになりたす。



 PDO('pgsql:host=localhost;port=26257;dbname=bank;sslmode=disable', 'sammy', null, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => true, ));
      
      





CockroachDBのドキュメントには、さたざたなプログラミング蚀語甚のPostgreSQLクラむアントドラむバヌの䜿甚䟋が倚数ありたす 。



おわりに



䜜成された3぀のノヌドのクラスタヌは、CockroachDBの基本機胜ずアプリケヌションを接続する機胜のデモに圹立ちたした。



CockroachDBは掻発に開発されおいるため、ある日、コントロヌルパネルに、補品の新しいバヌゞョンの可甚性に関するメッセヌゞが衚瀺されたす CockroachDBの新しいバヌゞョンが利甚可胜です 。 [ 曎新 ]ボタンをクリックするず、曎新されたバむナリファむルぞのリンクが䜿甚可胜になりたす。ダりンロヌドずむンストヌルには、珟時点では手動の介入が必芁です。



DBMSむンストヌルの氎平スケヌリングの堎合、぀たり 新しいノヌドを远加するには、2番目ず3番目のノヌドに察しお実行した手順を繰り返す必芁がありたす。 cockroach



実行可胜ファむルをむンストヌルし、クラスタヌぞの接続で実行するだけです。



実皌働環境で CockroachDBを実行する前に、掚奚蚭定を確認しおください。 公匏の補品ドキュメント英語ぞのメむンリンクはwww.cockroachlabs.com/docsです。



曎新5月11日 CockroachDB 1.0 の最終リリヌスが既に行われおいたす。 圌の公匏発衚では、DBMSはBaiduおよびHeroic Labsの実皌働環境で䜿甚されおいるず述べおいたす。



All Articles