実戦MongoDB-ReplicationのReplica Set
5847 ワード
実戦MongoDB
Master-Slave
MongoDBは、異なるサービス間の非同期のデータレプリケーションをサポートし、failover(フェイルオーバー、フェイルオーバー、フェイルオーバー)and redundancy(データ冗長)を実現します.
同じ時間に、書き込みは1つのサービスノード(primaryまたはmaster)のみでサポートされます.
MongoDBでは、2つのレプリケーション・モードがサポートされています. Master/Slaveは、マスターとslaveを含むマスターからコピーされます. Replica Set、primaryとsecondaryを含むレプリケーションセットレプリケーション.
Master/Slaveの公式アドレスを紹介します.
http://www.mongodb.org/display/DOCS/Master+Slave
Replica Setの公式アドレスを紹介します.
http://www.mongodb.org/display/DOCS/Replica+Sets
今日実戦したのはreplica set、つまりレプリケーションセットレプリケーションです. replica setは、自動failoverおよび自動recoveryを実現することができる. replica setは、2つ以上のノードからなり、互いのレプリケーションを実現する. replica setはprimaryノードを自動的に選択し、固定primaryノードは1つもありません. mongosは、replica setのprimaryノードが変化していることを自動的に発見し、この新しいprimaryノードに書き込み操作を送信します.
通常は次のシーンで使用されます.データ冗長性. 自動failoverは、高可用性のサービスを提供します. 分散読みの負荷. メンテナンスをシンプル化します(master-slaveに対して). ディザスタリカバリ.
まずmongodを起動します.replica setのパラメータは2つあります.
--replset、複製セットの名前.
--oplogSize、操作ログのサイズ、単位はMBです.
今回はubuntuの下にreplica setを構成し、まず2つのmongodノードを起動します.
上の2つのmongodの起動パラメータreplSetは、同じ値shard 1を指定しています.つまり、2つのmongodノードが同じreplica setにあることに気づきます.
Replica Setの初期化
光は2つのmongodノードを起動し、まだ何のサービスも提供できません.この場合、mongo接続を使用してdbを行います.book.Insertはno master、つまりprimaryノードがないので、どのノードにデータを書き込むか分かりません.
2つのmongodノードを起動した後、初期化する必要があります.
まずmongoで任意のmongodノードに接続し、次のコマンドを実行します.
次のヒント情報が現れると成功を表します.成功しなければ、googleでエラーヒントを与えると、多くの答えが見つかります.
続行
名前、時間、現在ログインしているmongodがprimaryなのかsecondaryなのか、メンバーの情報など、replica setのステータスを表示できます.
Replica setの情報では、次のことが重要です. myStateの値で、1であれば現在ログインしているprimaryを表します.2であれば、現在ログインしているのはsecondaryです.
メンバー情報には、住所、健康状態、primaryかsecondaryかなどが含まれています.
メンバー情報で重要なのは state:1は、hostが現在読み書き可能であることを示し、2:読み書き不可 health:1はhostが現在正常であることを示し、0:異常 このときprimaryのmongodにログインし、データを挿入します.
次にsecondaryのlogファイルを表示すると、コピー動作が発生しています.
このときsecondary,use test,dbにログインします.book.find()、間違えてもいいです.
大丈夫です.secondaryでデータを読み込むには、データを読み込むsecondaryで実行する最後のステップが必要です.
この時再びdb.book.find()は、正常に結果が表示され、問題ありません.
ノードの追加
新しいmongodノードの起動
primaryノードに接続し、次のコマンドを実行します.
ノードをprimaryに強制
mongodb 2.0以降は次のように使用できます.
master-slaveに比べて、replica setの利点は、単一の障害がないことです.primary障害の後、replica set全体が自動的に健康なノードを選択してprimaryになり、書くタスクを引き受け、master-slaveよりも可用性が高く、より高い可用性を提供します.
Master-Slave
MongoDBは、異なるサービス間の非同期のデータレプリケーションをサポートし、failover(フェイルオーバー、フェイルオーバー、フェイルオーバー)and redundancy(データ冗長)を実現します.
同じ時間に、書き込みは1つのサービスノード(primaryまたはmaster)のみでサポートされます.
MongoDBでは、2つのレプリケーション・モードがサポートされています.
Master/Slaveの公式アドレスを紹介します.
http://www.mongodb.org/display/DOCS/Master+Slave
Replica Setの公式アドレスを紹介します.
http://www.mongodb.org/display/DOCS/Replica+Sets
今日実戦したのはreplica set、つまりレプリケーションセットレプリケーションです.
通常は次のシーンで使用されます.
まずmongodを起動します.replica setのパラメータは2つあります.
--replset、複製セットの名前.
--oplogSize、操作ログのサイズ、単位はMBです.
今回はubuntuの下にreplica setを構成し、まず2つのmongodノードを起動します.
- mongod --dbpath /home/andyshi/mongo1/ --logpath /home/andyshi/mongo1/log.log --replSet shard1 --port 10001 --bind_ip 192.168.0.21
- mongod --dbpath /home/andyshi/mongo2/ --logpath /home/andyshi/mongo2/log.log --replSet shard1 --port 10002 --bind_ip 192.168.0.21
上の2つのmongodの起動パラメータreplSetは、同じ値shard 1を指定しています.つまり、2つのmongodノードが同じreplica setにあることに気づきます.
Replica Setの初期化
光は2つのmongodノードを起動し、まだ何のサービスも提供できません.この場合、mongo接続を使用してdbを行います.book.Insertはno master、つまりprimaryノードがないので、どのノードにデータを書き込むか分かりません.
2つのmongodノードを起動した後、初期化する必要があります.
まずmongoで任意のmongodノードに接続し、次のコマンドを実行します.
- cfg={_id:'shard1',members:[
- {_id:0,host:'192.168.0.21:10001'},
- {_id:1,host:'192.168.0.21:10002'}]
- }
- rs.initiate(cfg)
次のヒント情報が現れると成功を表します.成功しなければ、googleでエラーヒントを与えると、多くの答えが見つかります.
- {
- "info" : "Config now saved locally. Should come online in about a minute.",
- "ok" : 1
- }
続行
- rs.status()
名前、時間、現在ログインしているmongodがprimaryなのかsecondaryなのか、メンバーの情報など、replica setのステータスを表示できます.
Replica setの情報では、次のことが重要です.
メンバー情報には、住所、健康状態、primaryかsecondaryかなどが含まれています.
メンバー情報で重要なのは
- // 10001 primary, rs.status
- mongo 192.168.0.21:10001
-
- use test
- db.book.insert({'title':'computer'})
次にsecondaryのlogファイルを表示すると、コピー動作が発生しています.
このときsecondary,use test,dbにログインします.book.find()、間違えてもいいです.
- error: { "$err" : "not master and slaveok=false", "code" : 13435 }
大丈夫です.secondaryでデータを読み込むには、データを読み込むsecondaryで実行する最後のステップが必要です.
- rs.slaveOK()
この時再びdb.book.find()は、正常に結果が表示され、問題ありません.
ノードの追加
新しいmongodノードの起動
- mongod --dbpath /home/andyshi/mongo3/ --logpath /home/andyshi/mongo3/log.log --replSet shard1 --port 10003 --bind_ip 192.168.0.21
primaryノードに接続し、次のコマンドを実行します.
- rs.add('192.168.0.21:10003')
- rs.addArb('192.168.0.21:10003')
- //
- rs.reconfig(rs.conf())
ノードをprimaryに強制
mongodb 2.0以降は次のように使用できます.
master-slaveに比べて、replica setの利点は、単一の障害がないことです.primary障害の後、replica set全体が自動的に健康なノードを選択してprimaryになり、書くタスクを引き受け、master-slaveよりも可用性が高く、より高い可用性を提供します.