てるてるぼうず の軒下

この記事の内容は私個人の主観であり、所属する組織とは関係がありません。続けられるように頑張りマス。

学習メモ:[改訂新版]プロのためのLinuxシステム構築・運用技術 第3章 Linuxのストレージ管理

第3章 Linuxのストレージ管理

3.1 ストレージエリアネットワークの基礎

  SAN(Storage Area Network)とは、サーバーと物理的に接続されたストレージ装置の間で論理的な接続を実現する技術です。SANファブリックやWWN・ゾーニングによりストレージを強化します。

3.2 LVMの構成・管理

  論理ボリュームマネージャー:LVM(Logical Volume Manager)を利用すると、複数の物理ディスクを1つにまとめて大容量のファイルシステムを構成したり、ファイルシステムのサイズを拡張できます。

3.3 Device Mapper Thin-Provisioningの活用

  RHEL7のⅬVMを用いることにより ソフトウェア的にシンプロビジョニングの機能を提供し、差分領域を利用せずより効率的なスナップショットを実現できる機能を提供します。

3.4 iSCSIの活用

  2000年ごろのネットワーク通信性能は100Mbpsが中心であったところ、SAN接続では1Gbps/2Gbpsでした。現在は、ネットワーク通信性能の向上により1Gbps-10Gbpsが普通に利用できるようになりました。そのため、FC(Fiber Channel)ケーブルとFCスイッチの代わりにiSCSIを用いてIPネットワークの中でSANを構築できるようになりました。本章では、iSCSIの基礎や設定の仕方が記載されています。

学習メモ:[改訂新版]プロのためのLinuxシステム構築・運用技術 第2章 Linuxサーバー運用の基礎

第2章 Linuxサーバーの構築

2.1 システム監視

システム監視には次のように大きく3つの視点があります。

監視視点 目的
障害監視 計画外(予定外)のサービス停止時間をできるだけ短くする
リソース監視 CPU・メモリー・ディスクなどのシステムリソースの使用状況を監視する
セキュリティ監視 システムの不正な使用や無許可での構成変更を検知して、システム管理者に通知する

また、監視対象サーバー上でのシステム監視方法には大きく次の3つがあります。

監視方法 説明
ログファイル監視 ログファイルに出力される内容の監視
プロセス監視 Linux上のプロセスに対する稼働状況監視
リソース監視 システムリソース使用状況監視

本書では、ログファイル監視ツールやシステム稼働情報の収集ツール等利用方法が記載されています。

2.2 バックアップ

バックアップの種類

バックアップ種別 対象
システムバックアップ OSやアプリケーションが導入されたシステム領域
データバックアップ アプリケーションが使用するデータ保存領域

バックアップ方法については、本書の中でrsyncを使った方法が紹介されています。

2.3 セキュリティ管理

Linux上で実行されたコマンドやプロセス監査に利用できるpsacctコマンドとユーザ認証にかかわるツールPAMを説明しています。また、ネットワークを流れる通信内容を暗号化して、ネットワーク上での通信内容の盗聴や改ざんを防止できるsshについても紹介しています。

2.4 構成管理・変更管理・問題管理

  安定したサービスをユーザーに提供するために必要な変更管理と問題管理プロセスの重要性とそのプロセス例を紹介しています。また、この変更管理プロセスを実施するための根幹はサーバーの構成管理であり、サーバーを管理するために以下の資料を整備する必要があります。

  • サーバーハードウェアの物理構成とシステムBIOSファームウェアのバージョン
  • ネットワーク機器や外部ストレージ装置との物理的な接続図
  • ディスク装置の論理構成(RAIDの構成など)
  • OSの基本設定情報(Red Hat Enterprise Linuxであれば、sosreportコマンドで一括収集される情報)
  • ネットワーク構成情報(ホストネーム、IPアドレスなど)
  • OSに追加導入したツールや意図的に設定変更している箇所などの情報

学習メモ:[改訂新版]プロのためのLinuxシステム構築・運用技術 第1章 Linuxサーバの構築

第1章 Linuxサーバーの構築

1.1 サーバーハードウェア

 世の中に数多あるハードウェアをOSで制御するために、抽象化層を通してハードウェアをOSの同じコマンドで操作できるようにしています。その際、OSがハードウェア側にインターフェースを公開しハードウェアがそれに適応するデバイスドライバーをカーネルに組み込むようにしています。
 サーバー起動の仕組みですが、電源投入後マザーボード等に搭載されたチップ上でシステムBIOS/UEFIが動作を始め、下記図にしるしたようにブートストラップローダーやブートローダ等を介してRAMディスクに書き込まれたカーネルの起動を開始します。

f:id:teruterubohz:20200522160139j:plain
カーネル起動の流れ

 ここで、システムBIOS(Basic Input Output System)とUEFI(Unified Extensible Firmware Interface)の違いについて。
 両方ともOSを起動するためのブートローダーを読み込む処理を実施しますが、システムBIOSは起動ディスクの先頭部分にあるブートストラップローダーを読み込み、そこを介してブートローダー(GRUB2)を起動します。一方ÙEFIは、「EFI System partition」に保存してあるブートローダーを直接起動します。 昔から使われていたBIOSは起動ディスクの容量制限(約 2TB)等、技術進歩についていけなくなりUEFIにとって代わられるようになりました。

1.2 Linuxの導入作業

 導入準備として、まずサーバーベンダーから提供されるサポート対象を確認します。何かあった場合、サポート対象外だと「サポート対象外のため対応不可」となってしまう可能性があります。その後、インストールディスクのパーティションについて以下を踏まえ検討します。

パーティション 説明 REHL7推奨サイズ
ブートバーティション 「/boot」ディレクトリー 500MB
ルートパーティション 「/」ディレクトリー 10GB
swapバーティション swap領域
kdumpパーティション kdumpのダンプファイル出力先 物理メモリーの2倍
ホームバーティション 「/home」ディレクト 任意
データ用パーティション アプリケーションのデータ領域 保存するデータ量の上限値見積。
LVM(Logical Volume Manager)を使って後からサイズを拡張可としておく

※REHL7のswap領域推奨サイズ

システムの物理メモリ― 推奨サイズ
2GB以下 「物理メモリ―の2倍
2GB-8GB 物理メモリ―と同じ
8GB -64GB 物理メモリ―の半分
64GB以上 利用用途による

 上記設計を行い実際にLinuxのインストールを開始します。先のシステムBIOS/UEFI等の初期設定(なるべくデフォルト設定がよさそう)後、インストールメニュー画面の「インストール先」(INSTRALLATION DESTINATION)を選択してから検討したパーティション構成を行ってください。

f:id:teruterubohz:20200522213751j:plain

1.3 導入後の基本設計作業

RHELインストール後の基本設定作業を以下順に示します。

項番 実施作業 説明 コマンド
1 Red Hat Network に登録 リポジトリーから最新のRPMパッケージを入手できるようにする # subscription-manager register
# subscription-manager list --available
# subscription-manager attach --pool=<確認したID>
2 インストール済みパッケージのアップデート RPMパッケージの追加やアップデート # yum update
3 リポジトリーに保存されているパッケージのアップデート パッケージのバージョン番号を確認し、目的のバージョンを指定してアップデート # yum --showduplicate list kernel
# yum update <目的のバージョン番号>
4 デバイスドライバ追加 サーバーベンダー提供のデバイスドライバを入手 導入手順はサーバーベンダーの提供手順に従う
5 ログインユーザー作成 ログインするための個人アカウントを作成 # user add <ユーザ名>
# passwd <パスワード>
6 wheelグループへの追加 先に作成したユーザーをwheelグループに追加します # usermod -G wheel <ユーザ名>
# id <ユーザ名>
7 sshdサービス再起動 rootユーザーで直接ログインすることを禁止します 「PermitRootLogin no」を/etc/ssh/sshd_configに追加
8 firewallサービス停止&iptablesサービス起動 レガシーサービスを使う # systemctl stop firewalld.service
# systemctl mask firewalld.service
# yum install iptables-services
# systemctl enable iptables.service
# systemctl start iptables.service
/etc/sysconfig/iptables修正
systemctl restart iptables.service

※3の後、以下のようにすることでカーネルをアップデートの対象から除外します。

 \#  yum update --exclude=kernel 

よく利用するyumコマンド

コマンド 説明
# yum clean all パッケージとリポジトリー情報のキャッシュを削除
# yum list すべてのパッケージを表示
# yum list installed 導入済みのパッケージを表示
# yum search <キーワード> リポジトリ―内のパッケージを検索
# yum info <パッケージ名> パッケージの情報を表示
# yum install <パッケージ名> パッケージを導入
# yum remove <パッケージ名> 導入済みのパッケージを削除
# yum check-update アップデート可能なパッケージの確認
# yum update <パッケージ名> 特定のパッケージをアップデート
# yum update すべてのパッケージをアップデート

また、インターネットに接続できない状況ではインストールメディアを以下のコマンドでマウントします。

 \# mkdir /mnt/rhel72 </br>
 \# mount /dev/cdrom /mnt/rhel72

次にリポジトリ―設定ファイルを以下のように作成します。

[rhel72_dvd]
name=RHEL7.2 DVD
baseurl=file:///mnt/rhel72
enabled=1
gpgcheck=1
gpgkey=file:///mnt/rhel72/RPM-GPG-KEY-redhat-release

最後にこのファイルを以下のコマンドで実行します。

 \# yum update kernel-3.10.0-327.4.4.e17.x86_64.rpm

1.4 キックスタートによる自動インストール

 OSインストールの方式にはディスクイメージを複製・配布する方法もありますが、イメージをWebサーバーに配置し、ネットワークを介してインストールできる仕組みをキックスタートと呼ばれる標準機能として提供しています。

学習メモ:[改訂新版]プロのためのLinuxシステム構築・運用技術

  これまでCentOSを使ってLinuxサーバ等の構築を行っていました。緊急事態宣言を受けテレワークが促進され通勤時間等に費やす時間や労力が削減された今、改めて互換対象ディストリビューションであるRed Hat Enterprise Linux(RHEL)について中井悦治さんの「[改訂新版]プロのためのLinuxシステム構築・運用技術」(※)を元に学習しました。その学習メモを記載していきます。
  本書は数々の方から評価されているため教科書に良いと判断しました。より詳細に確認する場合は、本書籍を参照してください。

第1章 Linuxサーバーの構築

Linuxサーバーを構築する上で知っておくべきこと、パーティション設計など初めに検討すべきこと、OSインストール方法等を解説しています。

第2章 Linuxサーバー運用の基礎

  サーバー構築後のLinuxサーバー運用について、考慮すべき監視やバックアップ方法、運用プロセス等を解説しています。

第3章 Linuxのストレージ管理

  大規模ストレージについてSAN(Storage Area Network)やLVMの説明や構成方法等を解説した後、iSCSIの活用方法を解説しています。

第4章 Linuxのネットワーク管理

  一般的なネットワーク構成に関する解説後、Linuxネットワーク構成方法について解説しています。

第5章 Linuxの内部構造

  プロセス管理方法とメモリー管理方法について解説しています。

第6章 Linuxサーバーの問題判別

  サーバーで問題が発生した後の問題判別手順やボトルネック等の発見方法についてコマンドを用いて解説しています。

第3版 Ansible実践ガイド

Ansible実践ガイド 第3版 (impress top gear)

Ansible実践ガイド 第3版 (impress top gear)

コードレスによるインフラ構築の自動化 第3版 Ansible実践ガイド

第1章

 構成管理には広義と狭義があります。サービスのアジリティを支援する技術として「クラウド」、考え方として「DevOps」が出てきました。

  • 広義: ITサービスとしての構成管理
    ITサービスの最適化を支援することを目的として、アプライアンスやアプリケーションといったリソースの構成を管理し必要な時に提供。
  • 狭義:オペレーション自動化としての構成管理
    システムのプロビジョニングや構築自動化を目的として、ツール等による仕組みを提供。

 クラウドの登場によりインフラリソースのライフサイクルが短くなります。これまでと同様の構成管理をしていたのでは工数が膨れ上がり、せっかくのアジリティが損なわれてしまいます。そこで、構成を自動管理できるInfrastructure as Codeの重要性が増してきました。

Infrastructure as Codeの対象領域

  • オーケストレーション(Orchestration)
    連携したサービスの提供(Fabric、Capistrano 等)
  • システムの構成管理(Configuration Management)
    M/Wの提供(Ansible、Chef、Puppet、SaltStack等)
  • ブートストラッピング
    OSの提供(Terraform、Vagrant、Docker、AWS、Azure、GCP等)

 従来の構成管理方法として、パラメータシート等のドキュメントを作成することを強いるプロセスがあります。製品添付や契約の一部であれば是非もなく作成しなければなりませんが、社内での保守目的であれば工数を使うしアジリティも損なわれるので、設定ファイルや自動化ツール設定ファイルのバックアップ等で十分であると考えています。

<続く>

第3版 Ansible実践ガイド

Ansible実践ガイド 第3版 (impress top gear)

コードレスによるインフラ構築の自動化 第3版 Ansible実践ガイド

第1章

 構成管理には広義と狭義があります。サービスのアジリティを支援する技術として「クラウド」、考え方として「DevOps」が出てきました。

  • 広義: ITサービスとしての構成管理
    ITサービスの最適化を支援することを目的として、アプライアンスやアプリケーションといったリソースの構成を管理し必要な時に提供。
  • 狭義:オペレーション自動化としての構成管理
    システムのプロビジョニングや構築自動化を目的として、ツール等による仕組みを提供。

 クラウドの登場によりインフラリソースのライフサイクルが短くなります。これまでと同様の構成管理をしていたのでは工数が膨れ上がり、せっかくのアジリティが損なわれてしまいます。そこで、構成を自動管理できるInfrastructure as Codeの重要性が増してきました。

Infrastructure as Codeの対象領域

  • オーケストレーション(Orchestration)
    連携したサービスの提供(Fabric、Capistrano 等)
  • システムの構成管理(Configuration Management)
    M/Wの提供(Ansible、Chef、Puppet、SaltStack等)
  • ブートストラッピング
    OSの提供(Terraform、Vagrant、Docker、AWS、Azure、GCP等)

 従来の構成管理方法として、パラメータシート等のドキュメントを作成することを強いるプロセスがあります。製品添付や契約の一部であれば是非もなく作成しなければなりませんが、社内での保守目的であれば工数を使うしアジリティも損なわれるので、設定ファイルや自動化ツール設定ファイルのバックアップ等で十分であると考えています。

<続く>

Raspberry PI 開発環境の第一歩

私の開発環境

1:raspberry pi zero w
2:WIMAXIT 15.6インチタッチモニター モバイルディスプレイ 1080P
3:LANアダプター内蔵USB3.0ハブ(400-HUB022)
4:キーボード (TK-FCM085BK)
5:マウス

 ラズパイとPCをVNCにより接続した開発環境だと開発しようとするたびにPCとラズパイを起動してVNC接続しなければならないので手が掛かります。そのため、私はモバイルモニターを使ってPCとは独立した開発環境を構築しています。

ラズパイ開発の事前準備

 ここではラズベリーパイ財団のサイトからラズパイ専用OS(Raspbian)をダウンロードして microSD カードに直接書き込む方法(WindowsMac)、OSインストールマネージャー「NOOBS(New Out Of the Box Software)」をmicroSDに書き込みラズパイを起動してから Raspbian をインストールする方法(Windows)を記載します。

Raspbian を microSD カードに書き込む方法

以下リンクより Raspbian をダウンロード
Raspbian

Windows

  1. フォーマット
    SDカードフォーマッター(※ 一番下にある Accept クリック) を使ってmicroSD カードをフォーマット

  2. イメージ書き込み
    Win32DiskImager(※ win32diskimager-?.?.?-install.exe) を使ってイメージを書き込み

  3. RaspberryPI起動
     ラズパイにmicroSDカードを挿入し、microUSBコードを接続してRaspberryPIを起動!

Mac ドライブの識別

microSDカードをminiSDカードアダプタに挿してMacのSDカードスロットに挿入。microSDカードが認識されるとMac画面に新たに認識されたドライブのアイコンが現れます。(例ではboot)

SDカードのドライブ名を確認するために次のコマンドでファイルシステム名やドライブ名を確認します。

mac:〜$df -ah

このコマンドの実行結果としてファイルシステムリストが表示されます。そしてこの中に/Volumes/bootが表示されるレコードがあります。

/dev/disk2s1   252Mi   53Mi  199Mi    22%       0          0  100%   /Volumes/boot

これより/dev/disk2s1と示された/dev/disk2が該当ドライブと分かる。ここでディスク識別を間違えるとmicroSDをフォーマットするつもりが関係のないディスク領域を削除してしまうので、十分に注意しましょう。

2.フォーマット   FAT32、ディスク名をRPIとして、以下のコマンドでmicroSDカードをフォーマットします。

mac:〜$ diskutil eraseDisk FAT32 RPI /dev/disk2
・・・
Finished erase on disk2

Finished erase on disk2と表示されフォーマット完了。
以下のコマンドでアンマウントします。

mac:〜$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

3.イメージ書き込み
 事前にダウンロードしておいたraspbianイメージを以下のコマンドでmicroSDカードに書き込みます。(ddコマンドを使う際にbsオプションを使ってバッファリングサイズを32Mに調整しています)

mac:〜$ sudo dd bs=32m if=2020-02-13-raspbian-buster.img of=/dev/rdisk2 conv=sync
Password:
3612+0 records in
3612+0 records out
3787456512 bytes transferred in 194.471355 secs (19475652 bytes/sec)

4.RaspberryPI起動
 ラズパイにmicroSDカードを挿入し、microUSBコードを接続してRaspberryPIを起動!

NOOBS を microSD カードに書き込む方法

 NOOBSとはNew Out Of Box Softwareの略。Wikipediaでも記載されているように誰でも使えて、設定変更などしなくても使えることをコンセプトにしているようです。 NOOBSを使うと上記で紹介したようなSDカードをフォーマットして(ここは同じ)、ツール/コマンド等によりイメージをSDカードへ書き込む必要があ利ましたが、NOOBSであればフォーマットしたSDカードへダウンロードしたNOOBSの中身だけをコピー&ペーストだけで済みます。 以下Raspberry Pi 公式ページより NOOBS をダウンロード
www.raspberrypi.org

 上記で記載したように簡単にraspbianをセットアップできるようにするため、フォーマットしたmicroSDカードへダウンロードしたNOOBSをコピー&ペーストするだけ。後は、ラズパイにmicroSDカードを挿入し、microUSBコードを接続してRaspberryPIを起動するだけです。