同じサーバー上のMongoDBレプリカセットとOpLog

インターネット経由のプライベートアクセスでMongoDBを構成する例。 この記事では、1つのサーバーで3つのレプリカセットを展開し、OpLogをアクティブ化する例を示します。 OpLogは、たとえばMeteorベースのアプリケーション( ロングポーリングを無効にするため)など、MongoDBの変更を監視( リッスン )する「リアクティブ」アプリケーションに必要です。







以下の例は単一サーバー内での作業に焦点を当てているという事実にもかかわらず、安定性の理由から、各レプリカセットメンバーを個別のサーバーに展開することをお勧めします。 これを行うには、 rs.initiate({/*...*/})



メソッドrs.initiate({/*...*/})



渡されるレプリカセットメンバーのアドレスを変更する必要があります。







レプリカセットメンバーの構成では、wiredTigerがデータベースエンジンとして使用されます 。このエンジンの利点については、 リリースノートを参照してください







定義:









MongoDB> = 3.1およびDebian> = 7の例を示します







  1. インストール手順の手順に従ってください。 インストールプロセス中に、 mongodb



    グループで構成されるmongodb



    システムユーザーが自動的に作成されます。
  2. データベースファイルのディレクトリの権限を作成および指定します。

     $ mkdir -p /data/mongos/one /data/mongos/two /data/mongos/three $ chmod 755 /data $ chown -R mongodb:mongodb /data/mongos
          
          



  3. MongoDB ログディレクトリ( logs )のアクセス許可を作成および指定します。

     $ mkdir -p /var/log/mongodb/one /var/log/mongodb/two /var/log/mongodb/three $ chown -R mongodb:mongodb /var/log/mongodb
          
          



  4. mongod



    サービスを削除します。

     $ rm /etc/init.d/mongod
          
          



  5. レプリカセットの最初のメンバー用のMongoDB構成ファイルを作成します( nano /etc/mongod-one.conf



    ):

     storage: dbPath: /data/mongos/one journal: enabled: true engine: wiredTiger systemLog: verbosity: 0 traceAllExceptions: false destination: file logAppend: true path: /var/log/mongodb/one/mongod.log net: port: 27017 bindIp: 0.0.0.0 operationProfiling: slowOpThresholdMs: 2100 mode: off replication: replSetName: rs0
          
          



  6. レプリカセットの2番目のメンバー( nano /etc/mongod-two.conf



    )のMongoDB構成ファイルを作成します。

     storage: dbPath: /data/mongos/two journal: enabled: true engine: wiredTiger systemLog: verbosity: 0 traceAllExceptions: false destination: file logAppend: true path: /var/log/mongodb/two/mongod.log net: port: 27018 bindIp: 0.0.0.0 operationProfiling: slowOpThresholdMs: 2100 mode: off replication: replSetName: rs0
          
          



  7. レプリカセットの3番目のメンバー( nano /etc/mongod-three.conf



    )のMongoDB構成ファイルを作成します。

     storage: dbPath: /data/mongos/three journal: enabled: true engine: wiredTiger systemLog: verbosity: 0 traceAllExceptions: false destination: file logAppend: true path: /var/log/mongodb/three/mongod.log net: port: 27019 bindIp: 0.0.0.0 operationProfiling: slowOpThresholdMs: 2100 mode: off replication: replSetName: rs0
          
          



  8. 共有認証キーを使用してファイルの権限を作成および指定します。このキーはレプリカセットのメンバーが相互に通信するために使用されます。

     $ openssl rand -base64 741 > /data/mongos/key $ chown mongodb:mongodb /data/mongos/key $ chmod 400 /data/mongos/key
          
          



  9. MongoDBをmongodb



    として実行するためのcronファイルを作成します( crontab -u mongodb -e



    ):

     @reboot /usr/bin/mongod --config /etc/mongod-one.conf --fork @reboot /usr/bin/mongod --config /etc/mongod-two.conf --fork @reboot /usr/bin/mongod --config /etc/mongod-three.conf --fork
          
          



  10. マシン( サーバー )を再起動します
  11. レプリカセットの構成を指定し、RSを開始します。

     // Mongo Shell: $ mongo var conf = { "_id" : "rs0", "members" : [ { "_id" : 0, "host" : "127.0.0.1:27017" }, { "_id" : 1, "host" : "127.0.0.1:27018" }, { "_id" : 2, "host" : "127.0.0.1:27019" } ] } rs.initiate(conf)
          
          



  12. root



    権限を持つadmin



    ユーザーを作成します(レプリカセットのPRIMARYメンバーにコマンドを入力してください)。

     // Mongo Shell: $ mongo --port 27017 use admin db.createUser({user:"admin", pwd:<password>, roles:[{role:"root", db:"admin"}]})
          
          



  13. --auth



    フラグ( crontab -u mongodb -e



    )を使用してMongoDBを実行するようにcronファイルを更新します。これにより、不正アクセスからMongoDBが閉じられます(信頼性の高い保護についてはMongoDB セキュリティの記事参照してください )。

     @reboot /usr/bin/mongod --config /etc/mongod-one.conf --auth --fork @reboot /usr/bin/mongod --config /etc/mongod-two.conf --auth --fork @reboot /usr/bin/mongod --config /etc/mongod-three.conf --auth --fork
          
          



  14. レプリカセットの各メンバーの共有認証キーへのパスを指定します。

     # nano /etc/mongod-one.conf # nano /etc/mongod-two.conf # nano /etc/mongod-three.conf security: keyFile: /data/mongos/key
          
          



  15. マシン( サーバー )を再起動します
  16. アプリケーションデータベースの読み取りおよび書き込みreadWrite



    を持つユーザーを作成します(アプリケーションのコードで、このユーザーを使用してMongoDBにアクセスします )。

     // Mongo Shell: $ mongo -u "admin" -p <password> --authenticationDatabase "admin" use admin db.createUser({user:"appUser", pwd:<password>, roles:[{role:"readWrite", db:"appDB"}]})
          
          



  17. oplogger



    ロールを作成します。

     // Mongo Shell: $ mongo -u "admin" -p <password> --authenticationDatabase "admin" use admin db.runCommand({createRole:"oplogger", privileges:[{resource: {db:"local", collection:"system.replset"}, actions: ["find"]}], roles:[{role:"read", db:"local"}]})
          
          



  18. oplogger



    ユーザーを作成し、 oplogger



    ロールを割り当てます。

     // Mongo Shell: $ mongo -u "admin" -p <password> --authenticationDatabase "admin" use admin //  MongoDB 2.4 db.createUser({user:"oplogger", pwd:<password>, roles:[], otherDBRoles:{local:["read"]}}) //  MongoDB >= 2.6 db.createUser({user:"oplogger", pwd:<password>, roles:[{role: "read", db: "local"}]}) db.runCommand({grantRolesToUser:"oplogger", roles:["oplogger"]})
          
          



  19. すべてのユーザーが正しく作成されていることを確認します。

     // Mongo Shell: $ mongo -u "admin" -p <password> --authenticationDatabase "admin" use admin show users
          
          





これ以降、MongoDBはサーバー( machine )のパブリックIPアドレス、およびループバックとローカルホストで使用可能になります。







接続文字列:












更新:



mongodb@2.2.0( driver )以降、接続文字列とレプリカセットの構成の両方で同じIPアドレス/ドメイン名を使用する必要があります。 バグ#NODE-746を参照してください。







これらのドライバーの革新にはエラーが伴います。 no valid replicaset members found



no primary found in replicaset









新しい要件を満たすために-MongoDBが配置されているホスト( サーバー )にドメイン名を割り当てると、サブドメインも機能します。 ドメインmongo.example.com



を選択したとします。







MongoDBサーバーで、次を実行します。







 // Mongo Shell: $ mongo var rsconf = rs.conf(); rsconf.members[0].host = 'mongo.example.com:27017'; rsconf.members[1].host = 'mongo.example.com:27018'; rsconf.members[2].host = 'mongo.example.com:27019'; rs.reconfig(rsconf);
      
      





データベース接続文字列を更新します。









英語版








All Articles