3つの共通のMongoDBクラスタ、すなわち、マスター・スレーブレプリケーション、レプリカセットと断片化がありますが、この記事では、レプリカになりますが簡単な紹介を設定しました
私は初めについてお話しましょう、この記事で使用したコードの全ては、CentOSの7をテストするためにローカル・オペレーティング・システムのブロガーによってテストされています
まあ、公式は以下のスタート!
1.はじめに
前に述べたように、コピーを使用してクラスタからマスターノードからバックアップデータ一次ノードは、手動でプライマリノードの障害が発生した後、データを復元することができます
しかし、すべての時間は、プライマリノードに障害が発生した問題、データを転送するサービスを手動で停止し、する必要があります
面倒なだけでなく、損失によるサービスのうちだけでなく、計り知れない、レプリカセットはこの問題発生を解決することです
レプリカセット(レプリカセット)において、データノード(データ軸受)と調停ノード(アービタ)を複数備えた軸受
データベアラ・ノードは、以下に説明されるこれらの各々は、マスターノード(プライマリ)とスレーブノード(セカンダリ)を細分することができます。
- デフォルトでは、クライアントに、唯一の、すべてのCRUDサービス:マスターノード
- ノードから:データバックアップマスターノードは、サービスへのアクセスを提供することができ、メインのノードがサービスを提供し続けるために、プライマリノードから選択することがハングアップした後、
- 調停ノード:データが格納されていないが、マスターノードハングにおけるマスタノードから一つの選択されたノードを決定します
以下のように設定され特徴付けられたレプリカ:
- 唯一のプライマリノード上での動作を記述し、データの整合性を確保するために、同期するノード
- 、マスターノードで読み取ることができるスレーブノードであってもよい、ある程度、マスターノードの負担を軽減することができます
- プライマリノードがハングアップする場合は、サービスを提供し続けるために、プライマリノード、そのメンテナンスのため、ダウンタイムなしの選挙
2は、設定します
以下は、単純なシミュレーション、ノードからマスターノード、調停ノードであります
(1)のMongoDBをダウンロード
> su
> cd /root
> mkdir mongodb-replica-set-cluster
> cd mongodb-replica-set-cluster
> mkdir mongodb
> cd mongodb
> wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.7.tgz
> tar -zxvf mongodb-linux-x86_64-3.2.7.tgz
> cd ..
(2)3つのフォルダ、各アナログマスターノード、スレーブノードとノードアービトレーションを作成
> mkdir primary # 主节点
> touch ./primary/mongodb.conf
> mkdir ./primary/log
> mkdir -p ./primary/data/db
> mkdir secondary # 从节点
> touch ./secondary/mongodb.conf
> mkdir ./secondary/log
> mkdir -p ./secondary/data/db
> mkdir arbiter # 仲裁节点
> touch ./arbiter/mongodb.conf
> mkdir ./arbiter/log
> mkdir -p ./arbiter/data/db
作成したら、次のように、ディレクトリ構造があります
+ mongodb-replica-set-cluster
+ mongodb
+ mongodb-linux-x86_64-3.2.7.tgz
+ mongodb-linux-x86_64-3.2.7
+ primary
+ log
+ data
+ db
+ mongodb.conf
+ secondary
+ log
+ data
+ db
+ mongodb.conf
+ arbiter
+ log
+ data
+ db
+ mongodb.conf
(3)設定ファイルを書きます
# primary/mongodb.conf 文件内容
# 数据文件的存放位置
dbpath = /root/mongodb-replica-set-cluster/primary/data/db
# 日志文件的存放位置
logpath = /root/mongodb-replica-set-cluster/primary/log/mongodb.log
# 监听的端口,默认为 27017
port = 27001
# 以守护进程的方式运行 MongoDB
fork = true
# 设置 replSet 名称
replSet = repl
# secondary/mongodb.conf 文件内容
# 数据文件的存放位置
dbpath = /root/mongodb-replica-set-cluster/secondary/data/db
# 日志文件的存放位置
logpath = /root/mongodb-replica-set-cluster/secondary/log/mongodb.log
# 监听的端口,默认为 27017
port = 27002
# 以守护进程的方式运行 MongoDB
fork = true
# 设置 replSet 名称
replSet = repl
# arbiter/mongodb.conf 文件内容
# 数据文件的存放位置
dbpath = /root/mongodb-replica-set-cluster/arbiter/data/db
# 日志文件的存放位置
logpath = /root/mongodb-replica-set-cluster/arbiter/log/mongodb.log
# 监听的端口,默认为 27017
port = 27003
# 以守护进程的方式运行 MongoDB
fork = true
# 设置 replSet 名称
replSet = repl
(4)オープンそれぞれ3つのデータベース
> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongod -f /root/mongodb-replica-set-cluster/primary/mongodb.conf
> ./mongod -f /root/mongodb-replica-set-cluster/secondary/mongodb.conf
> ./mongod -f /root/mongodb-replica-set-cluster/arbiter/mongodb.conf
その後、次の3つのプロセスがMongoDBのを実行している表示されるはずです
> ps aux | grep mongo
(5)任意のノードとの間の関係に接続され、ノードが初期化
> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongo mongodb://127.0.0.1:27001/admin
> rs.initiate({
"_id": "repl",
"members": [ // 添加数据承载节点
{
"_id": 1,
"host": "127.0.0.1:27001"
},
{
"_id": 2,
"host": "127.0.0.1:27002"
}
]
})
// { "ok" : 1 }
repl:OTHER> rs.addArb("127.0.0.1:27003") // 添加仲裁节点
// { "ok" : 1 }
repl:PRIMARY> rs.status() // 在设置成功后,应该可以看到具体的配置信息
3、テスト・セットのコピー
メインデータベース、データ挿入(書き込み)に接続された新しい端末を開き、次に問い合わせを施し(読み取り)
> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongo mongodb://127.0.0.1:27001/admin
PRIMARY> db.user.insert({'username': 'Alice', 'password': '123456'}) // 插入数据(可写)
// WriteResult({ "nInserted" : 1 })
PRIMARY> db.user.find() // 查询数据(可读)
// { "username" : "Alice", "password" : "123456" }
次いで、挿入メインデータベースクエリ内のノードのデータに接続された他の端末(読み出し)、新たなデータを挿入しようとする(非書き込み)を開き
> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongo mongodb://127.0.0.1:27002/admin
SECONDARY> rs.slaveOk() // 在查询之前需要先设置从节点状态
SECONDARY> db.user.find() // 查询数据(可读)
// { "username" : "Alice", "password" : "123456" }
SECONDARY> db.user.insert({'username': 'Bob', 'password': 'abc'}) // 插入数据(不可写)
// WriteResult({ "writeError" : { "code" : 10107, "errmsg" : "not master" } })
さて、その後、端末は手動近くに、マスターノードを開くには、マスターノードがハングアップをシミュレート
> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongod --shutdown --dbpath /root/mongodb-replica-set-cluster/primary/data/db
その後に関連し127.0.0.1:27002
た状態で端末の現在のレプリカセットのビュー
SECONDARY> rs.status()
ノードがマスタノード(この時間は最初のコマンド・ラインが変更されたことに注意)となっており、データクエリの内部に挿入することができることがわかります
PRIMARY> db.user.insert({'username': 'Bob', 'password': 'abc'}) // 插入数据(可写)
// WriteResult({ "nInserted" : 1 })
PRIMARY> db.user.find() // 查询数据(可读)
// { "username" : "Alice", "password" : "123456" }
// {'username': 'Bob', 'password': 'abc'}
[見て、記事のより多くのMongoDBシリーズを読むのMongoDBの研究ノート ]