2018年9月26日水曜日

ESXi 6.7では、ESXi on ESXiが少しだけ簡単にできるようになった話

以前、ESXi on ESXiを実施する方法を以下記事で紹介した。

★以前の記事はこちら↓

ESXi 6.0上にESXi 5.5の仮想マシンを作って、ESXi用のVMware Toolsをインストールした話 (ESXi on ESXi)
https://tech-mmmm.blogspot.com/2017/04/esxi-60esxi-55esxivmware-tools-esxi-on.html

今回は、ESXi 6.7では少しだけ簡単にESXi on ESXiができるようになっていたという小ネタを記載する。ちなみに、ESXi on ESXiだけでなく、Hyper-V on ESXiも同様の設定で可能となる。

ESXi 6.7でのESXi on ESXiの設定方法

仮想マシンのvmxファイルに以下1行を追記するだけでよい。

------------------------------
vhv.enable = "TRUE"
------------------------------

ESXi Shellなどを使い以下コマンドで実行すると楽である。

# echo 'vhv.enable = "TRUE"' >> /vmfs/volumes/<データストア名>/<仮想マシン名>/<仮想マシン名>.vmx

以上!

参考:以前のESXiでのESXi on ESXiの設定方法

参考情報となるが、ESXi 6.0以前のESXiでは、以下2行を追加する必要があった (ESXi 6.5は未確認)。

------------------------------
vhv.enable = "TRUE"
hypervisor.cpuid.v0 = "FALSE"
------------------------------

詳細は省くが、さらに以前のESXi (5.x) では、他にも設定が必要だったと記憶しているので、それを考えるとESXi on ESXiはどんどん簡単にできるようになっている (そろそろデフォルトでもできるようにすればよいのにさえ思う)。

2018年9月20日木曜日

Zabbix 4.0.0rc1 (リリース候補版) をインストールしてみた


2018年9月時点のZabbixの次期バージョンとなる「Zabbix 4.0」のRC版 (リリース候補版) が2018年9月18日にリリースされたようだ。

※2018/10/1追記
Zabbix 4.0.0がリリースされた模様。

Zabbix - Release notes
https://www.zabbix.com/release_notes


正式なリリース版ではないが、ほぼ完成形となるリリース候補版となるので、一足早くインストールして使ってみることにした。

OSはCentOS 7.5を使い、DBはMariaDBで構築してみることにする。

インストール手順

1. SELinuxとfirewalldを停止する

これらが動いているとうまく動作しないことが多いので停止しておく。

# sed -i.org 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
# systemctl stop firewalld
# systemctl disable firewalld
# reboot

2. MariaDBのインストール

yumでMariaDBをインストールする。設定は特に変更せずデフォルトで起動させておく。

# yum install mariadb mariadb-server
# systemctl start mariadb
# systemctl enable mariadb

3. Zabbix 4.0.0rc1をインストール

以下コマンドを実行することで、Zabbix 4.0.0rc1をインストールすることができる。

# rpm -i https://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
------------------------------
警告: /var/tmp/rpm-tmp.eTV3b3: ヘッダー V4 RSA/SHA512 Signature、鍵 ID a14fe591: NOKEY
------------------------------

# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-web-japanese
------------------------------
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.usonyx.net
 * extras: download.nus.edu.sg
 * updates: centos.usonyx.net
zabbix                                                   | 2.9 kB     00:00
zabbix-non-supported                                     |  951 B     00:00
zabbix/x86_64/primary_db                                   |  83 kB   00:00
zabbix-non-supported/x86_64/primary                        | 1.6 kB   00:00
zabbix-non-supported                                                        4/4
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ zabbix-agent.x86_64 0:4.0.0-1.1rc1.el7 を インストール
---> パッケージ zabbix-server-mysql.x86_64 0:4.0.0-1.1rc1.el7 を インストール

~(中略)~

  unixODBC.x86_64 0:2.3.1-11.el7
  vlgothic-p-fonts.noarch 0:20130607-2.el7
  zabbix-web.noarch 0:4.0.0-1.1rc1.el7

完了しました!
------------------------------

4. DBの初期設定

DBの初期設定として、DB作成とユーザーへの権限付与を行う。

まずは、MariaDBに接続する。

# mysql -u root
------------------------------
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
------------------------------

DB「zabbix」を作成する。

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
------------------------------
Query OK, 1 row affected (0.00 sec)
------------------------------

DB「zabbix」に対し、全権限をユーザー「zabbix」に付与しておく。パスワード (青字箇所) はお好みで設定すればよい。

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
------------------------------
Query OK, 0 rows affected (0.00 sec)
------------------------------

MariaDB [(none)]> quit;

初期化用SQLファイルが用意されているので、以下コマンドで流し込みを行う。

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -u zabbix -p zabbix
------------------------------
Enter password:   ←★先ほど設定したzabbixユーザーのパスワードを入力
------------------------------

5. Zabbixの初期設定

以下2つのファイルにそれぞれ変更を加える。

# vi /etc/zabbix/zabbix_server.conf
------------------------------
DBPassword=password   ←★先ほど設定したzabbixユーザーのパスワードを設定
------------------------------

# vi /etc/httpd/conf.d/zabbix.conf
------------------------------
php_value date.timezone Asia/Tokyo   ←★アンコメントしてAsia/Tokyoに変更
------------------------------

6. Zabbixを起動

以上で準備が整ったので、Zabbixを起動させてみる。

# systemctl restart zabbix-server zabbix-agent httpd
# systemctl enable zabbix-server zabbix-agent httpd

7. Web画面で初期セットアップを行う

以下URLにアクセスし、初期セットアップを行う。

http://<Zabbixサーバーのホスト名 or IPアドレス>/zabbix/

最初の画面では、「Next step」を選択する。


「Check of pre-requisites」では、すべて「OK」となっていることを確認する。通常はデフォルト設定ですべて「OK」となっているはずである。


「Configure DB connection」では、事前に設定したパスワードを入力し、他はデフォルトのままとする。


「Zabbix server details」では、「Name」がデフォルト空白なのでホスト名など入れてもよい。「Name」で設定した名前が何に使われるかというと、操作画面の右上に表示されるだけのようなので、空白のままでも動作に支障はない。


「Pre-installation summary」で設定を再確認できる。


問題なければ以下のような画面が表示されるはずだ。


8. Zabbix 4.0にログインする

初期設定が終わるとログイン画面に遷移するので、早速ログインしてみよう。初期ID/パスワードは以下の通り。
  • ID:Admin
  • パスワード:zabbix


初回ログイン時は言語が英語になっているので、 右上の人のアイコンを選択し、ユーザープロファイルの画面から、「Language」を「Japanese (ja_JP)」に変更しておく。


「設定」タブ→「ホスト」に移動すると、「Zabbix server」が1台登録されているが、ステータスが「無効」になっている。


「無効」の文字をクリックすることで「有効」にすることができる。


以上でZabbix 4.0.0rc1のインストールが完了となる。まだ詳細に確認できていないが、画面は3.0と大きく差はないようだ。これからいろいろ設定をしていきながら、細部の確認をしていこうと思う。

2018年9月16日日曜日

Ansible AWXをインストールしてみた


Ansibleはコマンドベースで実行するツールとなるが、AnsibleをGUIで操作するためのツールとしてAWXと呼ばれるものが存在する。AWXはRed Hat社のAnsible Towerのコミュニティ版と呼べる存在で、無償で利用することができる

今回、AWXをインストールしてみた。ちょっと複雑な箇所もあるため、インストール手順を時系列に記載しまとめることにする。

環境

環境は以下の通り。AWXはDockerにて動作させることを前提に設計されているらしい。なお、私はDocker初心者となる。
  • CentOS : 7.5
  • Docker : 1.13.1
  • Ansible : 2.4.2.0
  • AWX : 1.0.7.2

AWXのインストール手順

1. 前提パッケージのインストール

前提パッケージをyumにてインストールする。

# yum install git docker docker-python

Dockerに関しては起動設定をしておこう。

# systemctl start docker
# systemctl enable docker

2. 事前準備

SELinuxが動いていると、AWXからPlaybook参照時に失敗するようなので、SELinuxは停止しておく。なお、ここでOS再起動して必ずSELinuxを無効化すること。そうしないと、OS再起動時にコンテナ起動ができなくなる。

# vi /etc/sysconfig/selinux
------------------------------
SELINUX=disabled
------------------------------
# reboot

私の自宅検証環境は、インターネットアクセス時にプロキシを経由する環境となるため、Dockerのプロキシ設定を実施しておく。

# mkdir /etc/systemd/system/docker.service.d
# vi /etc/systemd/system/docker.service.d/http-proxy.conf
------------------------------
[Service]
Environment="HTTP_PROXY=http://192.168.33.23:8080/"
Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"
------------------------------
# systemctl restart docker

なお、この後手順として出てくるが、AWXのinventoryファイルでも、プロキシ設定をする必要がある。

3. AWXをgitにて入手

gitにてAWXを入手する。9/16時点の最新版は1.0.7のようだ。

# git clone https://github.com/ansible/awx.git
------------------------------
Cloning into 'awx'...
remote: Counting objects: 169687, done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 169687 (delta 48), reused 51 (delta 28), pack-reused 169607
Receiving objects: 100% (169687/169687), 196.17 MiB | 4.82 MiB/s, done.
Resolving deltas: 100% (131154/131154), done.
------------------------------

4. AWXをインストール

AWXのインストール自体もAnsibleで実施する。ただし、そのままインストール用のPlaybookを実行するとプロキシ環境では失敗するため、inventoryファイルの設定修正を行う。

合わせて、デフォルトではDBデータの保存ディレクトリが/tmp配下となっているが、/tmpはCentOS 7では1週間に1回古いファイルの削除処理が入る仕様であり、結果としてAWXが動作しなくなる事象が発生することから、/tmpからディレクトリを変更しておく。

# mkdir /pgdocker
# cd awx/installer/
# vi inventory
------------------------------
# Common Docker parameters
postgres_data_dir=/pgdocker              ←★/tmp/pgdockerから変更
# Proxy
http_proxy=http://192.168.33.23:8080/    ←★追加
https_proxy=http://192.168.33.23:8080/   ←★追加

# AWX project data folder. If you need access to the location where AWX stores the projects
# it manages from the docker host, you can set this to turn it into a volume for the container.
project_data_dir=/var/lib/awx/projects   ←★アンコメント
------------------------------

install.ymlを実行してAWXをインストールする。5分もあれば完了する。

# ansible-playbook -i inventory install.yml
------------------------------
PLAY [Build and deploy AWX] ****************************************************

TASK [check_vars : include_tasks] **********************************************
skipping: [localhost]

TASK [check_vars : include_tasks] **********************************************
included: /root/awx/installer/roles/check_vars/tasks/check_docker.yml for localhost

~(中略)~

TASK [local_docker : Start the containers] *************************************
skipping: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=12   changed=5    unreachable=0    failed=0  ←★failedがないことを確認
------------------------------

5. インストール後確認

インストール結果を確認する。まずdocker imagesコマンドで、イメージを確認する。Docker初心者なのでよくわかっていないが、以下の5行が表示されていればよいようだ。

# docker images
------------------------------
REPOSITORY                     TAG    IMAGE ID     CREATED      SIZE
docker.io/ansible/awx_task     latest 28707c39108a 7 hours ago  1.03 GB
docker.io/ansible/awx_web      latest 920f871452be 7 hours ago  997 MB
docker.io/postgres             9.6    506063568b80 3 days ago   237 MB
docker.io/memcached            alpine b40e8fa7e3e5 5 weeks ago  8.69 MB
docker.io/ansible/awx_rabbitmq 3.7.4  e08fe791079e 4 months ago 85.6 MB
------------------------------

AWXのコンテナの稼働状況は、docker psコマンドにて確認できる。ここに表示されていない場合は正常に起動していない。

# docker ps
------------------------------
CONTAINER ID IMAGE                      COMMAND                  CREATED      
STATUS       PORTS                NAMES
d0aaf8e6453c ansible/awx_task:latest    "/tini -- /bin/sh ..."   29 hours ago 
Up 23 hours  8052/tcp             awx_task
362b111bf0d5 ansible/awx_web:latest     "/tini -- /bin/sh ..."   29 hours ago 
Up 23 hours  0.0.0.0:80->8052/tcp awx_web
51bffae467fc memcached:alpine           "docker-entrypoint..."   29 hours ago 
Up 23 hours  11211/tcp            memcached
e4354159640c ansible/awx_rabbitmq:3.7.4 "docker-entrypoint..."   29 hours ago 
Up 23 hours  4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbitmq
e92b95572075 postgres:9.6               "docker-entrypoint..."   29 hours ago 
Up 23 hours  5432/tcp             postgres
------------------------------

6. AWXで実行するPlaybookを配置する

Playbookは/var/lib/awx/projectsディレクトリ配下にさらにディレクトリを作成し配置することで、AWXが参照することができる。

念のためディレクトリが作成されていることを確認。

# ls -ld /var/lib/awx/projects/
------------------------------
drwxr-xr-x. 2 root root 6  8月 14 10:36 /var/lib/awx/projects/
------------------------------

今回は依然作ったPlaybookを適当に配置しておく。

# mkdir /var/lib/awx/projects/setup_ntpd
# cp /root/setup_ntpd.yml /var/lib/awx/projects/setup_ntpd

7. AWXにログイン

それではAWXにログインしてみよう。ブラウザにて以下情報にてログインできるはずだ。
  • ログイン先 : http://<IPアドレス>/
  • ID : admin
  • Pass: password


ログインするとこんな感じ。


8. AWXでPlaybookを実行してみる

今回の主目的はインストール手順の紹介となるため、細かい手順は割愛するが、おおむね以下手順で実施する。
  1. 認証情報作成:Ansible実行時の管理対象サーバーのID/Password情報を登録
  2. プロジェクト作成:Playbook配置場所の設定。ローカルディレクトリやSVNやGitを指定できる。ローカルディレクトリの場合は、/var/lib/awx/projects/配下にディレクトリを作ってPlaybookを配置する
  3. インベントリー作成:管理対象サーバーを登録
  4. ジョブテンプレート作成:Ansibleを実行するためのジョブを作成
  5. ジョブを実行:作成したジョブを実行する

ジョブの実行結果は以下のような画面で確認できる。


まとめ

以上にてAWXのインストールは完了となる。私の周りではあまり評価がよろしくないAWX (Ansible Tower) だが、個人的にはそこまで悪いものではなさそうに見える。今後、詳細に使い方を確認していこうと思う。

なお、実際に使っている中で、以下2点の問題が発生している。
  • 再起動するとAWXが起動しなくなる
  • AWXのジョブテンプレート作成時に、認証情報が「Invalid search term entered. GET returned: 400 無効な credential_type ID: NaN」でエラーになって選択できない
これらについては別記事で原因と回避方法を記載することにする。

2018年9月14日金曜日

ESXi Shellを使って、コマンドでESXiのSNMP Trapの設定を行う方法

ESXiは通常vCenter Serverのアラーム機能にて監視されるので、ESXi自身で監視設定をすることはあまり需要がないと思うが、無償版のESXiのようにvCenter Serverにて監視することができない環境の場合は、ESXiからSNMP Trapを飛ばす設定をすると監視することができる。

この手順については以前以下記事でも記載している。

★以前の記事はこちら↓

ZabbixでESXiのSNMP Trapを監視する設定
https://tech-mmmm.blogspot.com/2016/05/zabbixesxisnmp-trap.html

前回は直接設定ファイルを書き換える方法で対応したが、ESXiのSNMP設定は、実はすべてコマンドで設定することが可能となっているようだ。そこで、今回はすべてESXi Shellのコマンドで設定する方法を紹介する。なお、環境はESXi 6.7となる。

SNMP Trap設定手順

設定はすべて「esxcli system snmp」コマンドで実施できる。

1. 設定前の状態確認

まず、設定前の状態を確認しておく。「Enable: false」となっており、SNMP Trapの設定がされていないことがわかる。

# esxcli system snmp get
------------------------------
   Authentication:
   Communities:
   Enable: false
   Engineid:
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps:
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets:
   Users:
   V3targets:
------------------------------

2. 設定

SNMP Trap送信の設定を行う。

# esxcli system snmp set -e=true -c=public -t=192.168.33.24@162/public

各オプションの意味は以下の通りとなる。
  • -e=true : SNMPを有効にする。
  • -c=public : コミュニティ名をpublicに設定する
  • -t=192.168.33.24@162/public : SNMP Trapの設定を行う。<送信先のIP>@<ポート番号>/<コミュニティ名>というフォーマットで指定する
設定後、再度設定確認を行う。

# esxcli system snmp get
------------------------------
   Authentication:
   Communities: public                ←★コミュニティ名が指定されている
   Enable: true                       ←★trueになっている
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps:
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets: 192.168.33.24@162 public  ←★SNMP Trap送信先が指定されている
   Users:
   V3targets:
------------------------------

3. SNMP Trapテスト

設定完了後、SNMP Trap送信テストを行う。

# esxcli system snmp test
------------------------------
   Comments: There is 1 target configured, send warmStart requested, test completed normally.
------------------------------

SNMP Trap受信側でTrapの内容を確認しておこう。今回はZabbixあてにTrap送信を行い、以下内容で受信できていることを確認した。

------------------------------
SNMP Trap log (VMware:snmptrap[]): 21:57:19 2018/09/08 .1.3.6.1.6.3.1.1.5.2 Normal "Status Events" t3011esxi - warmStart A warmStart trap signifies that the SNMP entity, 
------------------------------

4. 送信しないSNMP TrapのOIDを登録

上記でSNMP Trapが飛ぶようになったのだが、仮想マシンパワーオン時や、ESXiから仮想マシンへのハートビートに関するSNMP Trapが定期的に飛んでおり、Zabbixで都度検知してしまって困ってしまった。そこで、不要なSNMP Trapは送信しないよう、ESXi側で設定を行う。

今回は以下2つのOIDを検知不要として登録する。
  • vmwVmPoweredOn : 1.3.6.1.4.1.6876.4.1.0.1
  • vmwVmHBLost : 1.3.6.1.4.1.6876.4.1.0.3
  • vmwVmHBDetected : 1.3.6.1.4.1.6876.4.1.0.4
登録コマンドは以下の通り。複数のOIDがある場合は、カンマ区切りで指定する。空白が入るとうまくコマンドが通らないので、カンマの前後に空白は入れないように注意すること。また、OIDを追加で登録することはできなさそうなので、都度、すべてのOIDを指定して登録する必要があるので注意。

# esxcli system snmp set -n=1.3.6.1.4.1.6876.4.1.0.1,1.3.6.1.4.1.6876.4.1.0.3,1.3.6.1.4.1.6876.4.1.0.4

設定を確認する。Notrapsの箇所に正しく登録されていればOK。

# esxcli system snmp get
------------------------------
   Authentication:
   Communities: public
   Enable: true
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps: 1.3.6.1.4.1.6876.4.1.0.1, 1.3.6.1.4.1.6876.4.1.0.3,1.3.6.1.4.1.6876.4.1.0.4
   ↑★登録された
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets: 192.168.33.24@162 public
   Users:
   V3targets:
------------------------------

なお、一度SNMPサービスを有効にした状態で追加設定をした場合は、SNMPサービスの再起動をしなければ設定反映がされないため、以下のようにSNMPサービスを落とし上げを実施する。

# esxcli system snmp set -e=false && esxcli system snmp set -e=true

ちなみに、SNMPサービスの再起動はkill -HUPでも実施できる。プロセスIDが変わるようなので、設定ファイル読み込みというよりは再起動されるようだ。

# kill -HUP `ps -v | grep snmpd | cut -d" " -f1`

2018年9月8日土曜日

TP-Linkのスイッチ「TL-SG108E」でVLANネットワークを構成する

先日、我が家の検証環境のESXiサーバーが増設されて2台となったのだが、2台のESXiサーバーをまたがる通信をする際にセグメントが1つしか作れず、検証作業の制約になることがあった。

そこで、ESXiサーバー間のネットワークをVLANで構成し、複数のセグメントを使えるように構成変更をすることにした。

ESXiサーバーの仮想スイッチはIEEE802.1QのVLANに対応しているので特に問題ないのだが、間に挟むスイッチもIEEE802.1QのVLANに対応している必要がある。今回は、Amazonで売っている「TL-SG108E」を導入することにした。



このスイッチは、VLANに対応している機種としてはおそらく最安値となるが、管理Web GUIを備えており、普通のスイッチよりもいろいろできて、ちょっぴり楽しい仕様のスイッチになっている(欲を言えばSNMP Trapとかも飛ばせて監視できるとよいのだが、その機能は実装されていない)。

ちなみに、TP-SG108 (青色) という似た型番のスイッチがあるが、こちらは何も設定できないスイッチなので、VLANを使いたい場合は必ずTP-SG108E (黒色) を入手しよう。

環境

今回の環境は以下の通り。2台のESXiサーバーとスイッチはTaggedポート(Trunkポート)に接続する。1台NASがあり、VLANに対応していないのでUntaggedポートに接続する。



スイッチ「TL-SG108E」のVLAN設定

TL-SG108Eの管理Web GUIより設定を行う。

1. 802.1Q VLANの有効化

左メニューより「802.1Q VLAN」を選択し、「802.1Q VLAN Configuration」のラジオボタンを「Enable」に変更し、「Apply」ボタンを押下する。


すると以下警告が表示される。802.1Q VLANを設定すると、ポートベースVLANやMTU VLANが無効化される旨の警告となるが、問題ないので「OK」ボタンを押す。


2. VLANを設定

今回はVLAN ID 1011を以下の通り設定した。

------------------------------
・VLAN ID : 1011
・VLAN Name : <空白>
・Port 1 : Tagged
・Port 2 : Tagged
・Port 3 : Untagged
・その他ポート : Not Member
------------------------------


設定後、「Add/Modify」ボタンを押下すると、VLAN ID 1011の設定が追加されていることがわかる。なお、VLAN ID 1のDefault_VLANの設定は設定済みとなっており、削除することができない。


上記設定を投入したのち通信確認をしてみたところ、ESXiサーバー2台間は問題なく通信できるのだが、Untaggedに設定したNASに関しては通信することができなかった。

どうやらこのスイッチは、単純にUntaggedに設定するだけでは通信することができないようだ。原因は、前述したDefault_VLANが全ポートに設定してあり、タグなしで来た通信は、VLAN ID 1の通信として扱われてしまうためである。

そこで、VLAN PVIDを変更することで対処する。

3. VLAN PVIDを設定

VLAN PVIDとは、Port VLAN IDの略となり、タグが付いていない通信を受信した際に、どのVLAN IDの通信としてスイッチ内部で処理するかを決定する設定となる。

左メニューより「802.1Q PVID Setting」を選択する。デフォルトでは全ポート「1」で設定されていることがわかる。


「Port 3」の値を「1011」に変更し、「Apply」ボタンを押下する。


正常に変更されたことを確認する。


変更した直後から、NASへのPing疎通もできるようになった。


これでVLANを使って、複数のセグメントを作ることができるようになった。TP-SG108EのVLANの設定数は最大32個となっているが、それだけあれば十分だろう。

参考

How to configure 802.1Q VLAN on TP-Link Easy Smart/Unmanaged Pro Switches?
https://www.tp-link.com/us/faq-788.html

2018年9月5日水曜日

Ansibleを使ってntpdのインストールと時刻同期の設定を行う

Ansibleでnptdをインストールして時刻同期するところまでをできるようにPlaybookを作成してみた。非常に簡単な処理ではあるが、Ansibleの様々な要素を使うことができ、最初に作るPlaybookとしてちょうどよい難易度だった。

Playbook

いろいろ試行錯誤した結果、Playbookは以下の形となった。

setup_ntp_conf.yml
------------------------------
---
- hosts: all

  vars:
    proxy_env:
      http_proxy: http://192.168.33.23:8080/
      https_proxy: http://192.168.33.23:8080/
  tasks:
    - name: install ntp
      yum: name=ntp state=latest
      environment: "{{ proxy_env }}"

    - name: copy /etc/ntp.conf
      copy:
        src: /root/conf/ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: 0644
        backup: yes
      register: result

    - name: restart ntpd
      systemd:
        name: ntpd.service
        state: restarted
        enabled: yes
      when: result|changed
------------------------------

本Playbookのポイントを記載していこう。

hostsセクション

これについては特筆すべきことはなく、/etc/ansible/hostsに記載されたすべてのサーバーに対して処理を行うよう「all」で指定した。

varsセクション

プロキシを経由しなければインターネット接続ができない環境となっているため、環境変数にてプロキシを指定している。こちらに関しては、以下記事を参照いただきたい。

Ansibleでプロキシを指定してyum updateする
https://tech-mmmm.blogspot.com/2018/08/ansibleyum-update.html

tasksセクション

以下の流れでntpdの構築を行う。

  1. ntpdをyumを使ってインストール
  2. 作成済みのntp.confをコピー
  3. ntp.confに変更があった場合のみntpdをリスタート

ntp.confをコピーする際は、「backup: yes」を指定し、ntp.confファイルのバックアップを取得するように指定した。なお、バックアップは以下のようなファイル名で、同一のディレクトリに取得される。

[root@localhost ~]# ls -l /etc/ntp.conf*
------------------------------
-rw-r--r--. 1 root root  206  8月 10 09:10 /etc/ntp.conf
-rw-r--r--. 1 root root 2000  4月 11 05:29 /etc/ntp.conf.12346.2018-08-10@09:10:14~
------------------------------

また、ntp.confに変更があった場合のみntpdをリスタートするように、ntp.confの置き換え処理の実行結果をregister変数「result」に格納し、「when: result|changed」を指定することで、実行結果が「changed」の場合のみ、ntpdのリスタートが処理されるようにした。

実行結果

ntpdがインストールされていない状態から実行した結果は以下の通り。

[root@t1000cent ~]# ansible-playbook setup_ntp_conf.yml
------------------------------
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]

TASK [install ntp] *************************************************************
changed: [192.168.11.223]

TASK [copy /etc/ntp.conf] ******************************************************
changed: [192.168.11.223]

TASK [restart ntpd] ************************************************************
changed: [192.168.11.223]

PLAY RECAP *********************************************************************
192.168.11.223             : ok=4    changed=3    unreachable=0    failed=0
------------------------------

changed=3となっており、①インストール、②ntp.conf置き換え、③ntpdのリスタートが正常に処理されたようだ。

もう一度、playbookを実行してみる。

[root@t1000cent ~]# ansible-playbook setup_ntp_conf.yml
------------------------------
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]

TASK [install ntp] *************************************************************
ok: [192.168.11.223]

TASK [copy /etc/ntp.conf] ******************************************************
ok: [192.168.11.223]

TASK [restart ntpd] ************************************************************
skipping: [192.168.11.223]

PLAY RECAP *********************************************************************
192.168.11.223             : ok=3    changed=0    unreachable=0    failed=0
------------------------------

2回目は、changed=0となっており、変更は発生しない。ntp.confに変更がないため、ntpdのリスタートが「skipping」ステータスとなっているのがポイント。

ためしに、ntp.confを少し変更して、3回目の実行を試みた。

[root@t1000cent ~]# ansible-playbook setup_ntp_conf.yml
------------------------------
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]

TASK [install ntp] *************************************************************
ok: [192.168.11.223]

TASK [copy /etc/ntp.conf] ******************************************************
changed: [192.168.11.223]

TASK [restart ntpd] ************************************************************
changed: [192.168.11.223]

PLAY RECAP *********************************************************************
192.168.11.223             : ok=4    changed=2    unreachable=0    failed=0
------------------------------

changed=2となっており、②ntp.conf置き換え、③ntpdのリスタートが処理された。

実際に対象サーバーで時刻同期状況を確認してみたところ、以下の通り正常に同期できていることが確認できた。


[root@localhost ~]# ntpq -p
------------------------------
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*t3023ce72.intra 133.243.238.163  2 u   48   64  377    0.274   -1.756   9.654
------------------------------

参考

systemd - Manage services
https://docs.ansible.com/ansible/2.6/modules/systemd_module.html

2018年9月1日土曜日

Dan Cases A4-SFX v3のケースを購入して、第8世代 (Coffee Lake) のIntel CPUのESXiサーバーを自作した話

自宅の検証用PCは、以下記事で記載しているIntel Core i3-4170の省スペースPCを使い続けている。なお、このPCのCPUは、第4世代 (Haswell) のCPUとなる。

★以前の記事はこちら↓

Shuttle DS81を買ってESXi 6.0をインストールした話① (組み立て~起動まで)

Shuttle DS81を買ってESXi 6.0をインストールした話② (ESXi Custom Image作成~インストール完了まで)

様々な検証をしていく中で仮想マシンの数が増加しており、また、Core i3-4170は物理コア数が2個しかなく、性能が不足する場面が多く発生するようになってきた。そこで、2年半ぶりにPCを新調することにした。

前回は省スペースでコストを抑えるコンセプトでPCを組み立てた。しかし、今となっては検証用PCが非常に重要なものになっていることから、今回はもう少しお金をかけて良いものを作るというコンセプトで組み立てることにした。

大まかなコンセプトは以下の通り。
  • PCIeスロットは1つあればよいので、Mini-ITX規格のケース・マザーボードにする
  • CPUは物理コア数が6コアに増加している第8世代 (Coffee Lake) のIntel Core i5またはi7にする
  • メモリは32GBにする
  • ディスクはSSDにする
  • 静音重視の電源・ファンにする

選定機器

結果的に選定したパーツは以下の通り。


区分メーカー選定パーツ費用
ケースDAN CasesA4-SFX v3 Black¥26,598
マザーボードASRockIntel H370チップセット搭載
Mini-ITXマザーボード H370M-ITX/ac
¥14,854
電源SilverStoneSFX電源 300W 92mmFAN搭載 SST-ST30SF V2¥5,980
CPUIntelIntel Core i5-8400 2.8GHZ 6Core/6Thread¥21,600
CPUクーラーNoctuaNH-L9i - 95mm SSO2¥6,037
メモリTEAMDDR4 PC4-19200 2400MHz (16GBx2枚(32GBkit))¥36,980
ディスクCrucialMX500 SSD¥13,576
合計¥125,625

 

 

 

ケースに関しては、かなり高級なDan Cases A4-SFX v3を選定してしまったが、これはもう一目惚れによる購入となる。日本では売っていないので、以下海外サイトにて購入した。

A4-SFX - SFFLAB
https://www.sfflab.com/products/dan_a4-sfx

本体 $225 + 配送料 $10 の合計 $235 となる。問題なければ2週間ほどで配送されてくる。海外サイトだが、クレジットカード払いが問題なくできるので、購入に苦労はしなかった。



CPUはCore i5-8400が最もコストパフォーマンスで優れており、発熱などもCore i7と比較すると低いという情報があったことから採用した。


CPUクーラーや電源は、DAN Casesのサイトで互換性を確認しつつ、静音性の評価が高いものを選んでみた。なお、DAN Cases A4-SFX v3はケース内部のスペースの制約がかなりあるため、必ず互換性リスト (以下URL) を確認して電源やCPUクーラーを選定することをお勧めする。

DAN Cases - Compatibility
https://www.dan-cases.com/dana4_spec.html

電源は、SilverStone  SST-ST30SF V2となる。本体ラベルには「SFX-L」と記載されているが、実際はSFX規格の大きさだった。SFX-Lの場合、ケース内のスペースがさらに厳しくなるので、少し慌ててしまった。


CPUクーラーはちょっと高いが静音性を重視して、Noctua NH-L9iを選んだ。CPU付属のCPUクーラーは静音性や冷却性に難があるとのことなので、使用しないことにした。


このCPUクーラーには、CPUグリスも付いてくるので、個別に用意する必要はない。


NoctuaのNT-H1というCPUグリスとなるが、ちょっとWebで調べてみた限りでは悪い評価はなかったので、こだわりがなければ、こちらを利用することで問題はないだろう。


マザーボードは、ASRock H370M-ITX/acとなる。オンボードのイーサネットポートが2つ付いているのでこちらを選定した。2つのポートのチップセットは同一ではなく、以下2種類が搭載され、それぞれのポートを個別に制御しているようだ。
  • Intel I219-V (下写真の上側のNIC)
  • Intel I211AT (下写真の下側のNIC)


しかし、ESXi 6.7をインストールした際に、Intel I219-VのNICを認識しない事象が発生した。最終的に認識させる方法は見つかったのだが、その件については以下別記事で記載する。

★Intel I219-VのNICを認識させる記事はこちら↓

ESXi 6.7の環境でIntel I219-V (デバイスID:15bc) のNICを認識させる方法
https://tech-mmmm.blogspot.com/2018/08/esxi-67intel-i219-v-id15bc-nic.html

組み立て

それでは組み立てていこう。

まずはCPUとCPUクーラーの取り付けを行う。CPUグリスは、昔は可能な限り均等に平らに塗るという風に教わったのだが、最近では割と適当に真ん中に塗っておけばよいらしい。ということで、以下写真のような適当な感じでグリスを塗ってみた。


ケースのクリアランスはそこまで余裕はないので、ケーブル取り回しに苦労した。特にSSD2台に接続するSATAケーブルと電源ケーブルの接続がかなり厳しかった。とはいえ、最終的にすべてのケーブルが接続でき、問題なくケースに収めることができた。

最終的に以下の形で完成した。


ケーブルやSSDの位置に吹き出しを付けると以下のようになる。マザーボードは上下が逆になる形で取り付けられている。


さて、電源ボタンを押してUEFIを起動させてみる。CPUと32GBのメモリが正常に認識できていることを確認できた。


電源を入れてもほとんど音が聞こえないくらい静音性も申し分なく、無事満足のいくPCを自作することができた。

この後、UEFIを最新バージョンにアップデートしたのち、ESXi 6.7をインストールして利用している。以前の検証用PCでは難しかった、複数コアを使うような検証でもサクサク動くので、やはり物理コア数が6コアに増えたことは非常に大きいと感じる。

人気の投稿