現在のインストール方法は、公式Webサイトで見つけることができます。
この例では、バージョン3.4がUbuntu 16にインストールされています。
インストール:
 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list sudo apt-get update sudo apt-get install mongodb-org 
フォルダー、構成を作成し、権限を設定します。
 sudo mkdir /data sudo mkdir /data/db sudo mkdir /data/inmemory sudo mkdir /secondary/data sudo mkdir /secondary/data/db sudo vi /data/mongod-memory.conf 
メモリ内のプライマリが危険になる可能性があるアプローチ 突然の停電の場合、レプリカに切り替える時間がなかったデータは失われます。 私の場合、1〜2秒の損失はひどいものではありません。 すべてのポジションからの回復の可能性を考慮して、アプリケーション全体が記述されます。 財務データは、データがすでにレプリカ上(ディスク上)にあることを確認するパラメーターを使用して書き込まれます。
アプリケーションの準備が整っていない場合は、メモリセクションを拒否して、すべてを古典的に行うことができます。 一般に、これにはtmpfsマウントを削除し、構成をわずかに変更するだけで十分で、mongod-sec-d1.confに似たものになります。
mongod-memory.conf-プライマリ、メモリ内 processManagement: fork: true pidFilePath: "/data/inmemory/mongod.pid" storage: dbPath: "/data/inmemory" journal: enabled: false #   # ..            indexBuildRetry: true wiredTiger: engineConfig: cacheSizeGB: 8 #   . # ,  ,  ,     , # ..  ,      #   ,        systemLog: destination: "file" path: "/var/log/mongodb/mongodb.log" #      . #     , #       #  ,     #    (,  ) logAppend: true quiet: false verbosity: 0 logRotate: "reopen" timeStampFormat: "iso8601-local" net: bindIp: 127.0.0.1 #        #  ,     —    port: 27000 # ,     , #           http: enabled: false #    http    JSONPEnabled: false RESTInterfaceEnabled: false ssl: # ssl        mode: disabled security: #       , #    ,    authorization: "enabled" keyFile: "/data/mongod-keyfile" #        javascriptEnabled: false #   JS  . replication: oplogSizeMB: 4096 #    oplog'. #         #          oplog'a. #     #     —     ? replSetName: "consulwar" enableMajorityReadConcern: false # ,      #        . operationProfiling: slowOpThresholdMs: 30 # ,     , #      #         mode: "slowOp" 
  sudo vi /data/mongod-sec-d1.conf 
mongod-sec-d1.conf-セカンダリ、ディスク1ほとんどの場合、設定が繰り返されますが、違いはほんの数箇所です。
しかし、便宜のために出発
 processManagement: fork: true pidFilePath: "/data/db/mongod.pid" storage: dbPath: "/data/db" journal: enabled: true #  ,     , #       indexBuildRetry: true wiredTiger: engineConfig: cacheSizeGB: 8 # ,    -  Primary , # secondary   ,     systemLog: destination: "file" path: "/var/log/mongodb/mongodb.log" logAppend: true quiet: false verbosity: 0 logRotate: "reopen" timeStampFormat: "iso8601-local" net: bindIp: 127.0.0.1 port: 27001 http: enabled: false JSONPEnabled: false RESTInterfaceEnabled: false ssl: mode: disabled security: authorization: "enabled" keyFile: "/data/mongod-keyfile" javascriptEnabled: false replication: oplogSizeMB: 4096 replSetName: "consulwar" enableMajorityReadConcern: false operationProfiling: slowOpThresholdMs: 30 mode: "slowOp" 
  sudo vi /data/mongod-sec-d2.conf 
mongod-sec-d2.conf-セカンダリ、ディスク2実際、違いはデータベースへの道だけで、使用するポートに依存します。
 processManagement: fork: true pidFilePath: "/secondary/data/db/mongod.pid" storage: dbPath: "/secondary/data/db" journal: enabled: true indexBuildRetry: true wiredTiger: engineConfig: cacheSizeGB: 8 systemLog: destination: "file" path: "/var/log/mongodb/mongodb.log" logAppend: true quiet: false verbosity: 0 logRotate: "reopen" timeStampFormat: "iso8601-local" net: bindIp: 127.0.0.1 port: 27002 http: enabled: false JSONPEnabled: false RESTInterfaceEnabled: false ssl: mode: disabled security: authorization: "enabled" keyFile: "/data/mongod-keyfile" javascriptEnabled: false replication: oplogSizeMB: 4096 replSetName: "consulwar" enableMajorityReadConcern: false operationProfiling: slowOpThresholdMs: 30 mode: "slowOp" 
 レプリカが正しく機能するようにキーを追加し、フォルダーのアクセス許可を設定します
 sudo openssl rand -base64 741 > ~/mongod-keyfile sudo mv mongod-keyfile /data/mongod-keyfile sudo chmod 600 /data/mongod-keyfile sudo chown mongodb:mongodb -R /data sudo chown mongodb:mongodb -R /secondary/data 
起動スクリプトを作成する
 sudo apt-get install numactl sudo mv /lib/systemd/system/mongod.service /lib/systemd/system/mongod@.service sudo vi /lib/systemd/system/mongod@.service 
mongod @ .serviceサービス名の@は、パラメーターを使用して実行できることを意味します。
このスクリプトは、mongaを操作するために必要なすべてのOSパラメーターを設定します-便利です。
 [Unit] Description= Mongo Database on %i After=network.target [Service] Type=forking ExecStartPre=/bin/sh -c '/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled' ExecStartPre=/bin/sh -c '/bin/echo never > /sys/kernel/mm/transparent_hugepage/defrag' User=mongodb Group=mongodb PermissionsStartOnly=true ExecStart=/usr/bin/numactl  
 システムの起動時にデータベースを起動するように指示し、今すぐインスタンスを起動します。
パラメータは@の後に設定されます。たとえば、メモリは起動時に/data/mongod-memory.confを使用することを示します
 sudo systemctl enable mongod@memory sudo systemctl enable mongod@sec-d1 sudo systemctl enable mongod@sec-d2 sudo service start mongod@memory sudo service start mongod@sec-d1 sudo service start mongod@sec-d2 
mongaに接続し、レプリカを初期化し、ユーザーを確立します
 mongo localhost:27000/admin 
コンソールモンガで実施
 rs.initiate({ _id: "consulwar",  
ユーザーの下に接続します
 mongo localhost:27000/admin -u zav -p '7Am9859dcb82jJh' --authenticationDatabase admin 
アプリケーションを操作するユーザーを追加します
 use consulwar  
現在、かなり重要で難しい質問は、バックアップ用のリアルタイムレプリケーションです。 この記事では避けたいいくつかの機器を設定する必要があるため、完全には考慮されません。
リアルタイムバックアップのセットアップ外部サーバーに複製します(それ以外の場合、バックアップのポイントは何ですか?:-))。
Mongaは同様の方法で外部サーバーにインストールする必要があります。
おおよその構成:
mongod-backup.conf processManagement: fork: true pidFilePath: "/data/db/mongod.pid" storage: dbPath: "/data/db" journal: enabled: true indexBuildRetry: false #    wiredTiger: engineConfig: cacheSizeGB: 0 #   systemLog: destination: "file" path: "/var/log/mongodb/mongodb.log" logAppend: true quiet: false verbosity: 0 logRotate: "reopen" timeStampFormat: "iso8601-local" net: bindIp: 222.222.222.222 #       port: 27000 http: enabled: false #    http,   JSONPEnabled: false RESTInterfaceEnabled: false ssl: mode: disabled security: authorization: "enabled" keyFile: "/data/mongod-keyfile" # mongod-keyfile     javascriptEnabled: false replication: oplogSizeMB: 0 replSetName: "consulwar" enableMajorityReadConcern: false operationProfiling: mode: "off" #       
 バックアップサーバーのファイアウォールでは、アプリケーションサーバー/データベースのIPからのみ27000ポートへの接続を許可します。
同じこと-bindIpのアプリケーション/データベースサーバーでは、外部インターフェイス(外部サーバーのIP)を確認するように指示し、iptablesでは、バックアップ北IPからのみ27000-27002ポートへのアクセスを許可します。
レプリカを初期化/再初期化するとき、追加します
 { _id: 4, host: '222.222.222.222:27000', //  ,     arbiterOnly: false, buildIndexes: false, //       hidden: true, // !      priority: 0, //     slaveDelay: 0, //     , //   ,       " " votes: 0 //     } 
できた! これで、データは外部バックアップにもリアルタイムで注入されます。これは非常に便利です。
アプリケーションが完全にクラッシュした場合、同じ方法でレプリカを初期化でき、バックアップから回復します。
私を信じて、これはmongodump / mongorestoreよりもはるかに高速です(個人的な推定によると、25〜100倍)。