事故らないためのUnix(linux)オペレーション エスキュービズム勉強会0711

Preview:

DESCRIPTION

7月11日エスキュービズム社内勉強会時に使用した資料になります。

Citation preview

事故らないための UNIX(Linux)オペレーション

2014年7月11日 エスキュービズム・テクノロジー社内勉強会

CAUTION

会社や現場によってルールがあるので ここに書いてあることが唯一解ではないです。

たまに聞く話(弊社じゃないです)

本番環境と検証環境を間違えた

→Disk Fullでした

あの時自分が行ったオペレーション分からない

MySQLが起動しないのでMySQL周りばかり調べること1h…

ログインしたら最初にすべきこと各種情報を見るクセをつける

uname -a date cat /etc/redhat-release !df -h fdisk -l ifconfig -a !netstat -lntp(lnup) ps -ef(-aux) top sysstatの各種コマンド

UNIXコマンドは沢山あるので「その場しのぎ」で覚えがちだが、この辺りが定番か

※今後ipコマンドに置き換わる

基本情報見る系コマンド(1)# uname -a

ホスト名:  対象サーバを間違えていないか

kernelのバージョン:  たまにkernelのバージョンを選ぶミドルウェアがある

RedHat系OSの場合、OSのメジャーバージョン:  RHEL/CentOSの場合、6.xだとel6、5.xだとel5になる

64bit OSか32bit OSか:  32bitOSの場合、ミドルウェアが使用できるメモリが4GBに制限される

ホスト名だけならhostnameコマンドでも確認できるが、 ホスト名を書き換えてしまう可能性あるので使わないほうが良い

Linux websrv01 2.6.32-358.el6.x86_64 (以下略)

ユーザ:  $は一般ユーザ、#はroot

基本情報見る系コマンド(2)

# cat /etc/redhat-release

RHEL互換OSの場合のOSバージョン:  5.xと6.xで必要なRPMが異なる  5.x →el5.x86_64  6.x →el6.x86_64  7.x ←el7.x86_64 ! Debianの場合は cat /etc/debian-release

CentOS release 6.4 (Final)

# date

日時:  日付がズレていないか。ズレてるとECサイトの場合クレカ決済通らなかったり、  複数サーバのログの突合が大変

2014年 7月 11日 金曜日 14:26:34 JST

タイムゾーン:  AWSの海外リージョン等海外のサーバの場合JSTになっておらず、  フロント側Webサイトの処理にも影響出る

ディスク・NW・プロセス関連コマンド

# ifconfig -a

Network Interfaceの数とIPアドレスの把握:  MySQLがeth1のIPでListenしていないので繋がらない等のトラブル時に有用  IaaSだと2つ前後が多いと思うが、5つ6つNICがある場合もある

# df -hFilesystem Size Used Avail Use% Mounted on /dev/sda3 28G 8.4G 18G 33% / tmpfs 1004M 0 1004M 0% /dev/shm /dev/sda1 504M 105M 375M 22% /boot /dev/sdb1 197G 7.8G 180G 5% /var/lib/mysql

ディスク使用容量:  ディスクフルによるトラブルはこのコマンドですぐ分かる

外部ディスク有無:  システム構成が把握できる。例)MySQLのデータディレクトリは外部ディスク  mountされていないディスクはfdisk -lで分かる

ディスク・NW・プロセス関連コマンド

# ps -efサーバ内で動作しているプロセスを把握:  Apache再起動したらソースコンパイルだったので違うプロセスだった

# netstat -lntp(-lnup)Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 24736/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2021/sshd tcp 0 0 10.100.79.29:3306 0.0.0.0:* LISTEN 2532/mysqld

ListenしているポートとIPアドレスの確認:  Apache再起動したら8080でListenしてたWebDAVも落ちた←防止  MySQLがPrivate IPでしかListenしておらず、死活監視できなかった←防止 ! TCPの場合は-lntp、UDPの場合は-lnup

ディスク・NW・プロセス関連コマンド

sysstatの各種コマンドメモリ、CPU使用率を10分毎に1ヶ月分参照可能

# top「shift+m」でメモリの使用率が高い順にソート 「shift+o」で任意のフィールドでソート 「u」で任意のユーザのプロセスのみ表示 「1」でCPUコアとそのコアごとの利用率

sar CPU使用率の記録 sar -u メモリ使用率の記録 sar -f /var/log/sa/sa17 17日の記録を表示 sar -P ALL CPUコアとそのコア毎の使用率の記録

iostat、vmstat、mpstat統計情報参照

非推奨になっているコマンドがある

非推奨 置き換え候補

arp ip n (ip neighbor)

ifconfig ip a (ip addr), ip link, ip -s (ip -stats)

netstat ss, ip route (for netstat-r), ip -s link (for netstat -i), ip maddr (for netstat-g)

route ip r (ip route)

http://understeer.hatenablog.com/entry/2012/03/24/184346

ログはとりましょう例えばPoderosaだと意識しなくても全ログ取得可能 フォーマットも読みやすい

SSHの鍵型式がOpenSSH型式ではないので、サーバ台数増えるとちょっと辛い

Poderosa以外の各クライアントもロギングの機能ある あとはtypescriptコマンド使うとか

サーバ間違い、誤操作防止・ログイン時にuname -aコマンド実行 !・コマンド実行時にプロンプトのホスト名表示を確認 !・検証と本番環境でSSHクライアントを分ける !・tmux(後述)やscreenでwindowに名前付けとく !・root作業しない !!・普段触らない環境でのミドルウェア再起動はリスクある !

Apache再起動時にSSL秘密鍵のパスフレーズ求められる MySQL再起動したら刺さった(IOが一気に上がった) よく知ってる人に聞くほうがよい

普段は一般作業で作業し、必要な場合はsudo、もしくはsu -でroot昇格

サーバ間違い、誤操作防止(2)

キータッチ速い人は大体速そうに見えるだけで、 ミスタッチ連発で実はそんなに速くないし、急いだところで全体の時間に影響なし

急がない

障害発生時の対応クライアントと連絡を密接に

復旧までに時間が掛かるなら中間報告出す !インフラ屋さんだと「発生報」「経過第n報」「復旧報」「報告」 みたいにガンガン連絡飛んできます

先輩だろうが上司だろうが「使える」ものは使う

普段からこの人に聞けば解決する、 この人に間に入ってクライアントと連絡取ってもらう などイメージしておく

tmuxターミナルマルチプレクサ

手元のマシンに入れる場合 ・複数サーバに接続する場合に名前つけて間違えないように ・デスクトップのカオス化防止 ・複数台のリモートサーバに同一コマンド実行

作業対象サーバに入れる場合 ・nohupコマンドいらず ・他の人の作業状況共有

言うまでもなく本番環境に勝手にtmux入れたらダメです

手元のマシンに入れる場合と対象サーバに入れる2パターンある screen使ってる人もいます

各種ディストリビューション

日経Linux 2014年5月号より

標準デスク トップ環境

パッケージ管理

カーネル

Ubuntu 13.10 Debian 7.4 Fedora 20 CentOS 6.5 OpenSUSE 13.1

Unity 7 GNOME 3 GNOME 2 KDE 4

APT YUM Zypper/ YaST

Linuxカーネル

入門 汎用 先進 安定 欧州

RedHat Enterprise Linux

SUSE Linux Enterprise

商用派生

先進機能の テスト

機能互換 成果を取り入れ

各種ディストリビューション

RedHat系OSの場合のミドルウェアインストールyum install(update|remove|search)

yum localinstall

rpm -ivh(-Uvh)

ソースコンパイル

・インターネットに接続可能 ・レポジトリが提供されている ・バージョンなどが特殊(例:dev版)でない ・必要に応じてサードパーティのレポジトリ使う(remi、epel等)

・インターネットに接続可能 ・レポジトリが提供されていない ・RPMファイルが手元にある ・依存関係が複雑なのでrpmコマンドでは辛い

・インターネットに接続不可 ・レポジトリが提供されていない ・RPMファイルが手元にある

・最新バージョンを使いたい ・アドオンなどがソースコンパイルでないと入らない

CentOS 7出ましたコマンドがいろいろ変更になっている…らしい

操作 SysV Init Systemd起動 /etc/init.d/sshd start systemctl start sshd終了 /etc/init.d/sshd stop systemctl stop sshd強制終了 PID探してkill -9 systemctl kill -s 9 sshd再起動 /etc/init.d/sshd restart systemctl restart sshd設定反映 /etc/init.d/sshd reload systemctl reload sshd状態取得 /etc/init.d/sshd status systemctl status sshd自動起動を有効 chkconfig sshd on systemctl enable sshd自動起動を無効 chkconfig sshd off systemctl disable sshd自動起動の状態確認 chkconfig --list sshd systemctl is-enabled sshd(status でも表示される)サービス一覧の表示 ls /etc/init.d systemctl --type service

http://blog.yuryu.jp/2014/07/systemd-quick-guide.html