MongoDBの保護
MongoDBはデフォルトでは安全ではありません。MongoDBをインストールし、認証用に構成せずにMongoDBを起動する場合は、時間がかかります
2009年の構想以来、MongoDBはNoSQL業界をリードしてきました。MongoDBのコアコンセプトの1つはレプリカセットです。そのため、作業する前にまずコンセプトを確認してください。
データベースのレプリケーションで使用される最も単純な通信モデルは、マスタースレーブアーキテクチャです。その名前が示すように、このモデルには2つの役割があり、一意のマスターと多くのスレーブに分散しています。マスターの役割は、クライアントによって実行される読み取り操作と書き込み操作を処理することであり、スレーブはマスターのレプリカとして扱われます。
このモデルの最も重要な利点は、マスターのパフォーマンスがバックアップ操作によって損なわれず、バックアップ操作が非同期で行われることであり、マスターノードに障害が発生すると、これが深刻な問題になる可能性があります。スレーブノードは読み取り専用であり、手動でマスターノードに昇格する必要があるため、今回はデータが失われる可能性があります。
可用性の問題を解決する1つのオプションは、アーキテクチャに複数のマスターを含めることですが、これにより、これらのインスタンス間のデータの一貫性と構成の複雑さが増すという別の問題が発生する可能性があります。
ここで、コンテキストを指定して、MongoDBのレプリカセットテクノロジーを紹介できます。レプリカセットは、自動フェイルオーバーを備えたマスタースレーブアーキテクチャの名前です。そのため、マスター(現在の名前はprimary
)が正しく機能しなくなったときに、election
がトリガーされ、残りのスレーブ(現在はsecondaries
)と呼ばれます。
プライマリノードは書き込み操作を実行する唯一のノードです。デフォルトでは、読み取り操作もプライマリによって処理されますが、この動作は後で変更できます。
操作はoplog
(操作ログ)に記録され、セカンダリノードはコンテンツのコンテンツに基づいて非同期でコンテンツを更新しますoplog
注:oplog
は上限付きのコレクションです。これは、コレクションに制限があることを意味し、local.oplog.rs
任意のセットメンバーのmongoシェル内でこのコレクションのコンテンツを確認できます。
セカンダリノードには、データベースの適切なバックアップを行う役割の他に、次の役割があります。
これらの特性により、さまざまなタイプのセカンダリノードを使用できます。
primary
で���ず、選択をトリガーすることもできませんが、選択に投票でき、完全なレプリカを持ち、読み取り操作を受け入れることができます。これらは、マルチデータセンターの展開に役立ちます。Priority 0
メンバーですが、さらに読み取り操作を処理できません。必要に応じて投票することができます。これらのメンバーの優先タスクは、レポートとバックアップです。priority 0
ノードである必要があり、それらもhidden
メンバーであることが推奨されます。インフラストラクチャを展開する前にそれを設計することが重要であり、この設計には考慮すべき点があります。
レプリカセットを作成するための要素の最小数は3であることに注意してください。3つのタイプのノードを少なくとも1つのプライマリノードと1つのセカンダリノードで混在させることができます。
このガイドでは、1つのプライマリと2つの標準セカンダリの3つのメンバーを展開しています。
注:アービターとセカンダリメンバーが混在する最大7名の投票メンバーがいることをお勧めします。
名前は参照用ですが、セットの構成で使用しています。本番環境では複数のレプリカセットを使用できるため、セットの名前を無視しないでください。
このチュートリアルでは、ユーザーにセットの名前を選択するように勧めています。
このチュートリアルでは、通信の問題を回避できるように、同じデータセンターにデプロイすることをお勧めします。
注:異なるデータセンターに展開する場合は、ノードをVPNで囲むことをお勧めします
Ubuntu 16.04 x64の3つのノードを起動します。可能な場合は、カスタマーポータルと同じリージョンにあります。対処するプロジェクトのタイプに応じて名前を付けることを忘れないでください。また、これらすべてのノードで同じサーバーサイズになるようにしてください。
3つのノードを展開したら、すべてのノードが残りのノードと通信できることを確認する必要があります。2つのノードにSSHで接続し、を使用して他のノードに到達する必要がありますping -c 4 EXAMPLE_IP
。EXAMPLE_IP
ノードの実際のIPに変更します。
ここでは、2つのノード間の正常な通信の例を確認できます。
root@foo_node:~# ping -c 4 EXAMPLE_IP
PING EXAMPLE_IP (EXAMPLE_IP) 56(84) bytes of data.
64 bytes from EXAMPLE_IP: icmp_seq=1 ttl=59 time=0.594 ms
64 bytes from EXAMPLE_IP: icmp_seq=2 ttl=59 time=0.640 ms
64 bytes from EXAMPLE_IP: icmp_seq=3 ttl=59 time=0.477 ms
64 bytes from EXAMPLE_IP: icmp_seq=4 ttl=59 time=0.551 ms
--- EXAMPLE_IP ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3021ms
rtt min/avg/max/mdev = 0.477/0.565/0.640/0.064 ms
一般に、UbuntuのMongoDBパッケージを使用できますが、常に最新であるため、公式のコミュニティリポジトリを使用することをお勧めします。このリポジトリには、次のパッケージが含まれています。
mongod
デーモン(データ要求を処理するプライマリプロセス)が含まれます。mongos
デーモン(共有デプロイメントのルーティングサービス)が含まれます。mongo shell
JavaScriptインターフェースです。パッケージのインストールに進みます。
公開鍵をパッケージ管理システムにインポートします。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
MongoDBのリストファイル「/etc/apt/sources.list.d/mongodb-org-3.4.list」を作成します。
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
パッケージデータベースを更新します。
sudo apt-get update
MongoDBメタパッケージをインストールします。
sudo apt-get install -y mongodb-org
MongoDBサービスを開始します。
sudo service mongod start
これmongo shell
で、任意のbashセッションでを開くことができます。これを行うには、mongo
コマンドを使用する必要があります。あなたはこれに似た何かによって迎えられるでしょう。
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
*Some extra logs are cut by the way*
>
sudo service mongod stop
後でmongod
いくつかのパラメータを使用して再び開始するため、でサービスを停止することを忘れないでください。セットの3つのノードすべてでこのプロセスを繰り返します。
キーファイルを使用すると、レプリカセット管理で2つの概念が強制されます。最初はInternal Authentication
です。デフォルトではmongo shell
、ユーザーを使用せずにセッションを開始でき、このセッションはデータベースを完全に制御できますが、認証にキーファイルを使用すると、mongo shell
セッションはという状態になりlocalhost exception
ます。この状態では、管理者ユーザーとレプリカセットのみを作成できます。2番目の概念はRole-Based Access Control
、つまり、承認です。これは、レプリカセットの管理レベルを管理するために適用されます。
キーファイルは、セットで使用するパスワードです。このパスワードは、セットのすべてのメンバーで同じである必要があります。セキュリティを強化するには、任意のツールでランダムキーを使用することが重要です。
コンテンツの長さは6〜1064文字にする必要があります。またread only
、キーファイルの権限を設定する必要があります。
chmod 400 PATH_OF_YOUR_KEYFILE
キーファイルをすべてのセットメンバーにコピーします。将来の参照のために一貫したフォルダーを使用し、リムーバブルメディアに保存しないでください。
また、mongod
アクセスできるファイルのフォルダを使用してください。
このステップではmongod daemon
、すべてのセットメンバーでを開始する必要があります。mongod
プロセスを開始するには、設定ファイルを使用する方法とコマンドラインを使用する方法の2つがあります。どちらも非常に簡単な方法ですが、簡単にするために、このチュートリアルではコマンドラインバージョンを使用しています。
このコマンドで前に選択した名前を使用します。
mongod --keyFile PATH_OF_YOUR_KEYFILE --replSet "YOUR_SET_NAME"
デフォルトでmongod
は、デーモンとして実行されません。--fork
パラメータを使用するか、upstart
を使用してデーモンとして完全に実行する必要があります。このチュートリアルではmongod
、デーモンとして実行することはお勧めしません。ターミナルに直接ログを表示できます。
注:作成したレプリカセットは変更できないため、レプリカセットの名前は慎重に入力してください。
注:mongod
デーモン以外のプロセスとして実行する場合、作業を続行するには別のssh接続を開く必要があります。
mongo
コマンドを使用してを開く必要がありますmongo shell
。これは、セットの任意のメンバーで実行できます。
現在、私たちはと呼ばれる状態にありlocalhost exception
ます。キーmongod
ファイルを使用してプロセスを設定する場合、読み取り/書き込み操作を適用する前にデータベース管理者を作成する必要がありますが、これについては後で説明します。
これはデリケートな部分です。ステップ4のrs.initiate()
内のコマンドを使用してmongo shell
います。このコマンドを使用する前に確認してみましょう。
rs.initiate(
{
_id : <replicaSetName>,
members: [
{ _id : 0, host : "example1.net:27017" },
{ _id : 1, host : "example2.net:27017" },
{ _id : 2, host : "example3.net:27017" }
]
}
)
最初の_id
フィールドは文字列で、--replSet
以前にに渡されたと一致する必要がありますmongod
。また、の各値host
は、レプリカセットの各メンバーのIPまたはドメイン名である必要があります。mongoインスタンスが各メンバーで使用しているポートを追加することを忘れないでください。
データを使用してコマンドを実行します。これによりがトリガーelection
され、プライマリが自動的に選択されます。
ここで、シェルカーソルがYOUR_SET_NAME:PRIMARY>
またはに変更されていることに注意してくださいYOUR_SET_NAME:SECONDARY
。これは、セットの作成が成功したことを意味します。
作業を続けるprimary
には、もちろんが見つからない場合はを見つける必要があります。rs.status()
コマンドを使用してレプリカセットの情報を表示し、を見つけますprimary
。あなたは物件を探しています"stateStr" : "PRIMARY"
。
を見つけたらprimary
、を入力mongo shell
し、データを使用して次のコマンドを実行します。
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "YOUR_USER",
pwd: "YOU_PASSWORD",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
このadmin = db.getSiblingDB("admin")
部分でadmin
は、別のデータベースから書き込むことができます。これにより、というエイリアスが作成されるadmin
ため、代わりにそれを使用してコマンドを実行できます。
操作が成功すると、ユーザーが追加されたという通知が表示されます。
Successfully added user: {
"user" : "YOUR_USER",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
この時点では、すべてのサーバーの管理者しかいませんが、レプリカセットを持っていると、clusterAdmin
役割を持つユーザーが必要になります。問題を分離するために、その役割のみを持つ別のユーザーを作成します。
の制限に達したlocalhost exception
ため、1ステップ前に作成したユーザーの認証を変更する必要があります。
内のユーザーmongo shell
は次のように変更できます。
db.getSiblingDB("admin").auth("YOUR_ADMIN", "YOUR_PASSWORD" )
にまだ接続していない場合は、mongo shell
代わりにこのコマンドを使用してください。
mongo -u "YOUR_ADMIN" -p "YOUR_PASSWORD" --authenticationDatabase "admin"
ユーザーの変更が通知され、次のステップに進むことができます。
このclusterAdmin
役割により、ユーザーはレプリカセットを完全に制御できます。作成は、adminユーザーを作成するのと同じくらい簡単です。
db.getSiblingDB("admin").createUser(
{
"user" : "YOUR_USER",
"pwd" : "YOUR_PASSWORD",
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)
今回はロールがに変更されていることに注意してくださいclusterAdmin
。
現在、2人の管理者ユーザーがいます。1人はサーバーを完全に制御し、もう1人はレプリカセットレベルの管理タスクにアクセスします。ただし、データベースを「使用」するアクセス権を持つユーザーが不足しているため、ここでそのユーザーを作成します。
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "YOUR_USER",
pwd: "YOUR_PASSWORD",
roles: [ { role: "userAdminAnyDatabase", db: "cars" } ]
}
)
今回はdb
パーツを変更していることに注意してください。ここでは、ユーザーがデータベースにアクセスできるようにしています。この場合は、という名前のデータベースを使用していますcars
。
データベースはまだ作成されていません。そのためには、いくつかのコマンドを入力して暗黙的に作成する必要があります。cars
データベースに切り替えます。
use cars
通知が届きますswitched to db cars
。
データベースはまだ作成されていないため、データベースに何かを書き込む必要があります。次の例を使用しています。
db.models.insert({ make: "Dodge", model: "Viper", year: 2010 })
今回はで通知されWriteResult({ "nInserted" : 1 })
ます。
必要に応じて、次のメソッドを使用して、データベース内のすべてのオブジェクトを取得できますfind()
。
db.models.find()
{ "_id" : ObjectId("59acd8b55334882863541ff4"), "make" : "Dodge", "model" : "Viper", "year" : 2010 }
_id
出力は異なりますが、他のデータは同じであることに注意してください。十分な時間が与えられると、このデータは他のメンバーに複製されます。
理解しなければならない情報がたくさんあるため、レプリカセットの作成は最初は難しいかもしれませんが、その背後にあるアイデアを理解したら、簡単にそれを展開できるので、初めて理解できない場合でも諦めないでください。レプリカセットは、ロードバランシングなどの高度な機能を追加する可能性を開くため、MongoDBの管理において重要であることを覚えておいてください。
MongoDBはデフォルトでは安全ではありません。MongoDBをインストールし、認証用に構成せずにMongoDBを起動する場合は、時間がかかります
Laravel GitScrum(GitScrum)は、開発チームがスクラム手法を同様の方法で実装できるように設計されたオープンソースの生産性ツールです。
前提条件最新のArch Linuxを実行しているVultrサーバー(この記事を参照してください。)Sudoアクセス。rootとして実行する必要のあるコマンドには、先頭に#が付いています。
この記事では、MariaDBをOpenBSD 6にインストールし、chrootされたWebサーバー(ApacheまたはNginx)からアクセスできるように構成する方法を紹介します。あなたはアルになります
別のシステムを使用していますか?はじめにArangoDBは、ドキュメント、グラフ、Key-Valueの柔軟なデータモデルを備えたオープンソースのNoSQLデータベースです。です
MySQLは、データベースに使用されている世界で最も人気のあるソフトウェアです。データベースのバックアップがあることを確認することは非常に重要です。この練習により
はじめにこの記事では、カスタムbashスクリプトを使用して、同じマシン上にある複数のMySQLまたはMariaDBデータベースをバックアップする方法を順を追って説明します。
別のシステムを使用していますか?Apache Cassandraは無料でオープンソースのNoSQLデータベース管理システムであり、スケーラビリティと高度な機能を提供するように設計されています
別のシステムを使用していますか?はじめにArangoDBは、ドキュメント、グラフ、Key-Valueの柔軟なデータモデルを備えたオープンソースのNoSQLデータベースです。です
MongoDBは高速で強力なNoSQLデータベースです。ただし、Debianリポジトリは更新が遅く、非常に古いバージョンのパッケージが含まれていることがよくあります。このtutoria
前提条件最新のArch Linuxを実行しているVultrサーバー(この記事を参照してください。)Sudoアクセス:rootとして実行する必要のあるコマンドには、先頭に#が付いています。
前提条件最新のArch Linuxを実行しているVultrサーバー(この記事を参照)Sudoアクセス:rootとして実行する必要のあるコマンドには、先頭に#が付いています。
phpRedisAdminは、直感的なグラフィックユーザーインターフェイスでRedisデータベースを管理するWebアプリケーションです。このチュートリアルでは、インストール方法を説明します
別のシステムを使用していますか?Apache Cassandraは無料でオープンソースのNoSQLデータベース管理システムであり、スケーラビリティと高度な機能を提供するように設計されています
RedisはKey-Valueデータストレージソリューションであり、NoSQLデータベースと呼ばれることもあります。インメモリbuであるため、非常に高い読み取り/書き込み速度を実現できます。
はじめにMyCLIは、MySQLおよびMariaDBのコマンドラインクライアントであり、オートコンプリートを可能にし、SQLコマンドの構文を支援します。MyCL
バックアップは、データベースを扱う上で重要な部分です。企業サイトを運営している場合でも、WordPressをホストしている場合でも、バックアップすることが重要です。
Redisはデータ構造ストアです。キャッシング時の最適化されたアプローチにより、パフォーマンスが大幅に向上するため、WordPressサイトで人気があります。
前提条件Dockerエンジン1.8以降。最低4GBのディスク容量。4GB以上のRAM。ステップ1. DockerをインストールするSQL-Serverをインストールするには、Docker mus
Barnyard2は、Snortからのバイナリ出力をMySQLデータベースに保存および処理する方法です。始める前にいびきがない場合は注意してください
ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。
最近、Appleは問題を修正するための補足アップデートであるmacOS Catalina 10.15.4をリリースしましたが、このアップデートにより、Macマシンのブリックにつながる問題がさらに発生しているようです。詳細については、この記事をお読みください
原子力は、過去の出来事のために私たちが決して尊重しないことを常に軽蔑していますが、それは必ずしも悪ではありません。詳細については、投稿をお読みください。
これを読んで、人工知能が小規模企業の間でどのように人気を博しているか、そして人工知能がどのように成長し、競合他社に優位に立つ可能性を高めているかを理解してください。
私たちのコンピューターは、ジャーナリングファイルシステムと呼ばれる組織化された方法ですべてのデータを保存します。これは、検索を押すとすぐにコンピューターがファイルを検索して表示できるようにする効率的な方法です。https://wethegeek.com/?p = 94116&preview = true
ビッグデータと人工知能は流行語ですが、それらがどのように相互に関連しているか知っていますか?さて、この記事を最後まで読んで、同じことを知ってください。
LiteCartは、PHP、jQuery、およびHTML 5で記述された無料のオープンソースのショッピングカートプラットフォームです。シンプルで軽量、使いやすいeコマースソフトウォー
NFSはネットワークベースのファイルシステムであり、コンピューターはコンピューターネットワークを介してファイルにアクセスできます。このガイドでは、NFを介してフォルダーを公開する方法について説明します
別のシステムを使用していますか?Matomo(旧Piwik)は、Google Analyticsのオープンな代替手段であるオープンソースの分析プラットフォームです。Matomoのソースはoでホストされています
HTTPライブストリーミング(HLS)は、Apple Inc.によって実装された非常に堅牢なストリーミングビデオプロトコルです。HLSは、ファイアウォール、プロキシ、