こんにちは、Khabrovites!20歳の開発者でオンラインコース「Non-RelationalDatabases」の著者であるEvgenyAristovによるMongoDBチュートリアルの一部をデコードしました。この資料は、コース自体と同様に、NoSQLに出くわし、データベースを最適化して操作する方法を学びたいスペシャリストに役立ちます。
なぜ複製するのですか?
- 高可用性。バックアップは適切ですが、展開には時間がかかります。
- 水平スケーリング。サーバーが物理コアとメモリを使い果たした場合。
- マスターからではなく、レプリカからバックアップを作成することをお勧めします。
- 地理的分布をロードします。
MongoDBには、すぐに使用できるレプリケーションの種類は多くありません。現時点で最も関連性の高いのはレプリカセットで、2番目はマスタースレーブです。これはバージョン3.6に限定されているため、この記事では詳しく説明しません。
#1。メインサーバーからの書き込みと読み取り
プライマリノードの読み取りと書き込みを行うクライアントアプリケーションドライバがあります。さらに、レプリケーションプロトコルに従って、プライマリノードに書き込まれた情報がセカンダリノードに送信されます。
#2。キューから読む
プライマリからの読み取りと書き込みの代わりに、ドライバがセカンダリから情報を読み取ることができる場合があります。この場合、設定は異なる場合があります。たとえば、「セカンダリから情報を読み取り、次にプライマリから情報を読み取ることが望ましい」、「ネットワークマップ上の最も近いノードから情報を読み取る」などです。このような構成オプションは、すべてがプライマリを通過する最初のレプリケーションオプションよりも頻繁に使用されます。
レプリカを読み取り可能にする3つの方法:
- 指定する
db.slaveOk()
- ドライバ接続文字列に必要なパラメータを指定します
- すべてを指定してから、クエリ自体にさらに正確に書き込みます。たとえば、南地域のセカンダリから読み取ります。
db.collection.find({}).readPref( “secondary”, [ { “region”: “South”} ] )
レプリカ読み取りの問題
- 記録は非同期であるため、プライマリですでに作成できますが、セカンダリに到達することはできません。したがって、セカンダリからの古いデータが読み取られます。
- , , .
, . MongoDB , , , . - , () — «».
A)ノードは相互に「リッスン」します。この接続はハートビートと呼ばれます。つまり、各ノードは、何かが発生した場合に何らかのアクションを実行するために、「生きている/生きていない」という主題について他のノードによって常にチェックされます。
B)1つのセカンダリノードがアービターに変更されます。これは非常に軽量なアプリケーションであり、Mongoのように実行され、実質的にリソースを消費せず、投票時にどのノードをメインノードとして認識するかを決定する責任があります。そして、これは一般的に推奨される構成です。
この構成の主な機能
- 非同期レプリケーション
- アービターはデータフリーであるため、非常に軽量です
- プライマリはセカンダリになることができ、その逆も可能です。アービターはプライマリまたはセカンダリになることはできません
- 返信の最大数は50で、投票できるのは7つだけです。
- Arbiter Primary Secondary, , .. , Arbiter .
MongoDBのクラスタリング機能について詳しく知りたい場合は、ここでデモレッスン全体の記録を見ることができます。レッスンでは、Evgeny Aristovがレプリカセットとマスタースレーブの違いを示し、クォーラムプロセス、スケーリング、シャーディング、およびシャーディングのキーの正しい選択について説明します。
MongoDBの機能の調査は、非リレーショナルデータベースオンラインコースの一部です。このコースは、NoSQLに出くわす開発者、管理者、およびその他の専門家を対象としています。教室では、実際の学生は、Cassandra、MongoDB、Redis、ClickHouse、Tarantool、Kafka、Neo4j、RabbitMQなどの最も関連性の高いツールを実際に習得しています。
スタートはすでに9月30日ですが、最初の1ヶ月はグループに参加できます。プログラムを勉強し、通過する入場テストと参加!