インターネット経由のプライベートアクセスでMongoDBを構成する例。 この記事では、1つのサーバーで3つのレプリカセットを展開し、OpLogをアクティブ化する例を示します。 OpLogは、たとえばMeteorベースのアプリケーション( ロングポーリングを無効にするため)など、MongoDBの変更を監視( リッスン )する「リアクティブ」アプリケーションに必要です。
以下の例は単一サーバー内での作業に焦点を当てているという事実にもかかわらず、安定性の理由から、各レプリカセットメンバーを個別のサーバーに展開することをお勧めします。 これを行うには、 rs.initiate({/*...*/})
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    メソッドrs.initiate({/*...*/})
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    渡されるレプリカセットメンバーのアドレスを変更する必要があります。 
レプリカセットメンバーの構成では、wiredTigerがデータベースエンジンとして使用されます 。このエンジンの利点については、 リリースノートを参照してください 。
定義:
-  ユーザーadmin
 
 
 
 -MongoDBのすべての機能とコマンドに対するフルアクセス権(root
 
 
 
 )を持つユーザー。
-   appUser
 
 
 
 アプリケーションデータベースに対してのみ制限された読み取りおよび書き込みreadWrite
 
 
 
 (readWrite
 
 
 
 )を持つユーザー。
-   appDB
 
 
 
 アプリケーションに使用されるデータベース。
-  ユーザーoplogger
 
 
 
 local
 
 
 
 データベース(OpLogが保存されているデータベース)に対する読み取り権限を持つユーザー。
-   oplogger
 
 
 
 ロール-local
 
 
 
 データベースの読み取り権限を持つロール。
-   <password>
 
 
 
 -このプレースホルダーはパスワードに置き換える必要があります。 常に二重引用符で示されます 。
MongoDB> = 3.1およびDebian> = 7の例を示します
-   インストール手順の手順に従ってください。 インストールプロセス中に、 mongodb
 
 
 
 グループで構成されるmongodb
 
 
 
 システムユーザーが自動的に作成されます。
-  データベースファイルのディレクトリの権限を作成および指定します。 
      
 
 $ mkdir -p /data/mongos/one /data/mongos/two /data/mongos/three $ chmod 755 /data $ chown -R mongodb:mongodb /data/mongos
 
 
 
 
-   MongoDB ログディレクトリ( logs )のアクセス許可を作成および指定します。 
      
 
 $ mkdir -p /var/log/mongodb/one /var/log/mongodb/two /var/log/mongodb/three $ chown -R mongodb:mongodb /var/log/mongodb
 
 
 
 
-   mongod
 
 
 
 サービスを削除します。
 
 $ rm /etc/init.d/mongod
 
 
 
 
-  レプリカセットの最初のメンバー用の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
 
 
 
 
-  レプリカセットの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
 
 
 
 
-  レプリカセットの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
 
 
 
 
-  共有認証キーを使用してファイルの権限を作成および指定します。このキーはレプリカセットのメンバーが相互に通信するために使用されます。 
      
 
 $ openssl rand -base64 741 > /data/mongos/key $ chown mongodb:mongodb /data/mongos/key $ chmod 400 /data/mongos/key
 
 
 
 
-   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
 
 
 
 
- マシン( サーバー )を再起動します
-  レプリカセットの構成を指定し、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)
 
 
 
 
-   root
 
 
 
 権限を持つadmin
 
 
 
 ユーザーを作成します(レプリカセットのPRIMARYメンバーにコマンドを入力してください)。
 
 // Mongo Shell: $ mongo --port 27017 use admin db.createUser({user:"admin", pwd:<password>, roles:[{role:"root", db:"admin"}]})
 
 
 
 
-   --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
 
 
 
 
-  レプリカセットの各メンバーの共有認証キーへのパスを指定します。 
      
 
 # nano /etc/mongod-one.conf # nano /etc/mongod-two.conf # nano /etc/mongod-three.conf security: keyFile: /data/mongos/key
 
 
 
 
- マシン( サーバー )を再起動します
-  アプリケーションデータベースの読み取りおよび書き込みreadWrite
 
 
 
 を持つユーザーを作成します(アプリケーションのコードで、このユーザーを使用してMongoDBにアクセスします )。
 
 // Mongo Shell: $ mongo -u "admin" -p <password> --authenticationDatabase "admin" use admin db.createUser({user:"appUser", pwd:<password>, roles:[{role:"readWrite", db:"appDB"}]})
 
 
 
 
-   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"}]})
 
 
 
 
-   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"]})
 
 
 
 
-  すべてのユーザーが正しく作成されていることを確認します。 
      
 
 // Mongo Shell: $ mongo -u "admin" -p <password> --authenticationDatabase "admin" use admin show users
 
 
 
 
これ以降、MongoDBはサーバー( machine )のパブリックIPアドレス、およびループバックとローカルホストで使用可能になります。
接続文字列:
-  アプリケーションの場合: 
      
 
 mongodb://appUser:<password>@<PUBLIC_IP>:27017,<PUBLIC_IP>:27018,<PUBLIC_IP>:27019/appDB?authSource=admin&replicaSet=rs0
 
 
 
 
-   OpLogの場合: 
      
 
 mongodb://oplogger:<password>@<PUBLIC_IP>:27017,<PUBLIC_IP>:27018,<PUBLIC_IP>:27019/local?authSource=admin&replicaSet=rs0
 
 
 
 
更新:
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);
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
      
      データベース接続文字列を更新します。
-  アプリケーションの場合: 
      
 
 mongodb://appUser:<password>@mongo.example.com:27017,mongo.example.com:27018,mongo.example.com:27019/appDB?authSource=admin&replicaSet=rs0
 
 
 
 
-   OpLogの場合: 
      
 
 mongodb://oplogger:<password>@mongo.example.com:27017,mongo.example.com:27018,mongo.example.com:27019/local?authSource=admin&replicaSet=rs0