現在のインストール方法は、公式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倍)。