常識クイズのトラフィックが急に増えてCassandraが落ちるのでEC2サーバをt1.microからm1.smallに変えました。
Webサービスをスモールスタートできるのは嬉しいですね。
AMIとは?
AMIは以下にあるように一通りそろっているサーバです。
“The Amazon Linux AMI is an EBS-backed, PV-GRUB image. It includes Linux 3.4, AWS tools, and repository access to multiple versions of MySQL, PostgreSQL, Python, Ruby, and Tomcat.”
Imageのバックアップを取っておきましょう。
管理コンソール画面で右クリックでcreate image で作成し名前をつけて作成します。images > AMIs欄に作成したAMIがあるはずです。
変更前のサーバスペック確認
t1.microは公表値とほぼ同等の2.27GHz,600MBです。どう考えても負荷に弱いのがわかります。
Raspberry Pi Model-Bが700MHz,256MBでしたから,そんなに変わらなかったりしてしまう。
千石にRaspberry Pi買いにいったら売り切れてた…RSは海外サイトだからめんどくさいしなあ。
あと,比較しても仕方ないですがiPhone5にトータルで負けてます。それでも”無料”というのはすごいですね。
カサンドラのヒープサイズは変更前の設定が MAX_HEAP_SIZE=”512M” HEAP_NEWSIZE=”256M” です。
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Xeon(R) CPU E5507 @ 2.27GHz
stepping : 5
microcode : 0x11
cpu MHz : 2266.746
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 16
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu de tsc msr pae cx8 sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc up rep_good nopl nonstop_tsc pni ssse3 cx16 sse4_1 sse4_2 popcnt hypervisor lahf_lm
bogomips : 4533.49
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
$ cat /proc/meminfo
MemTotal: 608740 kB
MemFree: 209980 kB
Buffers: 38996 kB
Cached: 125868 kB
SwapCached: 0 kB
Active: 275120 kB
Inactive: 91168 kB
Active(anon): 201464 kB
Inactive(anon): 8 kB
Active(file): 73656 kB
Inactive(file): 91160 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 36 kB
Writeback: 0 kB
AnonPages: 201468 kB
Mapped: 20780 kB
Shmem: 48 kB
Slab: 20744 kB
SReclaimable: 14668 kB
SUnreclaim: 6076 kB
KernelStack: 912 kB
PageTables: 3060 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 304368 kB
Committed_AS: 751440 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7104 kB
VmallocChunk: 34359729008 kB
DirectMap4k: 637952 kB
DirectMap2M: 0 kB
GUIでスケールアップ
スケールアップの方法は簡単です。
AWS Management Console にログインしてインスタンスを選択しSTOPします。
ここで注意すべきなのはEIP(Elastic IP,固定IP)を取得していないとREBOOT以外ではIPが変わってしまうことです。
AMIは自動で移してくれますが心配ならコピーをとっておきましょう。
EIPは事前に取得しておきましょう。取得せずにiOSアプリにサーバIPを直書きしている場合は取り返しがつかなくなることがあります。
(ポカミスですが今となっては良い教訓…)
対象EC2インスタンスを右クリックし、「Change Instance Type」を選択します。今回はMicroからSmallに変更。
最後にEIPに移り,右クリックしてAsocciateで紐づけて終了です。
スケールアップ後のサーバスペック確認
CPUは2.00Ghzにダウンしましたが,メモリは1.7GBにアップ。
$ cat /proc/meminfo
MemTotal: 1696956 kB
MemFree: 1348076 kB
Buffers: 10212 kB
Cached: 159196 kB
SwapCached: 0 kB
Active: 192232 kB
Inactive: 127424 kB
Active(anon): 150300 kB
Inactive(anon): 8 kB
Active(file): 41932 kB
Inactive(file): 127416 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 40 kB
Writeback: 0 kB
AnonPages: 150240 kB
Mapped: 21116 kB
Shmem: 52 kB
Slab: 13676 kB
SReclaimable: 8748 kB
SUnreclaim: 4928 kB
KernelStack: 768 kB
PageTables: 2844 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 848476 kB
Committed_AS: 742216 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 10988 kB
VmallocChunk: 34359725168 kB
DirectMap4k: 1748992 kB
DirectMap2M: 0 kB
Cassandraのヒープサイズを変更
スケールアップ前のカサンドラの設定です。
$ $CASSANDRA_HOME/bin/cassandra
xss = -ea -javaagent:/opt/cassandra/apache-cassandra/lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms512M -Xmx512M -Xmn256M -XX:+HeapDumpOnOutOfMemoryError -Xss160k
環境設定ファイルを編集してヒープ領域のサイズを変更して再起動します。
$ sudo vim /opt/cassandra/apache-cassandra/conf/cassandra-env.sh
MAX_HEAP_SIZE="1024M"
HEAP_NEWSIZE="512M"
これでしばらく様子みます。システム監視ツールもいれないとダメかも。
スケールダウンしたい場合
スケールアップ時と同じでEIPが必要です。
対象EC2インスタンスをSTOPさせた後に右クリックし、「Change Instance Type」を選択します。
選択後、EIPをクリックしEC2インスタンスと紐付けるためにAsocciateで設定します。
起動後はサーバプログラムが動くかチェックしましょう。
スケールアップ/スケールアウトが簡単になると管理もコスト削減のため海外にアウトソーシングする時代になるかもしれませんね。