あきの備忘録

あきの のブログです。読んだ本といった場所の備忘録

『新人エンジニアのためのインフラ入門』chapter9~13

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

メインフレームのメリットは「安定性」があることである。
対する、オープン系システムは「様々な製品」が「様々なメーカー」から提供されている。
そのために障害が起きることもある。

1、ハードウェアの不具合
MACアドレスの重複の問題切り分け
NICの問題
2LANケーブルの品質低下
3接続先ネットワークスイッチとの相性
4OSのネットワーク設定に不備がある
5接続先ネットワークスイッチの設定に不備がある
冗長化特有の問題


まず、6を確かめるためにネットワークの冗長化の設定を解除して単純化構成にした。
3、5に関してはネットワークチームを巻き込む必要があったため、先延ばし。
1、2、4について確かめた。
この流れで調べたところ1の可能性が高まった。
これを確認するために、パケットキャプチャをPingを投げながら実施した。

ハードウェア面での不具合はとりわけ時間のかかるため、構築工程の早い段階で顕在化できるように
受け入れ確認やテストを計画する必要がある。

 

 

2、ソフトウェアの不具合
linuxOS上にNetBackupというバックアップソフトウェアをインストールしてoracle領域をバックアップするという構成
・バックアップを取得している最後のタイミングでエラー終了してしまう。という事象が発生した。

この場合の問題切り分けでは
1OSが悪いのか
oracleが悪いのか
3Netbackupが悪いのか
の問題をインフラエンジニアが切り分ける必要がある。
→→・ファイルシステム領域のバックアップ:成功
・raw領域(ファイルシステムをスキップ)のバックアップ:失敗
次に、rawアクセスはOSが提供している機能のため、OSが怪しいのではないかと仮説を立てた。

cf:
・ddコマンド raw領域を扱うことのできるコマンド
・staceコマンド プロセスが使用するシステムコールなどを可視化できる。
つまりコマンドを打った時の動きを通常より細かい単位で確認することができる。


これらのコマンドを使用し、仮設(コマンドも最後に失敗し、その時に細かいエラー内容をOS上で確認できるのではないか)
を確認した。

 

 

3、組み合わせによる不具合
サーバーとサーバ、ネットワーク装置の組み合わせにも注意点はある。
その中の代表的な一つとして 通信タイムアウト がある。
通信には一定時間やり取りがない場合接続を切断するための「タイムアウト値」が設定されている。
普段は問題にならないが、サーバ、OS、ミドルウェア、ネットワーク装置が
関連するとお互いのタイムアウト値に矛盾が発生することがある。

ex)「コネクションプールの未使用タイムアウト(30min)」と「ファイアウォールの無通信タイムアウト(15min)」
この場合、15分以上使用されていないコネクションプールはファイアウォールによって強制的に切断される。
ファイアウォールで切断されたことを知らないAPサーバは「接続できているもの」として扱うため、
実際にコネクションプールを使用して接続するとDBサーバからの応答を待ち続けてしまう。

このような製品間の隙間のようなものに、インフラエンジニアは精通・対応できるように日々基礎知識を身に着けておく必要がある

 

 

・コラム アジャイル開発について
ウォータフォール型の開発→要件定義、設計、構築、テスト
アジャイル→短期間で設計、構築、テスト を繰り返しながらプロジェクトを推進する手法
(その都度での問題点の修復可能なのがメリット)


##chapter10 構築とテスト


・構築とは
前段フェーズの「設計」を通して作成される設計書やパラメータシートに従ってハードウェアとソフトウェア
(OS、ミドルウェア)の設定を行い、システムを実際に組み上げる作業を指す。
 ・サーバ BIOS設定、HBA BIOS設定、ハードウェアRAID設定
 ・ストレージ 筐体設定、ディスク関連設定、オプション(コピーなど)設定
 ・テープ 筐体設定、テープメディア装填
 ・ネットワーク ルーティング設定、VLAN設定、アクセス制御設定、負荷分散設定
 ・OS インストール、ライセンス登録.......
 ・ミドルウェア インストール、各種設定
 
 ↓
これらを技術領域に分けて対応することもある
ファシリティ ハードウェア・ソフトウェアの調達、ライセンス管理、
 工事(ラック、ケーブル)統括、データセンター関連作業統括
サーバ・OS  サーバ・ストレージ関連作業、OS関連作業
ネットワーク ネットワーク関連作業
Web・AP    Web、AP
DB      DBに関連する作業
運用     運用に関連する作業

 

 

・構築の現場
1、構築準備
類似の環境を作成し構築の検証や手順の確認を行っていく。
実際に確認することで設計ミスやソフトウェアのバグ等で上手くいかない部分が見える。
(最近では、類似の環境に仮想サーバやクラウド上のサーバを使用することも多い)
検証や手順確認が完了したら、「構築手順書」を作成していく。
プロジェクトによって粒度は様々である。
また構築に必要な資材(メディアやライセンス、設定ファイル、スクリプト、作業端末)もこのタイミングで準備を進める

2、構築形態
ミドルウェアの構築では、インストールや設定する際に関連するサーバが必要な場合があり、
構築の前後関係やスケジュールに注意が必要。
「サーバ単位で動くもの(対象サーバに設定ファイルで設定)」と
「Manager-Agent構成のもの」
ex 監視用のミドルウェアの場合 監視対象のサーバにAgent 監視状況を管理するサーバにManagerをインストールする。また複数台のサーバ間で通信が必要となるため、ネットワーク周りの設定も必要になる場合がある。
Agentから送られたデータをManager側で受信し、監視できる状態になれば完了である。
が存在する。

 

 

3,構築環境

・開発環境
アプリケーションエンジニアがアプリケーション開発を行う環境

・検証環境
テスト環境とも呼ばれ、本番環境でアプリケーションを動かす前にテストや検証を行う環境。
本番よりもコストを削った構成になっている

・本番環境
実際にユーザへサービスを提供する環境。
ネットワーク上に既存のシステムが稼働している場合もあるため万が一失敗があると周辺のシステムに影響が出る。

 

4、構築Tips

 

 

・作業ログの取得
"script"コマンドは作業ログを残すコマンドである。
作業後にサーバの挙動がおかしくなった際に潔白を証明する材料にもなる。

 

・構築資材の確認
構築に必要なパッケージやファイルを転送する際に転送モードを間違えたり、
転送が不完全だったりするとデータが破損する場合もある。
それを確認するためのコマンドが"cksum","md5sum"である。
コマンド引数にファイルを指定することでファイル内容を元に計算された英数字が出力されます。
これを転送前、転送後で実施し比較することでファイルの破損を確認します。

 

・設定差分の確認
"diff"コマンドは2つのファイル内容を比較し、差分を出力する。
構築中に設定ファイルを編集する場合には必ずバックアップを取得するが、
このバックアップファイルと編集後のファイルをdiffコマンドで比較し、
変更箇所と変更内容が意図したものかどうかを確認する。

 

5,構築の自動化
近年では構築をツールで自動化する手法に注目が集まっている。
代表的なツールとして
Chef(webサーバ構築ツール)、Ansible(構成管理ツール)、Puppet、
といったものがある。
作業者の負担やコストを抑えられるといったメリットがある。
rubyPythonといったような言語の取得が必要になる)

 

●テストとは
テストとは構築したシステムが設計書通りに作られているかを確認する作業である。

 

●テストの現場

 

1,テスト準備

まずテスト計画書を準備する。
テストの目的をはじめ、体制やスケジュール、観点、合格基準なども記載していく。

次にテスト仕様書を準備する。
テストの内容と手順、期待する結果、対象などが記述されており、
実施者はこの内容に従って作業を実施していくことになる

併せて、テスト実施に必要な環境(通信先サーバーや負荷端末など)や
データ(テスト表示用のHTML画面やDB接続をするアプリケーションなど)も用意する。

 

 

cf.ウィルス対策製品をテストする為にテストウィルスを準備したら、
自分の端末のウィルス対策製品で検知されてしまった.......ということなどもある

 

 

2,テストフェーズ

単体テスト
OSやミドルウェアの設定、動作を単体でテストする

 

結合テスト
複数の機能を組み合わせた連携が可能かをテストする。
非機能要件に従って設計された基本設計内容を確認するのが大きな目的である。

 

結合テスト
本番環境で正常に動作するかを確認する。
システムの性能を計る性能試験、実際の運用時に想定される負荷に耐えられるか検証する負荷試験などがあげられる。

 

 

3、テストの自動化
テストにも自動化ツールが存在する。

 

 

●構築とテスト
OSにもミドルウェアにも言えることだが、設定を行った人間は「正しく設定を行ったつもり」になりがちである。
そのため「第三者によるチェックが不可欠」である。


##chapter11 バックアップ・リストア

●バクアップ・リストアとは

 

1,バクアップとは
データ損失に備えてデータを複製することをバックアップという。
システムは年中無休で動いているため、ハードウェア障害やソフトウェアバグ、
人的なミスなどデータを損失する危険性は身近に多くある。

システム上のデータは「数が多い」、「容量が大きい」「更新頻度が高い」といった特性があり、
単純にバックアップするだけでも大変である。

 

・数が多い
webコンテンツやアプリケーション関連ファイル、日々蓄積されるログファイルなどシステムに関わる
データは数が多い。数が多いことでファイルごとにオープン・クローズが発生しオーバーヘッドも大きい

 

・容量が大きい
DBデータのようにテラバイト級のデータも珍しくない。
容量が大きいことでネットワークや保存先のメディアを多く消費し、バックアップ時間も長くなる

 

・更新頻度が高い
DBのように常に更新され続けているものも多い。
更新途中のデータは複製できないため静止点を確保する必要がある。

ある程度のシステム規模になると専用のソフトウェア(ミドルウェア)を用意し、バックアップ作業を運用している。
またバックアップ先にはディスクストレージやテープ装置を使用している。
業務システム用の製品は、ソフトウェアとして公開されている製品もあるため一度インストールしてみるとよい。

 

 

2,リストアとは
データ損失が起きた際に複製しておいたデータから戻すことを「リストア」と呼ぶ。
リストアにも「年中無休で動いているシステムのデータ」という扱いの難しさがあり、
データを戻すだけでは終わらないケースも多々ある。
また、スピードを求められることが難しいところである。

システム構築中にもリストアテストを実施する機会はありますが、
テスト運用中のシステムにおいて実際にデータが入った状態でスピードを求められながら実施しなければならないという点において難しさがつく。
リストアの方法にも様々な選択肢があるが、可能な限りシンプルに設計することが基本になる。

 

 

3,リカバリとは
リストアが「バックアップしたデータをバックアップした状態で戻す」ことを指すが、
リカバリは戻したバックアップデータに何らかの処理を加えてデータを正常化・最新化することを指す。

主にデータベース復旧の場面で使用されており、
ベースとなるデータに更新ログを適用することで障害発生直前の状態までデータを復旧させる。
(ただしログファイルまで損失した場合は復旧できない)


●バックアップ・リストアに必要な知識
1,ハードウェア

ストレージ装置(SANストレージ)、テープ装置(LTO)がある。
ストレージ装置のメリットは扱いやすさと処理速度である。
またディスク間の複製といった高速処理機能も備えており、バックアップ時間の短縮につながる。

テープ装置のメリットはバックアップデータの保管コストが低い点である。
過去のバックアップデータを一定期間保管すると保管コストを無視できない。
数日前のデータベースのバックアップは相当なことがない限り不要だが保管品しなければならない……といったような
データの保管にはテープ装置が向いている。
また記憶媒体を持ち運べるといったメリットもあり、
システムとは別の場所に外部保管する運用を行っているケースもある。

 

 

2,ソフトウェア

専用のソフトウェアを利用したバックアップ運用を行っている。
それらの大まかな運用の支援する機能をまとめる。

 

・集中管理
システムの各サーバに対するバックアップ設定やバックアップ・リストア実行を
管理サーバから集中管理することが可能。

 

 

・バックアップデータの管理
バックアップ実行日やサーバごとにデータを参照する・古いデータを削除するなど

・増分・差分バックアップ
データの更新部分だけをバックアップすることでバックアップの時間の短縮が可能

・バックアップ監視
バックアップ状況を監視し、失敗したジョブの把握・再実行等が容易

・スケジュール実行
あらかじめ設定した時間にバックアップを開始することが可能

 

3,運用
運用においては定期的に行う作業と不定期で行う作業が存在する。
定期作業ー「監視」「ジョブ管理」
不定期作業ー「障害復旧」
などがある。

また、バックアップに限ると
定期作業 ー「データやログのバックアップ」
不定期作業ー「システムのバックアップ」
などが該当する。

・「フルバックアップ」

・「差分バックアップ(フル+差分)」

フルバックアップ後に追加されたデータを取得する。
差分バックアップ後にさらに差分バックアップを実行した場合には、フルバックアップ後に追加されたすべてのデータを取得

 

・「増分バックアップ(フル+増分バックアップ)」

フルバックアップ後に追加されたデータを取得する。
増分バックアップ後にさらに増分バックアップを実行した場合には、前回の増分バックアップ後に追加されたデータのみを取得

 

 

●サーバごとのバックアップ方法


1,webサーバ
webコンテンツなどはデータ容量も小さく更新されるタイミングも頻繁ではないため、
アクセス数が少ない深夜帯やコンテンツ更新などのタイミングでバックアップすることになる。

また、容量の小さなデータが大量にあるという特性があるため、
NASやバックアップサーバにネットワーク経由で転送するといった実装が多くなる。

Webサーバでは大量のアクセスログが発生するが、これらのログもバックアップ対象になる。

 

2,APサーバ
データの特性はWebサーバと似ているため、Webサーバと同様のバックアップ方式を採用することが多い。
アプリケーション関連のデータも存在するため、システムごとに対象データが決定しておらず総量が見積もりにくい。

WebサーバでもAPサーバと同じく大量のアクセスログが発生するが、これらのログもバックアップ対象になる。


3,DBサーバ
データ容量が大きく更新も頻繁に発生している。
バックアップの方法はデータベースミドルウェアに何を使用しているかに依存する。
大まかにわけて「オフラインバックアップ」と「オンラインバックアップ」に分けることができる。

 

・オフラインバックアップ
データベースを停止し、データが更新されない状態でバックアップを取得する方法。
データの整合性が取れた状態でバックアップを行うため実装も単純でリストアも
基本的にバックアップを戻すだけで完了する

 

・オンラインバックアップ
データベースが動作しており、データの更新されている中でバックアップを取得する方法である。
基本的には、データベースの更新は変更内容がログファイルに書き込まれた後で反映される仕組みになっているため、
バックアップ中のデータファイルへの更新を停止してデータファイルをバックアップするのが主流。
障害の発生状況(欠損したファイルの種類)によって
リストア・リカバリの内容が変わってくるためリストアの難易度も上がる。

 

 

4,その他のサーバ
その他のサーバに関しても基本的にミドルウェアに関する管理データをバックアップする。
製品ごとに管理情報を出力する機能があり、それらをバックアップする。

 

●コラム「運用と保守」

運用ーシステムを止めずに動かすことであり、それに伴う作業を実施することである。
不慮のデータ損失に備えてバックアップを取得したりと、システムが提供するサービスに問題が起きないようにする。

保守ーシステムの改善や機能拡張をすることである。システムに手を加える。
バッチの適用やアプリケーションの機能追加、チューニングを実施する


##12セキュリティ

●セキュリティとは

1,非機能要求グレード
非機能要求グレードはシステム発注側と受注側での認識齟齬を防ぐ目的で、
非機能要求としてまとめるべき項目を体系的に整理したツール群のことを指す。

 

 

●セキュリティ要求に対するインフラの対応

 

1,アクセス・利用制限
アクセス・利用制限は「認証機能」、「利用制限」、「管理方法」から構成されている。

 

・認証機能
現在のシステムではIDとパスワードを使用したユーザ認証が主流。
認証を行う場合にはインフラとして認証基盤が必要となり、
その選択肢はOS標準の認証機能、認証ミドルウェアRADIUS製品、ActiveDirectoryなど)複数存在する。
それぞれの特徴を把握し、システムごとにアプリ担当者と決めていく。

 

・利用制限
承認されたユーザごとに使用できるリソースに制限すること(OSでも可能)。
ミドルウェアも制限をかけることができ、データベースに接続する権限やデータベースを作成する権限などがある。
このような利用制限を設計するのもインフラエンジニアの仕事であり、
アプリケーションの実装とも関係してくるため、業務用のユーザ権限に関してヒアリングを行う。

2,データの秘匿
システムが扱うデータには「ネットワーク上を流れるデータ」、「各サーバや危機に蓄積されるデータ」がある。
データを秘匿するには暗号化する方法があり。暗号化しておけば万が一データを盗まれても中を見ることができない。

暗号化をする際には、元のデータを「暗号化アルゴリズム(DES、AESなどがある)」に従って暗号化する。
しかし、暗号化アルゴリズムは誰でも入手できるものなのでそのままでは簡単に復号化されてしまう。
そこで利用者ごとに暗号化内容を変化させる「暗号鍵」が必要となる。

インフラエンジニアの作業としては、暗号化する対象や暗号化アルゴリズムプロトコル、暗号鍵の複雑さ
などを決めていく必要がある。
性能とのトレードオフといった側面もあるため注意が必要となる。
現在のシステムでよく使われている暗号化には以下のものがある。

 

 

・インターネットからロードバランサー・Webサーバ間の通信データをSSLTLSにより暗号化
・DBサーバの重要な一部のデータの暗号化

 

 

3,不正追跡・監視
「不正追跡・監視」は「不正監視」と「データ検証」から構成されている。
ここではシステムを監視して不正を検知することが目的となる。

 

・不正監視
不正監視にはログの確認が有効である。
ログにも「OSログ」「ミドルウェアログ」「アプリケーションログ」、
そして「ネットワーク機器のログ」などがある。
運用ミドルウェアを導入して一元管理することになるが、
大量のログになるために通常は事前に設定したフィルタに引っかかった
ログと個別に指定したメッセージのみが表示されるようにしている。

なお、事前にフィルタ設定したもの以外でも有事の際には解析で必要となるログもあるため、
通常は管理サーバで定期的にログを収集して保存している。

 

●データ検証
データの改ざん検知に関する項目だが、ネットワーク上を流れるデータと
各サーバや機器に蓄積されるデータについて考える必要がある。

通信データに関しては「デジタル署名」を使用するケースが多く、
送信側と受信側でデータのハッシュ値を取得して比較することでデータが改ざんされていないことを確認する。

蓄積されているデータに関しては、改ざん検知ソフトウェアを導入することになる。
監視対象機器に導入してデータの改ざんを検知する方法や
監視サーバなどに導入してユーザと同じ方法でアクセスし、その結果から改ざんを検知する方法などがある。

 

4,ネットワーク対策
ネットワーク対策は「ネットワーク制御」「不正検知」「サービス停止攻撃の回避」から構成される。

 

●ネットワーク制御
通信制御を指すことが多い、選択肢としてTCP/IPにおける各層での制御がある。
ネットワークインターフェース層ではMACアドレスによる制御、
インターネット層ではIPアドレスによる制御、
アプリケーション層ではアプリケーションデータ内容による制御
が可能となる。

ここでよく利用されるのは「L.3スイッチ」や「ルータ」、「ファイアーウォール」
といったネットワーク装置に実装されているアクセス制御を利用したものである。
また、サーバサイドでもOSに実装されているファイアウォールを利用して
アクセス制御しているシステムもある。

 

●不正検知
同一IPから複数ユーザIDでログインしているなど
通常の利用ではありえない通信に関しては不正に検知するための対策が必要となる。
その対策として利用されているのが「IDS」や「IPS」といった製品である。
ネットワークやサーバに製品を導入することで、やり取りするパケットの内容を監視する。
(IDS-警告の表示、IPS-不正アクセスの遮断、IDS/IPS機能を追加した「UTM」という製品もある。)
これらは「何を不正とするか」というチューニングが必要である。

 

●サービス停止攻撃からの回避
DoSDDoS攻撃といったネットワークを混乱させる攻撃に対する対策。
通常DoS攻撃は単一の送信元からアクセスされるため、当該アドレスをネットワーク制御するといった対策が可能
DDoSは対象が複数となり、変化するため選択肢として、DDoS攻撃に対応したファイアウォールや外部サービスを利用するといった対策がある。

 

5,マルウェア対策
マルウェアは対象機器に害を与えるように悪意を持って作成されたソフトウェアなどの総称である。
その種類にはトロイの木馬、ウィルス、ワームなど様々ある。
一般的には対策ソフトウェアを導入することで、対策する。
対策ソフトウェアはサーバをスキャンしてマルウェアを検知する。
サーバで使用する際の注意点としては、DBサーバ上の大きなファイルやダンプファイルを除外する設定をしておかないと、スキャンプロセスでCPUを使い切ってしまう点である。

 

 

6,Web対策
最近ではWebサーバの前段に「WAF(Web Application firewall)」と呼ばれるwebアクセスに特化した
ファイアウォールを配置してパケットを制御する構成をとるシステムもある。
通常、ファイアウォールではアプリケーションの中身までは確認しないが、WAFではその中身まで確認して
不正なアクセスの場合は遮断する。ただし、導入するためにはシステムに合わせて設定をチューニングする必要があり、
実際には本番のアクセスデータがないと設定が完了しないため、導入には時間やコストが必要である。

 


##Capter13 プログラミング

4,コンパイル方式とインタプリタ方式
ソースを作成した後、コンピュータで実行するためには機械語へと変換する必要がある。
この変換にはコンパイル方式とインタプリタ方式が存在する。

 

コンパイル方式
コンピュータの実行前にソースプログラムを機械語で書かれた実行プログラムへと変換する。
事前に実行プログラムへと変換しておかなければプログラムを実行できない。
メリットは実行速度が速い点である。

 

インタプリタ方式
コンピュータの実行時にソースプログラムを機械語に変換する。
ソースプログラムを作ったら即実行してみるという形で手軽に動作を確認し、問題があればすぐに修正できる。
このメリットはメンテナンス性だが、速度面でデメリットがある。

 

 

●システムとプログラミング

 

1,システムにおけるプログラミング
・プログラムとソフトウェア

 

2,インフラにおけるプログラミング
「ツール」をインフラエンジニアがプログラミングする対象になりやすい。
(ex,システム運用をする中で必要となる自動化ツール)

●様々な言語

windowsバッチスクリプト
windowsコマンドプロンプトに実行させる処理を記述してツールを作る

 

PowerShell
使い方はバッチスクリプトと同じ
バッチスクリプトよりも扱えるコマンドが増えている。
windows環境で少し複雑なツールを作成する場合にはPowerShellを選択することが多い。

 

 

UNIXシェルスクリプト
UNIX系OSにおけるツールは基本的にUNIXシェルスクリプトで作成している。
注意点は実行するシェル環境によって微妙な差分が存在することである。

 

 

Python,Ruby
さらに複雑な処理を行う場合や実行速度を気にする場合に選択される。
また、このような言語では「ライブラリー」と呼ばれる様々な便利ツールが公開されていることも大きなメリットであある。

 

●プログラムの構造

 

1,順次処理
処理を順番に実行する方法。

 

2,分岐処理
分岐処理は条件によって実行する内容を変える方法。

 

3,反復処理
反復処理は同じ処理を繰り返し実行する方法。

 

●実行形態
実際に作成されたプログラムはどのように実行されるか。
通常は運用ミドルウェアの一つである、
ジョブ管理ソフトウェアが導入されておりスケジュールに登録することで自動実行している。

また、小さなシステムでジョブ管理ソフトウェアが導入されていない場合にはUNIX系であればCron、windows系であればタスクスケジューラという自動実行を支援するツールが用意されているため、
そこに登録し自動実行することになる。

 

 

なおここで注意が必要な点は実行環境の違いである。
プログラミングしているときには自分の想定した環境(rootユーザであるなど)でエラーが発生しなくとも
自動実行する際には環境が変化している可能性がある。