サーバーの運用・管理はなぜ重要?
サーバーって何?といわれてピンと来る人はあまりいないのではないでしょうか?
サーバーはコンピュータですが、私たちが普段使っているコンピュータとはちょっと違います。サーバーは普段目にしませんよね?
普段使っているコンピュータがお客さんならサーバーは店員さんです。ネットの世界でいえば、動画やウェブページ、ゲームを提供してくれるコンピュータのことをサーバーといいます。
ドリンクサーバーとかコーヒーサーバーとか言いますよね?ドリンクを提供してくれる(サーバー)からドリンクサーバーですね。Webを提供してくれればWebサーバー、メールを提供してくれればメールサーバーといいます。
このようにとらえるとそんなに難しくはないのではないでしょうか?
サーバーについてはこちらの記事でも解説しているので気になる場合は読んでみてください
もうちょっとサーバーについて突っ込んでいきます。情報系における「サーバー」の立ち位置について考えていきます。
IT系といえばプログラミングと思う方のほうが多いとおもいますが、それも一部でしかありません。化学でも物理化学、無機化学、有機化学などの分野があるように情報系にも分野があります。
サーバーという言葉とよく使われる言葉には
- サーバーサイドエンジニア
- 自作サーバー
- サーバー構築
- サーバーダウン
- サーバーレス
- サーバー寿命
- サーバー冗長化
- サーバー費用
などがあります。こうしたキーワードがサーバーというものを物語っています。
サーバーは用途によって設計・構築する必要があります。機械的にもそうですが、PCだけでは何も使えないのと同じようにサーバーもソフトウェアを入れなければただの箱です。業務用なので細かいセッティングが必要です。
サーバーがダウンしたという言葉を使ったことありますか?サーバーダウンすると困るものです。サーバーはダウンするものであり、サーバーに携わる人達はダウンしないように運用・監視しなければなりません。
サーバーダウンしないようにする方法のひとつが冗長化です。予備と思っていただければ結構です。スマホの予備バッテリーがあれば安心ですよね?上述したように人が監視するという方法もあります。
ただし冗長化や監視要員が増えるほど高額なサーバー費用がかかります。高性能なサーバーを使えばもっとかかります。
サーバーは24時間動きっぱなしです。少しでも人的・経済的コストを抑えるためには人が来ない深夜帯に監視要員を減らしたり、サーバーの能力を少なくしたいです。しかし、人間が半分の脳だけ寝ることができないように普通のサーバーでは半分だけの能力で動かすというのは簡単にできません。それが割と簡単にできるのがAWSやAzureなどの「クラウドサービス」です。クラウドを使って普通のサーバーを減らす設計「サーバーレス」が話題になっています。
上述のサーバーを設計、構築、管理、監視、運用するのがサーバーエンジニアです。インフラエンジニアとかバックエンドエンジニアなどと呼ばれることもあります(若干違いますが…)。
サーバーエンジニア
- ハードウエア
- オペレーティングシステム
- ネットワーク
- ミドルウェア(いわゆるサーバーソフトウェア)
- アプリケーション
- 運用・保守
- セキリュティ
といった幅広い知識・スキルを要します。そのなかでも運用・保守は重要です。なぜならサーバーがサービスを提供するものであるからです。
運用・保守の基礎とは?
運用・保守のスキルを身に着けるのは難しいです。なぜなら学びにくいからです。
どんなサーバーを管理するかによってその内容も変わりますし、必要な知識も大きく変化します。そのため一人前のサーバーエンジニアになるには長い経験年数が必要といわれています。
では全く学べないか?といえばそんなことはありません。自分で運用してみればよいです。
サーバーは止めてはいけないものです。稼働率という言葉がありますが、稼働率は99.99%でも年間52分34秒も停止します。これをできるだけ短く、止まっても素早く復旧するためのサーバーの設計をします。もちろん要求されるパフォーマンスを達成しながらです。
管理対象にログインしたことを確認することが重要!
サーバーを管理・保守するには対象のサーバーに何らかの方法でログインしなければなりません。多くの場合管理しているサーバーは複数あります。
最も重要で基本的なスキルが対象のサーバーにログインできたか確かめることです。
アホくさいと思うかもしれませんが、99.999%そのサーバーであるか?というのを自信をもっていうのは難しいです。なぜならサーバーは目の前にあるわけではなく、SSHなどを介してリモートログインするからです。もし間違えて再起動したり、設定を変更してしまうとそれだけでサービスが停止してしまうので絶対に避けなければなりません。
100%そのサーバーだということを確実に確かめるためにいろいろな情報をとります。こうした確認は対象サーバーだけでなく、どのソフトの、どこの設定の、どんな設定に変更するか?など様々な場面で必要なことです。二重三重のチェックをもって対象サーバーであることを確かめます。
ログイン対象かどうか確認する方法
プロセスを起動・停止したり、設定ファイルを書き変えたりする前にログインしたマシンがログインする予定のマシンかどうか?をきちんと確認しましょう。一つだけではなく複数のコマンドで確認します。物理的に目の前にあるマシンにログインする場合は別ですが、SSHなどを介してリモートログインする場合は間違いやすいので多重確認します。
hostname (ホスト名の確認)
まずログインしたらhostnameを打ってホスト名を確認します。
hostnameコマンドはマシンに設定されたホスト名を表示します。
hostnameはそのマシンの名前です。初期設定ではlocalhost.localdomainなどと設定されています。IPアドレスは数字なので人間が識別しにくいですが、ホスト名は文字を使えるのでわかりやすい名前を付けることができます。管理しやすくするためにわかりやすい名前を付けておいたほうがよいでしょう。/etc/hostnameに設定されています。
hostnameはオプションを付けると他の情報も表示できます。
よく使うのはhostname -iです。
ip address show
設定したipアドレスを確認しましょう。ipアドレスはipコマンドで確認できます。
$ ip address show
また、hostnameコマンドでも確認できます。ホスト名の確認ついてでに調べるほうが使いやすいかもしれません。
$ hostname -i → ホストのipアドレスの表示(全てのNICのIPアドレスは-I)
uname
uname -aでサーバーのカーネルのバージョンなどを確かめることができます。
$ uname -a
Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l GNU/Linux
ディストリビューションの確認 /etc/以下
CentOSでは/etc/redhat-releaseを確認することによってディストリビューションのバージョンが確認できます。
- Red-hat系:/etc/redhat-release
- Ubuntu:/etc/os-release
を閲覧すればOSのバージョンが確認できます。
w 他の人はログインしていないか?
wコマンドはその端末にログイン中の人を確かめることができます。自分しかいないはずなのにそのサーバーに他の人がログインしている場合はログイン先を誤っているかもしれません。また、設定変更や再起動を伴う操作をする場合は他の人の作業が無いか確認する意味でもwコマンドを実行する意味があります。
$ w
00:06:30 up 7 days, 1:01, 3 users, load average: 0.00, 0.02, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
pi tty1 - 20 8月20 7days 0.23s 0.18s
pi pts/0 192.168.0.20 水22 19.00s 0.10s 0.10s -bash
pi pts/1 192.168.0.20 00:07 3.00s 0.13s 0.03s w
history これまでどんな操作されてきたか?
historyコマンドではログインしているユーザーのコマンドの履歴を見ることができます。historyで日付が表示できるようにしてあればいつ再起動したのか?など詳しく具体的に操作の流れを把握することが可能です。知らないコマンドを実行していればログイン先が誤っているかもしれないので確認しましょう。
uptime 起動時間とCPU使用率
uptimeは起動してからの時間やCPU使用率(ロードアベレージ)が確認できます。最近セットアップしたばかりなのに数年前から起動しっぱしだった場合はログイン対象が間違っていることが分かります。
netstat
netstatは非常によく使うコマンドのひとつでソケットの状態を確認するコマンドです。
立ち上げた覚えのないデーモンが待機中であったりする場合はログイン先を誤っている可能性が高いです。
ps
プロセスも同様によく使います。
どんなプログラムが実行されているのか?を知ることができます。
netstatと合わせてどんなアプリケーションが起動しているか?調べます。
df
ディスクの構成はマシンによって違うことが多いので、dfでディスク使用量を確認するのは良い方法です。
どうでしょうか?これらのコマンドを組み合わせて本当に目的のサーバーに入っているのか?ということを確かめられるようになったと思います。
まとめ
ログイン先のミスが起こっていては運用も管理もできないので対象確認は最も基本的かつ重要なものといえるでしょう。いくつものプロジェクトを同時進行しているとログイン先を間違えることは本当によくあります。こうしたつまらないミスを減らすためにはログイン先を示す情報を複数得ることを癖づける必要があるかもしれません。