Web系から業務系まで、
トラシュー事例(初級編)
本番環境に突然ログインできなくなった!
本番環境に突然ログインできなくなった!
AWSでシステムを運用している場合、
初級編のトラブルは図1のようにWebサーバ、

原因調査と対策例
トラブル対応時にまずやるべきことは、
ssh: connect to host web.example.com port 22: No route to host
発生しているトラブルの内容から、
- ① 名前解決はできているが、
メンテナス拠点からEC2インスタンスの22番ポートにアクセスができない - ② メンテナス拠点、
監視拠点からともにサービスにアクセスできるので、 EC2インスタンスがダウンしている可能性は低い - ③ メンテナンス拠点からサービスを利用できるため、
メンテナス拠点からEC2インスタンスへのルーティング設定に問題がある可能性は低い - ④ 監視拠点からはサービスの利用、
SSHアクセスともにできていることから、 SSHサーバのプロセスがダウンしている可能性は低い
しかし、
トラブル発生時の仮説検証や問題切り分けの進め方としては、
オンプレミス環境での物理的障害に近いものからチェックを始めます。EC2インスタンスも仮想サーバを稼働させている物理ホストの影響を受けてダウンする場合もありますが、
- Instance Stateがrunning状態にあること
- System status ckecksがpassed
(0) 状態であること
また、
EC2インスタンスがダウンしていないことが確認できたら、
設定ミスによって思わぬトラブルにつながる
ここまでで物理的、
- EC2インスタンスに正しいSecurity Groupが割り当てられているか
- 割り当てられているSecurity Groupにメンテナンス拠点からのアクセスが許可されているか
この段階で
IAMによる権限設定とAWS Config、Cloud Trailによる追跡
AWSにはIAMという権限管理のサービスもあります。Security Groupのルール設定は適切な権限を持つ人にのみ付与して、
また、
AWSに限らずクラウドサービスではAPIが提供されているものが数多くあります。筆者が担当しているサービスではAWS SDK for RubyとRSpecを使ってAWSアカウントのあるべき状態をテストコードに定義して、
トラシュー事例(上級編)
参照系のデータベースアクセスが負荷分散されない
参照系のデータベースアクセスが負荷分散されない
問題発覚と環境説明
AWSのサービスの中にはEC2のようなサービスのほかに、
次のトラブルは図2のような構成のシステムで発生しました。Web/

監視サーバは負荷分散されていないRDSの障害は検知しておらず、
原因調査と対策例
初級編のトラブルではメンテナンス拠点からサーバへの接続に関する問題でしたが、
今回の場合はHAProxy経由でRDSにアクセスしている構成となるため、
Feb 6 16:58:45 localhost haproxy[10512]: Server mysql/read1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 2ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
$ mysql -u root -p -h 127.0.0.1 -P 3306 Enter password: ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
HAProxyのログは、
今回の場合も監視サーバからは障害を検知していませんが、
ここまでの内容をまとめると、
図5の例はWebサーバ内でtcpdumpコマンドを実行し、ip-10-0-1-76.
というのはRDSにローカル通信した場合の接続先であり、
$ sudo tcpdump dst port 3306 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 15:04:59.745944 IP ip-10-0-0-21.ap-northeast-1.compute.internal.34921 > ip-10-0-1-76.ap-northeast-1.compute.internal.mysql: Flags [S], seq 188805037, win 17922, options [mss 8961,sackOK,TS val 265836392 ecr 0,nop,wscale 7], length 0
エンドポイントを名前解決した結果
$ dig rds-slave02.a1b2c3d4f5g6.ap-northeast-1.rds.amazonaws.com any ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7_0.1 <<>> rds-slave02.a1b2c3d4f5g6.ap-northeast-1.rds.amazonaws.com.com any ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 413 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;rds-slave02.a1b2c3d4f5g6.ap-northeast-1.rds.amazonaws.com. IN ANY ;; ANSWER SECTION: rds-slave02.a1b2c3d4f5g6.ap-northeast-1.rds.amazonaws.com. 5 IN A 10.0.1.32 ;; Query time: 4 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: 月 2月 09 16:12:13 JST 2015 ;; MSG SIZE rcvd: 107
このようなミスマッチで通信に影響が出る場合もありますので、
今回の構成ではRDS側のローカルIPアドレスが変更される可能性が考慮されておりませんでしたが、
トラブルシューティングをする場合の基本的な方針はオンプレミスでもクラウドでもあまり大きな差はありませんので、
本誌最新号をチェック!
Software Design 2022年9月号
2022年8月18日発売
B5判/
定価1,342円
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識 - 第2特集
「知りたい」 「使いたい」 「発信したい」 をかなえる
OSSソースコードリーディングのススメ - 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画] Red Hat Enterprise Linux 9最新ガイド - 短期連載
今さら聞けないSSH
[前編] リモートログインとコマンドの実行 - 短期連載
MySQLで学ぶ文字コード
[最終回] 文字コードのハマりどころTips集 - 短期連載
新生「Ansible」 徹底解説
[4] Playbookの実行環境 (基礎編)