私は、それぞれポート 11211 と 11300 で外部 IP をリッスンしている memcached と beanstalkd を実行している Elastic IP アドレスを持つ実行中の EC2 サーバーを持っていました。サーバーの AMI を使用してサイズをアップグレードしましたが、サーバーが再起動したとき、memcached も beanstalkd も実行されていませんでした。これは init.d の再起動でしたが、beanstalkd はコマンド ラインからデーモンとして実行されたため、memcached に問題がありました。
ただし、数時間後、それらを再び起動して実行する方法がわかりません。
memcached の場合、構成ファイルは次のようになります。
# Default connection port is 11211
-p 11211
# Specify which IP address to listen on. The default is to listen on all IP addresses
-l <EXTERNAL IP ADDRESS>
コマンドラインからルートとしてmemcachedを実行しようとすると:
memcached -d -m 1024 -u root -l <EXTERNAL IP ADDRESS> -v -p 11211
私は得る:
bind(): Cannot assign requested address
failed to listen on TCP port 11211: Cannot assign requested address
しかし、netstat を見ると、そのポートにはまだ何もバインドされていません。
netstat -ant | grep LIST
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
そして、プロセスリストをgrepすると、他のmemcachedは実行されていません。
iptables は次のように報告します。
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp spt:11300 state ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp spt:11211 state ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
EC2 インスタンスは元のサーバーと同じセキュリティ グループを使用しているため、必要なポートが開いています。
最後に、おそらくヒントは、ifconfig IP アドレスが Elastic IP アドレスと異なることです。いずれかの inet をリッスンしようとすると、次のように追加されます。
私はあなたにとって愚かで明白なことをしているに違いありません。ご協力いただきありがとうございます。