2019年2月27日水曜日

【PowerShell】Windowsの役割・機能を追加する

Windows Server構築時の序盤に必ず発生する作業として、サーバーマネージャーから「役割と機能の追加」がある。この作業はGUI操作となり、何回もウィザードの画面を遷移させる必要があるので地味に面倒くさい・・・。


ということでPowerShellで実施できるよう、コマンドを確認してみた。

Get-WindowsFeatureコマンドレットで「役割と機能の追加」の一覧を確認する

インストールを実施する前に、選択可能な役割と機能をGet-WindowsFeatureコマンドレットで確認しておこう。ここで、インストールしたいもののNameの値を確認しておき、後ほどインストール時に指定する必要がある。
PS C:\> Get-WindowsFeature

Display Name                                            Name                       Install State
------------                                            ----                       -------------
[ ] Active Directory Federation Services                ADFS-Federation                Available
[ ] Active Directory Rights Management サービス         ADRMS                          Available
    [ ] Active Directory Rights Management サーバー     ADRMS-Server                   Available
    [ ] ID フェデレーション サポート                    ADRMS-Identity                 Available

~(中略)~

[ ] マルチパス I/O                                      Multipath-IO                   Installed

~(以下略)~
今回は「マルチパス I/O (Multipath-IO)」をインストールしてみる。

Install-WindowsFeatureコマンドレットで「役割と機能の追加」を実施する

役割と機能のインストールは、Install-WindowsFeatureコマンドレットを使うことで実現できる。インストールする対象に応じて、以下2つのオプション付与も考慮しよう。
  • IncludeAllSubFeature : 下の階層の役割と機能をすべてインストールする
  • IncludeManagementTools : 管理ツールを合わせてインストールする。基本的に管理ツールは必須となる場合が多いので、このオプションは必ず付与しておけばよいと思われる
それではインストールをしてみよう。まず、PowerShellを「管理者として実行する」を選んで開く。


Install-WindowsFeatureコマンドレットでインストールを実行する。マルチパス I/Oの場合は、インストール後に再起動が必要な旨の警告が表示される。
PS C:\> Install-WindowsFeature -Name Multipath-IO -IncludeManagementTools

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    Yes            SuccessRest... {マルチパス I/O}
警告: インストール処理を完了するには、このサーバーを再起動する必要があります。
警告に従い、OSを一度再起動する。
PS C:\> shutdown /r /t 0
再起動すると、「マルチパス I/O」の機能が「Installed」の状態で表示されるようになった。
PS C:\> Get-WindowsFeature | Where-Object {$_.InstallState -eq "Installed"}

Display Name                                            Name                       Install State
------------                                            ----                       -------------
[X] ファイル サービスと記憶域サービス                   FileAndStorage-Services        Installed
    [X] 記憶域サービス                                  Storage-Services               Installed
[X] .NET Framework 4.6 Features                         NET-Framework-45-Fea...        Installed
    [X] .NET Framework 4.6                              NET-Framework-45-Core          Installed
    [X] WCF サービス                                    NET-WCF-Services45             Installed
        [X] TCP ポート共有                              NET-WCF-TCP-PortShar...        Installed
[X] SMB 1.0/CIFS ファイル共有のサポート                 FS-SMB1                        Installed
[X] Windows Defender の機能                             Windows-Defender-Fea...        Installed
    [X] Windows Defender                                Windows-Defender               Installed
    [X] Windows Defender の GUI                         Windows-Defender-Gui           Installed
[X] Windows PowerShell                                  PowerShellRoot                 Installed
    [X] Windows PowerShell 5.1                          PowerShell                     Installed
    [X] Windows PowerShell ISE                          PowerShell-ISE                 Installed
[X] WoW64 サポート                                      WoW64-Support                  Installed
[X] グループ ポリシーの管理                             GPMC                           Installed
[X] マルチパス I/O                                      Multipath-IO                   Installed
[X] リモート サーバー管理ツール                         RSAT                           Installed
    [X] 役割管理ツール                                  RSAT-Role-Tools                Installed
        [X] AD DS および AD LDS ツール                  RSAT-AD-Tools                  Installed
            [X] AD DS ツール                            RSAT-ADDS                      Installed
                [X] Active Directory 管理センター       RSAT-AD-AdminCenter            Installed
                [X] AD DS スナップインおよびコマンド... RSAT-ADDS-Tools                Installed
            [X] AD LDS スナップインおよびコマンドラ...  RSAT-ADLDS                     Installed
            [X] Windows PowerShell の Active Directo... RSAT-AD-PowerShell             Installed
        [X] DNS サーバー ツール                         RSAT-DNS-Server                Installed
2019年2月20日水曜日

Hyper-VのリダイレクトI/Oを動作確認してみた

Hyper-Vでは、ストレージのI/Oをネットワーク経由で別ノードにリダイレクトするという機能がある。これはHyper-Vの共有ボリュームの機能であるCSV(Cluster Shared Volume)にて実装される機能となり「リダイレクトI/O」と呼ばれる。ディスクI/Oをネットワークに流すという動作は、vSphere環境のVMFSではできないので非常に新鮮に感じる。

リダイレクトI/Oでは、ディスクI/Oが一度別ノードを経由することからディスクI/O遅延を引き起こすものとなるため、通常はストレージ障害発生時に利用される。

今回実際に疑似的な障害を発生させ、リダイレクトI/Oが動作することを確認してみた。

Hyper-V環境

環境は以下の通りとなる。2台のWindows Server 2019のHyper-Vノードがあり、iSCSIのボリュームをCSVとして共有している環境を想定する。

リダイレクトI/O動作時のディスクI/Oは以下図のとおりとなる。

リダイレクトI/Oの動作を確認してみる

ノード#1のiSCSI用のネットワークを切断した際に、リダイレクトI/Oが動作することを確認する。

ネットワーク切断してからしばらくすると、以下イベントログが表示され、リダイレクトI/Oが動作したことを確認できた。
ソース:FailoverClustering
id:5121
クラスターの共有ボリューム ‘Volume1’ (‘クラスター ディスク 1’) はこのクラスター ノードから直接アクセスできなくなりました。I/O アクセスは、ボリュームを所有するノードへのネットワークを介して記憶装置にリダイレクトされます。これが原因でパフォーマンスが低下した場合は、このノードから記憶装置への接続のトラブルシューティングを実施してください。記憶装置への接続が再確立されたら、I/O は正常な状態に戻ります。
また、ネットワーク切断からリダイレクトI/Oが動作するまでを時系列でまとめてみた。
発生時間 (秒) 内容 イベントログ
0 iSCSI用のNICのリンクダウン発生 ソース:e1iexpress
id:27
10 MPIOのフェイルオーバー失敗 ソース:mpio
id:32
140 ディスクが取り外される ソース:Disk
id:157
140 リダイレクトI/Oの開始 ソース:FailoverClustering
id:5121
MPIOのフェイルオーバー失敗からリダイレクトI/Oの開始まで130秒必要(NICのリンクダウンから換算で140秒)となっている。この時間のディスクI/Oは不可となるが、OSがディスク復旧を待つ時間として設定されているタイムアウト値のようだ。OSのパラメーターとしてはMPIOのPDORemovePeriodで規定されている。これはPowerShellのGet-MPIOSettingで確認することができる。
※下記はNetApp社のユーティリティがインストールされた状態の値であり、Windowsデフォルト値ではないので注意。
PS C:\Users\tadmin\Desktop> Get-MPIOSetting
PathVerificationState     : Disabled
PathVerificationPeriod    : 30
PDORemovePeriod           : 130
RetryCount                : 6
RetryInterval             : 1
UseCustomPathRecoveryTime : Enabled
CustomPathRecoveryTime    : 40
DiskTimeoutValue          : 60
ちなみに、ESXiではディスクの全パスダウン(APD : All Paths Down)の検知時間は、デフォルト140秒として設定されている。

まとめ

以上のとおりリダイレクトI/Oの動作が確認できた。vSphere環境ではvSphere HAで仮想マシンが再起動されてしまうが、Hyper-Vではディスク遅延が発生したとしても仮想マシンの動作継続を優先するという設計思想の違いが見て取れた。
2019年1月30日水曜日

今更ながらStackEditを使って、Bloggerの記事をMarkdown記法で書いてみた

今更ながらMarkdown記法というものを知る機会があり、本ブログもMarkdown記法で書いていきたいと思うようになった。本ブログはBloggerで作成しており、そのままでは直接Markdown記法による記事投稿はできないので、一度Markdown記法に対応したエディターでHTMLを作成し、それを貼りつけることで対応するようにした。

StackEditを使う

 Markdown記法に対応したエディターとして、StackEditを使うことにした。StackEditはWeb上でMarkdown記法を書きつつ、プレビューも同時に表示できる。


データはGoogleドライブ上に保存されるので、メモツールとして利用する場合でも非常に有用だ。

Bloggerのテーマを編集して見出しタグ修正する

Bloggerの見出し設定は以下になっていることがわかった。
見出しタグ 適用箇所
h1 ブログタイトル
h2 日付・ウィジェットタイトル・記事内の見出し1
h3 記事タイトル・記事内の見出し2
h4 コメント
h5 未使用
h6 未使用
h1タグはページのタイトルとなるので、ブログタイトルとなっていることは問題ないが、h2タグ、h3タグには以下問題がある。
  • 記事タイトルがh2タグではなく、なぜかh3タグ
  • h2タグが日付・ウィジェットタイトル・記事見出し1など複数で設定されており、特に「日付」といったタイトルにすべきではない項目がh2タグで設定されている
理想は見出しタグを以下のように変更したい。
見出しタグ 適用箇所
h1 ブログタイトル
h2 記事タイトル
h3 記事見出し1
h4 記事見出し2
h5 未使用
h6 未使用
上記が理想ではあるが、変更箇所が多岐にわたるため、まずは以下のようにBloggerのテーマを編集することにした。最低限、「日付」を見出しとして扱わないよう変更する。
見出しタグ 適用箇所
h1 ブログタイトル
h2 ウィジェットタイトル・記事見出し1
h3 記事タイトル・記事見出し2
h4 コメント
h5 未使用
h6 未使用
CSSの修正箇所は以下の通り。
# 353行付近
h2.date-header {
  font: $(date.header.font);
}
   ↓
.date-header {
  font: $(date.header.font);
}
HTMLの修正箇所は以下の通り。
# 996行付近
<h2 class='date-header'><span><data:post.dateHeader/></span></h2>
# 1350行付近
<h2 class='date-header'><span><data:post.dateHeader/></span></h2>
   ↓
<div class='date-header'><span><data:post.dateHeader/></span></div>

BloggerのCSSを追加して見やすくする

今まであまりこだわってはいなかったのだが、記事の見やすさを向上させるため、見出しタグや、コード表示のためのpreタグのCSSを修正することにすることにした。

見出しのデザインはCSSのコピペだけ!おしゃれな見出しのデザイン例まとめ68選が非常に参考になった。

上記URLのデザインを参考にしつつ、本ブログでは以下の通りCSSを追加した。
h2 {
font-size: medium;
margin-top: 1.5em;
margin-bottom: 0.5em;
padding: 0.3em;
color: #494949;
background: #f4f4f4;
border-left: solid 5px #249fa3;
border-bottom: solid 3px #d7d7d7;
}

h3 {
margin-top: 1.5em;
margin-bottom: 0.5em;
padding: 0.3em 0em;
border-bottom: solid 3px #249fa3;
}

pre {
background: #e2f1ea;
border: dashed 1px #249fa3;
margin: 1em 0em;
}

table, td, th {
border: solid 1px #249fa3;
border-collapse: collapse;
margin: 1em 0em;
}

th {
background: #e2f1ea;
}
Bloggerのテーマの編集からCSSの追加はできるが、CSSが二重で設定されたりするので、「HTMLの編集」にて追加した。

StackEditで作成したHTMLをBloggerに貼る

StackEditの「Export to disk」→「Export as HTML」を選択し、「Plain HTML」を選んだ後、「Copy」ボタンを押すと、HTMLがクリップボードにコピーされる。これをBloggerの記事のHTMLとして貼りつけてやればよい。


画像はStackEditではなくBlogger側で管理させたいため、HTMLを貼りつけた後、必要な個所に画像を挿入する手法をとっている。

また、Bloggerの仕様により段落を表すpタグが消えるようなので、<br />を適宜挿入し、文章の整形をしている。
2019年1月23日水曜日

VyOSでステートフルフェイルオーバー(conntrack-sync)をできるようにした話

以前、VyOSを冗長化するために、VRRPによる冗長化を記事にした。
VRRPだけでも障害時は数秒で切り替わることが確認できており、特に動作に不満はないのだが、VyOSではTCPやUDPのコネクション情報をフェイルオーバー時に引き継ぐ「ステートフルフェイルオーバー」という機能が実装できることを知った。これはVyOSでは「conntrack-sync」と呼ばれる機能となる。本記事では、VyOSでのconntrack-syncの設定を行い、動作確認をしてみた。

環境

環境は以下の通りとなる。利用しているVyOSのバージョンは1.1.8となる。


VRRPの設定

VyOSでVRRPを実装する方法は、以下の過去記事に記載しており、本記事ではVyOS2台でVRRPの構成が組まれていることが前提となる。

conntrack-syncを設定する

設定は2台のVyOS両方に対し、同じコマンドで設定する。

VyOS#1設定

まずはVyOS#1の設定をコメント付きで記載する。
vyos@t3033vyos# set service conntrack-sync accept-protocol 'tcp,udp,icmp'
→★conntrack-syncで同期するプロトコルとしてTCP/UDP/ICMPを設定
vyos@t3033vyos# set service conntrack-sync failover-mechanism vrrp sync-group syncgrp01
→★フェイルオーバーのタイプをVRRPに設定
vyos@t3033vyos# set service conntrack-sync interface eth1
→★情報同期に利用するインタフェースを指定

vyos@t3033vyos# compare
[edit service]
+conntrack-sync {
+    accept-protocol tcp,udp,icmp
+    event-listen-queue-size 8
+    failover-mechanism {
+        vrrp {
+            sync-group syncgrp01
+        }
+    }
+    interface eth1
+    mcast-group 225.0.0.50
+    sync-queue-size 1
+}
vyos@t3033vyos# commit
vyos@t3033vyos# save

VyOS#2設定

続いてVyOS#2の設定となるが、コマンドは完全に同一となる。
vyos@t3032vyos# set service conntrack-sync accept-protocol 'tcp,udp,icmp'
vyos@t3032vyos# set service conntrack-sync failover-mechanism vrrp sync-group syncgrp01
vyos@t3032vyos# set service conntrack-sync interface eth1
vyos@t3032vyos# compare
[edit service]
+conntrack-sync {
+    accept-protocol tcp,udp,icmp
+    event-listen-queue-size 8
+    failover-mechanism {
+        vrrp {
+            sync-group syncgrp01
+        }
+    }
+    interface eth1
+    mcast-group 225.0.0.50
+    sync-queue-size 1
+}
vyos@t3032vyos# commit
vyos@t3032vyos# save

動作確認

conntrack-syncのステータスを確認

設定が完了したら、conntrack-syncのステータスを確認する。VyOS#1がMaster、VyOS#2がStandbyになっている。
  • VyOS#1
vyos@t3033vyos:~$ show conntrack-sync status
sync-interface        : eth1
failover-mechanism    : vrrp [sync-group syncgrp01]
last state transition : MASTER at Sun Jan 20 06:11:04 JST 2019
ExpectationSync       : disabled
  • VyOS#2
vyos@t3032vyos:~$ show conntrack-sync status
sync-interface        : eth1
failover-mechanism    : vrrp [sync-group syncgrp01]
last state transition : BACKUP at Sun Jan 20 06:13:05 JST 2019
ExpectationSync       : disabled

保持しているコネクション情報を確認

conntrack-syncでは、2つのコネクション情報を管理している。
  1. 自身のもつコネクション情報(Internal Cache)
  2. 対向ルーターが持つコネクション情報(External Cache)
簡単に図に書くと以下の通りとなる。各ルーターはExternal Cacheとして対向ルーターのコネクション情報を同期しており、対向ルーター障害時に、即座に引き継げる。
VyOS#1VyOS#2マルチキャスト(225.0.0.50)でInternal Cacheを送信受信したCacheをExternal Cacheとして保持マルチキャスト(225.0.0.50)でInternal Cacheを送信受信したCacheをExternal Cacheとして保持VyOS#1VyOS#2
実際にコマンドで確認してみよう。実行タイミングで随時変更が入るため完全に同一とならないが、2台のルーター間で「cache internal」と「cache external」がほぼ同数となっていることがわかる。
  • VyOS#1
vyos@t3033vyos:~$ show conntrack-sync statistics
Main Table Statistics:

cache internal:
current active connections:              128
connections created:                  138830    failed:            0
connections updated:                  431529    failed:            0
connections destroyed:                138702    failed:            0

cache external:
current active connections:               19
connections created:                   77975    failed:            0
connections updated:                    4198    failed:            0
connections destroyed:                 77956    failed:            0

traffic processed:
                   0 Bytes                         0 Pckts

multicast traffic (active device=eth1):
            39144744 Bytes sent              7447944 Bytes recv
              546040 Pckts sent               116175 Pckts recv
                   0 Error send                    0 Error recv

message tracking:
                   0 Malformed msgs                  537 Lost msgs

  • VyOS#2
yos@t3032vyos:~$ show conntrack-sync statistics
Main Table Statistics:

cache internal:
current active connections:               12
connections created:                   83300    failed:            0
connections updated:                    6895    failed:            0
connections destroyed:                 83288    failed:            0

cache external:
current active connections:              128
connections created:                  167162    failed:            0
connections updated:                  349591    failed:            0
connections destroyed:                167034    failed:            0

traffic processed:
                   0 Bytes                         0 Pckts

multicast traffic (active device=eth1):
             7474996 Bytes sent             38942708 Bytes recv
              116529 Pckts sent               543314 Pckts recv
                   0 Error send                    0 Error recv

message tracking:
                   0 Malformed msgs                 2418 Lost msgs

フェイルオーバー時の動作を確認する

VyOS#1を停止させ、VRRPがフェイルオーバーした際のconntrack-syncの動作確認を行う。
まずは、VyOS#2にて、VRRPの状態確認を行う。MASTERになっている。
vyos@t3032vyos:~$ show vrrp
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              10     MASTER  no         no     4s          syncgrp01
eth1              10     MASTER  no         no     4s          syncgrp01
次にconntrack-syncのステータス確認を行うと、こちらもMASTERになっている。
vyos@t3032vyos:~$ show conntrack-sync status
sync-interface        : eth1
failover-mechanism    : vrrp [sync-group syncgrp01]
last state transition : MASTER at Mon Jan 21 06:47:09 JST 2019
ExpectationSync       : disabled
コネクション情報を確認すると、VyOS#1のコネクション情報がVyOS#2に引き継がれており、Internal Cacheが増加していることがわかる。
vyos@t3032vyos:~$ show conntrack-sync statistics
Main Table Statistics:

cache internal:
current active connections:              157
connections created:                   84647    failed:            0
connections updated:                    7251    failed:            0
connections destroyed:                 84490    failed:            0

cache external:
current active connections:                0
connections created:                  173852    failed:            0
connections updated:                  370742    failed:            0
connections destroyed:                173852    failed:            0

traffic processed:
                   0 Bytes                         0 Pckts

multicast traffic (active device=eth1):
             7660420 Bytes sent             41014156 Bytes recv
              121520 Pckts sent               572546 Pckts recv
                   0 Error send                    0 Error recv

message tracking:
                   0 Malformed msgs                 2418 Lost msgs

参考

2019年1月16日水曜日

ZabbixをActive Directoryのユーザーで認証させる方法

Zabbixは、初期設定ではZabbixのデータベースでユーザー管理が実装されている。これをActive Directoryのユーザーで認証できるよう設定してみることにした。

実施環境

本検証を実施した環境は以下の通り。
  • OS : CentOS 7.5
  • Zabbix : Zabbix 4.0

Active Directory認証設定手順

1. Active Directory認証用のユーザー作成

ZabbixからActive Directory認証を行うにあたり、Bind DNと呼ばれるユーザー検索用のユーザーを1つ作成する必要があるので、事前に作成しておくこと。今回は、ユーザー名「ldapuser」で権限を「Domain Guests」で作成した。

2. Active Directory認証を設定

Zabbixの「管理」→「認証」→「LDAP認証のの設定」にて、以下の通りLDAPサーバー(今回の場合はActive Directoryドメインコントローラー)を設定する。
  • LDAPホスト:<ドメインコントローラーIPアドレス>
  • ポート:389 ※固定
  • Base DN:ユーザーを検索するOUを指定 (例:ou=My OU,dc=intrat,dc=local)
  • 検索の属性:sAMAccountName ※固定
  • Bind DN:ユーザーを検索するユーザーを指定 (例:ldapuser@intrat.local)
  • ログイン時に大文字小文字を区別:チェック ※固定
  • Bind password:<上記のパスワード>
  • ログイン:Base DN配下に存在する任意のユーザー
  • ユーザーのパスワード:<上記のパスワード>
設定後、「テスト」ボタンを押し「LDAPによるログインが成功しました」と表示されれば、設定に問題がないことを確認できる。



テスト後、必ず「更新」ボタンを押して設定反映をしておくこと。


3. Active Directory認証用グループを作成

「管理」→「ユーザーグループ」より、LDAP認証用のグループを「Active Directory Users」という名前で作成しておく。作成画面で「Webインターフェースへのアクセス」を「LDAP」にすること。


4. Active Directory認証用ユーザを作成

Active Directoryに存在するユーザー名を「エイリアス」に記載し、グループを先ほど作成した「Active Directory Users」に設定して、ユーザーを作成する。なお、パスワードは空白のままで問題ない。


5. ログイン確認

先ほど作成したユーザーで、ログインができることを確認しよう。パスワードは、当然Active Directoryに登録されたものを入力する。



以下の通り正常にログインすることができた。


人気の投稿