実戦MongoDB-ReplicationのMaster-Slave


実戦MongoDB
Replica Set
 
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
     
    今日実戦したのはmaster-slave、つまり主従複製です.
    まずmongodを使用してサービスを起動し、起動に関するパラメータはhttp://www.mongodb.org/display/DOCS/Command+Line+Parametersページに関連する説明が表示されます.
    プライマリ・スレーブ・レプリケーションに関するパラメータは、次のとおりです.
    --masterは、現在のサービスがプライマリであることを示します.
    --slaveは、現在のサービスが従であることを示します.
    --source、プライマリ・サービスのアドレスを指定します.server:port形式です.
    --onlyは、プライマリのみがコピーされている指定されたデータベースから、データベース名がdbで示されていることを示します.
     
    起動サービスは、コマンドラインからパラメータの指定を1つずつ行うか、ファイルにパラメータを保存して起動時にこのファイルをサービスのプロファイルとして指定します.後見の方法は管理とメンテナンスが容易で、使用を推奨します.
     
    まずプライマリ・サービスを構成します.
       
       
       
       
    1. port=30000 
    2. ddbpath=d:\mongodb\master1 
    3. directoryperdb=true 
    4. logpath=d:\mongodb\master1\log.log 
    5. logappend=true 
    6. master=true 
    7. bind_ip=192.168.0.111 

    構成されたパラメータは、上記のように、上のパラメータを1つのファイルにコピーして【master 1.conf】と名付け、次のコマンドを使用してプライマリ・サービスを開始します.
     
       
       
       
       
    1. d:\mongodb\bin\mongod --config=d:\mongodb\master1\master1.conf 

    上はwindowsで起動したコマンドです.
    ubuntuで使用する場合は、confファイルが/home/andyshi/master 1/ディレクトリに格納されていると仮定し、confファイルの内容を以下に変更します.
     
       
       
       
       
    1. port=30000 
    2. dbpath=/home/andyshi/master1 
    3. directoryperdb=true 
    4. logpath=/home/andyshi/master1/log.log 
    5. logappend=true 
    6. master=true 
    7. bind_ip=192.168.0.111 

    次のコマンドを使用してプライマリ・サービスを開始します.
     
       
       
       
       
    1. mongod --conf=/home/andyshi/master1/master1.conf 

    皆さんは気づきました.主な違いはカタログの場所です.注意すればいいです.
    次にmongoというクライアントを使用して構成結果をテストしたり、python+pymongoを使用してテストしたりすることができます.ついでにpython+pymongoの使用を熟知してください.
    クライアントテスト環境ではubuntu+python 2を使用しています.7+pymongo2.1.
    端末に入力
     
       
       
       
       
    1. mongo 192.168.0.111:30000

    IP(または名前)とポート番号を指定します.書き込みを行うため、プライマリ・サービスに接続する必要があります.次のデータを書き込んでみます.
     
       
       
       
       
    1. // test  
    2. use test 
    3. //  
    4. db.book.insert({'author':'shiwenbin'}) 
    5. //  
    6. db.test.find() 

    挿入に成功したら、サービスから同じデータがあるかどうかを確認します.
     
       
       
       
       
    1. mongo 192.168.0.111:30001 
    2.  
    3. use test 
    4. show collections 
    5. db.book.find() 

    問題がなければ、3001というサービスから同じ場所にも同じデータが存在し、レプリケーションに成功し、構成に問題がないことを示します.
    プライマリ・スレーブ関係を確立すると、プライマリ・サービスのlocalデータベースにslavesセットがあり、現在のプライマリ・サービスのすべてのセカンダリ・サービスが格納されます.
    したがって、サービスからのlocalデータベースには、現在のslaveのmaster情報、すなわちプロファイル内のsourceパラメータで指定された情報を格納するsourcesセットがあります.
    コレクションの表示
     
       
       
       
       
    1. use local 

    useコマンドをlocalデータベースに切り替え、
     
       
       
       
       
    1. show collections 

    showコマンドはlocalデータベースのすべてのセットを表示します.
     
    診断機能
    マスターでの使用
     
       
       
       
       
    1. db.printReplicationInfo() 

    最初の同期イベントの時間、最後の同期イベントの時間、および現在の時間を印刷できます.
    slaveで使用
     
       
       
       
       
    1. db.printSalveReplicationInfo() 

    マスターのアドレスと前回の同期時間を印刷できます.
     
    安全
    mongodサービスを起動するときに、authを使用するセキュリティ検証が必要なパラメータを指定した場合は、masterとslaveのlocalデータベースに同じユーザーを追加する必要があります.
     
       
       
       
       
    1. use local 
    2. db.addUser('user1','123.com') 

    addUserコマンドには3つのパラメータがあり、1つ目はアカウントにログインし、2つ目はパスワードで、3つ目は読み取り専用かどうか、オプションパラメータで、デフォルト値はfalseです.すなわちreadonlyパラメータを指定しないと、追加したユーザは書き込み権限を持ち、readonly=trueを指定して追加したユーザは読み取り専用ユーザである.
    master-slaveを用いて読み書き分離を実現し,masterを書き,slaveを読み取ることができる.しかし残念なことに、masterが切れていると書き込み操作ができなくなり、slaveからデータを読み取るしかありません.この場合、slaveを手動で停止し、起動パラメータを変更してmasterに起動するとともに、他のslaveがこの新しいmasterを指していることを更新する必要があります.