、レプリカセットクラスタは、二つのアーキテクチャに分かれています。
- レプリカセット、ノードが所有するすべてのデータセットを構成するノードの奇数。最小アーキテクチャ:プライマリノード、二つの二次ノード
- レプリカセット+調停ノードからなるノードの偶数、データセットを所有しているノードは、唯一の仲裁、調停選出されたプライマリノードに関与するノード。最低アーキテクチャ:プライマリノード、セカンダリノード、ノードアービタ
たとえば、仲裁と展開のフレームワークのために、次の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、 "ステータス": "保留"}
私は、元のセカンダリがプライマリになり、照会することができました。
セカンダリになり、元のプライマリサーバー、上のモンゴオープンなプロセス。