OpenLMIによるシステム管理
この連載が、書籍『CentOS 7 実践ガイド』になりました!
IT技術者のための現場ノウハウ CentOS 7 実践ガイド
CentOS 7を取り巻く市場動向、サーバーシステムの選定、システム設計、構築手順など今回は、CentOS 7で新しく搭載された管理ツール「OpenLMI」について解説します。
CentOS 7のOpenLMIによるシステム管理
Linuxシステムの管理には、様々なコマンドがあります。例えば、OSの論理ボリュームを管理するLVM一つをとっても、物理ボリュームやボリュームグループの管理コマンド、論理ディスクの管理コマンドなど様々なコマンドやオプションを覚えなければなりません。OSの管理コマンドもバージョンによってオプションや書式が変わるものも少なくありません。また、管理コマンドをいくつも駆使する場合は、ユーザーがバッチ処理用のスクリプトを個々に作成しなければならず、一連の管理の自動化を行うためには、管理者のコマンドの利用知識とスクリプト開発のスキルに依存している場合が殆どです。近年、Linuxシステムを取り巻く世界では、管理の簡素化、自動化を実現するための標準化の必要性が高まってきています。一連の定型作業は、できるだけ標準化・自動化し、様々な種類の作業を単一のコマンド体系に集約することで、ユーザーのスキル習得の負担を減らし、簡素なものにしなければならないという考え方です。また、ローカルのLinuxシステムの管理の簡素化だけではなく、遠隔管理の仕組みも含めた標準化が検討されています。例えば、遠隔地にあるデータセンターのサーバーの電源管理やコンソール出力管理、不正侵入の監視システムのための通報の仕組みなどをいかに標準化できるかについて議論され始めています。Linuxシステム全体の管理の標準化は、まだ発展途上の初期段階ですが、Linuxベースの管理・監視の仕組みが大きく見直されようとしており、その一つが今回取り上げるOpenLMIです。
OpenLMIのアーキテクチャ
OpenLMI(Open Linux Management Infrastructure)は、管理エージェントの集合体です。システムの状態を表示や変更を簡単に行うことができます。また、遠隔のLinuxサーバーの管理・監視のための標準的なAPIも提供しています。管理サーバーまたはクライアント側は、コマンドラインやスクリプト、python、Java、C/C++などから呼び出すことができます。一方、遠隔地にある管理対象サーバーは、APIを通じて、各種コマンドと通信を行います。OpenLMIでは、この管理対象サーバー側に存在する各種コマンド類(例:nmcli、yum、lvcreate、mkfs.xfs、parted、systemctl等)を抽象化・隠蔽します。OpenLMIは、OpenPegasusと呼ばれるオブジェクトブローカーを利用します。オブジェクトブローカーであるOpenPegasusは、コマンドやクエリ、イベント等を管理します。また、OpenPegasusは、WBEM(Web-Based Enterprise Management)にも対応しており、情報セキュリティ上の懸念点が指摘されているSNMPにとってかわるプロトコルで通信を行うことができます。OpenLMIは、ジョブの終了、ストレージのハードディスクドライブの故障、NICの構成変更の通知、パスワード変更の通知といったイベント処理が可能です。OpenLMIは、遠隔のLinuxサーバーの管理・監視も考慮しているため、セキュリティについても考慮されており、TLS(https)を使用し、暗号化通信を行います。また監視対象にすべきかどうかの判断についての認証の仕組みも取り込まれています。OpenLMIでは、管理対象サーバーのユーザーのアカウントが利用されますので、全管理対象サーバーにおいてユーザー作成とパスワード設定等を一つ一つ行うことで管理は可能ですが、大規模システムにおいては、統合的なユーザーID管理ソフトウェアの導入が強く推奨されています。
OpenLMIのインストール手順
以下では、CentOS 7におけるOpenLMIを使った具体的な管理・監視手順を述べます。ただし、OpenLMIは、まだ発展途上であるため、従来のコマンド群を直接使用したほうがよい場合も存在します。それらの留意点も含めて解説します。まずは、CentOS 7にOpenLMIをインストールしてみましょう。CentOS 7において、OpenLMIは、RPMパッケージで提供されており、をyumコマンドでインストールできます。管理対象サーバーにインストールしてください。
# yum install -y openlmi
OpenLMIに必要なサービスを起動します。OpenLMIに含まれるtog-pegasusサービスを起動します。
# systemctl start tog-pegasus # systemctl enable tog-pegasus
OpenLMIはポート番号5989を使用しますので、firewall-cmdコマンドで、当該ポートを開放します。また、今回は、SELinuxを無効にしてあります。
# firewall-cmd --add-port=5989/tcp # firewall-cmd --permanent --add-port=5989/tcp # firewall-cmd --reload # setenforce 0
top-pegasusパッケージをインストールすると、pegasusユーザーが作成されていますので、pegasusユーザーのパスワードを設定します。pagasusユーザーは、管理対象サーバーが遠隔にある場合に、リモートアクセスを行うために必要となります。OpenPegasusで提供されるCIMOMは、rootまたは、pegasusユーザーでHTTP及びHTTPSによるアクセスを許可します。標準では、pegasusユーザーがCIMOM にアクセスできる設定になっています。
# passwd pegasus
OpenLMIは、CentOS 7のEPELリポジトリに、スクリプト類が用意されていますので合わせてインストールしておきます。
# yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm # yum install -y openlmi-scripts*
【注意】
2015年1月時点でのEPELのリポジトリで提供されているファイルは、epel-release-7-5.noarch.rpmですが、今後のアップデートによりファイルのバージョンが新しくなりURLが変更される可能性があります。そのため、上記のURLに存在するepel-release RPMパッケージの最新を事前に確認してください。
OpenLMIにおいて、PEM形式の証明書ファイルをコピーします。証明書ファイルをコピーしたら、CA(Certificate Authority)の証明書を管理するupdate-ca-trustコマンドを使ってルート証明書を追加します。
# cp /etc/Pegasus/server.pem /etc/pki/ca-trust/source/anchors/managed-machine-cert.pem # update-ca-trust extract
【注意】
上記の例は、公式の認証機関による署名入りの証明書を利用する手順ではなく、自己証明書による設定例となります。本番環境においては、公式の認証機関におる署名入り証明書を使うようにして下さい。
OpenLMIによるハードウェア情報の取得
OpenLMIを使って管理対象サーバーのハードウェア情報を取得してみます。管理対象サーバーにログインし、ローカルホストの情報を取得してみます。OpenLMIは、主にlmiコマンドで管理を行います。
# lmi -h localhost hwinfo Hostname: centos70n02.jpn.linux.hp.com Chassis Type: SMBIOS Reseved Manufacturer: HP Model: Not Specified (ProLiant DL385p Gen8) Serial Number: CN7230040Z Asset Tag: CN7230040Z Virtual Machine: N/A Motherboard info: N/A CPU: AMD Opteron(TM) Processor 6238 Topology: 2 cpu(s), 24 core(s), 24 thread(s) Max Freq: 3500 MHz Arch: x86_64 Memory: 32.0 GB Modules: 8.0 GB, DDR3 (DIMM), 1333 MHz, HP, Not Specified 8.0 GB, DDR3 (DIMM), 1333 MHz, HP, Not Specified 8.0 GB, DDR3 (DIMM), 1333 MHz, HP, Not Specified 8.0 GB, DDR3 (DIMM), 1333 MHz, HP, Not Specified Slots: 4 used, N/A total
OS上で設定されたホスト名の他に、管理対象サーバーの製造元のメーカー名や、サーバーのモデル名、CPUの種類、CPUソケット数、CPUコア数、CPU動作周波数、メモリ容量などの情報が取得できていることがわかります。メモリモジュールの情報やメモリの動作周波数も、人間にとって分かりやすい形で表示されています。従来であれば、cat /proc/cpuinfoやvmstatコマンド等の各種コマンドやオプション、書式を覚える必要がありましたが、OpenLMIが提供するlmiコマンドでこれらの情報を一括取得することができ、管理者のスキル習得の手間を大幅に削減することができます。
OS情報、ファイヤウォール、ネットワークインタフェース等のシステム概要の表示
OpenLMIは、ハードウェア情報だけでなく、管理対象サーバーのOSに関連するシステムの概要を表示することが可能です。lmiコマンドを使って、ハードウェア情報に加え、OS情報、ファイヤウォール、ネットワークインタフェース等のシステム情報をまとめて表示するには、以下のようにします。
# lmi -h localhost system Computer Name: centos70n02.jpn.linux.hp.com Hardware: HP ProLiant DL385p Gen8 Processors: 2x AMD Opteron(TM) Processor 6238 Memory: 32.0 GB OS: CentOS Linux release 7.0.1406 (Core) Kernel: 3.10.0-123.el7.x86_64 Firewall: on (firewalld) Logging: on (journald) Networking NIC 1 Name: br0 Status: In Service IPv4 Address: 172.16.3.82 IPv6 Address: fe80::2e76:8aff:fe5d:f36c MAC Address: 2C:76:8A:5D:F3:6C NIC 2 Name: eth0 Status: In Service MAC Address: 2C:76:8A:5D:F3:6C NIC 3 Name: eth1 Status: In Service IPv4 Address: 16.147.201.23 IPv6 Address: fe80::2e76:8aff:fe5d:f36d MAC Address: 2C:76:8A:5D:F3:6D NIC 4 Name: eth2 Status: Starting MAC Address: 2C:76:8A:5D:F3:6E NIC 5 Name: eth3 Status: Starting MAC Address: 2C:76:8A:5D:F3:6F NIC 6 Name: docker0 Status: Starting MAC Address: 56:84:7A:FE:97:99 NIC 7 Name: virbr0 Status: Starting MAC Address: 16:54:77:BE:DA:2D
CPU、メモリ、NIC以外にも、OSで稼働中のカーネルのバージョン、ファイヤウォール、ロギングの有無の情報が取得できていることがわかります。
OpenLMIによるストレージ管理
次に管理対象サーバーに接続されているローカルのストレージについての情報を取得してみます。
# lmi -h localhost storage tree Name Size Format /dev/sda 599932844032 MS-DOS partition table ┣/dev/sda1 524288000 xfs ┣/dev/sda2 16852713472 swap ┣/dev/sda3 53687091200 xfs ┣/dev/sda4 1024 Unknown ┗/dev/sda5 528866082816 xfs
上記の例では、ローカルに接続されたストレージデバイスとして、MS-DOSパーティションテーブルを含む/dev/sdaの配下に、/dev/sda1から/dev/sda5までの5つのパーティションが存在することがわかります。以下のように、ローカルに接続されているストレージの一覧を取得することもできます。
# lmi -h localhost storage list Name Size Format /dev/sda1 524288000 xfs /dev/sda2 16852713472 swap /dev/sda3 53687091200 xfs /dev/sda4 1024 Unknown /dev/sda5 528866082816 xfs /var/lib/docker/devicemapper/devicemapper/data 107374182400 Unknown /var/lib/docker/devicemapper/devicemapper/metadata 2147483648 Unknown /dev/loop0 107374182400 ext4 /dev/loop1 2147483648 Unknown /dev/sda 599932844032 MS-DOS partition table /dev/sr0 599932844032 Unknown
しかし、2015年1月下旬時点でのCentOS 7に対応した最新のOpenLMIでは、RAIDコントローラの種類や光学デバイス(/dev/sr0)の機種等の詳細な情報を取得することができない点に留意する必要があります。CentOS 7において、RAIDコントローラや光学デバイスの機種の情報を取得するには、現時点で、以下のようにOpenLMIではなく、lsscsiパッケージに含まれるlsscsiマンドを使用する必要があります。
# lsscsi [0:0:0:0] disk HP LOGICAL VOLUME 4.68 /dev/sda [0:3:0:0] storage HP P420i 4.68 - ←HP SmartArray P420i RAIDコントローラ [3:0:0:0] cd/dvd HP DV-W28S-W G.W3 /dev/sr0 ←DVDドライブの機種「DV-W28S-W」
OpenLMIによるソフトウェアRAIDの管理
OpenLMIでは、ソフトウェアRAIDの管理が可能です。以下では、物理ディスク/dev/sdb、/dev/sdc、/dev/sddを使ってソフトウェアRAID5を構成する例を紹介します。まず、CentOS 7上から認識されているストレージデバイス/dev/sdb、/dev/sdc、/dev/sddを使ってRAID5を構成するRAIDセット「myraid001」を作成します。
# lmi storage raid create --name myraid001 5 sdb sdc sdd
RAIDセット「myraid001」からボリュームグループ「myvg001」を作成します。
# lmi storage vg create myvg001 myraid001
ボリュームグループ「myvol001」から論理ボリューム「myvol001」を作成します。今回は、論理ボリュームのサイズは400GBとします。論理ボリュームは、/dev/mapperディレクトリ配下に作成されます。
# lmi storage lv create myvg001 myvol001 400G # ls -l /dev/mapper/myvg001-myvol001 lrwxrwxrwx 1 root root 7 11月 17 15:36 /dev/mapper/myvg001-myvol001 -> ../dm-2
論理ボリューム「myvol001」からファイルシステムを作成します。ファイルシステムは、XFSでフォーマットします。
# lmi storage fs create xfs myvol001
マウントポイント/myvol001ディレクトリを作成し、フォーマットした論理ボリュームをマウントします。
# mkdir /myvol001 # lmi storage mount create /dev/mapper/myvg001-myvol001 /myvol001/
作成したRAIDボリューム「myraid001」の情報を確認します。デバイス名やRAIDレベル、構成する物理デバイス等を確認することが可能です。
# lmi storage raid show /dev/disk/by-id/md-name-centos70n02:myraid001: Name Value Type MD RAID DeviceID /dev/disk/by-id/md-name-centos70n02:myraid001 Name /dev/md/myraid001 ElementName myraid001 Total Size 1717043200000 Block Size 512 RAID Level 5 RAID Members /dev/sdb /dev/sdc /dev/sdd Data Format software RAID
最後に、論理ボリュームが指定したファイルシステムで正常にマウントされているかをdfコマンドで確認後、データの読み書きができるかを確認してください。
OpenLMIによるネットワークデバイス管理
lmiコマンドを使って、オンボードNIC、追加NICに関係なく、管理対象サーバーに装着されているNICや仮想的なインタフェースを表示することができます。インタフェース名、現在の状態、MACアドレスの一覧を取得することができます。また、コンテナーで作成した仮想的なインタフェースである「docker0」やブリッジインタフェースの「br0」、KVMで利用される仮想的なインタフェース「virbr0」についての情報も分かりやすい形で表示できます。
# lmi -h localhost net device list ElementName OperatingStatus MAC Address br0 In Service 2C:76:8A:5D:F3:6C docker0 Starting 56:84:7A:FE:97:99 eth0 In Service 2C:76:8A:5D:F3:6C eth1 In Service 2C:76:8A:5D:F3:6D eth2 Starting 2C:76:8A:5D:F3:6E eth3 Starting 2C:76:8A:5D:F3:6F lo Not Available 00:00:00:00:00:00 virbr0 Starting 16:54:77:BE:DA:2D
OpenLMIによるパッケージ管理
一般的に、CentOS 7におけるパッケージ管理は、rpmやyumコマンドを使いますが、OpenLMIのlmiコマンドを使ってパッケージ管理も行うことができます。パッケージのインストールには、lmiコマンド「sw install」とパッケージ名を付与します。以下は、Apache Webサーバーを実現するhttpdパッケージをローカルの管理対象サーバー上にインストールする例です。
# lmi -h localhost sw install httpd
管理対象サーバーにインストールされたhttpdパッケージの情報を表示してみます。パッケージ情報の表示は、lmiコマンドに、「sw show pkg」を付与します。
# lmi -h localhost sw show pkg httpd Name=httpd Arch=x86_64 Version=2.4.6 Release=18.el7.centos Summary=Apache HTTP Server Installed=Sat Sep 13/2014 05:52 Description=The Apache HTTP Server is a powerful, efficient, and extensible web server.
上記のように、lmiコマンドによるパッケージ情報の表示では、パッケージ名、アーキテクチャ、パッケージのバージョン、リリースバージョン、概要、インストール日時、説明が表示されます。
OpenLMIによるサービス管理
OpenLMIは、管理対象サーバーの各種サービスの起動、停止、状態確認等の管理が可能です。以下は、管理対象サーバーにインストールされたNGINXの状態を確認する例です。
# lmi service show nginx Name=nginx Caption=nginx - high performance web server Enabled=Yes Status=Stopped - OK
上記の「Status=Stopped - OK」の出力から、NGINXサービスは、停止していることがわかります。NGINXサービスを起動し、状態を確認してみます。
# lmi service start nginx # lmi service show nginx Name=nginx Caption=nginx - high performance web server Enabled=Yes Status=Running
上記より、NGINXサービスが稼働していることがわかります。
今回は、OpenLMIによるCentOS 7のシステム管理・監視について紹介しました。OpenLMIは、管理・監視の仕組みを標準化することで効率化を追求していますが、ハードウェア面も含めた管理機能の成熟度は、まだ発展途上であることは否めません。しかし、今後、ハードウェアレベルも含め、このようなシステム全体に関わる管理コマンドの標準化が進めば、Linuxシステムの管理・監視の仕組みが大幅に簡素化され、Linuxのスキル習得に係るコストの大幅な削減が期待できます。OpenLMIの取り組みは、まだ始まったばかりですが、今後の発展に大いに期待したいものです。
この連載が書籍になりました! | |
---|---|
古賀 政純 著 |
CentOS 7実践ガイド本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!
|