TrueNAS Scale 22.12でリモートレプリケーションしてみた

どうも、Tです。

TrueNAS Scale×2台を使ったリモートレプリケーション構成の動作確認をしてみたので備忘録です。

スポンサーリンク
アドセンス1

環境

レプリケーション元

  • ロケーション:仮想マシン上に作成したTrueNAS
  • バージョン:TrueNAS-SCALE-22.12.3.3

レプリケーション先

  • ロケーション:物理マシン上のTrueNAS
  • バージョン:TrueNAS-SCALE-22.12.3.3

本記事は、下記のマニュアルを参考に確認しています。

Setting Up a Remote Replication Task
Provides instructions on adding a replication task with a remote system.

マニュアルに記載もありますが、下記の場合は手順が異なる部分が多いのでご注意ください。

  • TrueNAS Coreを使用している場合
  • TrueNAS Scaleの初期リリース(22.12.1)を使用している場合

やりたいこと

項目レプリケーション元レプリケーション先
ホスト名k-truenask-truenas-rep
IPアドレス192.168.10.210192.168.1.211
管理者ユーザー(WebUIにログインするときのユーザー)adminadmin

2台のTrueNAS Scaleでリモートレプリケーション(筐体間レプリケーション)の設定を行い、レプリケーション後データを復元できるかを試してみます。

ネットワークは両機とも1本です。IPアドレスは書き間違いではなく、諸事情により異なるネットワークセグメントで試しています。IPが異なる部分は手順に違いは発生しませんので読み飛ばしてください。

レプリケーション対象は、Samba共有で使用しているデータセットとします。試していませんが、仕様上Zvolでもかわらないかと思います。

TrueNAS自体のIPアドレス設定などの初期設定や、Pool作成・データセットの追加方法など基本的な操作などは割愛します。

レプリケーション元となるTrueNASのスクリーンショットは黒画面になります。

レプリケーション先となるTrueNASのスクリーンショットは白画面になります。

事前準備

【レプリケーション元】事前準備

データセットの作成

レプリケーション元になるデータセット「test」を作ります。

Samaba共有の設定

ファイルが戻るかなど確認したいため、データセット「test」を共有フォルダ「test」に設定しておきます。

共有フォルダに適当なファイルを5つ作成しました。

【レプリケーション先事前準備

データセットの作成

レプリケーション先となるデータセットを作成する必要があります。

データセット名は任意ですが、レプリケーション元がわかりやすいように「rep-test」というデータセットを作成しました。

SSH接続の設定

リモートレプリケーションを行う場合、レプリケーション元からレプリケーション先へSSH接続できる必要があります。レプリケーション先でSSHの設定を行います。

「System Settings」->「サービス」を開き「SSH」の設定アイコンをクリックします。

「Log in as Admin with Password」「Allow Password Authentication」にチェックを入れ「保存」をクリックします。

SSH接続はadminユーザーとrootユーザーで行いますが、adminはパスワード認証・rootは公開鍵認証でSSH接続を行います。

rootは公開鍵認証のため「Log in as Root with Password」はオフの状態でも動作しました。

SSHサービスを起動し自動起動も有効にしておきます。

リモートレプリケーション設定

事前説明

マニュアルを読んでいる限り、複数の設定方法がありましたが、本記事ではセットアップウィザードを使用した一番簡単な方法で実施しています。

TrueNAS Scaleのレプリケーションは、大まかに下記のように動いていました。

  1. スナップショットを定期的(指定間隔)で取得
  2. スナップショットをレプリケーション

この処理の中でSSH接続も使用します。

セットアップウィザードは、「SSH設定」「スナップショット設定」「レプリケーション設定」が同時に行えます。

【レプリケーション元】レプリケーションセットアップウィザード

「Data Protection」画面を開き「Replication Tasks」の「Add」をクリックします。セットアップウィザードが開くため項目を入力していきます。

レプリケーションソースの指定

ソース(元)の指定

レプリケーション元を指定します。

「Source Location」で「On this System」を選択します。

「Source」でレプリケーション元データセット「test」を選択します。

仕様上はPoolを選択し配下すべてをレプリケーションすることも可能なようです。明記されていませんでしたが、下記の理由により明示的にデータセットもしくはZvolを選択するほうが良いと思われる。

  • Pool直下のシステムファイルなども対象となる管理が煩雑になる
  • データセットはデータセットに、ZvolはZvolにレプリケーションするような記述もあり、Poolでどこまで正常に動くか未知数
  • 切り戻し(逆レプリケーション)の際にPool単位になってしまう

ディスティネーション(先)の指定・SSH接続の設定

レプリケーション先とSSH接続の設定を行います。

「Destination Location」で「On a Different System」を選択します。

「SSH接続」が表示されるので、「新規作成」を選択します。

SSH接続設定画面が表示されます。

「名前」にわかりやすい任意の名前を入力します。

「Setup Method」は「Semi-automatic(TrueNAS only)」のままです。

「TrueNAS URL」に「レプリケーション先」のURLを入力します。

「Admin Username」に「admin」を入力します。

「Admin Password」に「adminのパスワード」を入力します。

「ユーザー名」に「root」を入力します。

「Private Key」で「Generate New」を選択します。

ユーザー名ですが、root以外(adminなどでも)可能なようですが、ここの入力ユーザーで内部的なリモートのマウント操作などをおこなっているようで、rootでのみ実行する処理があるようです。sudoなどを使うオプションがありましたが、あまり設定項目を増やしたくないため、rootを使用しています。

Help: Enable passwordless sudo for zfs commands

Checking this option will lead to /usr/sbin/zfs being allowed to be executed using sudo without password. If not checked, zfs allow must be used to grant non-user permissions to perform ZFS tasks. Mounting ZFS filesystems by non-root still would not be possible due to Linux restrictions.

入力が終わったら画面下部の「保存」をクリックします。

「SSH接続」に設定した名前が選択されていることを確認します。

SSH接続の内容でレプリケーション先にSSH接続が内部的に行えていれば、「Destination」にレプリケーション先のプール情報が表示されます。

レプリケーション先となるデータセット「rep-test」を選択します。

【レプリケーション元】スナップショット設定

スナップショット設定を行います。

「Replicate Custom Snapshots」にチェックを入れ「Naming Schema」を選択します。

「Naming Schema」にスナップショットの名前にわかりやすい名前を付けます。

デフォルト「auto-%Y-%m-%d_%H-%M」ですが、「rep-test」を付けて、「test」のレプリケーションのためスナップショットとわかりやすくしました。

【レプリケーション元】SSH暗号化設定

レプリケーション中の経路を暗号化するか指定します。

今回は、検証環境の中のため「No Encryption (less secure, but faster)」を選択し転送速度を優先しました。レプリケーション経路のセキュリティ的な信頼性が低い場合は、Encryotionを選択してください。

「Task Name」は自動生成されているので修正がなければ、「Next」をクリックします。

【レプリケーション元】レプリケーションスケジュール

レプリケーションスケジュールを設定します。

定期的に自動実行したいため、「Replication Schedule」で「Run On a Schedule」を選択します。

「Schedule」から間隔を指定します。デフォルトではHourlyが最短ですが、選択にない場合は「Custom」で細かく設定できます。今回は「Custom」を選択します。

5分間隔で行ってほしいため「Minutes」に「*/5」を指定しました。この画面項目はcronと同じ書式で指定が行えます。「Done」をクリックします。

設定が反映されていることを確認します。

【レプリケーション元】スナップショット保持期間

スナップショットの保持期間を選択します。今回は「Custome」で「2Weeks(2週間)」保持する設定にしました。「START REPLICATION」をクリックします。

ウィザードで設定した内容で「Periodic Snapshot Tasks(スナップショットの設定)」「Replication Task(レプリケーションの設定)」のタスクが1つずつ作成されます。

即時画面に反映されない場合があります。他の画面に移ったあと「Data Protection」画面にもどるか、Webブラウザをリロードしてください。

【レプリケーション元】Appendix

SSHの設定

ウィザードで設定したSSHの設定内容は。「Credentials」->「Backup Credentials」画面で確認できます。

「SSH Connections」「SSH Keypairs」に設定が作成されています。

「SSH Connections」は接続先やホスト鍵についての情報があります。

「SSH Keypairs」は秘密鍵・公開鍵についての情報があります。

スクリーンショット取得できていませんでしたが、レプリケーション先のroot・adminユーザー情報に、ここで作成されている公開鍵情報も自動的に登録されています。

リモートレプリケーション確認

【レプリケーション元】レプリケーションの確認

ステータス確認

設定した時間間隔が経過するとスナップショットが取得され、レプリケーションが行われます。スナップショットが「FINISHED」、レプリケーションが「SUCCESS」になることを確認します。

スナップショット取得後即座にレプリケーションが行われるのは「Run Automatically」が有効になっているためです。スケジュールを設定することにより、レプリケーションの開始時間を変更することもできるようです(未検証)

スナップショット確認

スナップショット取得状況を確認します。

「Datasets」->「対象のデータセット」画面を開き「DataProtection」の「Manage Snapshots」をクリックします。

取得されているスナップショット一覧が表示されます。今回指定した5分間隔で取得できていることがわかります。

【レプリケーション先レプリケーションの確認

レプリケーション先にスナップショットがレプリケーションで来ていることを確認します。

「Datasets」->「対象のデータセット」画面を開き「DataProtection」の「Manage Snapshots」をクリックします。

スナップショット一覧が表示されます。レプリケーション先にはスナップショットの設定を入れていないため、レプリケーション元のスナップショットであることは確実です。スナップショット名も同じです。

【レプリケーション先ファイルの確認

中のファイルが表示できるか確認します。レプリケーション先のデータセットを共有フォルダとして公開します。

ファイルが表示されます。

レプリケーション先のデータセットは読み取り専用になっているため共有フォルダにしても、変更できません。また、ACLがついていないため開こうとしてもエラーになります。

共有設定でACLを変更しようとしたら下記のようにエラーになります。

レプリケーション先でファイルの中身を確認するには、レプリケーション先のスナップショットからクローンを作成し、それを共有フォルダで公開することにより確認可能でした。

リモートレプリケーションによる復元

レプリケーション元のデータセットの中身が消えた場合に、レプリケーション先から元のデータセットに逆レプリケーションする復元検証を行いました。

しかし、復元にはいろいろな方法があります。

  • レプリケーション先のスナップショットをクローンしてファイルだけコピー
  • 新規のデータセットを作り、レプリケーション先からレプリケーション
  • etc

復元の参考方法程度に見てください。

【レプリケーション元】復元の準備

レプリケーション元の2ファイルだけ残して他のファイルを削除します。

復元中にレプリケーションは行ってほしくないため、スナップショットとレプリケーションタスクの「Enabled」のチェックを外し動作しないようにします。

Enableのチェックを外す順番は、レプリケーションタスク→スナップショットタスクです。

逆から行うとエラーになります。

ついでに過去のスナップショットもすべて削除しておきます。

スナップショットもすべて削除しました。

スナップショット削除後に、画面に表示され再度消そうとすると既に存在しないよというエラーが発生しました。Webブラウザリロード、再ログインなどでも解消しませんでしたが、スナップショットの画面で「Ctrl+F5」でリロードすることにより表示がきえることを確認できました。

【レプリケーション元】復元の実施

復元(逆レプリケーション)を実施していきます。

「Data Protection」画面でレプリケーションタスクの「復元」アイコンをクリックします。

復元用のタスク作成画面になります。

「名前」に任意のタスク名を入力します。(復元が終わったらこのタスクは削除するためなんでもOKです)

「Destination」にレプリケーション元の復元したい先のデータセットを指定します。

「復元」をクリックします。※即時に復元は行われません。

復元用のレプリケーションタスクが作成されるので、タスクをクリックします。

「Replication from scrach」にチェックを入れます。

「Replication from scrach」が無効の状態で復元を行うと、レプリケーション元にファイルが残っていたりする場合エラーになります。そのため有効にして、スナップショットもファイルも強制的に復元するようにしました。

画面下部の「保存」をクリックします。

復元タスクの「Enabled」にチェックを入れ「Run now」アイコンをクリックします。

「続ける」をクリックします。

復元(逆レプリケーション)が開始され、レプリケーション先のスナップショット内容が、レプリケーション元にレプリケーションされます。

【レプリケーション元】スナップショット戻し

復元後は通常通りアクセスできるようになります。

ファイルが2つなのは、ファイルを消した後スナップショットを停止できておらず削除後の状態がレプリケーションされたためです。

復元のレプリケーションタスクで時間など細かく指定できるようですが、デフォルトでは最新のスナップショットの状態で戻るようです。

削除したスナップショットもすべて戻っています。ファイルを消す前にもどしたいので、スナップショットを使用して戻します。

戻りたい時点のスナップショットを選択し「Rollback」をクリックします。

「Newer Clone」を選択、「Confirm」にチェックを入れ「Rollback」をクリックします。

「Newer Intermediate,Child,and Clone」を選択すると新しいスナップショットがある場合などにロールバックが失敗します。
ロールバックを行うと、ロールバック対象よりも新しいスナップショットが自動的に削除されるため注意してください。確実にレプリケーションが行われていないことを確認し、レプリケーション先にスナップショットがある場合は再度復元で戻せますが、レプリケーション元からは完全に削除されます。

ロールバックが終わると下記画面になるため「閉じる」をクリックします。

元の状態に戻すことができました。

【レプリケーション元】後処理

復元が行えたことを確認後、復元のために作成したレプリケーションタスクを削除します。

その後、スナップショットタスクとレプリケーションタスクの「Enabled」を有効にしレプリケーションを再開します。

Enableのチェックをつける順番は、スナップショットタスク→レプリケーションタスクです。

逆から行うとエラーになります。

レプリケーションが正常に再開できたことを確認します。

参考

公式

Setting Up a Remote Replication Task
Provides instructions on adding a replication task with a remote system.
Replication Task Screens
Provides information on the Replication screens, wizard, and settings to add or edit replication tasks.

まとめ

マニュアルが煩雑ではあり、商用製品と比べると使いにくい部分もありますが、無料でここまで使えるのはありがたいことです。

TrueNASのレプリケーション設定については、国内記事が少なかったため参考にいただけると幸いです。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする