お家で作るMSCS クラスタの構築手順です。無料でできますがHyper Vサーバが故に通常のWindows Serverでは不要な苦労があります。
検証中、変なところでハマったりしたときにHyperV ServerというかWindows serverのCoreでの操作が苦行過ぎて114514回ゲロを吐きキーボードがゲロまみれになりましたが、おかげで吐くものがなくなり悟りを開けそうです。もう一回やれと言ったら多分忘れてるので覚えているうちに書き残します。
Microsoft Clustering Serviceを利用するにはADが必要なので、Linux上でのSamba4の構築を含みます。
また、Clustering Shared Volume(CSV)を利用するのにiSCSIボリュームがいるので、targetもインストールします。使い慣れているだけなので、他にiSCSI TargetがあればそちらでOKです。
設定手順
必要な物のダウンロード
HyperV Serverのダウンロード
https://www.microsoft.com/ja-jp/evalcenter/evaluate-hyper-v-server-2016
MSアカウントでよしなに登録してダウンロードします。
Microsoft Remote Server Administration Tools (RSAT)のダウンロード
HyperV manager、Failover Cluster Manager、AD Managerなど、諸々の管理にGUIが使いたい人向けです。このツールをインストールするマシンは、このあとにSamba4で作成するMSCSと同じドメインに所属している必要があります。Windows serverがあれば、機能の追加から追加可能です。
参考:https://wiki.samba.org/index.php/Installing_RSAT
Samba4のセットアップ
まずはドメインが必要なので、Sambaをセットアップします。今回はただの好みでDebian8をベースに行います。検証環境は下記で行いました。
root@debian:~# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.6 (jessie) Release: 8.6 Codename: jessie
apt-getでSamba4と取り巻きをインストール
以下のコマンドでインストールしていきます。
root@debian:~# apt-get install samba winbind krb5-user
samba-tool domain provision でドメインを作っていく
を参照してsamba-tool domain provision を行い、よしなに内容を入力します
root@debian:~# rm /etc/samba/smb.conf root@debian:~# samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=dev.lan --domain=dev --adminpass=Passw0rd Looking up IPv4 addresses Looking up IPv6 addresses No IPv6 address will be assigned Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema Adding DomainDN: DC=dev,DC=deb Adding configuration container Setting up sam.ldb schema Setting up sam.ldb configuration data Setting up display specifiers Modifying display specifiers Adding users container Modifying users container Adding computers container Modifying computers container Setting up sam.ldb data Setting up well known security principals Setting up sam.ldb users and groups Setting up self join Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=dev,DC=lan Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf Setting up fake yp server settings Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: debian NetBIOS Domain: DEV DNS Domain: dev.lan DOMAIN SID: S-1-5-21-3978880503-891640854-1088594067
出来上がった内容がこちら
root@debian:~# cat /etc/samba/smb.conf # Global parameters [global] workgroup = DEV realm = DEV.LAN netbios name = DEBIAN server role = active directory domain controller dns forwarder = 8.8.8.8 idmap_ldb:use rfc2307 = yes [netlogon] path = /var/lib/samba/sysvol/dev.lan/scripts read only = No [sysvol] path = /var/lib/samba/sysvol read only = No
hostsとresolv.confの編集
root@debian:~# vi /etc/resolv.conf domain dev.lan ※今回作成したRealm名を追記 nameserver 8.8.8.8 nameserver 8.8.4.4 root@debian:~# vi /etc/hosts 127.0.0.1 localhost 127.0.1.1 debian 192.168.1.111 dev.lan dev ※自分のローカルアドレスとロングホスト、ショートホストを追記
SAMBA_INTERNALなDNSが動いているか確認
自分に対してnslookupなどを行い、DNSが動いているか確認します。
※53番でリッスンしているか確認 root@debian:~# netstat -nap|grep :53 tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 924/samba tcp6 0 0 :::53 :::* LISTEN 924/samba udp 0 0 0.0.0.0:53 0.0.0.0:* 924/samba udp6 0 0 :::53 :::* 924/samba ※自分に対してクエリを投げる root@debian:~# nslookup debian.dev.lan localhost Server: localhost Address: ::1#53 Name: debian.dev.lan Address: 192.168.1.111 ←帰ってくればOK
クライアントPCをADに参加させてみる
HyperV Serverをドメインに参加させる前に、GUIからRSATを使ってADの設定をするため、設定用クライアントPCをドメインに参加させます。
DNSをSambaに向ける
DNSサーバに今回作成したADを指定します
その後、Windows8以降であればWin+X→Yでシステムを表示させ、システムの詳細設定→システムのプロパティ→コンピュータ名→変更 から、PC名の変更(任意)とドメインに今回作成したドメインを指定します。
その後、ようこそと表示されたらOKです。再起動後、今回作成したドメイン\Administratorでログインできるか確認します。パスワードはsamba-tool domain provisionで入力した「--adminpass=」の部分です。
ADのユーザなどが取得できるか確認してみる
RSATをインストールしたら、「Active Directoryユーザとコンピュータ」を起動します。紛らわしいですが、「Active Directory管理センター」の方ではないので注意してください。
その後、Computersあたりを開き、今回接続したマシンが追加されていることを確認してください。(下記スクショは構築したあとになって貼り付けたので参考です。)
HyperV Serverの初期セットアップ
まずはインストールします。特に迷うことはないと思います。
Optional:USBにvhdxファイルを置いてそこから起動する
http://terrytlslau.tls1.cc/2014/01/installing-hyper-v-server-2012-r2-to.html
↑非常にわかりやすく、かつ2016でも使えました。
インストールが完了後、下記を実行します。
- sconfig(青い画面の窓) で9を選択し、日付を合わせる
※サーバ、クライアント、仮想ホストで日付と時間があっていないと色々こける - 2を選択しPC名を変更する
- 再起動
- 8を選択し、DNSにADを向ける。必要に応じてIPも固定する。
- 1を選択し、ADに参加する。セットアップ用のアカウントをきかれたらdomain\administratorを入力し、Samba4のセットアップの時に入れたパスワードを入れる
- 再起動
- 7を選択し、リモデを有効にする
- sconfigの後ろにあるコマンドプロンプトにpowershellとうちこみ、Powershellを立ち上げる
- Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False をPowershellから実行し、FWを無効化
※netshからやる場合、 netsh advfirewall set allprofiles state off でも同様
OSインストール→ドメイン参加を必要台数分実行します。
Hyper-V Managerで接続してみる
ここまで来ると、取りあえず単体のHyper-V Managerから接続できるようになるはずです。
RSATを入れたマシンに、「ドメインのユーザ」でログイン
RSATを入れたマシンに、RDP等からログインします。この際に、ログインするアカウントはAdministratorsにいるdomain\userを指定してください。
特に作っていなければdomain\administratorでログインします。
Hyper-V Managerを起動
ADマネージャのあるフォルダにHyper-V Managerがあるので、それを起動します。
起動後、右ペインからサーバに接続をクリックし、「別のコンピュータ」から上記でセットアップしたマシンのホスト名を入れます。
正しく設定されていれば、ログインしているアカウントの認証情報を利用して接続できるはずです。
クラスタのセットアップ
まずは、クラスタの作成までを行います。
クラスタ機能の追加
Powershellの機能追加コマンドレットより追加します。クラスタ参加するマシン全てで実行します。
PS C:\Users\administrator.DEV> Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools Success Restart Needed Exit Code Feature Result ------- -------------- --------- -------------- True No Success {フェールオーバー クラスタリング, リモート...
VMSwitchを作成する
VMSwitchのセットアップを行います。クラスタノード全てで同じスイッチ名にしてください。
上記Hyper-V Managerが接続されていれば、そこから仮想スイッチマネージャを通して作成することも出来ます。
Get-NetAdapterコマンドレットで利用可能なNICを確認します。利用したいNICのnameを確認してください。
PS C:\Users\administrator.DEV> Get-NetAdapter Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- イーサネット 4 Intel(R) Ethernet Connection I218-V 7 Up C0-3F-D5-6D-49-84 1 Gbps
この場合はNameがイーサネット 4 なので、VMSwitch作成時にはイーサネット 4 を指定します。そのVMSwitchでホストOSの通信も行いたい場合(NICが1つしかない場合)、-AllowManagementOS に$Trueをつけます。指定後、リモデが一瞬切れます。
PS C:\Users\administrator.DEV> New-VMSwitch "VMS1" -NetAdapterName "イーサネット 4" -AllowManagementOS $True Name SwitchType NetAdapterInterfaceDescription ---- ---------- ------------------------------ VMS1 External Intel(R) Ethernet Connection I218-V
これをクラスタ台数分実行します。
テストを実行する
Powershellからtest-clusterコマンドレットを実行し、動くかどうか確認します。
クラスタに属す予定のマシンのいずれかで実行します。今回セットアップしたのがhv03とhv04というホスト名です。
PS C:\Users\administrator.DEV> Test-Cluster -Node hv03,hv04 警告: 記憶域 - ディスクを一覧表示: テストの失敗が報告されました。。 警告: インベントリ - ソフトウェア更新プログラムの一覧表示: テストの失敗が報告されました。。 警告: システムの構成 - すべてのドライバーの署名の検証: テストでいくつかの警告が報告されました。。 警告: システムの構成 - ソフトウェア更新プログラム レベルの検証: テストの失敗が報告されました。。 警告: ネットワーク - IP 構成の検証: テストの失敗が報告されました。。 警告: ネットワーク - クラスター ネットワーク構成の検証: テストの失敗が報告されました。。 警告: テスト結果: HadUnselectedTests, HadFailures, ClusterConditionallyApproved 選択されたテストは完了しました。1 つ以上のテストで、構成がクラスタリングに適さないことが示されています。すべてのクラスター検証テストが実行され、すべての テストが成功した場合にのみ (警告の有無は問いません)、Microsoft はクラスター ソリューションをサポートします。 テスト レポート ファイルのパス: C:\Users\administrator.DEV\AppData\Local\Temp\2\検証レポート 2017.05.05 (23.09.43).htm Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2017/05/05 23:10 533111 検証レポート 2017.05.05 (23.09.43).htm
Coreなマシンでhtmlを見る術はないので、レポート の確認にはネットワークドライブにコピーするなどしてください(Notepad.exeとかtypeコマンドで生データを見ることは可能)。警告レベルであれば作成できるようです。上記エラーは、Intel I218VというNICをWIndowsServerに認識させるためにINFファイルを変更し、署名なしドライバをインストールした関係で信頼できないドライバのエラーが出ています。
RSATを入れたマシンがあれば、RSATに含まれるフェールオーバークラスターマネージャの「構成の検証」からも実行できます。
クラスタを作成する
まずは、HyperV Serverにリモートデスクトップ等からドメインのユーザでログインします。Administratorがローカルとドメインにいるので注意です。また、このコマンドだけはPowershellから実行する必要があります。Samba4をバックエンドとして使う場合、クラスタ用のComputerはADに作成されるのですが、IPの更新がされません。そのため、静的アドレスを指定する必要があります。普通のADなら動的でOKです。
PS C:\Users\administrator.DEV.000> New-Cluster -name HVC2 -Node hv03,hv04 -StaticAddress 192.168.1.114 警告: クラスター化された役割の作成中に問題があったため、役割を開始できない可能性があります。詳細については、以下のレポート ファイルを参照してください。 警告: レポート ファイルの場所: C:\windows\cluster\Reports\クラスターの作成ウィザード HVC2 on 2017.05.07 At 06.37.24.htm Name ---- HVC2
警告は出ますが、動くようです。
色々検証していたら、クラスタを作成しようとしても「クラスターを作成しているときにエラーが発生し、ノードがクリーンアップされます。しばらくお待ちください...」となり作成出来なくなった事があったので、もしうまく動かなくなったらSambaを初期化してみてください。と言っても、1日悩んだ結果、結局ADをOSレベルから作り直してしまったので、どのようにクリーンアップすればいいかというのは不明ですが…。また、作れなくなった原因も何が起因だったのかは不明です。
フェールオーバークラスターマネージャから接続する
クラスタが作成できたら、フェールオーバークラスターマネージャから接続してみます。
この際に、Samba4がバックエンドの場合、クラスタ名を指定しても接続できないので、上記でStaticAddress に指定したIPを指定します。
正しく接続できれば、ノードの一覧に指定したホストがいるはずです。
Clustering Shared Volumeのセットアップ
ここまででかなりお腹いっぱいになって胃もたれしてきた感がありますが、Clustering Shared Volume(CSV)を作成します。ターゲットにはiSCSIを利用します。
Linux上で、iSCSIターゲットを作成する
targetcliを利用し作成します。apt-get install targetcliでインストールできますが、バージョンが古いためSCSI-3 に対応しておらず、ディスクをオンラインに出来ません。
そのため、targetcliでSRPターゲットを作るを参考にtargetcliをgitから落とし、ビルドしてください。(これで3時間くらいはハマった)
#ディスクの置き場を作る root@debian:~# mkdir /vmdk #targetcliを起動する root@debian:~# targetcli targetcli 3.0.pre4.3~g0fba804 (rtslib 3.0.pre4.9~g6fd0bbf) Copyright (c) 2011-2014 by Datera, Inc. All rights reserved. #ディスクイメージを作成する /> /backstores/fileio create name=vdisk1 file_or_dev=/vmdk/vdisk1.img size=10G Created fileio vdisk1 with size 10737418240 #iscsiのWWNを作る。createだけすればよしなにランダムに作ってくれる /> iscsi/ create Created target iqn.2003-01.org.linux-iscsi.debian.x8664:sn.8d895396ee6f. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260. #作成したWWNのtpg1まで下りる /> iscsi/iqn.2003-01.org.linux-iscsi.debian.x8664:sn.8d895396ee6f/tpg1/ #LUNにディスクイメージを割り当てる /iscsi/iqn.20...5396ee6f/tpg1> luns/ create /backstores/fileio/vdisk1 Created LUN 0. #portalを作成する。 /iscsi/iqn.20...5396ee6f/tpg1>portals/ create Using default IP port 3260 Automatically selected IP address 192.168.1.111. Created network portal 192.168.1.111:3260. #内容の確認 /iscsi/iqn.20...5396ee6f/tpg1> ls o- tpg1 ..................................................................................................... [no-gen-acls, no-auth] o- acls ................................................................................................................ [ACLs: 0] o- luns ................................................................................................................ [LUNs: 1] | o- lun0 ..................................................................................... [fileio/vdisk1 (/vmdk/vdisk1.img)] o- portals .......................................................................................................... [Portals: 1] o- 192.168.1.111:3260 ....................................................................................... [OK, iser disabled] #CHAP等を使わない誰でも接続できるLUNを作成する。 /iscsi/iqn.20...5396ee6f/tpg1> set attribute demo_mode_write_protect=0 demo_mode_discovery=1 generate_node_acls=1 cache_dynamic_acls=1 authentication=0 Parameter demo_mode_discovery is now '1'. Parameter generate_node_acls is now '1'. Parameter authentication is now '0'. Parameter demo_mode_write_protect is now '0'. Parameter cache_dynamic_acls is now '1'. #保存する /iscsi/iqn.20...5396ee6f/tpg1> / saveconfig Last 10 configs saved in /etc/rtslib-fb-target/backup. Configuration saved to /etc/rtslib-fb-target/saveconfig.json #終了する /iscsi/iqn.20...5396ee6f/tpg1> exit Global pref auto_save_on_exit=true Last 10 configs saved in /etc/rtslib-fb-target/backup. Configuration saved to /etc/rtslib-fb-target/saveconfig.json
HyperV ServerからiSCSIに接続する
例によってPowershellからです。まずはStart-Service MSiSCSIでサービスを起動し、New-IscsiTargetPortalコマンドレットで前述で作成したターゲットに接続します。
PS C:\Users\administrator.DEV.000> Start-Service MSiSCSI PS C:\Users\administrator.DEV.000> Set-Service MSiSCSI -StartupType auto PS C:\Users\administrator.DEV.000> New-IscsiTargetPortal -TargetPortalAddress debian InitiatorInstanceName : InitiatorPortalAddress : IsDataDigest : False IsHeaderDigest : False TargetPortalAddress : debian TargetPortalPortNumber : 3260 PSComputerName :
ポータルに接続後、このままではディスクはマウントされないのでLUNに接続します。正しくポータルにログインできていれば、get-iscsiTargetで利用可能なノードが見えます。
ノード確認後、 Connect-IscsiTargetでノードに接続し、LUNをマウントします。
PS C:\Users\administrator.DEV.000> Get-IscsiTarget IsConnected NodeAddress PSComputerName ----------- ----------- -------------- False iqn.2003-01.org.linux-iscsi.debian.x8664:sn.8d895396ee6f PS C:\Users\administrator.DEV.000> Connect-IscsiTarget -NodeAddress iqn.2003-01.org.linux-iscsi.debian.x8664:sn.8d895396ee6f AuthenticationType : NONE InitiatorInstanceName : ROOT\ISCSIPRT\0000_0 InitiatorNodeAddress : iqn.1991-05.com.microsoft:hv03.dev.lan InitiatorPortalAddress : 0.0.0.0 InitiatorSideIdentifier : 400001370000 IsConnected : True IsDataDigest : False IsDiscovered : True IsHeaderDigest : False IsPersistent : False NumberOfConnections : 1 SessionIdentifier : ffff810ea953f010-4000013700000002 TargetNodeAddress : iqn.2003-01.org.linux-iscsi.debian.x8664:sn.8d895396ee6f TargetSideIdentifier : 0100 PSComputerName
これをクラスタノード全てで行います。Invoke-Commandを利用して一括設定しても可能です。
ディスクのフォーマット
iSCSIボリュームのマウントが完了したら、今度はディスクフォーマットします。diskpartでも可能です。
Powershell編
PS C:\> Get-Disk Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style ------ ------------- ------------- ------------ ----------------- ---------- ---------- 1 Msft Virtu... Healthy Online 12 GB MBR 0 SanDisk Ul... 4C530001141015116300 Healthy Online 14.32 GB MBR 2 LIO-ORG FI... 9680ec2f-0340-47c1-9cbb-20114... Healthy Offline 10 GB RAW #今回は2番が対象 #ディスクをオンラインにする PS C:\> Set-Disk -IsOffline $False -Number 2 #ディスクのリードオンリーを消す PS C:\> Set-Disk -IsReadOnly $false -Number 2 #フォーマット(MBRでもOK) PS C:\> Initialize-Disk -Number 2 -PartitionStyle GPT -PassThru | New-Partition -DriveLetter X -UseMaximumSize | Format-Volume -FileSystem ntfs DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ----------------- ------------- ---- X NTFS Fixed Healthy OK 9.92 GB 9.97 GB
diskpart編
#diskpart起動 PS C:\Users\administrator.DEV.000> diskpart Microsoft DiskPart バージョン 10.0.14393.0 Copyright (C) 1999-2013 Microsoft Corporation. コンピューター: HV04 #disk一覧を取得。今回は2番がiscsiボリューム DISKPART> list disk ディスク 状態 サイズ 空き ダイナ GPT ### ミック ------------ ------------- ------- ------- --- --- ディスク 0 オンライン 14 GB 0 B ディスク 1 オンライン 12 GB 0 B ディスク 2 オフライン 10 GB 10 GB #操作対象にディスク2を選択 DISKPART> select disk 2 ディスク 2 が選択されました。 #iscsiボリュームは最初オフラインなのでオンラインにする DISKPART> online disk DiskPart は選択されたディスクをオンラインにしました。 #iscsiボリュームは最初リードオンリーなので書き込めるようにする DISKPART> attributes disk clear readonly ディスクの属性が正しく消去されました。 #ここから先は最初のノードで1回のみ実行 #パーティション作成 DISKPART> create partition primary DiskPart は指定したパーティションの作成に成功しました。 #パーティションのフォーマット対象選択 DISKPART> select partition 1 パーティション 1 が選択されました。 #フォーマット DISKPART> format fs=ntfs quick 100% 完了しました DiskPart は、ボリュームのフォーマットを完了しました。 DISKPART> exit
この動作は、最初のノードだけで実行すればOKです。
CSVマウント
セットアップが完了したら、フェールオーバークラスターマネージャからCSVを作成します。
記憶域→ディスク→ディスクの追加 を選択し、セットアップが起動したら、今回作成したiSCSIディスクが出てくるはずです。
OKを押せば、ディスクがマウントされるはずです。
このままでは通常のドライブと同じくFなどのレターが振られてマウントされてしまうので、追加したiSCSIボリュームをクラスターの共有ボリュームとして定義し、各マシンへマウントします。
クリック後、ボリュームがC:\ClusterStorage\VolumeXにマウントされたことを確認してください。
下記スクリーンショットはそれを忘れて問題が起き、トラブルシューティングであれこれしたせいでVolume2になっていますが、普通はVolume1になるはずです。
動作確認
最後に、VMを作成し、動作確認を行います。フェールオーバークラスターマネージャの役割から仮想マシンを選択し、仮想マシンの新規作成を行います。
どちらで作成するか選択します。
名前と場所の指定の際に、ディスクの保存先をCSVに指定します。C:\ClusterStorage\VolumeXがそうです。
あとはいつも通りに作成すれば、VMが作成できると思います。
VMが作成できたら、移動→クイックマイグレーション→ノードの選択 を選択し、移動するホストを選択します。
ライブマイグレーションを選択すると失敗するのですが、何が原因か探る前に力尽きました。
2台しかないので空きの1台が出てきます。
実行後、所有者ノードが移動すれば完了です。
以上です。
必要なことを見つけるまでの道のりが過酷でつらかった(動かすのに約5日かかった)
HyperV Serverがおかしくなった場合、
C:\system32\sysprep\sysprep.exe
を実行すると初期化できるかもしれません。
また、今回利用したNUCに使われていたI218VをWindows serverに認識させるのに苦労しましたが、
http://open.mixi.jp/user/2992925/diary/1939109423
を参考にNDIS65フォルダのINFを変更しました。
Related articles
コメントの追加