CockroachDBからの記事

前書き

CockroachDBは、一貫性、スケーラビリティ、および存続可能性を提供するオープンソースの分散SQLデータベースです。

CockroachDBのセットアップは簡単です。複数のサーバー(それぞれ_node_と呼ばれる)にインストールし、それらを結合して単一のエンティティ(_cluster_と呼ばれる)のように動作させます。 クラスター内のすべてのノードは対称的に動作し、同じデータにアクセスできます。

この種の設計では、データストレージのニーズが増大するにつれて、新しいノードを作成して既存のクラスターに結合することにより、システムの容量を簡単に増やすことができます。 詳細については、https://www.cockroachlabs.com/docs/automated-scaling-and-repair.html [CockroachDBのスケーラビリティモデル]をご覧ください。

目標

このガイドでは、CockroachDBを_分散型マルチノードクラスター_複数のサーバーに展開して、分散型のフォールトトレラントデータベースを作成します。 まず、CockroachDBを複数のサーバーにインストールし、それらをノードとして起動してから、クラスターとして一緒に動作するようにします。

さらに、データの分散とクラスターが障害に耐える方法を示し、アプリケーションをCockroachDBに接続する方法を示します。

このガイドでは、SSL暗号化を使用しない安全でない展開の設定について説明しますが、運用にはお勧めしません。 ただし、CockroachDBはhttps://www.cockroachlabs.com/docs/deploy-cockroachdb-on-digital-ocean.html[DigitalOceanの安全な展開手順]も提供しています。 (リンクの最初の段落に書かれていることにもかかわらず、記事の*セキュア*バージョンが選択されています。)

前提条件

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

  • 2 GB以上のRAMを備えた3つのUbuntu 16.04サーバーhttps://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking [プライベートネットワークが有効] それらはすべて同じ地域にある必要があります。 このガイドでは、次のホスト名を使用します。

  • *ゴキブリ-01 *

  • *ゴキブリ-02 *

  • *ゴキブリ-03 *

  • 各サーバーで、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [sudo権限を持つ非rootユーザーを追加]

  • TCPトラフィックが次のポートで許可されていることを確認してください。 UFWを設定している場合ファイアウォール各サーバーで次の2つのポートを許可する必要があります。

  • ノード間およびアプリケーション通信用の + 26257 ++ sudo ufw allow 26257 / tcp +

  • 管理UIの場合は「8080」:「+ sudo ufw allow 8080 / tcp +」

  • オプション:各サーバーで、https://www.digitalocean.com/community/tutorials/how-to-set-up-timezone-and-ntp-synchronization-on-ubuntu-14-04-quickstart [NTPをインストールおよび構成します]。 (簡単なテストの場合、これは確固たる要件ではありません)

すべてのサーバーのパブリックおよびプライベートIPアドレスをメモします。 このガイドでは、3つのサーバーのそれぞれに、* cockroach-01 *、 “、および “などの代用ホスト名とIPアドレスを使用します。 プライベートIPを見つけるには、DigitalOceanコントロールパネルからサーバーをクリックします。 *プライベートIP *は、情報の一番上の行にリストされています。

ステップ1-CockroachDBのインストール

クラスター内の各ノードには、 `+ cockroach +`バイナリ(つまり、プログラム)のコピーが必要です。 最初のサーバー* cockroach-01 *にCockroachDBをインストールし、他のサーバーにも同じことを行います。

開始するには、SSHで* cockroach-01 *にログインします。

ssh @

次に、sudoユーザーのホームディレクトリから、最新の「+ cockroach +」バイナリをダウンロードしてインストールします。

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

バージョンを確認して、バイナリにアクセスできることを確認します。

cockroach version

システムで「+ cockroach +」コマンドが見つからない場合は、このセクションをもう一度確認して、プログラムをダウンロードして解凍したことを確認してください。

最後に、ノードとして使用する予定の他の2つのサーバーに対してこれらのコマンドを繰り返します。 この例では、* cockroach-02 および cockroach-03 *です。

CockroachDBがすべてのマシンで使用できるようになったので、クラスターをセットアップできます。

ステップ2-最初のノードの開始

最初のCockroachDBノードがクラスターを起動します。 この最初のノードには特別なものはありません。ただ一つから始めて、他の人に参加してもらうだけです。 このセクションでは* cockroach-01 *を使用します。

  • cockroach-01 *のプライベートIPアドレスを書き留めます。 DigitalOceanコントロールパネルから、このホストをクリックします。 *プライベートIP *は、情報の一番上の行にリストされています。

クラスタを起動する次のコマンドは、* cockroach-01 *で実行する必要があります。 このコマンドは、SSL暗号化なしでノードを起動し( +-insecure +)、コマンドプロンプトの制御を返し( +-background +)、内部IPアドレスを使用して他のノードと通信するようにこのノードを設定します( `+ –advertise-host + `)。 以下の強調表示された変数 `++`を実際のプライベートIPアドレスに置き換えます。

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

ノード(およびクラスター)がライブになったので、Admin UIダッシュボード(CockroachDBにバンドルされているクラスターに関する情報を表示するツール)に移動して、詳細を表示できます。 `+ http://:8080 +`に移動します。 今回はパブリックIPアドレスです。

ここでは、1つのノードが実行されていることがわかります。

image:https://assets.digitalocean.com/articles/cockroachdb-ubuntu1604/vCwyWTg.png [1つのノードを実行しているクラスターを示すCockroachDB管理UI]

  • NODE タイルに警告の感嘆符(!)が表示されます。 警告の上にマウスを置くと、クラスターに Low Replication *があることが示されます。これは、十分なノードがないことを意味します。 現時点ではノードが1つしかないため、これは理解できます。 1つのノードでは、データが他のソースに十分に複製されないため、データは耐障害性ではありません。 ノードがダウンすると、データが失われます。

次のステップでは、このクラスターに他の2つのサーバーをノードとして追加することで、これを修正します。 3つのノードを持つことで、CockroachDBはデータのコピーが少なくとも3つあることを保証します。したがって、データを完全に失うことなくノードを失う可能性があります。

ステップ3-ノード2および3をクラスターに追加する

  • cockroach-02 サーバーで、手順2で行ったように `+ cockroach start +`コマンドでCockroachDBノードを起動します。 ここでコマンドを更新して、プライベートIPアドレスを介して最初のサーバーのクラスターに参加するように指定します。 * cockroach-02 *と cockroach-01 *の両方にプライベートIPアドレスが必要になり、以下で強調表示されている変数「」と「」を置き換えます。

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

3番目のマシン* cockroach-03 *で、プライベートIPアドレスを使用してこのコマンドを繰り返します。 最初のノードにも参加させます。

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

これで、任意のノードから管理UIにアクセスすると、クラスターに3つのノードがあることがわかります。

  • + http://:8080 +

image:https://assets.digitalocean.com/articles/cockroachdb-ubuntu1604/ZPudCY8.png [3つのノードを実行しているクラスターを示すCockroachDB管理UI]

すべてのノードがクラスターを介して接続されているため、すべてのノードが同じデータにアクセスできます。

(オプション)ステップ4 –データ配布のデモンストレーション

1つのノードにデータを書き込むと、クラスター内の他のすべてのノードがデータにアクセスできます。 これを実証する最も簡単な方法は、CockroachDBのサンプルデータを使用し、https://www.cockroachlabs.com/docs/use-the-built-in-sql-client.html [ビルトインSQLクライアントから表示することです。 ]。

最初のノード* cockroach-01 *から、サンプルデータを生成します。

cockroach gen example-data | cockroach sql

これにより、 `+ startrek +`というサンプルデータベースが作成されます。

これで、SQLクライアントを起動し、クラスター内のデータベースを表示できます。

cockroach sql
SHOW DATABASES;

サンプルデータを保持する「+ startrek +」データベースが一覧表示されます。

+--------------------+
|      Database      |
+--------------------+
| information_schema |
| pg_catalog         |
| startrek           |
| system             |
+--------------------+

次に、2番目のノードのターミナル* cockroach-02 *に移動し、同じコマンドを実行します。

cockroach sql
SHOW DATABASES;

別のノードでサンプルデータを生成したにもかかわらず、配布されており、他のすべてのサーバーから「+ startrek +」データベースにアクセスできることがわかります。

任意のノードの管理UIの* DATABASES *サイドバーからデータベースが存在することを表示することもできます。たとえば、 `+ http://:8080 /#/ databases / +`にあります。

(オプション)ステップ5 –クラスターからノードを削除する

CockroachDBは、クラスター内のすべてのノードにデータを配信することに加えて、サーバーが停止した場合のデータの可用性と整合性も保証します。

CockroachDBのノード障害に対する耐性の式は*(n-1)/ 2 です。 n *はクラスター内のノードの数です。 したがって、この3つのノードの例では、データを失うことなく1つのノードを失うことを許容できます。

これを実証するために、クラスターからノードを削除し、クラスターのすべてのデータがまだ利用可能であることを示します。 次に、ノードをクラスターに再結合し、オフライン中に発生したすべての更新を受信することを確認します。

2番目のノード、* cockroach-02 *から、SQLクライアントをまだ起動していない場合は起動します。

cockroach sql

サンプルデータベースの `+ quotes +`テーブルの行数をカウントします。

SELECT COUNT(*) FROM startrek.quotes;

テーブルには200行あることがわかります。 `+ CTRL + C +`を押してSQLクライアントを終了します。

次に、このノードをクラスターから削除し、すべてのデータが他のノードから引き続き利用できることを確認します。

使用していた同じノード(* cockroach-02 *)から、ゴキブリプロセスを停止します。

cockroach quit

次に、他のノードの1つのターミナル(* cockroach-03 *など)に切り替えて、SQLクライアントを起動します。

cockroach sql

前と同じコマンドを実行して、 `+ quotes +`テーブルの行数をカウントします。

SELECT COUNT(*) FROM startrek.quotes;

クラスター内のノードの1つを失いましたが、まだ200行のデータがあることがわかります。 これは、CockroachDBがシステム障害を正常に許容し、データの整合性を維持したことを意味します。

(オプション)ステップ6-ノードをクラスターに再結合する

また、CockroachDBがオンラインに戻ったサーバーを適切に処理することを示すこともできます。 まず、いくつかのデータを削除してから、削除したノードをクラスターに再結合します。 再結合すると、CockroachDBが復活したノードから同じデータを自動的に削除することがわかります。

現在実行中のノードの1つ、たとえば* cockroach-03 *から、「+ episode +」が50を超えるすべての引用符を削除します。

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

133行のデータが表示されます。

次に、クラスターから削除したノードのターミナル(* cockroach-02 *)に戻り、クラスターに再参加させます。

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

組み込みのSQLクライアントを起動します。

cockroach sql

次に、 `+ quotes +`テーブルに含まれる行の数をカウントします。

SELECT COUNT(*) FROM startrek.quotes;

まだ133でなければなりません。

そのため、更新が発生したときにオフラインであったにもかかわらず、ノードはクラスターに再結合するとすぐに更新されます。

必要に応じて、サンプルデータを削除することができます(まだ + cockroach sql + CLIを使用):

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

(オプション)ステップ7 –アプリケーションの接続

クラスターを起動して実行すると、クラスターをアプリケーションのデータベースとして使用できます。 これには2つの部分が必要です。

  • アプリケーションで使用するドライバー(CockroachDBはPostgreSQLドライバーで動作します)

  • 適切な接続文字列

このガイドは一般的な例を示しています。独自のアプリケーションの詳細を指定する必要があります。

アプリケーションに適切なドライバーhttps://www.cockroachlabs.com/docs/install-client-drivers.html [互換性のあるPostgreSQLクライアントドライバーのリストから]を選択してインストールします。

次に、アプリケーションをデータベースに接続する必要がある任意の時点で適切な接続文字列を使用します。

接続文字列はポート「26257」に接続する必要があり、任意のノードのIPアドレスを使用できます。 これは、ファイアウォールがポート「26257」での接続も許可する必要があることを意味します(前提条件で設定したとおり)。

たとえば、ユーザー `+ sammy `を ` localhost `上のデータベース ` bank +`に接続するPHP / PDO接続文字列は次のとおりです。

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

PostgreSQLクライアントドライバーの使用に関する詳細については、CockroachDBにhttps://www.cockroachlabs.com/docs/build-a-test-app.html [利用可能な多数のコードサンプル]があります。

結論

この時点で、3ノードクラスターを作成し、CockroachDBの分散機能と存続可能機能を確認し、クラスターをアプリケーションに接続する方法を確認しました。

CockroachDBは高速プロジェクトであるため、ダッシュボードに次のメッセージが表示されることがあります* CockroachDBの新しいバージョンが利用可能です*書き込みは手動でダウンロードしてインストールする必要があります。

さらにノードを追加して展開を水平にスケーリングする場合は、4番目のノードなどで上記の2番目と3番目のノードの手順に従います。 必要なのは、 `+ cockroach +`バイナリをインストールし、新しいノードを既存のクラスターに参加させることだけです。

チェックアウト後にCockroachDBを運用環境で実行する場合は、https://www.cockroachlabs.com/docs/recommended-production-settings.html [推奨される運用設定]をご覧ください。

最後に、https://www.cockroachlabs.com/docs/ [CockroachDBのドキュメント]への一般的なリンクを次に示します。