Slide 1

Slide 1 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ -ファイル共有サーバにおける高可用性構成- 2021年2月13日 BLUECORE.NET管理人 ろーかるゆーざー

Slide 2

Slide 2 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 概要・やりたいことなど

Slide 3

Slide 3 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 我が家のファイルサーバを少し強固にしたい • オンプレファイルサーバとAzure Storageとの連携を模索 • これまでUnityVSAやIsilon SD Edgeを使った仮想アプライアンスでDRを模索 • しかしながら、VSA自体の脆弱性(仮想基盤の物理的脆弱性)によって度々データ消失が発生(私の 管理が行き届いてないと言うこと) • クラウドと連携して何か出来ないものか・・・ • 以前(2018年頃) • ファイルサーバとAzure Files間でのデータ同期を実施 • 以下理由で使い物にならなかった • パフォーマンスがガタガタ(特に多数のIOが発生する環境が苦手な様子。Robocopyだと破滅的に遅い) • Active Directoryとの連携不可(ACLのコピーが出来ない) • クラウドストレージとしてのSimple Storageも模索したが、金額が高く、オンプレ側に要求するリソースが少々でかい • 今 • Azure File Syncの存在(わりかし安そう) • Azure File Storage、Active Directoryとの連携が可能に • トランザクション最適化Tierの存在(Hotより上位/1GBあたり6円)

Slide 4

Slide 4 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ そこで挑んでる構成がこちら • Azure Storage • いわゆる「ストレージアカウント」 • Azure Filesを使用、Tierはトランザクション最適 化 • 今回はアクセス経路にインターネットを使用 • Firewallを使ってガチガチに縛る • Active Directoryと連携する • 共有アクセス権はRBACで設定 • NTFSアクセス権は共有フォルダから直接操作 • Azure File Sync • オンプレミスファイルサーバとAzure Filesを繋ぐ連 携ソリューション • 月額「7.75ドル/台」というステキな安値 • 「ストレージ同期」というリソースを作成 • オンプレミス側には、エージェントソフトウェアを導入 し、File Syncリソースに登録をする

Slide 5

Slide 5 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ DFS-Nでアクセス分散 • 以下の通りサイト割り当てを実施 • Prodサイト(自宅) ->Azure側を参照 • DRサイト(実家) ->DRサイト上のファイルサーバを参照 • DRサイト側の回線が100Mbps、Prodサイト側の回線が1Gbpsである ため。 • ただし、Outboundに対するBandwidth課金が存在することを考慮 し、全部いったんはDRサイト側にターゲットを振り向ける可能性はあ る

Slide 6

Slide 6 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ ざっくり手順を紹介

Slide 7

Slide 7 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Azure Filesに対する設定

Slide 8

Slide 8 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Azure FilesをADDSに適合させる • 結構めんどい。以下サイトの手順に従う必要がある。 • https://docs.microsoft.com/ja-jp/azure/storage/files/storage-files- identity-ad-ds-enable • ざっくり書くと以下のような手順である ① ストレージ アカウントでの AD DS 認証を有効にする -> https://github.com/Azure-Samples/azure-files-samples/releases からパッケージをダウンロード。これを利用するスクリプトを別途構成してPowerShellを実行 ② ターゲットの AD ID と同期している、Azure AD ID (ユーザー、グループ、またはサービス プリ ンシパル) に、共有のアクセス許可を割り当てる -> RBACを使用して「ファイル共有アクセス権」を設定する ③ SMB を使用してディレクトリとファイルに Windows ACL を構成する -> 共有アクセスルートへExplorerで移動し、NTFSアクセス権を設定する

Slide 9

Slide 9 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ PowerShellの実行 • ダウンロードしたパッケージの中身は以下の通り • ただ、これを単独実行するわけでなく、別途スクリプトを作成して実行する • 作成するスクリプトはこのパスと同じ場所に作ることが望ましい Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2021/02/11 9:47 19504 AzFilesHybrid.psd1 -a---- 2021/02/11 9:47 276507 AzFilesHybrid.psm1 -a---- 2021/02/11 9:47 13521 CopyToPSPath.ps1

Slide 10

Slide 10 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ ドメイン参加スクリプト(MSサイトからの転載) #Change the execution policy to unblock importing AzFilesHybrid.psm1 module Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser # Navigate to where AzFilesHybrid is unzipped and stored and run to copy the files into your path .¥CopyToPSPath.ps1 #Import AzFilesHybrid module Import-Module -Name AzFilesHybrid #Login with an Azure AD credential that has either storage account owner or contributer Azure role assignment Connect-AzAccount #Define parameters $SubscriptionId = "" $ResourceGroupName = "" $StorageAccountName = "" #Select the target subscription for the current session Select-AzSubscription -SubscriptionId $SubscriptionId Join-AzStorageAccountForAuth ` -ResourceGroupName $ResourceGroupName ` -StorageAccountName $StorageAccountName ` -DomainAccountType "" ` -OrganizationalUnitDistinguishedName "" ` -EncryptionType "" Update-AzStorageAccountAuthForAES256 -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose

Slide 11

Slide 11 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ スクリプトの要変更パラメータ $SubscriptionId $ResourceGroupName $StorageAccountName DomainAccountType OrganizationalUnitDistinguishedName EncryptionType Name Result ---- ------ CheckDomainJoined Passed CheckGetKerberosTicket Passed CheckUserRbacAssignment Failed CheckAadUserHasSid Skipped CheckADObjectPasswordIsCorrect Passed CheckADObject Passed CheckUserFileAccess Skipped CheckPort445Connectivity Passed CheckStorageAccountDomainJoined Passed CheckSidHasAadUser Passed Issues found: ---- CheckUserRbacAssignment ---- User '[email protected]' is not assigned any SMB share-level permission to storage account 'bccommonstor' in resource group 'BLUECORE-STORAGE'. Please configure proper share-level permission following the guidance at https://docs.microsoft.com/en-us/azure/storage/files/storage-files-identity-ad-ds-assign-permissions

Slide 12

Slide 12 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ コンピュータアカウントの確認 # Update the password of the AD DS account registered for the storage account # You may use either kerb1 or kerb2 Update-AzStorageAccountADObjectPassword ` -RotateToKerbKey kerb2 ` -ResourceGroupName "" ` -StorageAccountName ""

Slide 13

Slide 13 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ RBACによる「共有アクセス権」の設定

Slide 14

Slide 14 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ RBACで指定するロール

Slide 15

Slide 15 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ NTFSアクセス権(ACL)の設定 • ACLは共有フォルダへ乗り入れて設定する必要がある • 初期値は以下の通りであり、これにドメインアカウントを追加することが望ましいと 考えられる。(必要に応じて)

Slide 16

Slide 16 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Azure File Syncに対する設定

Slide 17

Slide 17 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Azure File Syncについて • マーケットプレイスからは「Azureファイル同期」で検索すると登場する • Syncと言う文字列で探してもなかなか見つからないので注意 • 因みにリソースの種類としては「ストレージ同期サービス」(何とも厄介)

Slide 18

Slide 18 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ ファイルサーバに仕込むエージェント https://www.microsoft.com/en-us/download/details.aspx?id=57159 •

Slide 19

Slide 19 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Azure File Syncリソース側から参照 • • •

Slide 20

Slide 20 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 同期状況を示すMetric • 同期状況はある程度Metricでモニタリング出来る • ここにあるグラフはダッシュボードへ転載可能である

Slide 21

Slide 21 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ レプリケーション処理の状況 • レプリケーションで動作しているプロセスを確認 • AzureStorageSyncMonitor • EngSys-MDA-CloudAgent • 両者ともにそれほど大きな負荷はかけていない。 • アップロード帯域幅確認 • 恒常的に100Mbps弱を推移してい て、かなり効率的に安定したデー タ転送をしている模様 • 受信はNASからファイルサーバへの データリストアのため無視して結構

Slide 22

Slide 22 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 以降の設定等

Slide 23

Slide 23 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ DFS-Nの設定 • DFS-NのフォルダターゲットにAzure Filesを含めることが可能になっている • サイトによるファイルサーバ切り替えがAzure Files間を含めて可能になったと 言うこと

Slide 24

Slide 24 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ File Syncで設定する機能そのほか

Slide 25

Slide 25 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ ストレージの階層化 と言う機能について 詳しくは https://docs.microsoft.com/ja-jp/azure/storage/files/storage-sync-cloud-tiering • 既存ファイルサーバをクラウドストレージにする機能 • 使用頻度の低いファイルをAzure Filesへ転送するというもの • 使用頻度の高いファイルはローカルストレージにキャッシングさ れる。 • 常時最低1Mbpsの保証が必要である • タイムアウトする可能性があるため • 昔存在していたSimpleStorの代わりになるものではな いかなと思う。

Slide 26

Slide 26 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ オフラインのデータ転送 について • Azure Databoxと連携して、オフラインでのファイルサーバ初期同期データを転送する というもの • ネットワーク負荷軽減につながる • ただ、事前にネットワーク越し等でデータ同期をした場合に使う機能・・と言うわけではどうや らなさそう(単純にDataboxと連携するときに使う機能のようだ) • 一応、事前にRobocopyやファイルコピーを行ってフォルダ内容を合わせた場合は、普 通に同期を開始してもそれを考慮して貰える • DFS-Rで発生するような「同期開始したら同期先データが消えた」と言うことは起きない。 • お互いのファイル情報を初回同期の際に、参照・比較を行っているように見える。

Slide 27

Slide 27 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ File Syncの通信特性を確認

Slide 28

Slide 28 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Sync Agentはどこへアクセスしているのか? • 接続テスト時にエージェントが接続先としているのは以下の3つ • Discovery Service • Management Service • Monitoring Service • いずれも443/tcpに対するHTTPS接続

Slide 29

Slide 29 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Sync Agentがアクセスする先について確認する kailanicorejpwsvc.cloudapp.net と言うFQDNがSyncサービスの到達先らしい ※JP WESTの場合は

Slide 30

Slide 30 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 同期中のソケット接続状態を確認してみた。 • エージェントサーバ側でnetstat -anを実行し、TCPソケットの接続状況 を確認 • Established状態にある、それとおぼしきものを抽出 172.30.101.4 :Azure IaaS上に構成しているStorageに対するPrivateLinkインタフェース 192.168.239.200 :オンプレミス環境のファイルサーバ(兼ドメインコントローラ) 23.100.106.151 :

Slide 31

Slide 31 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 実際にはこういう構成になってた • どうやら同期制御と実際のデータ同期通信で異なるセッションを使ってる模様 • 制御セッションは443/tcp、同期自体は443/tcpと445/tcp両方を使ってるよう に見受けられる。 • 私の環境の場合、対外回線がフレッツ光ハイスピードでもVPN SKUが100Mbpsな ので100Mbpsが上限となる。

Slide 32

Slide 32 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ その他確認事項など

Slide 33

Slide 33 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ エージェントログの構成 • • • • • • • • • • • • • エージェントログの出力はイベントログへ行われる

Slide 34

Slide 34 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Metricについての確認

Slide 35

Slide 35 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ おまけ(我が家の構成とか、もう少し詳細に書いた図とか)

Slide 36

Slide 36 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ Azure構成全景

Slide 37

Slide 37 text

BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ BLUECORE.NET 趣味で自宅にITインフラ触ってる者だ 自宅生活系ファイルサーバ詳細構成について