レプリカセット - のMongoDBクラスタモードについて

、レプリカセットクラスタは、二つのアーキテクチャに分かれています。

  • レプリカセット、ノードが所有するすべてのデータセットを構成するノードの奇数。最小アーキテクチャ:プライマリノード、二つの二次ノード
  • レプリカセット+調停ノードからなるノードの偶数、データセットを所有しているノードは、唯一の仲裁、調停選出されたプライマリノードに関与するノード。最低アーキテクチャ:プライマリノード、セカンダリノード、ノードアービタ

たとえば、仲裁と展開のフレームワークのために、次の3台のサーバを取ります。

IPアドレス オペレーティングシステムのバージョン MongoDBのバージョン ポート 機能
10.10.18.10 7.5  4.0  27017  主要 
10.10.18.11 Centos7.5  4.0  27017  二次
10.10.18.12 Centos7.5  4.0  27017  アービタ

二、MongoDBのインストールと展開

インストール環境:CentOSの7.5

取付ベースの依存関係

YUMのcyrus-SASLのcyrus-SASL-GSSAPIのサイラス-SASL-無地のkrb5-libsにはlibpcapのlm_sensors-libsのNET-SNMP NET-SNMPエージェント-LIBSのOpenLDAPのOpenSSL RPM-LIBS TCP_WRAPPERS-LIBSをlibcurlのインストール

インストールパッケージをダウンロードします

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.10.tgz

インストールパッケージを解決します

MongoDBの-linuxの-x86_64-4.0.10.tgz -C /データ/ -xzvfタール
のln -s /data/mongodb-linux-x86_64-4.0.10 /データ/ MongoDBの

環境変数を追加します

エコー"輸出PATH = \ $ PATH:/データ/ MongoDBの/ binに" >>〜/ .bashrcの
ソース〜/ .bashrcに
モンゴ--version

主な設定ファイル:

systemLog:
  先:ファイルの
  パス: "/data/mongodb/log/mongod.log"
  logAppend:真
ストレージ:
  DBPATH: "/データ/ MongoDBの/データ"
  ジャーナル:
      有効:真
  wiredTiger:
      engineConfig:
        cacheSizeGB:2
processManagement:
  フォーク:真
  pidFilePath: "/data/mongodb/pid/m.pid"
ネット:
  bindIp:10.10.18.10
  ポート:27017
レプリケーション:
  replSetName: "RS0"

セカンダリプロフィール

systemLog:
  先:ファイルの
  パス: "/data/mongodb/log/mongod.log"
  logAppend:真
ストレージ:
  DBPATH: "/データ/ MongoDBの/データ"
  ジャーナル:
      有効:真
  wiredTiger:
      engineConfig:
        cacheSizeGB:2
processManagement:
  フォーク:真
  pidFilePath: "/data/mongodb/pid/m.pid"
ネット:
  bindIp:10.10.18.11
  ポート:27017
レプリケーション:
  replSetName: "RS0"

アービターさんのプロフィール

systemLog:
  先:ファイルの
  パス: "/data/mongodb/log/mongod.log"
  logAppend:真
ストレージ:
  DBPATH: "/データ/ MongoDBの/データ"
  ジャーナル:
      有効:真
  wiredTiger:
      engineConfig:
        cacheSizeGB:2
processManagement:
  フォーク:真
  pidFilePath: "/data/mongodb/pid/m.pid"
ネット:
  bindIp:10.10.18.12
  ポート:27017
レプリケーション:
  replSetName: "RS0"

すべての3台のサーバ上で起動しますmongdb

mongod -f /data/mongodb/mongod.conf

第三に、レプリカセットを設定

Renyiyitaiに3つのサーバのログを、モンゴを記録

モンゴ--host 10.10.18.10

> CFG = {_id: "RS0"、メンバー:[{_ ID:0、ホスト:'10 .10.18.10:27017' 、優先順位:1}、{_ ID:1、ホスト:'10 .10.18.11:27017' 、優先順位: 1}、{_ ID:2、ホスト:'10 .10.18.12:27017' 、arbiterOnly:真}]}。

> rs.initiate(CFG)

ビューのレプリカセット構成

> rs.conf()

{
 "_id": "RS0"、
 "バージョン":1、
 "はprotocolVersion":NumberLong(1)、
 "writeConcernMajorityJournalDefault":真、
 "メンバー":[
 {
 "_id":0、
 "ホスト":「10.10.18.10 :27017" 、
 "arbiterOnly":偽、
 "buildIndexes":真、
 "隠された":偽、
 "優先度":1、
 "タグ":{

}、
 "slaveDelay":NumberLong(0)、
 "投票":1
 }、
 {
 "_id":1、
 "ホスト": "10.10.18.11:27017"、
 "arbiterOnly":偽、
 "buildIndexes":真、
 "隠された」:偽、
 "優先順位":1、
 "タグ":{

}、
 "slaveDelay":NumberLong(0)、
 "投票":1
 }、
 {
 "_id":2、
 "ホスト": "10.10.18.12:27017"、
 "arbiterOnly":真、
 "buildIndexes":真、
 "隠された」:偽、
 "優先順位":0、
 "タグ":{

}、
 "slaveDelay":NumberLong(0)、
 "投票":1
 }
 ]、
 "設定":{
 "chainingAllowed":真、
 "heartbeatIntervalMillis" 2000、
 "heartbeatTimeoutSecs" 10、
 "electionTimeoutMillis":10000、
 「catchUpTimeoutMillis "-1
 "catchUpTakeoverDelayMillis":30000、
 "getLastErrorModes":{

}、
 "getLastErrorDefaults":{
 "W":1、
 "wtimeout":0
 }、
 "replicaSetId":のObjectId( "5cff76e5e57e23a5bc7054e2")
 }
}

 

第四に、検証のレプリカセット

一次データをに挿入されています

 

RS0:PRIMARY>ショーDBS
管理0.000ギガバイトの
コンフィグ0.000ギガバイト
ローカル0.000ギガバイトの
RS0:PRIMARY> db.users.insertOne(
... {
...名前: "訴える"、
...年齢:26、
...ステータス: "保留"
...})
{
        "肯定応答":真、
        "insertedId":のObjectId( "5cff79e8993e70290a081d04")
}


RS0:PRIMARY> db.users.find()
{ "_id":のObjectId( "5cff79e8993e70290a081d04")、 "名前" "スー"、 "年齢" 26、 "ステータス": "保留"}

セカンダリでは、デフォルトでは読み取ることが許可されていません

RS0:SECONDARY> db.users.find()
Error:エラー:{
        "operationTime":タイムスタンプ(1560247181、1)、
        "OK":0、
        "ERRMSG": "マスターでないとslaveOk = FALSE"、
        "コード": 13435、
        "コードネーム": "NotMasterNoSlaveOk"、
        "$ clusterTime":{
                "clusterTime":タイムスタンプ(1560247181、1)、
                "署名":{
                        "ハッシュ":BINDATA(0、 "AAAAAAAAAAAAAAAAAAAAAAAAAAA =")、
                        "キーID": NumberLong(0)
                }
        }
}

五、故障シミュレーション

プライマリ上のmongoプロセスを停止し、セカンダリログインモンゴは上の閲覧しました

モンゴ--host 10.10.18.11


RS0:PRIMARY> db.users.find()
{ "_id":のObjectId( "5cff79e8993e70290a081d04")、 "名前" "スー"、 "年齢" 26、 "ステータス": "保留"}

私は、元のセカンダリがプライマリになり、照会することができました。

セカンダリになり、元のプライマリサーバー、上のモンゴオープンなプロセス。

おすすめ

転載: www.linuxidc.com/Linux/2019-06/159049.htm