NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

ONTAP9.4 で各カウンタを取得するコマンド

コントローラ単位

例)コントローラ単位で、CPU、メモリ、IOPS 関連のカウンタを1秒間隔で取得して表示

> set diagnostic
*> statistics show-periodic -object system:node -instance cl-01 -interval 1  -counter cpu_busy|memory|read_ops|write_ops|total_ops|system_ops|read_latency|write_latency|total_latency|instance_name
cl: system:node.cl-01: 7/5/2019 23:07:47
  cpu instance              read            system    total    total    write    write    Complete    Number of
 busy     name   memory  latency read_ops      ops  latency      ops  latency      ops Aggregation Constituents
 ---- -------- -------- -------- -------- -------- -------- -------- -------- -------- ----------- ------------
   3%    cl-01     2160      0us        0        2      0us        0      0us        0      Yes      1
   1%    cl-01     2160      0us        0        8      0us        0      0us        0      Yes      1
   2%    cl-01     2160      0us        0        2      0us        0      0us        0      Yes      1
   1%    cl-01     2160      0us        0        2      0us        0      0us        0      Yes      1
   1%    cl-01     2160      0us        0        0      0us        0      0us        0      Yes      1
   2%    cl-01     2160      0us        0        2      0us        0      0us        0      Yes      1
   1%    cl-01     2160      0us        0        5      0us        0      0us        0      Yes      1

ボリューム単位

例)ボリューム単位で、CPU、メモリ、IOPS 関連のカウンタを1秒間隔で取得して表示

> set diagnostic
*> statistics show-periodic -object volume -instance vol1 -interval 1 -counter avg_latency|instance_name|read_latency|read_ops|total_ops|write_latency|write_ops
cl: volume.vol1: 7/5/2019 23:12:21
      avg instance     read             total    write    write    Complete    Number of
  latency     name  latency read_ops      ops  latency      ops Aggregation Constituents
 -------- -------- -------- -------- -------- -------- -------- ----------- ------------
      0us     vol1      0us        0        0      0us        0      n/a      n/a
      0us     vol1      0us        0        0      0us        0      n/a      n/a
      0us     vol1      0us        0        0      0us        0      n/a      n/a
      0us     vol1      0us        0        0      0us        0      n/a      n/a
      0us     vol1      0us        0        0      0us        0      n/a      n/a
      0us     vol1      0us        0        0      0us        0      n/a      n/a
      0us     vol1      0us        0        0      0us        0      n/a      n/a

以上

Data ONTAP 7-Mode を Cluster-Mode へ変換する方法について

NetApp の DataOntap のモードを、7-Mode から Cluster-Mode に変換する手順です。
※この手順を使用すると、ディスク上のデータおよび、設定は保持されず、すべてのデータが失われます。

1. 「クラスタフェイルオーバー」を無効にして、ノードを再起動し、LOADER プロンプトに移行

> cf disable   ...クラスタ構成でない場合不要
> cf status   ...クラスタ構成でない場合不要 
> halt -f   ...クラスタ構成でない場合「-f」は不要

2. 環境変数変更

LOADER> set-defaults
LOADER> setenv AUTOBOOT false
LOADER> setenv bootarg.init.bootmenu true

3. 環境変数確認

LOADER> printenv AUTOBOOT
LOADER> printenv bootarg.init.bootmenu

4. Config 消去

LOADER> boot_ontap
※CTRL + C を押下し、Boot Menu で「wipeconfig」を入力して実行

5. 環境変数変更(7-Mode を Cluster-Mode へ変換)

LOADER> set-defaults
LOADER> setenv bootarg.init.boot_clustered true

6. 環境変数確認

LOADER> printenv bootarg.init.boot_clustered

7. ノード構成をリセット

LOADER> boot_ontap
※CTRL + C を押下し、Boot Menu で「4」を実行

8. Zeroing 完了後、Cluster Setup が起動

以上

Zabbix 4.2 簡易構築手順

基本設定

日本語キーボード配列設定

sudo dpkg-reconfigure keyboard-configuration

Generic 105-key (Intl) PC -> Japanese -> Japanese -> The Default for the keyboard layout -> No compose key と選択します。

vi 互換モード OFF*1

touch ~/.vimrc
vi ~/.vimrc
set nocompatible

Backspace の有効化

vi ~/.vimrc
set backspace=indent,eol,start

ネットワーク設定

インターフェース確認

ifconfig -a

ネットワーク設定

sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens32
iface ens32 inet static
address 192.168.1.31
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

※vi で read only のファイルを sudo で強制的に保存

:w !sudo tee %
:q!

デフォルトルート設定

sudo route add default gw 192.168.1.2

DNS 設定

vi /etc/resolved.conf
nameserver 8.8.8.8

Zabbix ホスト登録

以下の URL にアクセスします。

http://ZabbixIP/zabbix/
Admin:zabbix

右上の人型アイコンから日本語設定をします。
f:id:FriendsNow:20190531232454p:plain

設定 -> ホストの作成をクリック
f:id:FriendsNow:20190531232521p:plain

ホスト名、グループ、IP アドレス/DNS 名 を指定し「追加」をクリック
f:id:FriendsNow:20190531232538p:plain

登録されたホスト名をクリック
f:id:FriendsNow:20190531232554p:plain

テンプレートをクリック
f:id:FriendsNow:20190531232947p:plain

任意のテンプレートを選択して「追加」をクリック
f:id:FriendsNow:20190531233024p:plain

「更新」をクリックして完了
f:id:FriendsNow:20190531233036p:plain

監視データ確認

監視データ -> 最新データ 等で状態を確認できます。
f:id:FriendsNow:20190531233047p:plain

以上

*1:vi で方向キーが ABCD を入力してしまう問題の解決

VCSA6.7 で「503 Service Unavailable」エラー

VCSA6.7 へ Web アクセスした際、以下のエラーが発生して接続できない事象がありました。

503 Service Unavailable (Failed to connect to endpoint: [N7Vmacore4Http20NamedPipeServiceSpecE:0x0000562eebf99a50] _serverNamespace = / action = Allow _pipeName =/var/run/vmware/vpxd-webserver-pipe)

このエラーがでた場合、vpxd のサービスが落ちている可能性があります。
vpxd のサービスのステータスは、VCSA へ SSH へログインして、以下の手順で確認します。

> shell
# service-control --status
Stopped:
 vpxd

vpxd サービスが Stopped となっている場合、以下のコマンドで Running にします。

# service-control --start vpxd
# service-control --status vpxd
Running:
 vpxd

私が経験した事象では、vpxd を上記手順及び、VCSA 再起動により起動しても、すぐに Stopped になりました。
原因はデーターベースの肥大化に起因するものと判明しました。対処方法は以下のとおりです。

/storage/seat 領域を確認

# df -h /dev/mapper/seat_vg-seat
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/seat_vg-seat  9.8G   73M  9.2G   1% /storage/seat

本例では Use% が 1% となっていますが、95% 以上となっている場合は、vpxd が起動不可となります。

postgres データベースへ接続

# cd /opt/vmware/vpostgres/current/bin 
# ./psql -d VCDB -U postgres 

肥大化しているテーブルを確認

VCDB# SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 5; 
           relation           | total_size
------------------------------+------------
 vc.vpx_host_vm_config_option | 5032 kB
 vc.vpx_event_arg_72          | 2552 kB
 vc.vpx_event_arg_83          | 2480 kB
 vc.vpx_task                  | 2432 kB
 vc.vpx_event_arg_75          | 2352 kB
(5 rows)

肥大化しているテーブルを削除(本例では、vc.vpx_task を削除)

truncate table vc.vpx_task cascade;

上記を、Use% が 90% 以下となるまで実施後、VCSA を再起動することで vpxd が起動できました。

なお、再発防止のため、肥大化しているテーブルがタスク/イベント関連の場合、イベント保持期限日数を調整する必要があるかもしれません。

(参考)データベース設定の構成


以上

Python 3.7.3(for Windows)のインストールについて

Python のインストール

以下のサイトから、Python のインストーラーをダウンロードします。
https://www.python.org/
Downloads -> Windows -> Python3.7.3 を選択
f:id:FriendsNow:20190520194851p:plain

ダウンロードしたインストーラーを実行し、インストールします。
"Add_Python 3.7 to PATH" を選択して、"Install Now" をクリックします。
f:id:FriendsNow:20190520194934p:plain

コマンドプロンプトを管理者権限で実行し、以下を実行してヘルプが表示されれば OK です。

python -h

パッケージのインストール

Python では pip というパッケージ管理ツールを使用して、公式やサードパーティ製のパッケージをインストールできます。以下は、データー解析パッケージの Pandas のインストール例です。

Pnadas のインストール

python -m pip install pandas

pip でインストールしたパッケージの確認

python -m pip list

以上

VMware PowerCLI で Horizon 7 環境を制御する

VMware PowerCLI を使って Horizon 7 環境を制御する手順を紹介します。
VMware PowerCLI 6.5.2 以降では、MSI 形式の提供は廃止され、PowerShell Garallry 経由によるインストールとなったようです。
MSI 形式の提供を廃止した理由は、リリース期間の短縮や、より新機能をタイムリーに提供するためとのこと。
参考:
https://kogelog.com/2017/08/29/20170829-03/
https://www.powershellgallery.com/packages/VMware.PowerCLI/11.2.0.12780525

VMware PowerCLI インストール

Windows PowerShell を管理者権限で起動、利用可能な VMware PowerCLI を確認

Find-Module -Name VMware.PowerCLI

VMware.PowerCLI モジュールをインストール

Install-Module -Name VMware.PowerCLI

VMware.PowerCLI の各モジュールをインストール

Get-Module -Name VMware.*View -ListAvailable | Import-Module

拡張機能のインストール

VMware 社が提供する拡張機能をインストール
1. GitHub リポジトリページへアクセス
2. 緑色の [Clone or Download] をクリックし、[Download ZIP] をクリック
3. zip ファイルを解凍し、Modules\VMware.Hv.Helper フォルダを以下のディレクトリにコピー
・ユーザ固有 : %UserProfile%\Documents\WindowsPowerShell\Modules
・システム全体: C:\Program Files\WindowsPowerShell\Modules
4. 拡張機能を解除

dir 'C:\Program Files\WindowsPowerShell\Modules\VMware.Hv.Helper\' | Unblock-File

Horizo​​n Connection Server 接続

Horizo​​n Connection Server 接続

Connect-HVServer -Server cs01.example.com -User Administrator@example.com -Password Password

Horizo​​n Connection Server 切断

Disconnect-HVServer -Server cs01.example.com

注意点:
コマンド実行時、以下のエラーが出力される場合があります。

Connect-HVServer : 機関 '192.168.1.151' との SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした。

以下のコマンドを実行し、IP ではなくホスト名を使用することで解決します。

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

コマンド実行例

仮想デスクトップの状態を確認

> Get-HVMachineSummary

Machine         DesktopPool  DNS Name     User     Host            Agent Datastore  Status
-------         -----------  --------     ----     ----            ----- ---------  ------
win10-1         testpool     win10-1.e...          192.168.1.11    7.6.0 ds01       AVAILABLE

「使用可能」となっている仮想デスクトップの台数を抽出

> (get-hvmachinesummary | where {$_.base.basicstate -eq "AVAILABLE"}).count
1234

スクリプト例

仮想デスクトップの状態を表示するスクリプト例

#-------------------------------------------------------------------------
# 変数
#-------------------------------------------------------------------------
$cs = 'cs01.example.com'	# CS サーバの FQDN
$csUser= 'Administrator'	# CS サーバ接続に使用するユーザ名
$csPassword = 'Passw0rd!'	# CS サーバ接続に使用するパスワード
$csDomain = 'example.com'	# CS サーバが所属するドメイン名

#-------------------------------------------------------------------------
# 初期設定
#-------------------------------------------------------------------------
# --- PowerCLI モジュールのインポート ---
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# --- CS サーバへの接続 ---
$hvServer1 = Connect-HVServer -Server $cs -User $csUser -Password $csPassword -Domain $csDomain

#-------------------------------------------------------------------------
# 仮想デスクトップの状態を表示
#-------------------------------------------------------------------------
Write-Output "仮想デスクトップの状態を表示します。"
Get-HVMachineSummary | Format-table -AutoSize

# --- CS サーバの切断 ---
Write-Output "", "CS サーバの接続を切断します。"
Disconnect-HVServer -Server $cs

問題のある VM を検出して、再起動を実行するスクリプト例
参考:VMware EUC Blog

#-------------------------------------------------------------------------
# 変数
#-------------------------------------------------------------------------
$cs = 'cs01.example.com'		# CS サーバの FQDN
$csUser= 'Administrator'		# CS サーバ接続に使用するユーザ名
$csPassword = 'Passw0rd!'		# CS サーバ接続に使用するパスワード
$csDomain = 'example.com'		# CS サーバが所属するドメイン名

$vc = 'vc01.example.com'		# VC サーバの FQDN 
$vcUser = 'administrator@vsphere.local'	# VC サーバ接続に使用するユーザ名
$vcPassword = 'Passw0rd!'		# VC サーバ接続に使用するパスワード

$baseStates = @('PROVISIONING_ERROR',
                'ERROR',
                'AGENT_UNREACHABLE',
                'AGENT_ERR_STARTUP_IN_PROGRESS',
                'AGENT_ERR_DISABLED',
                'AGENT_ERR_INVALID_IP',
                'AGENT_ERR_NEED_REBOOT',
                'AGENT_ERR_PROTOCOL_FAILURE',
                'AGENT_ERR_DOMAIN_FAILURE',
                'AGENT_CONFIG_ERROR',
                'UNKNOWN')

#-------------------------------------------------------------------------
# 初期設定
#-------------------------------------------------------------------------
# --- PowerCLI モジュールのインポート ---
Import-Module VMware.VimAutomation.HorizonView
Import-Module VMware.VimAutomation.Core

# --- CS サーバへの接続 ---
$hvServer1 = Connect-HVServer -Server $cs -User $csUser -Password $csPassword -Domain $csDomain

# --- View API 連携サービスを取得 ---
$Services1= $hvServer1.ExtensionData

# --- VC サーバへの接続 ---
Connect-VIServer -Server $vc -User $vcUser -Password $vcPassword

#-------------------------------------------------------------------------
# 問題の仮想デスクトップ検出と再起動
#-------------------------------------------------------------------------
Write-Output ""
if ($Services1) {
     foreach ($baseState in $baseStates) {
           # --- 問題の仮想デスクトップを検出 ---
           $ProblemVMs = Get-HVMachineSummary -State $baseState

           foreach ($ProblemVM in $ProblemVMs) {
                $VM = Get-VM -Name $ProblemVM.Base.Name
                # --- 問題の仮想デスクトップを再起動 ---
                Restart-VMGuest -VM $VM
           }
     }
     Write-Output "", "CS サーバの接続を切断します。"
     Disconnect-HVServer -Server $cs
} else {
     Write-Output "", "CS サーバの接続に失敗しました。"
     pause
     }
# --- VC サーバの切断 ---
Write-Output "", "VC サーバの接続を切断します。"
Disconnect-VIServer -Server $vc

以上

仮想ディスクダイジェストの再計算について

vCenter 上で「仮想ディスクダイジェストの再計算」というタスクが頻繁に発生し、この処理が発生している間、「ホストごとの読み取りIOPS」が高くなるという事象に遭遇しました。
「仮想ディスクダイジェストの再計算」は、View Storage Accelerator の関連処理となります。

View Storage Accelerator とは

  • 仮想マシンのディスクデータをキャッシュする機能 ※ブートストーム発生時*1の IOPS を削減
    • View は各仮想ディスクファイルの内容にインデックスを付け、ダイジェストファイルに格納
    • 仮想マシン実行時に、ESXi ホストはダイジェストファイルを読み取り、メモリにキャッシュ
    • ESXi ホストのキャッシュを最新に保つために、指定した間隔(デフォルト7日間)および、仮想マシンの再構成(レプリカ VM の入替え)時にダイジェストファイルが再生成*2
  • 引用元:View Composer リンク クローン用の View Storage Accelerator の構成

View Storage Accelerator の注意事項

その他

通常、指定した間隔および、仮想マシンの再構成時に発生する「仮想ディスクダイジェストの再計算」ですが、仮想マシンの再起動時に発生するといった事象がありました。原因不明ですが、View Storage Accelerator を無効→有効化することで解消しました。

以上

*1:多くのマシンが一斉に起動する場合や、ウイルス対策スキャンを同時に実行する場合など

*2:この再生成が「仮想ディスクダイジェストの再計算」処理となります。

*3:ログオンストームが発生する時間帯 等