夜行月報

“夜更かし”から“新しい”をみつけるためのブログ

「インフラエンジニアの教科書」を読んだまとめ(1/2)

インフラの世界を知る 皆さんこんにちは、シロネコ書房です。

エンジニアになって早一年。Web周りの技術やプログラミング言語についての知識は多少ついてきたものの、インフラやネットワークについての知識はまだまだという毎日を送っています。

そうした知識を得るためのいい教材でもないかなと探していたところ、「インフラエンジニアの教科書」という書籍がなかなか良さそうという噂をキャッチ。 なんでも、あの言わずと知れた巨大サービス、LINEの急成長期を支えたインフラエンジニアが執筆した本だとのこと。 光の速さで購入・読了したので、今回はそこから学んだことをアウトプットしていこうと思います。

インフラエンジニアの最も重要な役目

矢継ぎ早に発生する意思決定の場面において、都度、たくさんの選択肢の中から素早く最適解を選び出すこと

インフラエンジニアの仕事

インフラエンジニアの仕事は、大きく分けて以下の3つのフェーズに分類できる。

  • インフラ設計
  • インフラ構築
  • インフラ運用

インフラ設計

目的に応じて、必要なインフラをどのくらいの費用で、どのくらいの期間で作るのかを算定する。 インフラエンジニア、または外部のベンダーやコンサルタントが行う。

インフラ構築

必要な機器・ソフトウェアの発注 => 納品後、それらを構築する。 機器の運搬から組み立て、機器の取り付け、インストール、設定、動作テスト、負荷テストなどの作業がある。

インフラ運用

インフラを、基本的に24時間・365日稼働し続けられるように運用する。 社内運用チームで交代制のシフトを作成したり、外部のMSP(Managed Service Provider)に業務を委託することで対応する。 運用業務としては、障害対応、キャパシティ管理、障害発生時の原因の切り分けなどがある。

ITインフラを構成する要素

ファシリティ

建物、施設、設備などのこと。データセンターや、そこを構成するラック・空調・発電機・変電気・消防設備などが含まれる。

サーバ・ストレージ

ITサービスを提供するサーバや、大量のデータを保存するストレージなど。

ネットワーク

サーバやストレージをつなぎ、インターネットに接続するネットワークのこと

インフラエンジニアが知っておくべき知識

インフラエンジニアには、サーバやOS、ネットワーク設計などの技術者としての知識のほか、プロジェクトに求められるインフラを揃えるための選定者としての知識が求められる。

技術者としてのインフラエンジニアが知っておくべきこと

技術者として、インフラエンジニアに求められる知識には以下のようなものがある。

  • サーバや、それを構成するパーツ(メインボード、CPU、メモリ、ディスク)に関する知識。
  • Linux、Windows、UNIX、それぞれのOSの概念や機能に関する知識。
  • 仮想化、シンプロビジョニングなどの新技術を含めたストレージの知識。
  • あらゆる角度から課題解決を行えるような、ネットワークの設計・構築に関する知識。
  • ベンダーごとのコマンド体系の違いを踏まえた、ルータなどのネットワーク機器に関する知識。

選定者としてのインフラエンジニアが知っておくべきこと

選定者として、インフラエンジニアに求められる知識には以下のようなものがある。

  • プロジェクトに最適な構成を選定できるような、システム構成に関する知識。
  • 多くの選択肢を持つサーバのスペック選定に関する知識。
  • 採用するベンダー、保守年数などを含めたネットワーク構成に関する知識。
  • 各RDBMSの選定を含めたデータベース設計に関する知識。
  • どのようにインフラを運用するかという運用体制に関する知識。

サーバ

サーバの種類

ラックマウント型サーバ

データセンターや社内サーバルームに設置されている。 19インチラックに主要することを前提としている。

タワー型サーバ

社内サーバルームの他、オフィスや店舗にも置かれる。 冷却と騒音対策が必須のため、サーバルームではないオフィスや店舗に設置する場合には、音が静かな静音サーバなどが採用されることもある。

IAサーバ

Intel社やAMD社などのインテル互換CPUを搭載し、通常のパソコンと同様のアーキテクチャをベースにして製造されたサーバのこと。 基本的に、どのベンダーを選んでもアーキテクチャは同じ。

エントリー/ミドル/ハイエンドサーバ

サーバは用途によってエントリー/ミドル/ハイエンドサーバに分けられる。 エントリーサーバは1〜2子のCPUが搭載可能なサーバで、Webサーバやアプリケーションサーバに用いられる。お値段は数十万円。

次にミドルレンジサーバは、データベースサーバや基幹系サーバで利用される。4個以上のCPUが搭載可能。お値段は数百万円。 ハイエンドサーバは、基幹系サーバやデータベースサーバで利用される、数十個以上のCPUを搭載可能なサーバ。お値段数千万〜数億円。

※ サーバとパソコンの違い

基本的に、サーバはパソコンと同じように、マザーボード、CPU、メモリ、ディスクなどの部品で構成されている。 しかし、サーバは基本的に24時間365日の稼働を前提としているため、壊れにくく、故障しても極力システムが止まらないような設計になっている。

また、パソコンに比べてはるかに多くのメモリやハードウェアリソースを搭載できるものが多い。 サーバには、高い安定性が保証されたサーバ用OSをインストールする必要がある。

一方、パソコンは個人利用を目的としているため、グラフィックスやサウンドといったマルチメディア機能が充実している。

サーバ選定の仕方

プロジェクトに必要なインフラを構成考える際には、CPU、メモリ、ディスク、ポート数、RAID有無、保守の年数、拡張性、物理サイズ、冗長化要否など、多くの考慮すべきポイントがある。

無数の選択肢から、必要なサーバスペックを決めることは難しい。

そこで、以下の3つの考え方から判断すると良い。

  • 実際の環境を試験的に構築し、測定結果から判断する。(手間がかかるが堅実)
  • 仮決めしたスペックの機器を本番投入し、ハードウェアリソースの利用状況を測定した上でサーバパーツを増減する(アクセス量の予測が立ちにくい場合)
  • 目的に応じて消去法でスペックを絞り込む。

スポンサーリンク

CPU

CPU(Centoral Processing Unit)は、大量の演算を高速で処理する装置。 バリエーションが多く価格差も大きいため、選定に困りやすい。

CPU関連用語

コア

CPUの主要演算回路。1つのCPUの中に複数のコアが含まれるマルチコアCPUの場合、コアの数だけ同時に演算を行える。

キャッシュ

CPUとメインメモリ間にキャッシュメモリという高速なメモリを用意し、頻繁にアクセスするデータを置いておくことで、メインメモリへのアクセスを減らし、より高速な処理を行える。

ハイパースレッディング

OS上で1つのコアを2つのCPUに見せる技術。 2つの処理を一緒にCPUに渡すことができ、OSの負担が減る分処理を高速化できる。

ターボブーストテクノロジー

CPUを決まった動作周波数より高速で動作させる機能。仕事をしていないコアがある場合、仕事をしているコアをクロックアップ(オーバークロック)させる。

CPU選定のポイント

CPU選定の際に考慮されるポイントとしては、以下のようなものがある。

  • 求める演算能力を満たすパフォーマンスが出せるか
  • 適切なコア数かどうか(仮想化に使うなら多く、バッチ処理なら1つで十分、等)
  • 適切なソケット数かどうか
  • 必要とする処理能力を考慮した上で、価格が適切かどうか
  • 消費電力はどの程度か。
  • 使用するソフトウェアのライセンス体系を考慮したCPU数、ソケット数になっているか

メモリ

メモリは、短期記憶領域と呼ばれる一時的なデータを記憶する装置。電源が停止するとデータが全て消えてしまう。 サーバ用メモリでは、搭載容量に加え、障害耐性、パフォーマンス、省電力などが重視される。 最近では、DDR4 SDRAM(Double-Data-Rate4 Synchronous Random Access Memory)が主流。

メモリ関連用語

スロット数

マザーボード上にある、メモリを指すことのできる口の数。 例えば、メモリスロットが8の場合、メモリを8枚指すことが出来る。

ECC (Error Correcting Code) memory

メモリの故障によってビット反転エラーが生じたときに、自動補正と検知を行えるように、誤り訂正符号(ECC)と呼ばれるパリティ情報が追加されているメモリ。

ECCメモリでないメモリにエラーが発生するとOSレベルで異常終了してしまうが、ECCメモリの場合は、ビット反転エラーに対し自動的に補正を行う。 サーバの運用台数が数百台を超えてきたあたりから効力を発揮する。

ランク

メモリコントローラがメモリ上のDRAMからデータを入出力する単位のこと。

ランクには、シングルランク(1R)、デュアルランク(2R)、クアッドランク(4R)がある。  サーバにメモリを指すときに、このランクの総使用数が多くなるような組み合わせをすることでアクセス性能が向上する。

UDIMM / RDIMM / LRDIMM / LV

UDIMMは、Unbuffered DIMMとも呼ばれるバッファなしDIMM。 一般的なパソコンのメモリの大部分は、このUDIMMが用いられている。

RDIMMは、Registered DIMMとも呼ばれるレジスタ付きDIMM。クロックやアドレスなどの制御信号をバッファ回路が取り込む。 大容量メモリや安定的に運用が必要なサーバ用メモリとしてよく使われる。

LRDIMMは、RDIMM(Registered DIMM)をさらに発展させた方式。メモリコントローラとメモリチップの間の全ての通信を、バッファ回路を介して行うDIMM。 メモリバス全体の負荷を軽減することで、マザーボードに装着可能なモジュールの数を増やしたり、モジュール1枚相当のメモリチップ数を増やしたり出来る。

LVは、通常のメモリよりも電圧を下げることで省電力を実現したメモリのこと。

メモリの挿し方

メモリの指方には、以下のような決まりがある。

  • 各プロセッサのメモリ構成は同一でなければならない。
  • RDIMMとUDIMMメモリは混在できない。
  • 各チャネルに搭載するメモリは、同一種類にする必要がある。
  • 低電圧のメモリと、低電圧でないメモリは混在可能な場合が多い。
  • 原則、ECCメモリと非ECCメモリは混在できない。

スポンサーリンク

 メモリ選定のポイント

CPU選定の際に考慮されるポイントとしては、以下のようなものがある。

  • 必要なメモリ容量が搭載されているか。
  • 高速なメモリアクセスを実現できる挿し方、設定が行われているか。
  • スロット数や将来の拡張性を考慮したメモリの組み合わせができているか。

ディスク

記憶媒体としてのディスクには、以下のような種類がある。

SATAハードディスク

1日8時間程度の稼働用途。 SSDと共に、家庭用パソコンでよく使われる。 耐障害性は低いが、重要性のないサーバであえて使われることがある。

SASハードディスク

高速で信頼性が高い。24時間365日稼働用途。

FC(Fibre Channel)ハードディスク

高信頼で超高速。SANストレージなど、主にエンタープライズ用途。

SSD(Solid State Drive)

半導体素子メモリを記憶領域に用いたディスク。 高速・低電力な反面、ハードディスクに比べ容量単価が高く、非常に高価。

書込みと消去を繰り返すと素子が劣化するという弱点がある。そのため、書込み頻度が高いサーバに安価な家庭用SSDを用いると、一年も経たずに寿命を迎える場合がある。 SSDには、書込み速度が高いSLC(Single Level Cell)と、書込み速度は遅いが大容量化しやすいMLC(Multi Level Cell)がある。

RAID

複数のハードディスクを論理的な一つの仮装ディスクにまとめて運用する「ディスクアレイ」を実装する手段の1つをRAIDという。 主に、ハードディスクの高速化や信頼性向上などの目的で用いられる。

RAIDのレベルには0 ~ 6の7種類があり、また、RAID 0 と他のRAIDレベルを組み合わせたRAID10(1 + 0)、RAID50(5 + 0)、RAID60(6 + 0)も存在する。

仮想化

仮想化の技術を用いると、一台の物理サーバ上に複数のゲストOSを稼働させられる。 仮想化環境では、物理サーバが提供する CPU、メモリ、ネットワーク、ディスクといったハードウェアリソースを、各ゲストOSに対して自由に割り当てられる。 上手く使えばハードウェアリソースを最大限活用でき、大幅なコストダウンに繋げられる。

物理サーバと仮装サーバの特性

物理サーバは、CPU使用率、ディスクI/O、ディスク使用量の大きい用途に向く。(データベースサーバ、アプリケーションサーバなど)

一方、仮装サーバはディスクI/O負荷やディスク使用量が低い用途に向く。(Webサーバ、開発サーバ、メモリDBなど)

仮想化のメリットとデメリット

メリット

  • 適切な運用を行えば、大幅なコストダウンが可能。
  • ゲストOSのハードウェアリソース増減を容易に行える。
  • ハードウェアのような老朽化がなく、新しい物理サーバに仮想化環境を用意すれば、簡単に移行ができる。

デメリット

  • ゲストOS間のリソースの奪い合いが生じると、動作が不安定になる。
  • 不使用のゲストOSが撤去されずに残りがちになる。

仮想化の実現方法

仮想化を実現する方法には、WindowsやLinuxといったOS上に、ゲストOSを管理するプログラムをインストールして管理するホストOS型と、ホストOSの代わりに仮想化専用OSなどを用いるハイパーバイザ型がある。

サーバ用途の場合はハイパーバイザ型が用いられることが多い。

仮想化環境の種類

サーバの仮想化を実現する手段には様々あるが、現在主流となっているソフトには以下のようなものがある。

  • VMware vSphere(VMware社)
  • Hyper-V(Microsoft社)
  • Xen(Linux Foundation、OSS)
  • KVM(Red Hat、OSS)

Linux とWindowsが混在する環境ではVMware、Windowsが中心の環境ではHyper-Vを用いるとコストメリットがある。

クラウド(Iaas)

クラウドコンピューティングのうち、IaaSはシステムインフラを提供するサービスを指す。 クラウドベンダーから仮装サーバのインスタンス、もしくは利用権を借り受け、リモートで各種設定を行うことで機能の使用が可能になる。

業界で最も影響力があるのは、Amazon社が提供するAWS(Amazon Web Services)。仮装サーバを提供するAmazon EC2(Elastic Compute Cloud)や、仮装ストレージを提供するS3(Simple Storage Service)などがある。

IaaSは以下のような特徴を持つ。

  • 自社で物理サーバを持つ必要がなく、管理するエンジニアも不要。
  • 利用申請から、短期間でOSがインストールされた状態ですぐ使える。
  • 物理的制約がないため、利用したい分だけ増強が可能。
  • 従量課金制
  • 自社で資産を持たないため管理の手間がなく、減価償却などの会計上の処理が不要。

クラウドの弱点

クラウドサービスは便利ではあるが、以下のような弱点がある。

  • 通常用いられないような大量のハードウェアリソースを求めるようなスケールアップには弱い。
  • 障害が発生した場合、クラウドベンダーからの復旧完了通知を待つしかない。
  • クラウドベンダーの手違いなどによる、データ消失のリスクがある。
  • 機密情報の流出リスクがあるため、自社のセキュリティーポリシーによっては使用できない。
  • ファイル転送速度が遅い。

OS

Linux

Linuxは、代表的なオープンソース系OSの一つ。

Linuxには様々なディストリビューションが存在するが、大きく分けて、Red Hat系とDebian系に分けられる。ディストリビューションによりアプリケーションのパッケージ管理や、そのインストール方法に違いがある。

Windows Server

WIndows Serverは、Microsoft社が提供するサーバ用OS。 GUIで操作ができるという特徴は、Linuxにも環境が整備されたことで特別なものではなくなったが、日頃使い慣れているWindows OSのGUIを踏襲しているため、使用を開始するにあたっての敷居が低い。

Exchange ServerやSQL ServerなどのMicrosoft社製品と相性がよく、また、.NET FrameworkやActive Directorを使いたい場合などにWindows Serverが選定される。

UNIX

1968年に、アメリカAT&T社のベル研究所で開発されたOS。 移植性が高く、またソースコードがコンパクトであったことから、その後多くのプラットフォームに移植されることになった。

Linuxなどのオープンソース系OSが普及した後はほとんどのサーバはそちらで構築されることになり、UNIXは主にエンタープライズサーバを使うためのOSで用いられることが多くなった。

代表的なUNIX OSには、AIX、Solaris、HP-UXなどがある。

長くなったので、今回はここまで。 ではでは、またまた!