■環境

・大データの書き込みができるように1号機(3TBディスク×2台を接続)にて検証する。

・1号機はKVMハイパーバイザ。CPUは4コア、RAMは16GB

・レプリカセットはプライマリ×1、セカンダリ×1、アービター×1の3インスタンス構成とする。

・ホストは下記の3つのVMに構成する

 

VM名(ホスト名)  役割    IPアポレス   vCPU メモリ   データ領域  サイズ  

---------------------------------------------------------------------------

p1_centos7_k1  プライマリ  192.168.101.11  2   2GB  /dev/src/k1  1TB

p1_centos7_k2  セカンダリ  192.168.101.12  2   2GB   /dev/src/k2   1TB

p1_centos7_k3  アービタ   192.168.101.13 1   1GB

p3_centos7_k3  クライアント 192.168.101.33 2   2GB

 

・OSはすべてCentOS7.4

・他にレプリカセットに対しデータバックアップ領域として1TBを割り当てる

・他にレプリカセットに対しデータバックアップ用のスナップショット領域として500GB割り当てる

・データ領域とスナップショット領域は3TBの物理ディスク上にシン論理ボリュームとして作成

・バックアップ領域はもう一台の3TBの物理ディスク上にリニア論路ボリュームとして作成

■初期構成

・MongoDBレプリカセット名:rs1

 

■参考情報

https://docs.mongodb.com/manual/replication

→MongoDBのレプリカセットはミラーディスク方式のMongoDBのHAクラスタリング機能

Replica Set Deployment Architectures

Add an Arbiter to Replica Set

Configuration File Options

 

■課題

【お題0】

アービターを含む3インスタンス構成でプライマリを落とした際にフェイルオーバすることを確認する。また落としたインスタンスを再起動した際にレプリカセットに加わってデータが同期することを確認する

→調査中

【お題1】

アービターを含む3インスタンス構成でセカンダリからLVMスナップショットを使ってオンラインバックアップとリストアができることの確認

→調査中

【お題2】

超絶長い書き込み(チェックポイント周期60秒より長い時間かかる書き込み)の真っ最中にLVMスナップショットを使ったオンラインバックアップを取得してリストアできることの確認

→調査中

【お題3】

レプリカセットの通信量計測

x[MB]のデータ書き込み(クエリのサイズ換算)にたいして、oplogなどによるレプリケーションの際にプライマリ→セカンダリへの通信量y[MB]の関係式を2~3のケースを想定して計測する

→調査中

【お題4】

mongod.confの「replication:」カテゴリーの設定値の意味(上記④参照)

※アービターはpriorityは0でvoteは1?つまりプライマリになる権利は無いけど投票権はある?

※oplogsizeはどのように見積もるのか?

→調査中

 

【お題5】

mongod.confの下記カテゴリーの設定値の意味(上記④参照)

・systemLog:

・storage:

・processManagement:

・net:

・security:

・auditLog:

※気になるパラメータ

 - oplogサイズをどのように見積もるか?

 - journalの振る舞いはどのように制御するのか?サイズ上限とか100msごとのインターバル

  とか

 - チェックポイント周期を短くしすぎるとどのくらい負荷が高まるのか?逆に長くしすぎると

  どんな副作用が出るのか?journalの消費量が増大する?

 - wiredTigerとinline memoryの二つのストレージエンジンのパラメータの違いは?

 - レプリカセットでトランザクションを実現する際にどのパラメータで制御して、ACIDをどの

  ように担保するのか?

→調査中

 

 

MongoDBいじり 3台構成のレプリカセット その2のつづき

 

[着眼点8]

同じレプリカセットのメンバーどうしのdbPathの差分を調べる。

[pc3_centos7_k2]$ dbPath=0;find /mnt/rs0_${dbPath} -type f|while read X;do ls -l $X|awk '{printf "%62-s%16s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/rs0_${dbPath}.txt
[pc3_centos7_k2]$ dbPath=1;find /tmp/rs0_${dbPath} -type f|while read X;do ls -l $X|awk '{printf "%62-s%16s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/rs0_${dbPath}.txt
[pc3_centos7_k2]$ dbPath=2;find /tmp/rs0_${dbPath} -type f|while read X;do ls -l $X|awk '{printf "%62-s%16s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/rs0_${dbPath}.txt

[pc3_centos7_k2]$ cut -b 12-84 rs0_0.txt > rs0_0.txt.r
[pc3_centos7_k2]$ cut -b 12-84 rs0_1.txt > rs0_1.txt.r
[pc3_centos7_k2]$ cut -b 12-84 rs0_2.txt > rs0_2.txt.r

[pc3_centos7_k2]$ diff rs0_0.txt.r rs0_1.txt.r
2c2
< journal/WiredTigerLog.0000000009                          104857600  7350
---
> journal/WiredTigerLog.0000000009                          104857600  49d6
7,11c7,11
< WiredTiger.wt                                                126976  71cd
< WiredTiger.turtle                                              1263  2f0c
< WiredTigerHS.wt                                               36864  0930
< sizeStorer.wt                                                 36864  bbcd
< _mdb_catalog.wt                                               32768  766b
---
> WiredTiger.wt                                                126976  814f
> WiredTiger.turtle                                              1263  0b1e
> WiredTigerHS.wt                                               36864  698e
> sizeStorer.wt                                                 36864  e337
> _mdb_catalog.wt                                               32768  a9ac
13,21c13,21
< collection-0-527379200342368703.wt                            36864  0a57
< index-1-527379200342368703.wt                                 36864  5380
< collection-2-527379200342368703.wt                            36864  e4ae
< index-3-527379200342368703.wt                                 32768  cf18
< collection-4-527379200342368703.wt                            36864  55c2
< index-5-527379200342368703.wt                                 32768  1693
< collection-6-527379200342368703.wt                            36864  6f1d
< index-7-527379200342368703.wt                                 32768  1086
< collection-8-527379200342368703.wt                            32768  4991
---
> collection-0-527379200342368703.wt                            36864  2990
> index-1-527379200342368703.wt                                 36864  3df4
> collection-2-527379200342368703.wt                            36864  4303
> index-3-527379200342368703.wt                                 32768  32f7
> collection-4-527379200342368703.wt                            36864  82c4
> index-5-527379200342368703.wt                                 32768  fc39
> collection-6-527379200342368703.wt                            36864  5d96
> index-7-527379200342368703.wt                                 32768  afee
> collection-8-527379200342368703.wt                            32768  3a87
26,41c26,41
< diagnostic.data/metrics.2020-10-26T01-14-20Z-00000           390850  d07c
< diagnostic.data/metrics.2020-10-26T01-37-30Z-00000         10464287  9fb0
< diagnostic.data/metrics.2020-10-26T16-25-59Z-00000          6394846  03b8
< diagnostic.data/metrics.2020-10-27T00-56-38Z-00000           915196  6a6d
< diagnostic.data/metrics.2020-10-27T01-55-10Z-00000           282027  1cc1
< diagnostic.data/metrics.2020-10-27T02-16-13Z-00000          1121272  2c4a
< index-9-527379200342368703.wt                                 32768  ab48
< collection-10-527379200342368703.wt                           36864  9337
< index-11-527379200342368703.wt                                32768  cb15
< collection-16-527379200342368703.wt                          266240  99fa
< collection-17-527379200342368703.wt                           32768  915b
< index-18-527379200342368703.wt                                32768  4270
< collection-21-527379200342368703.wt                           32768  7aab
< index-22-527379200342368703.wt                                32768  1555
< collection-25-527379200342368703.wt                           32768  41db
< index-26-527379200342368703.wt                                32768  6b09
---
> diagnostic.data/metrics.2020-10-26T01-17-05Z-00000           223194  9b1d
> diagnostic.data/metrics.2020-10-26T01-37-40Z-00000         10483241  c961
> diagnostic.data/metrics.2020-10-26T22-36-31Z-00000          1140605  90ca
> diagnostic.data/metrics.2020-10-27T00-56-36Z-00000           688976  c5c6
> diagnostic.data/metrics.2020-10-27T01-55-20Z-00000           215005  db4d
> diagnostic.data/metrics.2020-10-27T02-16-23Z-00000           977559  010c
> index-9-527379200342368703.wt                                 32768  dbcd
> collection-10-527379200342368703.wt                           36864  604b
> index-11-527379200342368703.wt                                32768  324d
> collection-16-527379200342368703.wt                          262144  e4d5
> collection-17-527379200342368703.wt                           32768  ee48
> index-18-527379200342368703.wt                                32768  453e
> collection-21-527379200342368703.wt                           32768  8848
> index-22-527379200342368703.wt                                32768  02d7
> collection-25-527379200342368703.wt                           32768  2799
> index-26-527379200342368703.wt                                32768  ccaf
43c43
< index-30-527379200342368703.wt                                12288  9523
---
> index-30-527379200342368703.wt                                12288  29b6
45,50c45,50
< index-34-527379200342368703.wt                                12288  cbd5
< collection-37-527379200342368703.wt                           20480  b406
< index-38-527379200342368703.wt                                20480  4c2d
< index-40-527379200342368703.wt                                12288  d07f
< collection-43-527379200342368703.wt                           32768  371b
< index-44-527379200342368703.wt                                32768  132b
---
> index-34-527379200342368703.wt                                12288  3c66
> collection-37-527379200342368703.wt                           20480  b3c8
> index-38-527379200342368703.wt                                20480  2bd4
> index-40-527379200342368703.wt                                12288  d97a
> collection-43-527379200342368703.wt                           32768  ea1d
> index-44-527379200342368703.wt                                32768  3182

[pc3_centos7_k2]$ diff rs0_1.txt.r rs0_2.txt.r
2c2
< journal/WiredTigerLog.0000000009                          104857600  49d6
---
> journal/WiredTigerLog.0000000009                          104857600  6df3
7,11c7,11
< WiredTiger.wt                                                126976  814f
< WiredTiger.turtle                                              1263  0b1e
< WiredTigerHS.wt                                               36864  698e
< sizeStorer.wt                                                 36864  e337
< _mdb_catalog.wt                                               32768  a9ac
---
> WiredTiger.wt                                                126976  784b
> WiredTiger.turtle                                              1263  1b4f
> WiredTigerHS.wt                                               36864  2332
> sizeStorer.wt                                                 36864  24f9
> _mdb_catalog.wt                                               32768  f71f
13,21c13,21
< collection-0-527379200342368703.wt                            36864  2990
< index-1-527379200342368703.wt                                 36864  3df4
< collection-2-527379200342368703.wt                            36864  4303
< index-3-527379200342368703.wt                                 32768  32f7
< collection-4-527379200342368703.wt                            36864  82c4
< index-5-527379200342368703.wt                                 32768  fc39
< collection-6-527379200342368703.wt                            36864  5d96
< index-7-527379200342368703.wt                                 32768  afee
< collection-8-527379200342368703.wt                            32768  3a87
---
> collection-0-527379200342368703.wt                            36864  1de0
> index-1-527379200342368703.wt                                 36864  e4e5
> collection-2-527379200342368703.wt                            36864  2092
> index-3-527379200342368703.wt                                 32768  dae0
> collection-4-527379200342368703.wt                            36864  3bba
> index-5-527379200342368703.wt                                 32768  f3bb
> collection-6-527379200342368703.wt                            36864  e48d
> index-7-527379200342368703.wt                                 32768  da39
> collection-8-527379200342368703.wt                            32768  6fbb
26,41c26,41
< diagnostic.data/metrics.2020-10-26T01-17-05Z-00000           223194  9b1d
< diagnostic.data/metrics.2020-10-26T01-37-40Z-00000         10483241  c961
< diagnostic.data/metrics.2020-10-26T22-36-31Z-00000          1140605  90ca
< diagnostic.data/metrics.2020-10-27T00-56-36Z-00000           688976  c5c6
< diagnostic.data/metrics.2020-10-27T01-55-20Z-00000           215005  db4d
< diagnostic.data/metrics.2020-10-27T02-16-23Z-00000           977559  010c
< index-9-527379200342368703.wt                                 32768  dbcd
< collection-10-527379200342368703.wt                           36864  604b
< index-11-527379200342368703.wt                                32768  324d
< collection-16-527379200342368703.wt                          262144  e4d5
< collection-17-527379200342368703.wt                           32768  ee48
< index-18-527379200342368703.wt                                32768  453e
< collection-21-527379200342368703.wt                           32768  8848
< index-22-527379200342368703.wt                                32768  02d7
< collection-25-527379200342368703.wt                           32768  2799
< index-26-527379200342368703.wt                                32768  ccaf
---
> diagnostic.data/metrics.2020-10-26T01-13-26Z-00000           324517  5c41
> diagnostic.data/metrics.2020-10-26T01-37-51Z-00000         10483543  f33e
> diagnostic.data/metrics.2020-10-27T00-07-45Z-00000           374545  0483
> diagnostic.data/metrics.2020-10-27T00-56-37Z-00000           479664  6644
> diagnostic.data/metrics.2020-10-27T01-55-30Z-00000           191830  d495
> diagnostic.data/metrics.2020-10-27T02-16-02Z-00000           996076  a307
> index-9-527379200342368703.wt                                 32768  5de7
> collection-10-527379200342368703.wt                           36864  ddf5
> index-11-527379200342368703.wt                                32768  6a4a
> collection-16-527379200342368703.wt                          262144  5b2c
> collection-17-527379200342368703.wt                           32768  ae10
> index-18-527379200342368703.wt                                32768  500b
> collection-21-527379200342368703.wt                           32768  a6cb
> index-22-527379200342368703.wt                                32768  9086
> collection-25-527379200342368703.wt                           32768  e043
> index-26-527379200342368703.wt                                32768  4a0c
43c43
< index-30-527379200342368703.wt                                12288  29b6
---
> index-30-527379200342368703.wt                                12288  50b9
45,50c45,50
< index-34-527379200342368703.wt                                12288  3c66
< collection-37-527379200342368703.wt                           20480  b3c8
< index-38-527379200342368703.wt                                20480  2bd4
< index-40-527379200342368703.wt                                12288  d97a
< collection-43-527379200342368703.wt                           32768  ea1d
< index-44-527379200342368703.wt                                32768  3182
---
> index-34-527379200342368703.wt                                12288  02cc
> collection-37-527379200342368703.wt                           36864  92e4
> index-38-527379200342368703.wt                                12288  9d27
> index-40-527379200342368703.wt                                36864  7788
> collection-43-527379200342368703.wt                           32768  2eb4
> index-44-527379200342368703.wt                                32768  69b6

→すべてのファイルのチェックサムは違うがサイズは同じものが多い(サイズが違うものもある)

・各ファイルの最初の一行だけ羅列してみる

[pc3_centos7_k2]$ dbPath=0;find /mnt/rs0_${dbPath} -type f|while read X;do head -1 $X|awk '{printf "%62-s%16s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/rs0_${dbPath}.txt

[pc3_centos7_k2]$ cat /tmp/rs0_${dbPath}.txt
  d41d8cd98f00b204e9800998ecf8427e
OpenSSL                                                        11:16:13.198  7350261b20b1036915ea9e3173f459a5
                                                                                62111050ef856d7de96ba9f55c392dbe
                                                                                62111050ef856d7de96ba9f55c392dbe
                                                                                f90655a25631ff29a3ae815a7d33644f
                                                                                11b3f8037f43323a865d6019a61bd33d
                                                                                71cd5f6dc487178529f1a95e1d815395
                                                                                2f0cbf8ad57cb22e645f5d4dbb10d18c
                                                                         濱  絨930014edbef20efd007eb9a3ed9abe9
                                                                                bbcda293241c599ada00884c3a02d7bd
                                                                                766ba51193e90f91120b6b0921c1dd81
                                                                                849cab3dd1c6d083286d5aaed241a75f
                                                                              ---(略)---
                                                                                1086d4291971d787f34d9574fabb65cc
                                                                                4991dc5a05d08793b5428e49d5d53db3
end                                                           augetDefaultRWConcernZ  acb5ad2c8af970e961392bfb93b990ee
OpenSSL                                                    localUpdateWallClockTime  f8cb95abf812db7b01ef29e4f82aebc5
OpenSSL                                                    localUpdateWallClockTime  f8e3e95891d948947992d4f5068c376d
OpenSSL                                                    localUpdateWallClockTime  d1e2e1fdd704c4462d2f4be616dd6329
OpenSSL                                                    localUpdateWallClockTime  d07c5abdd9b4e2c21861b3346a09848a
OpenSSL                                                    localUpdateWallClockTime  9fb08b994bda5608a6c2e80d61787bca
OpenSSL                                                    localUpdateWallClockTime  03b89893a4e3ae400b3f0ca2f0b84a77
OpenSSL                                                    localUpdateWallClockTime  6a6d97ca7ef9183288f4d84208027872
OpenSSL                                                    localUpdateWallClockTime  1cc1eb32be64e74245beb6c41d7048fb
OpenSSL                                                    localUpdateWallClockTime  2c4a87676dccef823f52db5d46899ad5
                                                                                ab481a2f00cec080850ee05e41009cfb
                                                                                933747cdfbf73b018a4c4bbf07311f29
                                                                                cb159d66cfb13a02445eb4ec6663d1da
                                    ---(略)---
                                                                                d07f5e962e8cef0b9c051cf58333549f
                                                                                371b59d110cd2cbf0c23b8ee93d69dcf
                                                                                132b7e9e60ad83f2853e17a5f69905ca

→ほとんどのファイルがタイムスタンプの値と絡めて暗号化されてる臭い?

 

[着眼点9]

レプリカセット内のプライマリメンバーのdbPathをLVMスナップショットまたはxfs_freeze+syncを使ってオンラインバックアップしたものをリストアできるか?

 ・xfs_freezeコマンドでフリーズしたファイルシステムでフリーズ発行時点でストレージに同期

  されてないDirtyキャッシュはフリーズ発行以後継続してストレージに同期されることを確認

  する。

  →xfs_freezeでファイルシステムをフリーズ中もストレージに継続して同期された。

   ※例によってddコマンドで1分以上zeroを流し込んで途中でxfs_freezeしてDirty

    キャッシュが掃けていくのを確認。またsyncコマンドでflashされるのを確認。

 ・プライマリのdbPathをxfs_freezeとsyncを使ってオンラインバックアップしてリストアできるこ

  とを確認する。

 

【初期状態】

・レプリカセットrs0の3メンバーを起動する(最初に起動したTCP27018のインスタンスがプライマリになる)

[pc3_centos7_k2]$ mongod --replSet rs0 --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 --oplogSize 128 & sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27020 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_2 --oplogSize 128 & sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27019 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_1 --oplogSize 128 &

[pc3_centos7_k3]$ mongo --host 192.168.101.32:27018

rs0:PRIMARY> use chinko
rs0:PRIMARY> db.chinko0.find()

{ "_id" : ObjectId("5f9627f16d1c8506b411e9a9"), "name" : "ぷにすけ", "age" : 100 }
{ "_id" : ObjectId("5f985dad6a505ead7024b452"), "name" : "うんちっち", "age" : 13 }
{ "_id" : ObjectId("5f98645278b59d1090e87dc2"), "name" : "ぷっぷに", "age" : 14 }

・/mnt/rs0_0をxfs_freezeとsyncで静止点を作ってバックアップ

[pc3_centos7_k2]$ xfs_freeze -f /mnt
[pc3_centos7_k2]$ sync
[pc3_centos7_k2]$ sync

[pc3_centos7_k2]$ grep Dirty /proc/meminfo
Dirty:                48 kB

[pc3_centos7_k2]$ rsync -auvh /mnt/rs0_0/* /tmp/tmp/rs0_0
sending incremental file list
created directory /tmp/tmp/rs0_0
rs0_0/
rs0_0/WiredTiger
rs0_0/WiredTiger.lock
---(略)---
rs0_0/journal/WiredTigerPreplog.0000000001
rs0_0/journal/WiredTigerPreplog.0000000002

sent 338.48M bytes  received 1.18K bytes  135.39M bytes/sec
total size is 338.39M  speedup is 1.00

[pc3_centos7_k2]$ xfs_freeze -u /mnt

・レプリカセットのデータを変更

[pc3_centos7_k3]$ mongo --host 192.168.101.32:27018

rs0:PRIMARY> use chinko

rs0:PRIMARY> db.chinko0.remove({name:"ぷにすけ"})

rs0:PRIMARY> db.chinko0.insertOne({name:"ぴょろりん",age:24})

rs0:PRIMARY> db.chinko0.find()
{ "_id" : ObjectId("5f985dad6a505ead7024b452"), "name" : "うんちっち", "age" : 13 }
{ "_id" : ObjectId("5f98645278b59d1090e87dc2"), "name" : "ぷっぷに", "age" : 14 }
{ "_id" : ObjectId("5f986f5a1a54512c041e703e"), "name" : "ぴょろりん", "age" : 24 }

・レプリカセットの全メンバーを停止してバックアップからリストア

※念のため1分以上待つ

[pc3_centos7_k2]$ pkill mongod

rsyncでリストアする場合は、タイムスタンプが古いデータで新しいデータを上書きしないので最新のデータを削除する

[pc3_centos7_k2]$ rm -rf /mnt/rs0_0/*
[pc3_centos7_k2]$ rm -rf /tmp/rs0_1/*
[pc3_centos7_k2]$ rm -rf /tmp/rs0_2/*

[pc3_centos7_k2]$ rsync -auvh --delete /tmp/tmp/rs0_0/* /mnt/rs0_0
----(略)----

[pc3_centos7_k2]$ rsync -auvh --delete /tmp/tmp/rs0_0/* /tmp/rs0_1
----(略)----
[pc3_centos7_k2]$ rsync -auvh --delete /tmp/tmp/rs0_0/* /tmp/rs0_2
----(略)----

・レプリカセットrs0の3メンバーを起動する(最初に起動したTCP27018のインスタンスがプライマリになる)

[pc3_centos7_k2]$ mongod --replSet rs0 --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 --oplogSize 128 & sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27020 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_2 --oplogSize 128 & sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27019 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_1 --oplogSize 128 &

[pc3_centos7_k3]$ mongo --host 192.168.101.32:27018

rs0:PRIMARY> use chinko

rs0:PRIMARY> db.chinko0.find()
{ "_id" : ObjectId("5f9627f16d1c8506b411e9a9"), "name" : "ぷにすけ", "age" : 100 }
{ "_id" : ObjectId("5f985dad6a505ead7024b452"), "name" : "うんちっち", "age" : 13 }
{ "_id" : ObjectId("5f98645278b59d1090e87dc2"), "name" : "ぷっぷに", "age" : 14 }

→リストア成功

つまり、オンラインバックアップのソースはセカンダリでもプライマリでも取得できた。

・ちなみにxfs_freezeで静止点を取らずにバックアップした場合リストアできるか?

※以前は失敗したけど念のためもう一回

[pc3_centos7_k2]$ rm -rf /tmp/tmp/rs0_0

[pc3_centos7_k2]$ rsync -auvh --delete /mnt/rs0_0/* /tmp/tmp/rs0_0

↑静止点を取らずにバックアップ

rs0:PRIMARY> db.chinko0.remove({name:"ぷにすけ"})
rs0:PRIMARY> db.chinko0.insertOne({name:"ぴょろりん",age:24})
rs0:PRIMARY> db.chinko0.find()
{ "_id" : ObjectId("5f985dad6a505ead7024b452"), "name" : "うんちっち", "age" : 13 }
{ "_id" : ObjectId("5f98645278b59d1090e87dc2"), "name" : "ぷっぷに", "age" : 14 }
{ "_id" : ObjectId("5f98748e63667519527babec"), "name" : "ぴょろりん", "age" : 24 }

※念のため1分以上待つ

[pc3_centos7_k2]$ pkill mongod

[pc3_centos7_k2]$ rm -rf /mnt/rs0_0
[pc3_centos7_k2]$ rm -rf /tmp/rs0_1
[pc3_centos7_k2]$ rm -rf /tmp/rs0_2

[pc3_centos7_k2]$ rsync -auvh --delete /tmp/tmp/rs0_0/* /mnt/rs0_0

[pc3_centos7_k2]$ rsync -auvh --delete /tmp/tmp/rs0_0/* /tmp/rs0_1

[pc3_centos7_k2]$ rsync -auvh --delete /tmp/tmp/rs0_0/* /tmp/rs0_2

[pc3_centos7_k2]$ mongod --replSet rs0 --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 --oplogSize 128 & sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27020 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_2 --oplogSize 128 & sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27019 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_1 --oplogSize 128 &

[pc3_centos7_k3]$ mongo --host 192.168.101.32:27018

rs0:PRIMARY> use chinko
rs0:PRIMARY> db.chinko0.find()

{ "_id" : ObjectId("5f9627f16d1c8506b411e9a9"), "name" : "ぷにすけ", "age" : 100 }
{ "_id" : ObjectId("5f985dad6a505ead7024b452"), "name" : "うんちっち", "age" : 13 }
{ "_id" : ObjectId("5f98645278b59d1090e87dc2"), "name" : "ぷっぷに", "age" : 14 }

→リストア成功したw

でもたぶん静止点を取ってバックアップするべきだと思う。Dirtyキャッシュがフラッシュするかどうかは書き込み負荷やタイミングによるので。

【わかったこと】

・オンラインバックアップのソースはセカンダリでもプライマリでも取得できる。

・xfs_freeze中でもページキャッシュからストレージへの同期は継続的に行われる。

・オンラインバックアップにおける静止点作成はLVMスナップショットとxfs_freezeのいずれでも可能。

・オンラインバックアップは静止点を作成しなくても成功してしまうことがある。

 

【オフラインバックアップの方法】

①バックアップのソースとして使うセカンダリメンバーをプライマリからrs.remove()コマンドでレプリカセットから削除

②上記の元メンバーのインスタンスをkillコマンドで停止

③上記の元メンバーのdbPathディレクトリをバックアップ

④バックアップが終わったら上記の元メンバーをレプリカセットとして起動(--replSetオプションを付けて起動)

⑤プライマリからrs.add()コマンドなどで元メンバーをレプリカセットに復帰

  ※MongoDBいじり 3台構成のレプリカセット その2参照

 

【オンラインバックアップの方法】(LVMスナップショットを利用)

※前提としてバックアップのソースとして使うメンバ(プライマリとセカンダリどちらも可能だけど負荷が少ないセカンダリを使うのがセオリー)のdbPathディレクトリはLVM論理ボリューム上に配置

①バックアップのソースとして使うメンバーのdbPathが配置されているLVM論理ボリュームのスナップショットを取得

 ※MongoDB(のwiredTiger?)はチェックポイント以外はデータベースをディスクに書き込まな

  い 

 ※チェックポイント(デフォルト60s周期)時点のデータは整合性が保証される。

 ※チェックポイント以外にデータは(デフォルトで?)100msごとにjournalに先行書き込みさ

  れる

 ※チェックポイント書き込み中にインスタンスを強制停止した場合にディスク未反映のデー

  タは書き込み済みのjournalからロールフォワードされて回復する

 ※journal書き込み中にインスタンスを強制停止した場合は整合性が取れる部分まではロ

  ールフォワードして整合性が取れない(中途半端な部分)は切り捨てる(たぶん)

 ※DirtyキャッシュはLVMスナップショットの機能でフラッシュされる

②上記スナップショットを適当なマウントポイントにマウント

③上記マウントポイントをソースとしてdbPathのバックアップを取得

【オンラインバックアップの方法】(xfs_freezeとsyncを利用)

①バックアップのソースとして使うメンバーのdbPathが配置されているファイルシステムを

  xfs_freezeでページキャッシュへの書き込みを一時停止してsyncコマンドを数発撃って

  Dirtyキャッシュを手作業でフラッシュさせる

dbPathディレクトリのバックアップを取得

③xfs_freezeを解除

【リストアの方法】

※オンラインバックアップとオフラインバックアップで共通

①レプリカセットの全メンバーのインスタンスをkillコマンドで停止

②レプリカセットの全メンバーのdbPathディレクトリを取得したバックアップで上書き

 ※rsyncでバックアップをコピー元、dbPathディレクトリをコピー先にしてもリストアはされ

  ないので注意。rsyncはタイムスタンプが古い物で新しい物を上書きしないので。

  rsyncでリストアする場合は、現行dbPathディレクトリの中身を一旦全部削除して行えば

  リストアされる

 ※※重要※※

  必ずバックアップを全メンバーのdbPathディレクトリを取得したバックアップで上書きする。

  もし、全メンバーではなく、一部のメンバーのdbPathディレクトリだけをバックアップで上

  書きしても、レプリカセットとして起動した場合、リストア直前のデータになる。(リストアは

  失敗する)。とりわけプライマリとして起動するメンバー(最初に起動するメンバー)の

  dbPathディレクトリだけをバックアップで上書きしてレプリカセットの全メンバーを起動した

  としても最初に起動したメンバーがプライマリにはなるが、最初の同期の際に他のセカン

  ダリメンバーのデータが逆同期してリストア直前のデータになる。

③レプリカセットの全メンバーを起動  

 

[着眼点10]

レプリカセット内のプライマリメンバーのdbPathをLVMスナップショットまたはxfs_freeze+syncを使ってオンラインバックアップする際、コピーコマンドとしてrsyncを使った場合、前回のバックアップに重ねてコピーする場合、差分バックアップになるか?それとも毎回フルバックアップとなるか?

 ※書き込みされたcollectionと書き込みされなかったcollectionを用意して、書き込みされた

   collectionファイルのみがrsyncのコピー対象になるか確認する。

→時間切れのため保留

[着眼点11]

xfs_freeze中にチェックポイント(デフォルトで60sおき)や、journal書き込み(デフォルトで100msおき)が発生した場合、当然ファイルシステムへの書き込み禁止になるが、これらのプログラムはファイルシステムへの書き込み禁止を受けてどういう挙動をするのか?

たとえば、決められた時間間隔でリトライしてタイムアウト時間に達したらエラーになるとか。

永久リトライするとか。

→時間切れのため保留

[着眼点12]

その他の着眼点

・mongod.logに何かwariningやerrorは出ないか?

[pc3_centos7_k2]$ egrep -i "error|warn" /var/log/mongodb/mongod.log

---(略)---

{"t":{"$date":"2020-10-26T06:12:57.323+09:00"},"s":"W",  "c":"CONTROL",  "id":20698,   "ctx":"main","msg":"***** SERVER RESTARTED *****","tags":["startupWarnings"]}
{"t":{"$date":"2020-10-26T06:12:57.414+09:00"},"s":"E",  "c":"STORAGE",  "id":20557,   "ctx":"initandlisten","msg":"DBException in initAndListen, terminating","attr":{"error":"Location28596: Unable to determine status of lock file in the data directory /var/lib/mongo: boost::filesystem::status: Permission denied: \"/var/lib/mongo/mongod.lock\""}}

・DBデータに何か気づくことはないか?

[pc3_centos7_k2]$ ls -lRAh /tmp/rs0_2
/tmp/rs0_2:
合計 1.1M
-rw-------. 1 root root   47 10月 26 06:14 WiredTiger
-rw-------. 1 root root   21 10月 26 06:14 WiredTiger.lock
-rw-------. 1 root root 1.3K 10月 26 10:26 WiredTiger.turtle
-rw-------. 1 root root 124K 10月 26 10:26 WiredTiger.wt
-rw-------. 1 root root  36K 10月 26 10:16 WiredTigerHS.wt
-rw-------. 1 root root  32K 10月 26 10:13 _mdb_catalog.wt
-rw-------. 1 root root  36K 10月 26 10:14 collection-0-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:16 collection-10-527379200342368703.wt
-rw-------. 1 root root  64K 10月 26 10:26 collection-16-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 collection-17-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:26 collection-2-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 collection-21-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 collection-25-527379200342368703.wt
-rw-------. 1 root root 4.0K 10月 26 10:13 collection-29-527379200342368703.wt
-rw-------. 1 root root 4.0K 10月 26 10:13 collection-33-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:23 collection-37-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:15 collection-4-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 collection-43-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:15 collection-6-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:14 collection-8-527379200342368703.wt
drwx------. 2 root root  239 10月 26 10:26 diagnostic.data
-rw-------. 1 root root  36K 10月 26 10:14 index-1-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-11-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-18-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-22-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-26-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-3-527379200342368703.wt
-rw-------. 1 root root  12K 10月 26 10:24 index-30-527379200342368703.wt
-rw-------. 1 root root  12K 10月 26 10:13 index-34-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:23 index-38-527379200342368703.wt
-rw-------. 1 root root  36K 10月 26 10:23 index-40-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-44-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-5-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-7-527379200342368703.wt
-rw-------. 1 root root  32K 10月 26 10:13 index-9-527379200342368703.wt
drwx------. 2 root root  110 10月 26 10:14 journal
-rw-------. 1 root root    5 10月 26 10:13 mongod.lock
-rw-------. 1 root root  36K 10月 26 10:26 sizeStorer.wt
-rw-------. 1 root root  114 10月 26 06:14 storage.bson

/tmp/rs0_2/diagnostic.data:
合計 2.7M
-rw-------. 1 root root 108K 10月 26 06:15 metrics.2020-10-25T21-14-43Z-00000
-rw-------. 1 root root 120K 10月 26 06:19 metrics.2020-10-25T21-17-02Z-00000
-rw-------. 1 root root 2.2M 10月 26 09:20 metrics.2020-10-25T21-19-16Z-00000
-rw-------. 1 root root  75K 10月 26 09:45 metrics.2020-10-26T00-43-42Z-00000
-rw-------. 1 root root 173K 10月 26 10:24 metrics.2020-10-26T01-13-26Z-00000
-rw-------. 1 root root  23K 10月 26 10:26 metrics.interim

/tmp/rs0_2/journal:
合計 300M
-rw-------. 1 root root 100M 10月 26 10:26 WiredTigerLog.0000000005
-rw-------. 1 root root 100M 10月 26 10:13 WiredTigerPreplog.0000000001
-rw-------. 1 root root 100M 10月 26 10:13 WiredTigerPreplog.0000000002

MongoDBいじり 3台構成のレプリカセット その1のつづき

 

【いじり7】

「レプリカセットメンバーとしてインスタンスを起動した時」と、「各メンバーをスタンドアロンでインスタンスを起動した時」で、DBデータに相違点があるか?

 

1.スタンドアロンでmongodbインスタンスを起動

[pc3_centos7_k2]$ mkdir /tmp/0_0

[pc3_centos7_k2]$ mongod --port 27021 --bind_ip localhost,192.168.101.32 --dbpath /tmp/0_0 &

1-1.スタンドアロン状態でただ起動してるだけでクライアントからのアクセス無し

[pc3_centos7_k2]$ date;find /tmp/0_0 -type f|while read X;do ls -lh $X|awk '{printf "%59-s%6s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/0_0_`date "+%H:%M:%S"`.txt
2020年 10月 23日 金曜日 16:48:42 JST
[pc3_centos7_k2]$ date;find /tmp/0_0 -type f|while read X;do ls -lh $X|awk '{printf "%59-s%6s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/0_0_`date "+%H:%M:%S"`.txt
2020年 10月 23日 金曜日 16:51:31 JST

・起動しっぱなしでただ3分間経過しただけでなんにもしてないDBデータどうしを比較。

[pc3_centos7_k2]$ diff 0_0_16:48:42.txt 0_0_16:51:31.txt
2c2
< /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  59e1694f9004e97a86687eae1ecc960f
---
> /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  d4524257548ae55279a8e825e3896bd1
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  2f546d4ba522f052912ff99276f561fb
< /tmp/0_0/WiredTiger.turtle                                   1.3K  80d90079f3c6c024964c5710b1aced9c
---
> /tmp/0_0/WiredTiger.wt                                        60K  e818b4e92c7503b73e8ddc52b3eee890
> /tmp/0_0/WiredTiger.turtle                                   1.3K  b632a62cb6b6a15e0623c7cdfac6f5af
21,22c21,22
< /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000   94K  7f3b82c9ba8facc185e220f663c4c522
< /tmp/0_0/diagnostic.data/metrics.interim                      18K  04c9faa935d1678a347d9d6b2e7e18e9
---
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000  114K  b800906cc08a3358ad636f9445f26b70
> /tmp/0_0/diagnostic.data/metrics.interim                      15K  72c28b6424d15e7abd1d201e85ee9a93

→上記のように何にもしてないのに下記の5ファイルに勝手に変更がかかる

journal/WiredTigerLog.0000000002  

WiredTiger.wt

WiredTiger.turtle    

diagnostic.data/metrics.2020-10-23T07-28-58Z-00000

diagnostic.data/metrics.interim  

 

1-2.スタンドアロン状態のインスタンスにクライアントからの接続直後

[pc3_centos7_k3]$ mongo --host 192.168.101.32 --port 27021

[pc3_centos7_k2]$ date;find /tmp/0_0 -type f|while read X;do ls -lh $X|awk '{printf "%59-s%6s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/0_0_`date "+%H:%M:%S"`.txt
2020年 10月 23日 金曜日 17:02:14 JST

[pc3_centos7_k2]$ diff 0_0_16:48:42.txt 0_0_17:02:14.txt
2c2
< /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  59e1694f9004e97a86687eae1ecc960f
---
> /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  ebfaf7c93a4829e1268957012a34291a
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  2f546d4ba522f052912ff99276f561fb
< /tmp/0_0/WiredTiger.turtle                                   1.3K  80d90079f3c6c024964c5710b1aced9c
---
> /tmp/0_0/WiredTiger.wt                                        60K  43f6e375b4af433019ca54acd9db02f3
> /tmp/0_0/WiredTiger.turtle                                   1.3K  15471d8ef1ab9dea4034961823460a82
21,22c21,22
< /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000   94K  7f3b82c9ba8facc185e220f663c4c522
< /tmp/0_0/diagnostic.data/metrics.interim                      18K  04c9faa935d1678a347d9d6b2e7e18e9
---
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000  151K  1afc9079c737b41b58f2833c67630861
> /tmp/0_0/diagnostic.data/metrics.interim                      16K  a76760b082d9b9ddb0ee0a6323bb9452

→変更がかかってるファイルのメンツはクライアントからアクセスが無い時と同じ

 

1-3.スタンドアロン状態のインスタンスをkillで終了後

[pc3_centos7_k2]$ kill 15127

----(略)----

[pc3_centos7_k2]$ date;find /tmp/0_0 -type f|while read X;do ls -lh $X|awk '{printf "%59-s%6s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/0_0_`date "+%H:%M:%S"`.txt
2020年 10月 23日 金曜日 17:09:41 JST
[pc3_centos7_k2]$ diff 0_0_16:48:42.txt 0_0_17:09:41.txt
1,2c1,2
< /tmp/0_0/mongod.lock                                            6  0d287036f592eff3b90b3b43afdf9284
< /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  59e1694f9004e97a86687eae1ecc960f
---
> /tmp/0_0/mongod.lock                                            0  d41d8cd98f00b204e9800998ecf8427e
> /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  879d26e9f782d47b5637ed19cbbef66d
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  2f546d4ba522f052912ff99276f561fb
< /tmp/0_0/WiredTiger.turtle                                   1.3K  80d90079f3c6c024964c5710b1aced9c
---
> /tmp/0_0/WiredTiger.wt                                        60K  b770bae7bc900f2d800fdc20498fb831
> /tmp/0_0/WiredTiger.turtle                                   1.3K  5602c6a1be93be63170c5df392aea0fd
10c10
< /tmp/0_0/sizeStorer.wt                                        36K  9823249038e82a2d227f726d10ec4672
---
> /tmp/0_0/sizeStorer.wt                                        36K  b3fad8318d9abe14e3f66de2647062dd
17,19c17,19
< /tmp/0_0/collection-4-932399827175288110.wt                  4.0K  9af97f7280e40075ffb0575fe2baebcc
< /tmp/0_0/index-5-932399827175288110.wt                       4.0K  9af97f7280e40075ffb0575fe2baebcc
< /tmp/0_0/index-6-932399827175288110.wt                       4.0K  9af97f7280e40075ffb0575fe2baebcc
---
> /tmp/0_0/collection-4-932399827175288110.wt                   20K  1532ff93b2c967cfc79619588d39354d
> /tmp/0_0/index-5-932399827175288110.wt                        20K  8c5dbcab0f234fab955f1b25436ccf33
> /tmp/0_0/index-6-932399827175288110.wt                        20K  8fedf958d23b057fa90648577c4952ee
21,22c21
< /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000   94K  7f3b82c9ba8facc185e220f663c4c522
< /tmp/0_0/diagnostic.data/metrics.interim                      18K  04c9faa935d1678a347d9d6b2e7e18e9
---
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000  188K  be9c5451db5f0dd6c3edfa687fc0c22a

→変更がかかってるファイルのメンツが5つ増えた

(ただ起動してるだけとの差分はオレンジと赤)

※collection-4とindex-5,index-6は管理用データベースのもの(ユーザデータがまだないので)

1-4.スタンドアロン状態のインスタンスをもう一回起動

[pc3_centos7_k2]$ mongod --port 27021 --bind_ip localhost,192.168.101.32 --dbpath /tmp/0_0 &

[pc3_centos7_k2]$ date;find /tmp/0_0 -type f|while read X;do ls -lh $X|awk '{printf "%59-s%6s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/0_0_`date "+%H:%M:%S"`.txt
2020年 10月 23日 金曜日 17:23:34 JST

初回起動したときとの差分

[pc3_centos7_k2]$ diff 0_0_16:48:42.txt 0_0_17:23:34.txt
1,2c1,2
< /tmp/0_0/mongod.lock                                            6  0d287036f592eff3b90b3b43afdf9284
< /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  59e1694f9004e97a86687eae1ecc960f
---
> /tmp/0_0/mongod.lock                                            6  5094de2b44ddc828d26d19d9eac1cf74
> /tmp/0_0/journal/WiredTigerLog.0000000003                    100M  0b95db517ea40bc47aaeccaadee4de11
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  2f546d4ba522f052912ff99276f561fb
< /tmp/0_0/WiredTiger.turtle                                   1.3K  80d90079f3c6c024964c5710b1aced9c
---
> /tmp/0_0/WiredTiger.wt                                        60K  caf870225f155b99fb3abb7e979e877e
> /tmp/0_0/WiredTiger.turtle                                   1.3K  1d76609596846c565703a52ca7993f80
10c10
< /tmp/0_0/sizeStorer.wt                                        36K  9823249038e82a2d227f726d10ec4672
---
> /tmp/0_0/sizeStorer.wt                                        36K  4db1e6ce5188d8b10b7718f8d7496e57
15,19c15,19
< /tmp/0_0/collection-2-932399827175288110.wt                   36K  354b57d646e69635a8bafd0941266090
< /tmp/0_0/index-3-932399827175288110.wt                        36K  21ae0e4b6da52cf2a5091a2fd5e4a59a
< /tmp/0_0/collection-4-932399827175288110.wt                  4.0K  9af97f7280e40075ffb0575fe2baebcc
< /tmp/0_0/index-5-932399827175288110.wt                       4.0K  9af97f7280e40075ffb0575fe2baebcc
< /tmp/0_0/index-6-932399827175288110.wt                       4.0K  9af97f7280e40075ffb0575fe2baebcc
---
> /tmp/0_0/collection-2-932399827175288110.wt                   36K  f24a9c6ad5cfd552b7633dff05999e96
> /tmp/0_0/index-3-932399827175288110.wt                        36K  f326b075ec720a2e4d8f60ac7ce99bc7
> /tmp/0_0/collection-4-932399827175288110.wt                   20K  1532ff93b2c967cfc79619588d39354d
> /tmp/0_0/index-5-932399827175288110.wt                        20K  8c5dbcab0f234fab955f1b25436ccf33
> /tmp/0_0/index-6-932399827175288110.wt                        20K  8fedf958d23b057fa90648577c4952ee
21,22c21,23
< /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000   94K  7f3b82c9ba8facc185e220f663c4c522
< /tmp/0_0/diagnostic.data/metrics.interim                      18K  04c9faa935d1678a347d9d6b2e7e18e9
---
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000  188K  be9c5451db5f0dd6c3edfa687fc0c22a
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T08-20-57Z-00000   35K  c5783cba0f8b94cca9e47a18f5bb5021
> /tmp/0_0/diagnostic.data/metrics.interim                      15K  1bd0907f9a704af0dab29bd51d961bd4

(初回起動したときとの差分は黄緑と緑)

journal/WiredTigerLog.000000000番号の「番号」が1つ繰り上がった

 

前回killした直後との差分

[pc3_centos7_k2]$ diff 0_0_17:09:41.txt 0_0_17:23:34.txt
1,2c1,2
< /tmp/0_0/mongod.lock                                            0  d41d8cd98f00b204e9800998ecf8427e
< /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  879d26e9f782d47b5637ed19cbbef66d
---
> /tmp/0_0/mongod.lock                                            6  5094de2b44ddc828d26d19d9eac1cf74
> /tmp/0_0/journal/WiredTigerLog.0000000003                    100M  0b95db517ea40bc47aaeccaadee4de11
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  b770bae7bc900f2d800fdc20498fb831
< /tmp/0_0/WiredTiger.turtle                                   1.3K  5602c6a1be93be63170c5df392aea0fd
---
> /tmp/0_0/WiredTiger.wt                                        60K  caf870225f155b99fb3abb7e979e877e
> /tmp/0_0/WiredTiger.turtle                                   1.3K  1d76609596846c565703a52ca7993f80
10c10
< /tmp/0_0/sizeStorer.wt                                        36K  b3fad8318d9abe14e3f66de2647062dd
---
> /tmp/0_0/sizeStorer.wt                                        36K  4db1e6ce5188d8b10b7718f8d7496e57
15,16c15,16
< /tmp/0_0/collection-2-932399827175288110.wt                   36K  354b57d646e69635a8bafd0941266090
< /tmp/0_0/index-3-932399827175288110.wt                        36K  21ae0e4b6da52cf2a5091a2fd5e4a59a
---
> /tmp/0_0/collection-2-932399827175288110.wt                   36K  f24a9c6ad5cfd552b7633dff05999e96
> /tmp/0_0/index-3-932399827175288110.wt                        36K  f326b075ec720a2e4d8f60ac7ce99bc7
21a22,23
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T08-20-57Z-00000   35K  c5783cba0f8b94cca9e47a18f5bb5021
> /tmp/0_0/diagnostic.data/metrics.interim                      15K  1bd0907f9a704af0dab29bd51d961bd4

 

/tmp/0_0/diagnostic.data/metrics.interim はインスタンスが起動してる時しか居ない?

 

ちなみに一回killしてから起動した後のファイル構成は下記の通り

[pc3_centos7_k2]$ date;ls -lhAR /tmp/0_0/
2020年 10月 23日 金曜日 17:51:44 JST
/tmp/0_0/:
合計 312K
-rw-------. 1 root root   47 10月 23 16:28 WiredTiger
-rw-------. 1 root root   21 10月 23 16:28 WiredTiger.lock
-rw-------. 1 root root 1.3K 10月 23 17:50 WiredTiger.turtle
-rw-------. 1 root root  60K 10月 23 17:50 WiredTiger.wt
-rw-------. 1 root root 4.0K 10月 23 17:20 WiredTigerHS.wt
-rw-------. 1 root root  20K 10月 23 17:20 _mdb_catalog.wt
-rw-------. 1 root root  20K 10月 23 17:20 collection-0-932399827175288110.wt
-rw-------. 1 root root  36K 10月 23 17:21 collection-2-932399827175288110.wt
-rw-------. 1 root root  24K 10月 23 17:35 collection-4-932399827175288110.wt
drwx------. 2 root root  155 10月 23 17:51 diagnostic.data
-rw-------. 1 root root  20K 10月 23 17:20 index-1-932399827175288110.wt
-rw-------. 1 root root  36K 10月 23 17:21 index-3-932399827175288110.wt
-rw-------. 1 root root  24K 10月 23 17:35 index-5-932399827175288110.wt
-rw-------. 1 root root  12K 10月 23 17:50 index-6-932399827175288110.wt
drwx------. 2 root root  110 10月 23 17:20 journal
-rw-------. 1 root root    6 10月 23 17:20 mongod.lock
-rw-------. 1 root root  36K 10月 23 17:34 sizeStorer.wt
-rw-------. 1 root root  114 10月 23 16:28 storage.bson

/tmp/0_0/diagnostic.data:
合計 372K
-rw-------. 1 root root  33K 10月 23 16:28 metrics.2020-10-23T07-28-48Z-00000
-rw-------. 1 root root 188K 10月 23 17:08 metrics.2020-10-23T07-28-58Z-00000
-rw-------. 1 root root 128K 10月 23 17:46 metrics.2020-10-23T08-20-57Z-00000
-rw-------. 1 root root  19K 10月 23 17:51 metrics.interim

/tmp/0_0/journal:
合計 300M
-rw-------. 1 root root 100M 10月 23 17:50 WiredTigerLog.0000000003
-rw-------. 1 root root 100M 10月 23 17:20 WiredTigerPreplog.0000000001
-rw-------. 1 root root 100M 10月 23 17:20 WiredTigerPreplog.0000000002

 

1-5.スタンドアロン状態のインスタンスをもう一回killして起動(しつこいw)

[pc3_centos7_k2]$ kill 16704;sleep 1;mongod --port 27021 --bind_ip localhost,192.168.101.32 --dbpath /tmp/0_0 &

・初回起動したときと比較

[pc3_centos7_k2]$ diff 0_0_16:48:42.txt 0_0_17:58:34.txt
1,2c1,2
< /tmp/0_0/mongod.lock                                            6  0d287036f592eff3b90b3b43afdf9284
< /tmp/0_0/journal/WiredTigerLog.0000000002                    100M  59e1694f9004e97a86687eae1ecc960f
---
> /tmp/0_0/mongod.lock                                            6  90715fb9db0771823073f06d8290e7ae
> /tmp/0_0/journal/WiredTigerLog.0000000004       100M  2a370038567484aebf152b084125d2cc
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  2f546d4ba522f052912ff99276f561fb
< /tmp/0_0/WiredTiger.turtle                                   1.3K  80d90079f3c6c024964c5710b1aced9c
---
> /tmp/0_0/WiredTiger.wt                                        60K  e422e233cca1000a7233c3e13cf899d0
> /tmp/0_0/WiredTiger.turtle                                   1.3K  c08caf991e884acc644ab803ccc41f85
10c10
< /tmp/0_0/sizeStorer.wt                                        36K  9823249038e82a2d227f726d10ec4672
---
> /tmp/0_0/sizeStorer.wt                                        36K  8fa6b2fa78909ea0df44ae3783709180
15,19c15,19
< /tmp/0_0/collection-2-932399827175288110.wt                   36K  354b57d646e69635a8bafd0941266090
< /tmp/0_0/index-3-932399827175288110.wt                        36K  21ae0e4b6da52cf2a5091a2fd5e4a59a
< /tmp/0_0/collection-4-932399827175288110.wt                  4.0K  9af97f7280e40075ffb0575fe2baebcc
< /tmp/0_0/index-5-932399827175288110.wt                       4.0K  9af97f7280e40075ffb0575fe2baebcc
< /tmp/0_0/index-6-932399827175288110.wt                       4.0K  9af97f7280e40075ffb0575fe2baebcc
---
> /tmp/0_0/collection-2-932399827175288110.wt                   36K  583f8f1bdd999d809b7a4068f2a0740c
> /tmp/0_0/index-3-932399827175288110.wt                        36K  6a670884e34c9f0583e437b37ea9e327
> /tmp/0_0/collection-4-932399827175288110.wt                   24K  61173f5cc110a668b459e27b45f39bf5
> /tmp/0_0/index-5-932399827175288110.wt                        24K  b122ca04c3ee19fa5e1b1ee7d42e2d06
> /tmp/0_0/index-6-932399827175288110.wt                        12K  fc7788cb3e36891a4ad864a1337d26ef
21,22c21,24
< /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000   94K  7f3b82c9ba8facc185e220f663c4c522
< /tmp/0_0/diagnostic.data/metrics.interim                      18K  04c9faa935d1678a347d9d6b2e7e18e9
---
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T07-28-58Z-00000  188K  be9c5451db5f0dd6c3edfa687fc0c22a
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T08-20-57Z-00000  166K  5cda5796dcfe5c6bef29899684e31e99
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T08-56-49Z-00000   35K  73dfa5d52eb16ab0e99b3375fdecf170
> /tmp/0_0/diagnostic.data/metrics.interim                      13K  a7b80e057f04f54081abb9b334beb2b0

→やはり、journal/WiredTigerLog.0000000004 が繰り上がった。まあいっか。
 

1-6.スタンドアロン状態のインスタンスをkillしてレプリカセットrs1として起動

[pc3_centos7_k2]$ kill 16878;sleep 1;mongod --replSet rs1 --port 27021 --bind_ip localhost,192.168.101.32 --dbpath /tmp/0_0 --oplogSize 128 &
 

[pc3_centos7_k2]$ ps -ef | grep mong[o]
mongod    6858     1  1 10月19 ?      01:02:35 /usr/bin/mongod -f /etc/mongod.conf
root     14277     1  0 11:49 pts/2    00:03:45 mongod --replSet rs0 --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 --oplogSize 128
root     14589     1  0 13:21 pts/2    00:02:13 mongod --replSet rs0 --port 27019 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_1 --oplogSize 128
root     14687     1  0 13:21 pts/2    00:02:12 mongod --replSet rs0 --port 27020 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_2 --oplogSize 128
root     14782 13140  0 13:21 pts/1    00:00:00 mongo --port 27018
root     17056 13159  2 18:09 pts/2    00:00:01 mongod --replSet rs1 --port 27021 --bind_ip localhost,192.168.101.32 --dbpath /tmp/0_0 --oplogSize 128

→起動した。

 

[pc3_centos7_k2]$ date;find /tmp/0_0 -type f|while read X;do ls -lh $X|awk '{printf "%59-s%6s",$9,$5}';md5sum $X|awk '{print " ", $1}';done > /tmp/0_0_`date "+%H:%M:%S"`.txt
2020年 10月 23日 金曜日 18:12:51 JST

・直近にスタンドアロン起動したときと比較

[pc3_centos7_k2]$ diff 0_0_17:58:34.txt 0_0_18:12:51.txt
1,2c1,2
< /tmp/0_0/mongod.lock                                            6  90715fb9db0771823073f06d8290e7ae
< /tmp/0_0/journal/WiredTigerLog.0000000004                    100M  2a370038567484aebf152b084125d2cc
---
> /tmp/0_0/mongod.lock                                            6  d4f8e0b04498606dc38710a35d6e6a8d
> /tmp/0_0/journal/WiredTigerLog.0000000005                    100M  333a2e63c275d95f8f229730a19b6a22
7,8c7,8
< /tmp/0_0/WiredTiger.wt                                        60K  e422e233cca1000a7233c3e13cf899d0
< /tmp/0_0/WiredTiger.turtle                                   1.3K  c08caf991e884acc644ab803ccc41f85
---
> /tmp/0_0/WiredTiger.wt                                        88K  febe4ee9ae3d2a73c65ab8ee753afd4a
> /tmp/0_0/WiredTiger.turtle                                   1.3K  94ae7e77fac0073aac23f18e8aec790f
10,11c10,11
< /tmp/0_0/sizeStorer.wt                                        36K  8fa6b2fa78909ea0df44ae3783709180
< /tmp/0_0/_mdb_catalog.wt                                      20K  9d6f4709572e7a0298ee7c794c655acb
---
> /tmp/0_0/sizeStorer.wt                                        36K  27dc497b80007e548bcc7605af1ded7b
> /tmp/0_0/_mdb_catalog.wt                                      36K  5040c0da2049253841dfaa3fbec06cc3
15,16c15,16
< /tmp/0_0/collection-2-932399827175288110.wt                   36K  583f8f1bdd999d809b7a4068f2a0740c
< /tmp/0_0/index-3-932399827175288110.wt                        36K  6a670884e34c9f0583e437b37ea9e327
---
> /tmp/0_0/collection-2-932399827175288110.wt                   36K  0848f56cae370d58d215744d3b054a8f
> /tmp/0_0/index-3-932399827175288110.wt                        36K  8f25dca010a2796521b03a5734d6da63
19c19
< /tmp/0_0/index-6-932399827175288110.wt                        12K  fc7788cb3e36891a4ad864a1337d26ef
---
> /tmp/0_0/index-6-932399827175288110.wt                        12K  c2a030a9231e711cba598516c96ea382
23,24c23,33
< /tmp/0_0/diagnostic.data/metrics.2020-10-23T08-56-49Z-00000   35K  73dfa5d52eb16ab0e99b3375fdecf170
< /tmp/0_0/diagnostic.data/metrics.interim                      13K  a7b80e057f04f54081abb9b334beb2b0
---
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T08-56-49Z-00000   73K  e1bcca7d9758bda31cf301117bbe6b1b
> /tmp/0_0/diagnostic.data/metrics.2020-10-23T09-09-41Z-00000   22K  9306add4be33bd1ec9bfc21e9996abee
> /tmp/0_0/diagnostic.data/metrics.interim                      18K  b6416fe2b4f00ae2299ed1134da5bffd
> /tmp/0_0/collection-0--769241995958111853.wt                 4.0K  9af97f7280e40075ffb0575fe2baebcc
> /tmp/0_0/index-1--769241995958111853.wt                      4.0K  9af97f7280e40075ffb0575fe2baebcc
> /tmp/0_0/collection-2--769241995958111853.wt                  20K  5935f5df07ef77572c427d33ab13adc8
> /tmp/0_0/index-3--769241995958111853.wt                       20K  07b4b7451e16f8920d2b2f4c4cfa9b06
> /tmp/0_0/collection-4--769241995958111853.wt                  20K  ef1e2c9a1ea9a2acf30bb83360b6ca59
> /tmp/0_0/index-5--769241995958111853.wt                       20K  291839acc6fe670c2fcf56afb0ce0045
> /tmp/0_0/collection-6--769241995958111853.wt                  20K  764a4b31fbc77030699548095a90bccd
> /tmp/0_0/index-7--769241995958111853.wt                       20K  9f565ad030be4974e071a9d15a7b218b

 

ちなみにファイル構成は下記の通り

date;ls -lhAR /tmp/0_0/
2020年 10月 23日 金曜日 18:19:50 JST
/tmp/0_0/:
合計 484K
-rw-------. 1 root root   47 10月 23 16:28 WiredTiger
-rw-------. 1 root root   21 10月 23 16:28 WiredTiger.lock
-rw-------. 1 root root 1.3K 10月 23 18:11 WiredTiger.turtle
-rw-------. 1 root root  88K 10月 23 18:11 WiredTiger.wt
-rw-------. 1 root root 4.0K 10月 23 18:09 WiredTigerHS.wt
-rw-------. 1 root root  36K 10月 23 18:10 _mdb_catalog.wt       ←replicasetにしたらこれが変わった臭い
-rw-------. 1 root root 4.0K 10月 23 18:09 collection-0--769241995958111853.wt
-rw-------. 1 root root  20K 10月 23 18:09 collection-0-932399827175288110.wt
-rw-------. 1 root root  20K 10月 23 18:10 collection-2--769241995958111853.wt
-rw-------. 1 root root  36K 10月 23 18:10 collection-2-932399827175288110.wt
-rw-------. 1 root root  20K 10月 23 18:10 collection-4--769241995958111853.wt
-rw-------. 1 root root  24K 10月 23 17:56 collection-4-932399827175288110.wt
-rw-------. 1 root root  20K 10月 23 18:10 collection-6--769241995958111853.wt
drwx------. 2 root root  216 10月 23 18:19 diagnostic.data
-rw-------. 1 root root 4.0K 10月 23 18:09 index-1--769241995958111853.wt
-rw-------. 1 root root  20K 10月 23 18:09 index-1-932399827175288110.wt
-rw-------. 1 root root  20K 10月 23 18:10 index-3--769241995958111853.wt
-rw-------. 1 root root  36K 10月 23 18:10 index-3-932399827175288110.wt
-rw-------. 1 root root  20K 10月 23 18:10 index-5--769241995958111853.wt
-rw-------. 1 root root  24K 10月 23 17:56 index-5-932399827175288110.wt
-rw-------. 1 root root  12K 10月 23 18:07 index-6-932399827175288110.wt
-rw-------. 1 root root  20K 10月 23 18:10 index-7--769241995958111853.wt
drwx------. 2 root root  110 10月 23 18:09 journal
-rw-------. 1 root root    6 10月 23 18:09 mongod.lock
-rw-------. 1 root root  36K 10月 23 18:11 sizeStorer.wt
-rw-------. 1 root root  114 10月 23 16:28 storage.bson

/tmp/0_0/diagnostic.data:
合計 532K
-rw-------. 1 root root  33K 10月 23 16:28 metrics.2020-10-23T07-28-48Z-00000
-rw-------. 1 root root 188K 10月 23 17:08 metrics.2020-10-23T07-28-58Z-00000
-rw-------. 1 root root 166K 10月 23 17:56 metrics.2020-10-23T08-20-57Z-00000
-rw-------. 1 root root  73K 10月 23 18:07 metrics.2020-10-23T08-56-49Z-00000
-rw-------. 1 root root  62K 10月 23 18:19 metrics.2020-10-23T09-09-41Z-00000

/tmp/0_0/journal:
合計 300M
-rw-------. 1 root root 100M 10月 23 18:12 WiredTigerLog.0000000005
-rw-------. 1 root root 100M 10月 23 18:09 WiredTigerPreplog.0000000001
-rw-------. 1 root root 100M 10月 23 18:09 WiredTigerPreplog.0000000002

 

スタンドアロンで起動した後、レプリカセットで起動した場合、

_mdb_catalog.wt と 管理用?のcollectionである、collection-0-*、collection-2-*、collection-4-* 

管理用?のindexである、index-1-*、index-3-*、index-5-* に下記が追加されたようだ。

collection-0--*、collection-2--*、collection-4--*、index-1--*、index-3--*、index-5--*、

index-7--*

※0~6までの通番の後ろのハイフンが2個連続になってて、あたらしく、index-7--*が加わった。

よくわかんないけど。

 

 【いじり8】 

そもそもスタンドアロンで起動したMongoDBインスタンスにユーザデータを入力して、そのあとレプリカセットとしてインスタンスを起動して何か問題はないか?

※すでになんかのデータを持っているスタンドアロンインスタンスをレプリカセットのメンバーにする方法は下記参照

https://docs.mongodb.com/manual/tutorial/convert-standalone-to-replica-set/

[着眼点1]

上記URLによる正規のやり方を精読して何か気づくことはないか調べる

→ 上記の1.6でやったやり方が正規のやり方だった。

※ただし、新しく追加したメンバーがスタンドアロン状態のときにプライマリのoplogに含まれるデータより新しい変更がスタンドアロンに加えられていた場合、"stateStr"が

"RECOVERING"の状態で保留される。(この場合プライマリのoplogを手動で適用する必要がある?)

※次に、上記の新メンバーの"stateStr"が"RECOVERING"の状態でレプリカセットの全メンバーを落とした後、新メンバーを最初に起動してから他のメンバーを順次起動した場合、

"RECOVERING"だったメンバーは起動後も"RECOVERING"の状態を維持し、2番目に起動したメンバーがプライマリになった。

※レプリカセットのセカンダリのdbPathの中身をxfs_freezeとsyncを使って静止点を取ったうえで上記の新メンバーのdbPathにコピーしてから新メンバーのインスタンスを--replSet rs0オプションを付けてレプリカセットメンバーとして起動した場合、新メンバーの"stateStr"は

"SECONDARY"になった。

※上記のことから、レプリカセットに新しくメンバーを追加する場合は下記のようにする必要がある。

 ・新しく追加したメンバーにプライマリのoplogに含まれるデータより新しい変更が加え

  られていない場合はプライマリのoplogが自動的に適用されて同期する

 ・新しく追加したメンバーにプライマリのoplogに含まれるデータより新しい変更が加え

  らていた場合はプライマリのoplogを手動で適用する必要があるっぽい(調査中)

 

[着眼点2]

スタンドアロンインスタンス→レプリカセットに追加(rs.add()実行)→レプリカセットから削除(rs.remove()実行)を試す。

Add Members to a Replica Set

 

Remove Members from Replica Set

・スタンドアロンインスタンスをレプリカセットに追加

スタンドアロンインスタンスをレプリカセット名を指定して起動

$ mkdir /tmp/rs0_3

$ mongod --replSet rs0 --port 27021 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_3 --oplogSize 128 &

プライマリにmongoシェルで接続して下記を実行

rs0:PRIMARY> rs.add( { host: "localhost:27021", priority: 0, votes: 0 } )

ステータスが「SECONDARY」に成ったら下記を実行

rs0:PRIMARY> var cfg = rs.conf();
rs0:PRIMARY> cfg.members[3].priority = 1
rs0:PRIMARY> cfg.members[3].votes = 1
rs0:PRIMARY> rs.reconfig(cfg)

※ちなみにレプリカセットからメンバーを削除する場合は、

rs0:PRIMARY> rs.remove( localhost:27021" )

[着眼点3]

現在レプリカセットrs0のメンバーは4インスタンス(偶数台)だけど、このときプライマリを落とした場合フェイルオーバーするか見る。

→一応フェイルオーバーして、idが最若番のメンバーがプライマリに昇格した。

この状態でさらにプライマリを落とした場合フェイルオーバーするか見る。

→残った2メンバーはセカンダリのままだった。

 

メンバー数が偶数台でもフェイルオーバーするが、2インスタンス落ちるとプライマリが選出されない?

・スタンドアロンインスタンスをもうさらに一個レプリカセットに追加

$ mkdir /tmp/rs0_4

$ mongod --replSet rs0 --port 27022 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_4 --oplogSize 128 &

プライマリにmongoシェルで接続して下記を実行

rs0:PRIMARY> rs.add( { host: "localhost:27022", priority: 0, votes: 0 } )

ステータスが「SECONDARY」に成ったら下記を実行

rs0:PRIMARY> var cfg = rs.conf();
rs0:PRIMARY> cfg.members[4].priority = 1
rs0:PRIMARY> cfg.members[4].votes = 1
rs0:PRIMARY> rs.reconfig(cfg)

現在レプリカセットrs0のメンバーは5インスタンス。このときプライマリを落とす。

→フェイルオーバーして、idが最若番のメンバーがプライマリに昇格した。

この状態でさらにプライマリを落とした場合フェイルオーバーするか見る。

→フェイルオーバーして、idが最若番のメンバーがプライマリに昇格した。

この状態でさらにプライマリを落とした場合フェイルオーバーするか見る。

→残った2メンバーはセカンダリのままだった。

[着眼点4]

3メンバーのレプリカセットのセカンダリをrs.remove()でレプリカセットから削除してインスタンスを終了し、コールドバックアップを取得しておく。

そのあと、レプリカセットのデータを変更して上記のスタンドアロンインスタンスを起動してレプリカセットにrs.add()で戻す。

 

(1)その際、レプリカセット内で出戻りメンバーにデータが同期するか確認する。

→同期した

(2)レプリカセットの全メンバーを停止して全メンバーのDBデータを上記のバックアップからリストアして再起動した場合、レプリカセットはバックアップ時のデータを保持しているか確認する。

→バックアップ時のデータを保持していた

(3)もう一度レプリカセットの全メンバーを再起動してデータが永続的にバックアップ取得時点で永続化されているか確認する。

→バックアップ取得時点で永続化されていた

(4)上記の状態でデータのwriteが正常にできるか確認する。

→正常にwriteできた

(5)下記の[着眼点7]で確認したようにセカンダリのdbPathのオンラインバックアップを静止点付き(LVMスナップショットまたはxfs_freeze+sync)で取得可能。

 

[着眼点5]

※上記の②にいきなり結論見つけた

A valid copy of the data files from a member of the same replica set. See Back Up and Restore with Filesystem Snapshots (これを④とする)document for more information.

IMPORTANT

Always use filesystem snapshots to create a copy of a member of the existing replica set. Do not use mongodump and mongorestore to seed a new replica set member.

上記の記述から、[着眼点4]の操作がレプリカセットの正式なバックアップとリストアなのか確認する。

→[着眼点4]の操作がレプリカセットの正式なバックアップとリストアと同等である。

※上記④ではLVMスナップショットを取得してこれをソースに別メディアにコピーする方法が書かれている。

上記④ではWiredTigerストレージエンジンはチェックポイントによる書き込みが完了してから次のチェックポイントの書き込みが始まるまではデータファイルは一貫性を保証されていると書かれている。チェックポイント書き込み途中以外のスナップショットならファイルシステムレベルの静止点が保証される。チェックポイントが書き込み途中のスナップショットならjournalを使ってロールフォワードかjournalにすらないデータはロールバックしてくれる(Journaling

Manage Journalingので、セカンダリのdbPathはLVMスナップショット(またはxfs_freeze+sync)を使うことによってファイルシステムの静止点さえ確保すればオンラインバックアップできることを意味するはずである。

 
 

For the WiredTiger storage engine, the data files reflect a consistent state as of the last checkpoint. Checkpoints occur with every 2 GB of data or every minute.

LVMスナップショットはdirtyキャッシュに関してはディスクに同期したうえでボリュームの静止点を生成するが、[着眼点4]の操作はコールドバックアップとなっているので、LVMスナップショットによるバックアップが可能であるとのことなので[着眼点4]の操作も可能であることが導かれる。

 

[着眼点6]

mongodb 4.4はデフォルトでstorage.journal.enabled enabledなのか?

→デフォルトでenabled

[pc3_centos7_k2]$ grep -i -A 8 storage: /etc/mongod.conf
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

#  engine:
#  wiredTiger:

# how the process runs
processManagement:

 

[着眼点7]

mongodbのDBデータ(dbPath)をオンラインでコピー(tarコマンド)した場合はリストアしてもMongoDBインスタンスは起動しなかったが、LVMスナップショットやxfs_freeze+syncを併用したコピー(ファイルシステムレベルの静止点を確保したコピー)であればもしかしたら普通にファイルシステムtoファイルシステムでオンラインバックアップできてしまうのではないか?

※オンラインでdbPathディレクトリを単にtarでコピーした場合と、上記の違いは、tarはDirtyキャッシュのフラッシュをしないのに対し、lvcreate -sはこれを行う。またxfs_freezeしたあとsyncをした場合はページキャッシュへの書き込みを一時的に禁止してsyncにより手動でフラッシュを行う

さらに、レプリカセットのセカンダリインスタンスの場合、dbPathへの入力はプライマリからの管理されたoplogにもとづくものなので、ジャーナリング有効とかと絡んでレプリカセットをバックアップ元にしたスナップショット+rsync(またはxfs_freeze+syncしてからrsync)であればオンラインバックアップ可能なのではないか?

・lvm上にrs0_0を移動する。

[pc3_centos7_k2]$ dd if=/dev/zero of=/tmp/loopdevice bs=1M count=5000
[pc3_centos7_k2]$ losetup /dev/loop0 /tmp/loopdevice
[pc3_centos7_k2]$ pvcreate /dev/loop0
[pc3_centos7_k2]$ vgcreate vg0 /dev/loop0
[pc3_centos7_k2]$ lvcreate -L 1024M -n lv0 vg0
[pc3_centos7_k2]$ mkfs.xfs /dev/vg0/lv0
[pc3_centos7_k2]$ mount /dev/vg0/lv0 /mnt
[pc3_centos7_k2]$ mv /tmp/rs0_0 /mnt/
[pc3_centos7_k2]$ ln -s /mnt/rs0_0 /tmp/rs0_0

・レプリカセット起動

[pc3_centos7_k2]$ mongod --replSet rs0 --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 --oplogSize 128 &
[pc3_centos7_k2]$ sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27019 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_1 --oplogSize 128 &
[pc3_centos7_k2]$ sleep 10
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27020 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_2 --oplogSize 128 &

・現在のデータの確認

rs0:PRIMARY> use chinko
switched to db chinko
rs0:PRIMARY> db.chinko0.find()
{ "_id" : ObjectId("5f8d423d22c4e4d8bd644b8d"), "name" : "うんこっこ", "age" : 20 }
{ "_id" : ObjectId("5f95c6db4b85da307768366a"), "name" : "まんこっこ", "age" : 17 }

→この状態で3メンバーは同期中

・tcp27018のインスタンスをセカンダリになるように起動してdbPathディレクトリのLVMスナップショットをオンラインで取得

[pc3_centos7_k2]$ lvcreate -s -L 1g -n snap0 vg0/lv0

・tcp27018のインスタンス(セカンダリ)のdbPathディレクトリのLVMスナップショットからバックアップ

[pc3_centos7_k2]$ mkdir /snap
[pc3_centos7_k2]$ mount -o nouuid /dev/vg0/snap0 /snap
[pc3_centos7_k2]$ ll /snap

合計 4
drwxr-xr-x. 4 root root 4096 10月 26 06:20 rs0_0
[pc3_centos7_k2]$ cd /snap
[pc3_centos7_k2]$ tar cf /tmp/rs0_0.tar rs0_0

・レプリカセットにデータ追記

rs0:PRIMARY> db.chinko0.insertOne({name:"うんこまん",age:40})
rs0:PRIMARY> db.chinko0.find()

{ "_id" : ObjectId("5f8d423d22c4e4d8bd644b8d"), "name" : "うんこっこ", "age" : 20 }
{ "_id" : ObjectId("5f95c6db4b85da307768366a"), "name" : "まんこっこ", "age" : 17 }
{ "_id" : ObjectId("5f961e742906ac042b298800"), "name" : "うんこまん", "age" : 40 }

・tcp27018のインスタンス(セカンダリ)をレプリカセットから削除する

rs0:PRIMARY> rs.remove("localhost:27018")

・レプリカセットのメンバーのインスタンスとtcp27018のインスタンスをkillコマンドで停止

・tcp27018のインスタンスをスタンドアロンで起動し中のデータを確認

[pc3_centos7_k2]$ mongod --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 &

[pc3_centos7_k2]$ mongo --port 27018

> use chinko
> db.chinko0.find()
{ "_id" : ObjectId("5f8d423d22c4e4d8bd644b8d"), "name" : "うんこっこ", "age" : 20 }
{ "_id" : ObjectId("5f95c6db4b85da307768366a"), "name" : "まんこっこ", "age" : 17 }
{ "_id" : ObjectId("5f961e742906ac042b298800"), "name" : "うんこまん", "age" : 40 }

・tcp27018のインスタンスを停止しtcp27018とtcp27019とtcp27020の各dbPathディレクトリのデータをバックアップからリストア

[pc3_centos7_k2]$ cd /mnt
[pc3_centos7_k2]$ rm -rf rs0_0

[pc3_centos7_k2]$ tar xf /tmp/rs0_0.tar

[pc3_centos7_k2]$ cd /tmp

[pc3_centos7_k2]$ rm -rf rs0_1 rs0_2

[pc3_centos7_k2]$ cp -pr /mnt/rs0_0 /tmp/rs0_1

[pc3_centos7_k2]$ cp -pr /mnt/rs0_0 /tmp/rs0_2

・レプリカセットを起動して中のデータを確認

[pc3_centos7_k2]$ mongod --replSet rs0 --port 27018 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_0 --oplogSize 128 &
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27019 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_1 --oplogSize 128 &
[pc3_centos7_k2]$ mongod --replSet rs0 --port 27020 --bind_ip localhost,192.168.101.32 --dbpath /tmp/rs0_2 --oplogSize 128 &

[pc3_centos7_k2]$ mongo --port 27020

rs0:PRIMARY> use chinko
rs0:PRIMARY> db.chinko0.find()

{ "_id" : ObjectId("5f8d423d22c4e4d8bd644b8d"), "name" : "うんこっこ", "age" : 20 }
{ "_id" : ObjectId("5f95c6db4b85da307768366a"), "name" : "まんこっこ", "age" : 17 }

 

→レプリカセットのセカンダリインスタンスのdbPathをLVMスナップショットでオンラインバックアップしてそこからリストアができたぷに。