rqlite - SQLite上に構築された軽量の分散リレーショナルデータベース

(The lightweight, distributed relational database built on SQLite)

Created at: 2014-08-23 12:31:18
Language: Go
License: MIT

サークルCI Appveyor Goレポートカード 解放 港湾労働者 グーグルグループ スラック

絶対にデータを失うことがあってはならないとき。

rqliteは、SQLiteをストレージエンジンとして使用する、使いやすく軽量な分散リレーショナルデータベースです。RQLITEはデプロイが簡単で、操作も非常に簡単で、クラスタリング機能によりフォールトトレランスと高可用性を実現しています。rqlite は、Linux、macOS、および Microsoft Windows で利用できます

rqlite FAQをご覧ください。

なぜでしょうか。

RQLITE は、堅固でフォールト トレラントなレプリケートされたリレーショナル データベースの機能を提供しますが、インストール、デプロイ、操作は非常に簡単です。これにより、軽量信頼性の高い分散リレーショナルデータストアが得られます。etcdまたはConsulを考えますが、リレーショナルデータモデリングも利用できます。

rqlite は、より大規模で複雑な分散データベースを実行することなく、いくつかの重要なリレーショナル データの中央ストアとして、大規模なシステムの一部として使用できます。

最後に、分散システムが実際にどのように機能するかを理解することに興味がある場合は、rqliteが研究の良い例です。その設計と実装には多くの考えが払われており、ストレージ、分散コンセンサス、APIなどのさまざまなコンポーネントが明確に分離されています。

どう。

rqliteはRaftを使用して、SQLiteデータベースのすべてのインスタンスにわたってコンセンサスを達成し、システムに加えられたすべての変更がSQLiteデータベースのクォーラムに対して行われるか、まったく行われないようにします。デザインの詳細については、こちらをご覧ください

主な機能

クイックスタート

詳細なドキュメントが利用可能ですrqlite Google グループをチェックして、rqlite Slack チャンネルに参加してください

実行する最も簡単な方法は、Githubリリースページで入手できるビルド済みのリリースバイナリをダウンロードすることです。インストールすると、次のように単一のrqliteノードを起動できます。

rqlited -node-id 1 ~/node.1

この 1 つのノードが自動的にリーダーになります。すべての構成オプションを渡すことができます。

-h
rqlited

港湾労働者

docker run -p4001:4001 rqlite/rqlite

Dockerを介してノードを実行する方法の詳細については、rqlite Dockerページを確認してください。

自作

brew install rqlite

クラスターの形成

rqliteを実行するために厳密には必要ありませんが、複数のノードを実行すると、フォールトトレラントクラスターが作成されます。さらに 2 つのノードを起動し、次のようにクラスターが 1 つのノードの障害を許容できるようにします。

rqlited -node-id 2 -http-addr localhost:4003 -raft-addr localhost:4004 -join http://localhost:4001 ~/node.2
rqlited -node-id 3 -http-addr localhost:4005 -raft-addr localhost:4006 -join http://localhost:4001 ~/node.3

このデモでは、同じホストで実行されている 3 つのノードすべてを示しています。実際には、おそらくこれを行うことはないでしょうし、rqliteノードごとに異なる-http-addrポートと-raft-addrポートを選択する必要はありません。

これらのいくつかの手順で、フォールトトレラントな分散リレーショナルデータベースが得られます。読み取り専用ノードの実行を含む、実際のクラスターの作成と管理の詳細については、このドキュメントを参照してください。

ノード検出と自動クラスタリング

rqlite は、ノード検出に Consul,etcd, と DNS を使用できます。これにより、ノードは自動的に接続してクラスターを形成できます。これははるかに便利で、クラスターを動的に作成できます。詳細については、ドキュメントを参照してください。

Kubernetes

Kubernetesデプロイ ガイドを確認してください。

レコードの挿入

標準のSQLiteコマンドを使用して、rqlite CLIを介していくつかのレコードを挿入しましょう。挿入されると、これらのレコードは、永続的でフォールト トレラントな方法でクラスター全体にレプリケートされます。3 ノード クラスタでは、機能やデータを失うことなく、1 つのノードの障害が発生する可能性があります。

$ rqlite
127.0.0.1:4001> CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)
0 row affected (0.000668 sec)
127.0.0.1:4001> .schema
+-----------------------------------------------------------------------------+
| sql                                                                         |
+-----------------------------------------------------------------------------+
| CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)               |
+-----------------------------------------------------------------------------+
127.0.0.1:4001> INSERT INTO foo(name) VALUES("fiona")
1 row affected (0.000080 sec)
127.0.0.1:4001> SELECT * FROM foo
+----+-------+
| id | name  |
+----+-------+
| 1  | fiona |
+----+-------+

データ API

rqlite には豊富な HTTP API があり、rqlite への書き込みと rqlite からのクエリを完全に制御できます。詳細については、ドキュメントを確認してください。使用可能なクライアントライブラリもあります。

パフォーマンス

rqliteのパフォーマンスとその改善方法の詳細については、こちらをご覧ください

インメモリ データベース

デフォルトでは、rqliteはインメモリSQLiteデータベースを使用してパフォーマンスを最大化します。このモードでは、実際のSQLiteファイルは作成されず、データベース全体がメモリに保存されます。rqlite で実際のファイルベースの SQLite データベースを使用したい場合は、起動時に rqlite を渡します。

-on-disk

インメモリデータベースを使用すると、データが危険にさらされますか?

いいえ。

Raftログはすべてのデータの権限ストアであり、各ノードによってディスクに保存されるため、Raftログに保存されている情報から起動時にインメモリデータベースを完全に再作成できます。インメモリ データベースを使用しても、データが危険にさらされることはありません。

制限

  • インメモリデータベースのサイズは、現在 2GiB (2147483648 バイト) に制限されています。この制限を回避するための可能な方法の詳細については、ドキュメントを参照してください。

  • rqlite はステートメントベースのレプリケーションを実行するため、特定の非決定論的関数 (例えば) は Raft システムや SQLite に渡される前に rqlite によって書き換えられます。rqliteの非決定論的関数のサポートの詳細については、ドキュメントを確認してください。

    RANDOM()

  • これは広範囲にテストされていませんが、「ディスク上」モードで実行していると仮定すると、いつでも任意のノードでSQLiteファイルを直接読み取ることができます。ただし、ホストノード自体がすべての変更を受信して適用したことが確実でない限り、SQLiteファイルにクラスターで行われたすべての変更が反映されるという保証はありません。

  • 明らかでない場合、rqriteは「ディスク上」モードで実行した場合、基礎となるSQLiteファイルに直接加えられた変更を複製しません。SQLite ファイルを直接変更すると、rqlite が失敗する可能性があります。HTTP API を介してのみデータベースを変更します。

  • SQLiteドットコマンドはAPIで直接サポートされていませんが、rqlite CLIは非常によく似た機能をサポートしています。これは、これらのコマンドがコマンドの機能であり、SQLite自体ではないためです。

    .schema
    .tables
    sqlite3

rqlite のモニタリング

特に本番環境で信頼性の高い操作を行うには、rqliteを監視することが重要です。rqlite の状態と診断を確認する方法については、こちらをご覧ください

バックアップと復元

rqlite クラスターをホットバックアップする方法については、こちらをご覧くださいSQLite ファイルから直接データを読み込むこともできます。

安全

rqlite へのアクセスのセキュリティ保護とユーザーのアクセスの制限については、こちらを参照してください。

rqlite Slack Channel

Slack チャンネルに参加して、rqlite の詳細を学びましょう。

グーグルグループ

rqliteの議論に専念するGoogleグループがあります。

発音。

rqlite の発音方法は?それが価値があるもののために私はそれを "ree-qwell-lite"と発音しようとします。しかし、私を含むほとんどの人は、しばしばそれを「RQライト」と発音するようです。