サーバートラブル発生時の対処法

シングルユーザーモードで行う作業

シングルユーザーモードは、Windowsで言えばセーフモードに相当します。ファイルシステムチェックなどは、マルチユーザーモードの状態ではシステムを傷つける可能性があるので、シングルユーザーモードでの作業が必須です。マルチユーザーモードで、もしファイルシステムのチェックを行うと、動いているシステムをチェックしてしまうので、システムを破壊してしまいます。
データのフルバックアップを行うケースでは、外界からのアクセスを遮断し、第三者がアクセスできないようにすることが必要です。バックアップ中にオリジナルデータが変更されると、バックアップデータの整合性が保てなくなるからです。

レスキューモードでのファイルシステムチェック

レスキューモードはOSの領域が破損しているときにデータ領域をすくうのが目的です。単純にブート領域が破壊されただけなら上書きで新規で書けばまた起動できます。また、ファイルの損失を切り離すことでなんとか起動まで持っていき、起動後にデータを吸い出した後に、再インストールすると言う方法もあります。

ログをチェックする

ログのチェックは、とても有効なトラブル対策です。ログは、「/var/log」ディレクトリに集められていますが、最も基本的なログが「/var/log/messages」です。

tailコマンドでエラーログをターミナルに表示する

▼tailコマンド

tail -f ファイル名   ―ログをオープンしたままで表示
tail -n 10 ファイル名  ―最新のログを10表示

loggerコマンドでメッセージをログに書き込む

▼loggerコマンド

# logger -i -t タグ名

サービスのログを制御するsyslog

syslogは、カーネルや各種デーモン、アプリケーションなどが出力するログを取得して、/var/log配下のログファイルに情報を書き込んでくれるデーモンプログラムです。
syslogは、ログの吐き出し方を運営者側でカスタマイズできるようになっており、/etc/rsyslog.confで定義して利用します。

どこに問題があるのかを確認する

サーバーが不調になった場合、どのように対処したらいいのかを確認します。

サーバーにログインできるか
lspciコマンドで、すべてのデバイスが認識できているか確認しましょう。またファイルエラー関連であれば、シングルユーザーモードで再度OSを起動し、fsckで該当ディスクを修復します。
サーバーが起動途中で止まってしまう
ファイルシステムのエラーの問題である可能性が非常に高いです。シングルユーザーモードで起動できるか確認し、起動できる場合は、該当ハードディスクをfsckコマンドで問題のある箇所を切り離してなんとか起動できるようにすることが可能です。
BIOS画面から起動できない
ディスクが認識されていないか、ディスクが故障しています。ディスクが故障していない場合、ブートセクタがデータエラーで読み込まれず起動できないケースもあります。
電源を入れても起動しない(BIOS画面が出ない)
マザーボードが故障している、CPUが故障している、電源が故障しているかのいずれかです。ハード交換しか、復旧の方法はありません。

ネットワークの基本設定

ネットワーク関連の設定ファイル

ネットワークインターフェース設定ファイル―/etc/sysconfig/network-scripts/ifcfg-デバイス名

このファイルは、ネットワークカードに割り当てる情報を定義するファイルです。各パラメータの意味は、次のようになります。

設定を変更したり、新規で追加した場合は必ずネットワークの再起動を行う必要があります。serviceコマンドを使用して、networkサービスの再起動を行ってください。

リゾルバファイル―/etc/resolv.conf

クライアントがサーバーへアクセスする際には、ドメインのIPアドレスを解決することが最初の処理になりますが、これを解決してくれるしくみを「リゾルバ」と言います。
DNSサーバーのIPアドレスを設定して、そこに対してサーバー内で動作するプログラムがIPアドレスの問い合わせを行います。IPアドレスの問い合わせを行うためのに使うファイルがresolv.confです。

ホストファイル―/etc/hosts

DNSサーバーを使わなくても、ここに登録したホスト名情報とIPアドレスの対の情報はローカルの名前解決ファイルとして利用できます。
「IPアドレス ホスト名 ホスト名 ・・・」のように記述します。ホスト名は複数設定できます。

名前解決参照順ファイル―/etc/nsswitch.conf

/etc/hostsファイル、DNS、NISなどの名前解決参照順は、このファイルを編集する事で変えることが可能です。

ベースネットワークファイル―/etc/sysconfig/network

サーバーのネットワーク基本情報を設定するファイルです。

ネットワーク起動ファイル―/etc/init.d/network

ネットワークサービスの起動を行うサービススクリプトです。serviceコマンドでネットワークサービスの起動や停止を行う際に利用されます。

ネットワークサービスの機動と停止

ネットワークの設定を変更した場合は、ネットワークの再起動を行います。この場合serviceコマンドを使用します。

▼ネットワークサービスの停止
service network stop
▼ネットワークサービスの起動
service network start
▼ネットワークサービスの再起動
service network restart
▼ネットワークサービスの起動ステータス確認
service network status

ネットワークの状態を把握する

ネットワークカードのアクティビティとは

ネットワークカードのアクティビティがあるということは、ネットワークカードがデバイスとしては正常に動作していることを示します。ただし、アクティビティがあることと、ネットワークの到達性があることは一致しません。ネットワークカードに対する設定が間違っているなら正しくパケットは到達できないのです。

ローカルループバックについて

localhostのアドレスを、「ローカルループバックアドレス」と呼びます。localhostで動作しているサーバーに接続する場合には、ローカルループバックアドレスを使用しています。

ifconfigによるネットワークの起動と停止

ifconfigコマンドは、ステータスの表示だけではなく、ネットワークカードの起動、停止も行えます。

▼ifconfigコマンド

ifconfig デバイス名 IPアドレス up
ifconfig デバイス名 down
ifconfig -a

up:指定したネットワークカードを起動する
down:ネットワークカードを停止する
-a:すべてのネットワークカードの情報を表示

サーバーは固定IPアドレスで運用する

インターネット上に公開するサーバーは固定IPアドレスで運用します。通信する相手のIPアドレスが頻繁に変わってしまったら、通信が成り立ちません。

netstatコマンドで通信状態を調べる

ネットワークカードの通信状態を調べるには、netstatコマンドを使うことによって多くの情報を得ることができます。選択するオプションにより大幅に出力する内容が変わります。

▼netstatコマンド

netstat [オプション]
▼netstatコマンドの主なオプション
-aすべてのソケット情報を出力
-r経路情報を出力
-n出力情報を名前解決せず、数字で出力
-pPIDとプロセス名を出力
-tTCPポートを出力
-lLISTEN状態のソケット情報を出力

接続の疎通を確認する

サーバーと端末との接続確認

サーバーは、決められたIPアドレスを持っていて、ネットワークを構築する人がIPアドレスの配置を決めます。ネットワークは同じグループに所属する端末の範囲を決めてネットワークセグメントを構成していきます。サーバーは、どこに配置されてもよいのですが、必ず決められたセグメント内のネットワークアドレスに属するIPアドレスである必要があります。
目的のサーバーに接続できない場合、全体的なネットワーク図を描いて、どこまで通信できているかを追う必要があります。次のような検証ポイントを押さえていきます。

接続確認関連コマンド

ネットワークへの接続を確認するには、netstatコマンド、pingコマンド、tracerouteコマンドを使います。また、DNSに関してはnslookupコマンドで検証が行えます。

pingコマンド

ネットワークの疎通を確認するためのコマンドがpingです。疎通確認したいホストに対してIPパケットを発行し、パケットが正しく到達しているかどうかを確認できます。

tracerouteコマンド

どこまで経路として到達できているかを確認するために用意されているのが、tracerouteコマンドです。このコマンドを使うことで、間に入っているルーターなどの装置に問題があれば、接続できるところまで表示してくれます。

nslookupコマンド

URLのIPアドレスを調べたり、その逆でIPアドレスのURLを調べたりするのに使うコマンドです。
ホスト名からIPアドレスを調べることを正引き、IPアドレスからホスト名を調べることを逆引きと呼びます。

▼nslookupコマンド:正引き
nslookup ホスト名 [DNSサーバー名(省略可)]
▼nslookupコマンド:逆引き
nslookup IPアドレス [DNSサーバー名(省略可)]

nslookupコマンドのプロンプトから、以下の設定を行って、ドメイン名を入力すると各種の情報を得ることができます。

set type=A   ―アドレス定義
set type=MX   ―メール受信サーバーの定義
set type=SOA  ―SOAレコード DNSレコードの更新間隔を確認
set type=NS   ―ネームサーバーの定義
set type=CNAME ―CNAMEの定義

サービスとネットワークの関係

通信の確立と終了

netstatコマンドによる表示は、通信の接続状況を調べるために非常に有効です。サーバーはネットワークの特定のポート番号に向かってくるクライアント側の接続に対して、レスポンスを返します。
表示項目には、次のような意味があります。

表示ステータスは、次のように表示されます。

アプリケーションレベルのどのポートで利用しているかを調べたい場合は、「-antp」オプションが役立ちます。「-nlpt」オプションを付けると、LISTENの待ち受け状態が表示されます。

ドメインとDNSの仕組み

ドメインの構造

ドメイン名はツリー構造になっています。ドメイン名にはその構造にルールがあり、ルールに従って命名します。
ドメイン名は右からトップレベルドメイン、組織名、サブドメインという構造を取っています。

トップレベルドメイン
トップレベルドメインには、次のようなものがあります。
組織名
自由に名前を付けられますが、同じトップレベルドメイン内ですでに存在している同一のものは取得できません。
サブドメイン
サーバーには、ドメイン名とIPアドレスを割り当てます。提供するサービスにより、ホスト名を使い分ける場合には、サブドメインを付けられます。

名前解決のためのコマンド

自サーバーのドメイン確認
自サーバーのドメイン確認は、hostnameコマンドを実行することによって確認できます。
IPアドレスは、ifconfigコマンドを実行することによって確認できます。
nslookupコマンドによる名前解決
ホスト名からIPアドレスを調べるには、nslookupコマンドを使いますが、nslookupコマンドでDNSを正しく引けるということは、クライアントも正しく引けるということになります。

ドメイン情報を確認する

whoisコマンドの読み方

ドメイン名は、インターネット上で利用できるようにするためレジストラに登録申請します。その際には、どこの組織がそのドメイン名を利用しているかをレジストラに登録しています。
登録されている内容はwhoisコマンドを実行することにより、自サーバーから確認することができます。実際には、インターネット上に公開されているwhoisサーバーのドメイン・データベースからドメイン情報を得ています。

whoisコマンドで確認できるドメインの情報一覧
項目yahoo.co.jp意味
a.[Domain Name]YAHOO.CO.JPドメイン名
g.[Organization]Yahoo Japan Corporation組織名
l.[Organization Type]Corporation組織種別
m.[Administrative Contact]SI7100JP登録担当者
n.[Technical Contact]NM5078J技術連絡担当者
p.[Name Server]ns01.yahoo.co.jpドメインを管理する DNS
p.[Name Server]ns02.yahoo.co.jpドメインを管理する DNS
p.[Name Server]ns11.yahoo.co.jpドメインを管理する DNS
p.[Name Server]ns12.yahoo.co.jpドメインを管理する DNS
s.[Signing Key]電子署名の鍵情報
[State]Connected(2012/11/30)ドメインの状態
[Registered Date]2000/11/17登録年月日
[Connected Date]2000/11/17接続年月日
[Last Update]2011/12/01 01:07:46(JST)最終更新

digコマンドの応用

DNSの検索を、一般的にクエリーと言います。DNSを管理するカテゴリーのような情報をクエリータイプと呼び、定義する内容によって種類を選択します。
サイトを構築しているとサーバーの引っ越しや新規ドメイン取得に際に、このレコード情報を読み解く必要が出てきます。そのとき必要定義情報を取得するのがnslookupやdigコマンドの役割です。

▼digコマンドによるクエリー

dig @ネームサーバ ホスト名

▼クエリーの種類を指定して実行する

dig ドメイン名 or ホスト名 クエリーの種類

クエリーの種類名
soa:ネットワークアドレス
mx:ドメインメールの受信サーバー
ns:ドメインのネームサーバー
a:登録ホストのIP
cname:ホスト別名
ptr:逆引きホスト名
txt:テキスト情報

WebサーバーとDNSサーバーを設置する

Webサーバーの設定

ServerNameの設定

ServerNameの設定では、Webサーバーで使用するサーバー名とポート番号を設定します。

ドキュメントルートの設定

<Directory " /var/www/html" >設定では、ブラウザでこのWebサーバーにアクセスしたときのドキュメントルールの動作設定をします。

Webサーバーにアクセスしたときに、ドキュメントルートのディレクトリのファイル一覧が表示されてしまい、セキュリティ上好ましくありません。
Optionでは、次のような設定ができます。

▼optionで指定できる設定
Allすべて許可
Noneすべて不許可
ExecCGICGIの許可
FollowSymLinksシンボリックリンク許可
SymLinkslfOwnerMatchオーナーならシンボリックリンクを許可
IncludesSSIを許可
IncludesNOExecexecを除くSSIを許可
Indexesファイル一覧表示を許可

AllowOverrideでは、各ディレクトリごとに設定できる.htaccessによる設定を許可するかどうかの指定をします。

▼AllowOvrerideによる.htaccessによる設定を許可するかどうかの指定
Allすべて許可
Noneすべて不許可
AuthConfig認証関連の許可
FileInfoファイルタイプ関連の許可
Imdexesディレクトリインデックス
Limitアクセス制御
Optionsディレクトリ設定

DNSサーバーの設定

DNSサーバーを起動させるためには、次のファイルを作成する必要があります。

/etc/named.confの作成

ドメイン定義ファイル/etc/named.confは、既存のnamed.confを参考にして、編集・作成を行います。

zone定義

ドメインのzone定義を表すブロックです。自ホストで管理するドメインのサーバー情報をどう取り扱うかを格納し、DNS参照に関する定義を行います。

Type定義

DNSの参照タイプを定義します。プライマリー情報を扱うサーバーなのかセカンダリー情報を扱うサーバーなのかを定義します。

options定義

DNSサーバー自体の基本定義を行うブロックです。サーバーの基本動作を決めるためのポート番号や定義ファイルのベースディレクトリなど、サーバー動作を行うためのベーシックな情報をここで定義します。

zoneファイルの設定

zone情報リソース文法

[owner] [ttl] IN <type><value>

owner:そのリソースを定義するドメイン名やホスト名、IPアドレスを指す
ttl:そのレコードのTime to liveを表す
type:リソースのタイプ
value:ownerに対する割り当て情報

リソースタイプに追加できる情報
Type情報意味
SOAStart of Authorityそのドメインの基本管理情報
NSName Serverそのドメインのネームサーバー
MXMail Exchangerメールのホスト名
AAdressそのドメインに登録されるアドレス
CNAMECanonical Nameホストの別名
PTRDoamin Name PointerIPからホスト名をマップする
TXTTextコメントで使用するが、最近はSPFでドメインキーの用途でも使われる

SOAレコード

ドメインの基本情報を定義するのがSOAレコードですが、DNS情報更新を管理する箇所が多いです。

▼SOAレコード

[owner] IN SOA <host><mail> (<serial> <refresh> <retry> <expire> <minimum>)

Owner:管理するサイトのドメインを指す
Host:DNSサーバーのホスト名
Mail:DNSサーバーを管理する管理者メールアドレス
Serial:zoneファイルの更新をユニークな値で設定する
Refresh:セカンダリーサーバーに対する同期感覚
Retry:セカンダリーサーバーへ同期をとった際に失敗した後のリトライ間隔
Expire:転送された情報の有効期限
Minimum:通常クライアントが保持するDNSキャッシュの利用できる期間はこの期間をベースに予測する

ディレクティブ

zoneファイルは、下記の特殊変数でリソースのグローバルな値を制御します。