ラベル EC2 の投稿を表示しています。 すべての投稿を表示
ラベル EC2 の投稿を表示しています。 すべての投稿を表示

2013-06-18

MySQL5.6がメモリを沢山お召し上がりになる件

EC2のt1.microでMySQL 5.6.12を入れて試してみたところ
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN STAT TTY TIME COMMAND
4   498  4594  4407  20   0 950456 434320 poll_s Sl  pts/0 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/lib/mysql/xxx.pid
な感じで、インストール直後ただ起動しただけで400MB超のメモリをお召し上がりになってしまっています
マイクロインスタンスにとってはこのメモリ使用量は致命的です・・・
なんとかして削減したいものです

ぐぐってみると
このあたりにバグっぽいことが書かれていたので、対処法に従い設定を変更してみました

まずは現状確認
mysql> show variables like 'table_definition_cache';
+------------------------+-------+
| Variable_name   | Value |
+------------------------+-------+
| table_definition_cache | 1400  |
+------------------------+-------+

そして、/usr/my.cnfに次の行を追加してmysqlを再起動
table_definition_cache=400

反映されているか確認
mysql> show variables like 'table_definition_cache';
+------------------------+-------+
| Variable_name   | Value |
+------------------------+-------+
| table_definition_cache | 400  |
+------------------------+-------+

さて、効果のほどは・・・・
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN STAT TTY TIME COMMAND
4   498  6313  6114  20   0 527484 79332 poll_s Sl   pts/1 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/lib/mysql/xxx.pid

400MB超→79MBにまで減りました!ヾ(*・ω・)シ

2013-04-26

EC2上のCentOS6.3にChef Server 11.0.6をインストールしてみた

■サーバ側

インスタンスタイプはm1.mediumを利用した→m1.smallでもいけた
ダウンロードサイトよりChef ServerのOmnibus Installerのダウンロード
wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.6-1.el6.x86_64.rpm
yumコマンドでインストール
yum install -y --nogpg chef-server-11.0.6-1.el6.x86_64.rpm
設定
chef-server-ctl reconfigure
テスト
chef-server-ctl test
あとはこのサーバの443番ポートを自分の環境と、Chefで管理しようとしている対象ノードからアクセスできるように設定しておく
ここまで行えば、https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/にブラウザでアクセスすればWeb管理画面が表示される
インストール処理の過程でいわゆるオレオレ証明書が作成されるのでSSL証明書の警告がでる。

■ワークステーション側

ダウンロードサイトよりChef ClientのOmnibus Installerのダウンロードしてインストール
レポジトリの雛形をダウンロードしてきて展開
cd ~/
wget https://github.com/opscode/chef-repo/archive/master.zip
unzip master.zip
mv chef-repo{-master,}
ワークステーション上にknifeの設定ファイルを作成
mkdir ~/chef-repo/.chef
cat <<"EOF" > ~/chef-repo/.chef/knife.rb
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "chef-validator"
validation_key           "#{current_dir}/chef-validator.pem"
chef_server_url          "https://xxx.xxx.xxx.xxx"
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]
EOF
Chef Serverからインストール時に作成される認証情報を入手して、ワークステーション側の~/chef-repo/.chef/に配置する
Chef Server上のこのファイル↓
/etc/chef-server/admin.pem
/etc/chef-server/chef-validator.pem
クライアントリストを取得してみて動作確認
$ cd ~/chef-repo
$ knife client list
chef-validator
chef-webui

■ノード側

ワークステーションからbootstrapを実行
※ワークステーションからノードの22番ポートに、ノードからChef Serverの443番ポートにアクセスできるよう設定しておく
knife bootstrap yyy.yyy.yyy.yyy -i ssh_key_file
ワークステーションからノードが登録されたことを確認
$ knife node list
new_node
これでとりあえずはChef Serverからノードを管理できる環境が整いましたヾ(*・ω・)シ

---------- P.S. -----------
※正式なSSL証明書がある場合は、SSL証明書の警告がでないよう置き換えておけば良さそう
/var/opt/chef-server/nginx/ca/chef11.crt
※cookbookのアップロードに失敗する場合はアップロード先URLの設定を書き換えて再起動
/var/opt/chef-server/erchef/etc/app.config
# {s3_url, "[hostname]"},
chef-server-ctl restart

2012-10-23

オンサービスのままGlusterFSのVolume容量追加してみた

EC2上の2台のサーバから1つずつbrickを提供しレプリケーションモードで動作させているVolumeに、オンサービスのまま容量を追加するという処理を行ってみました。 最初に試したのは、サーバに既存のBrick(/gfs)よりもサイズが大きい新たなEBSを追加し、これを/gfs2にマウントして既存のBrickと置換するという方法。 小さいファイル数個のおためし環境では
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 start
で、置換開始
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 status
で、completeになったことを確認
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 commit
で、コミット の手順でうまくいったので、実際の環境に試してみました 10GBのVolumeには1.5GBぐらいのデータが書き込まれている状態です
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 start
コマンドは通ったのですが、みるみるcpu使用率が上昇しコンソール操作もままならない程になってしまいました。 このとき利用していたインスタンスタイプはc1.mediumです。
1時間程経過しても処理は終わらないので一時停止
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 pause
これでとりあえず負荷は下がったのですが、1GB程の一時領域に書き込みつつreplaceが行えるように待機をしている状態のようでした。
このままではよろしくないと、完全にキャンセルしてみました
gluster volume replace-brick vol1 x.x.x.x:/gfs x.x.x.x/gfs2 abort
それはそれで、マシンリソースを喰いまくり、コマンドライン操作を受け付けないほどになってしまったのでデーモン停止(´・ω・`)
service gluster stop
[失敗] だそうな。。。 なので仕方なくpkillしました
pkill gluster
このあと、安定状態に戻すまでかなりの奮闘をしたのでこの方法は避けた方が良さそうです。 次は、上手くいった方法 Volumeに容量の大きなBrick(/gfs2)を追加し、既存のBrick(/gfs)を削除するという方法
gluster volume add-brick vol1 x.x.x.x:/gfs2 y.y.y.y./gfs2
すんなり追加されました つづいて、既存のBrickを削除
gluster volume remove-brick vol1 x.x.x.x:/gfs y.y.y.y./gfs start
startをつけることで、安全にBrickを削除できるように削除対象ではないところにデータを移動してくれるようです。 cpu使用率が上昇しましたが、replaceのようにコンソール操作を受け付けなくなる程ではありませんでした。
gluster volume remove-brick vol1 x.x.x.x:/gfs y.y.y.y./gfs status
で、状態を確認しながらcompleteになるまで待機 8GB程データがある状態で40分程で終了しました あとはコミットするだけ
gluster volume remove-brick vol1 x.x.x.x:/gfs y.y.y.y./gfs commit
これで無事にオンサービスのまま容量を追加することができましたよヾ(*・ω・)シ

2012-09-07

AWS EC2上のCentOS5.8でhttpd-2.4.3(Apache2.4.3)のrpmを作成

まずは依存モジュールをyumで削除&インストール
yum -y erase apr
yum -y install db4-devel expat-devel postgresql-devel sqlite-devel freetds-devel unixODBC-devel nss-devel mysql-devel distcache-devel libuuid-devel lksctp-tools-devel doxygen openldap-devel openssl-devel pcre-devel lua-devel
yumでは入らない依存モジュールのダウンロード&ビルド&インストール
wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.4.6.tar.bz2
rpmbuild -tb apr-1.4.6.tar.bz2
yum install --nogpgcheck /usr/src/redhat/RPMS/x86_64/apr-*

wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.4.1.tar.bz2
rpmbuild -tp --nodeps apr-util-1.4.1.tar.bz2
sed -i "s/libuuid-devel/e2fsprogs-devel/" /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
mv apr-util-1.4.1.tar.bz2 /usr/src/redhat/SOURCES
rpmbuild -bb /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
とやったところ、テストでエラー(´・ω・`)
teststrmatch        : SUCCESS
testuri             : SUCCESS
testuuid            : SUCCESS
testbuckets         : SUCCESS
testpass            : SUCCESS
testmd4             : SUCCESS
testmd5             : SUCCESS
testcrypto          : 
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)                                                          passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)                                                          passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
FAILED 6 of 13
testldap            : SUCCESS
testdbd             : SUCCESS
testdate            : SUCCESS
testmemcache        : SUCCESS
testxml             : SUCCESS
testxlate           : SUCCESS
testrmm             : SUCCESS
testdbm             : SUCCESS
testqueue           : SUCCESS
testreslist         : SUCCESS
Failed Tests            Total   Fail    Failed %
===================================================
testcrypto                 13      6     46.15%
Programs failed: testall
make: *** [check] エラー 1
+ exit 1
エラー: /var/tmp/rpm-tmp.35396 の不正な終了ステータス (%check)
調べてみた感じだとこのあたりにバグ報告されてて解決されてない??
てことで、とりあえずテストすっ飛ばしてビルドしちゃいました(…大丈夫か?)
sed -i "s/libuuid-devel/e2fsprogs-devel/" /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
sed -i "s/make check || exit 1/make check || \"continue\"/" /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
rpmbuild -bb /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
yum install --nogpgcheck /usr/src/redhat/RPMS/x86_64/apr-util-*
wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.4.3.tar.bz2
rpmbuild -tp httpd-2.4.3.tar.bz2
mv httpd-2.4.3.tar.bz2 /usr/src/redhat/SOURCES
sed -i "s/%{epoch}://g" /usr/src/redhat/BUILD/httpd-2.4.3/httpd.spec
rpmbuild -bb /usr/src/redhat/BUILD/httpd-2.4.3/httpd.spec
yum install --nogpgcheck /usr/src/redhat/RPMS/x86_64/httpd-*
で、出来上がりヾ(*・ω・)シ

AWS EC2上のCentOS6.2でhttpd-2.4.3(Apache2.4.3)のrpmを作成

ググってみると色々参考記事はあったのですがどうもAWSのEC2上だと
ipv6が有効になってなかったりが原因なのか失敗してしまったので成功したやりかたのメモです。
まずは、依存モジュールのインストール
yum -y install libselinux-devel pcre-devel openldap-devel lua-devel openssl-devel libuuid-devel lksctp-tools-devel db4-devel expat-devel postgresql-devel sqlite-devel freetds-devel unixODBC-devel nss-devel mysql-devel
yumで入らない依存モジュールのダウンロード&ビルド&インストール
wget ftp://ftp.riken.jp/Linux/fedora/development/18/source/SRPMS/d/distcache-1.4.5-23.src.rpm
rpmbuild --rebuild distcache-1.4.5-23.src.rpm
rpm -i ~/rpmbuild/RPMS/x86_64/distcache-*

wget ftp://ftp.riken.jp/Linux/fedora/development/18/source/SRPMS/a/apr-1.4.6-3.fc18.src.rpm
rpmbuild --rebuild apr-1.4.6-3.fc18.src.rpm
rpm -i ~/rpmbuild/RPMS/x86_64/apr-*

wget ftp://ftp.riken.jp/Linux/fedora/development/18/source/SRPMS/a/apr-util-1.4.1-5.fc18.src.rpm
rpmbuild --rebuild apr-util-1.4.1-5.fc18.src.rpm
rpm -i ~/rpmbuild/RPMS/x86_64/apr-util-*
そしていよいよhttpd-2.4.3のダウンロード&ビルド&インストール
wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.4.3.tar.bz2
rpmbuild -tp httpd-2.4.3.tar.bz2
mv httpd-2.4.3.tar.bz2 ~/rpmbuild/SOURCES/
sed -i "s/%{epoch}://g" ~/rpmbuild/BUILD/httpd-2.4.3/httpd.spec
rpmbuild -bb ~/rpmbuild/BUILD/httpd-2.4.3/httpd.spec
rpm -i ~/rpmbuild/RPMS/x86_64/httpd-*

2012-08-24

GlusterFSとnfsを比較実験してみた

AWS上でサーバ1台とクライアント3台という構成で実験してみました
各サーバのスペックは
  • nfs,GlusterFSサーバ:t1.micro(ap-northeast-1a)
  • クライアント1:m1.small(ap-northeast-1b)
  • クライアント2:m1.small(ap-northeast-1a)
  • クライアント3:c1.medium(ap-northeast-1a)
という感じでクライアント1だけ別のAvailability Zoneで立てています
サーバのローカルディスクをGlusterFSとnfsそれぞれでマウントしてパフォーマンスと整合性について実験してみます
クライアント1~3でaaaaaaaa,試行回数を同じファイルに60秒間出力するようなコマンドを実行します
start=`date "+%s"`;i=1;while true; do echo aaaaaaaa,$i >> /gfs/test.log ;now=`date "+%s"`;if [ `expr $now - $start` -gt 60 ];then break;fi;i=`expr $i + 1`;done
aaaaaaaaの部分はクライアント1ではa,2ではb,3ではcと置き換えて実行しました
出力先の/gfsはGlusterFSでマウント
/nfsはnfsでマウントした領域です
結果は
GlusterFSでマウントした方は
$ wc -l /gfs/test.log
15841 /gfs/test.log
$ tac /gfs/test.log | grep aaa -m 1
aaaaaaaa,7639
$ tac /gfs/test.log | grep bbb -m 1
bbbbbbbb,4171
$ tac /gfs/test.log | grep ccc -m 1
cccccccc,4031
となり、15841=7639+4171+4031と整合性が保たれているようです
nfsマウントした方は
$ wc -l /nfs/test.log
5461 /nfs/test.log
$ tac /nfs/test.log | grep aaa -m 1
aaaaaaaa,2504
$ tac /nfs/test.log | grep bbb -m 1
bbbbbbbb,1678
$ tac /nfs/test.log | grep ccc -m 1
cccccccc,2484
となり、5461≠2504+1678+2484=6666となりファイルに不整合がでています
パフォーマンスも1/3ぐらいしかでませんでした

CentOSにGlusterFSをセットアップ

Amazon Web Servicesなどのクラウドサービスでも利用できる分散ファイルシステムなGlusterFSをAmazon EC2上のCentOSにセットアップしてみました
まずはソースコードをダウンロードしてきて展開してconfigure
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/glusterfs-3.3.0.tar.gz
tar zxvf glusterfs-3.3.0.tar.gz
cd glusterfs-3.3.0
./configure
・
・
・
configure: error: OpenSSL crypto library is required to build glusterfs
まぁ、怒られますね。。。
openssl-develを入れてリトライ
yum -y install openssl-devel
./configure
・
・
・
configure: error: python does not have ctypes support
yum install python-ctypes
./configure
・
・
・
GlusterFS configure summary
===========================
FUSE client        : yes
Infiniband verbs   : no
epoll IO multiplex : yes
argp-standalone    : no
fusermount         : no
readline           : no
georeplication     : yes
make
make install
これでインストールは完了
gluster --version
glusterfs 3.3.0 built on Aug 24 2012 08:44:05
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc. <http://www.gluster.com>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
今回は単純にサーバ側は1ノードで構成してみます
mkdir /gfs
service glusterd start
gluster volume create gv0 10.xxx.xxx.xxx:/gfs
gluster volume start gv0
※10.xxx.xxx.xxxはサーバ自身のInternal IPアドレス
情報を見てみます
gluster volume info

Volume Name: gv0
Type: Distribute
Volume ID: 2c09d301-1fda-4d91-8a50-15a8c71d0be8
Status: Started
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: 10.xxx.xxx.xxx:/gfs
これで、サーバ側は準備完了
続いてクライアント側
サーバ同様にGlusterFSをインストールして、fuseも入れます
yum -y install fuse
あとはマウントするだけ
mkdir /gfs
mount -t glusterfs 10.xxx.xxx.xxx:/gv0 /gfs
dfで状態を見てみるとちゃんとマウントできています
glusterfs#10.xxx.xxx.xxx:/gv0
                      10321152   3587840   6209024  37% /gfs

2012-07-25

IAM roles for EC2 instancesを使ってみた

EC2インスタンスのIAMロールとは?
  • 今までIPアドレスで利用範囲を絞っていたところを、このEC2インスタンスから!みたいな制約で利用できるようにする機能
  • aws-sdkを使えばcredentials周りのコードを簡略化できる
制約とか
  • roleは、EC2インスタンス起動時に選択することができる
  • roleは1つしか割り当てられない
  • 既存のインスタンスにはroleを割り当てることはできない
  • 既にroleが割り当てられているインスタンスからroleを外すことはできない
  • roleのPermissionsの変更は即時反映される
roleの作成
AWS ConsoleのIAMのところからCreate Roleをクリック
roleの名前を入力してContinue
適当なPolicyをSelect(後から編集もできるのでてきとーに)
Policyの名前を決めて、Policy Documentを確認したらContinue
内容を確認して問題なければCreate Role
はい、出来上がりましたヾ(*・ω・)シ
あとは、作成したroleを割り当ててインスタンスの起動
通常通りインスタンス起動のウィザードを辿っていくとInstance DetailsのところでIAM Roleの選択肢がでてくるので先ほど作成したroleを選択

起動を待っている間に、s3バケットのURLを一覧表示するようなサンプルプログラムの作成
通常版
#! /usr/bin/ruby
require 'rubygems'
require 'aws-sdk'

my_access_key_id = 'xxxxxxxxxxxxxxxxxxxx'
my_secret_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

AWS.config({
  :access_key_id => my_access_key_id,
  :secret_access_key => my_secret_key
})

sts = AWS::STS.new()
session = sts.new_session()
#puts "Session expires at: #{session.expires_at.to_s}"

#s3 = AWS::S3.new(session.credentials)

for bucket in s3.buckets
 puts bucket.url
end
てな具合で見慣れたCredentials周りのコードを書く訳ですがIAM roles for EC2 instances版だとここを省くことができます
#! /usr/bin/ruby
require 'rubygems'
require 'aws-sdk'

s3 = AWS::S3.new()

for bucket in s3.buckets
 puts bucket.url
end
と、こんな単純に。
実行結果はどちらも同じように
./list_s3_urls.rb
http://bucket1.s3.amazonaws.com/
http://bucket2.s3.amazonaws.com/
http://bucket3.s3.amazonaws.com/
みたいな感じで表示してくれます
aws-sdkを利用しない場合はcurlを使って
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role1
{
  "Code" : "Success",
  "LastUpdated" : "2012-07-25T04:43:21Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "xxxxxxxxxx",
  "SecretAccessKey" : "xxxxxxxxxx",
  "Token" : "xxx",
  "Expiration" : "2012-07-25T11:15:42Z"
}
みたいに最後の/の後にEC2インスタンスに割り当てられたroleの名前を入れてあげれば、一時的に利用できるAccessKeyIdとSecretAccessKeyを含むレスポンスが得られるのでこれを利用すれば良いみたいです。

2011-09-01

EC2インスタンス同士の通信速度を測定してみた

測定には、iperfというツールを用いた。

m2.4xlarge(ap-northeast-1b) <-> m1.large(ap-northeast-1a)の場合
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.08 GBytes   929 Mbits/sec

m2.4xlarge(ap-northeast-1b) <-> c1.medium(ap-northeast-1a)の場合
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes   935 Mbits/sec

m2.4xlarge(ap-northeast-1b) <-> m1.small(ap-northeast-1b)の場合
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   462 MBytes   388 Mbits/sec

m2.4xlarge(ap-northeast-1b) <-> t1.micro(ap-northeast-1a)の場合
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   176 MBytes   147 Mbits/sec

m1.small(ap-northeast-1b) <-> c1.medium(ap-northeast-1a)の場合
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   461 MBytes   387 Mbits/sec

という訳で、m1.small,t1.microはネットワークインタフェースの帯域が他のインスタンスタイプと比べて絞られているようです。
ゾーンa,bの間では同一ゾーン内でも跨いでも大きく違いは見られませんでした。

2011-08-24

EC2 t1.microインスタンスでCPU stealが発生しまくるっ!

ってことでなんとかできないかと試行錯誤してみました。

13:20頃が普通に負荷をかけた状況
13:40頃が試行錯誤後の状況です

今回負荷をかけるために使用したのは、super piというツール。

パラメータを21として早速実行してみました
./super_pi 21

一発目は3:39
------ Started super_pi run : 2011年 8月 24日 水曜日 13:19:24 JST
Start of PI calculation up to 2097152 decimal digits
End of initialization. Time=       0.543 Sec.
I= 1 L=       0        Time=       1.599 Sec.
I= 2 L=       0        Time=       1.859 Sec.
I= 3 L=       1        Time=       1.846 Sec.
I= 4 L=       2        Time=       1.870 Sec.
I= 5 L=       5        Time=       1.855 Sec.
I= 6 L=      10        Time=       1.846 Sec.
I= 7 L=      21        Time=       1.867 Sec.
I= 8 L=      43        Time=       1.998 Sec.
I= 9 L=      87        Time=       1.857 Sec.
I=10 L=     174        Time=       1.863 Sec.
I=11 L=     349        Time=       1.867 Sec.
I=12 L=     698        Time=       1.863 Sec.
I=13 L=    1396        Time=       1.851 Sec.
I=14 L=    2794        Time=       1.895 Sec.
I=15 L=    5588        Time=       1.973 Sec.
I=16 L=   11176        Time=       1.839 Sec.
I=17 L=   22353        Time=       1.820 Sec.
I=18 L=   44707        Time=       1.806 Sec.
I=19 L=   89415        Time=       1.761 Sec.
I=20 L=  178831        Time=       1.800 Sec.
End of main loop
End of calculation.    Time=      39.002 Sec.
End of data output.    Time=       0.171 Sec.
Total calculation(I/O) time=      39.173(       4.013) Sec.
------ Ended super_pi run : 2011年 8月 24日 水曜日 13:24:03 JST

後半はsteal発生しまくり
続けて二回目を実行すると最初からsteal発生しまくりで7:32
------ Started super_pi run : 2011年 8月 24日 水曜日 13:24:30 JST
Start of PI calculation up to 2097152 decimal digits
End of initialization. Time=       0.587 Sec.
I= 1 L=       0        Time=       1.706 Sec.
I= 2 L=       0        Time=       2.113 Sec.
I= 3 L=       1        Time=       2.018 Sec.
I= 4 L=       2        Time=       1.840 Sec.
I= 5 L=       5        Time=       1.844 Sec.
I= 6 L=      10        Time=       1.891 Sec.
I= 7 L=      21        Time=       1.954 Sec.
I= 8 L=      43        Time=       1.957 Sec.
I= 9 L=      87        Time=       1.878 Sec.
I=10 L=     174        Time=       1.857 Sec.
I=11 L=     349        Time=       1.871 Sec.
I=12 L=     698        Time=       1.944 Sec.
I=13 L=    1396        Time=       2.012 Sec.
I=14 L=    2794        Time=       2.037 Sec.
I=15 L=    5588        Time=       1.841 Sec.
I=16 L=   11176        Time=       1.852 Sec.
I=17 L=   22353        Time=       1.815 Sec.
I=18 L=   44707        Time=       1.793 Sec.
I=19 L=   89415        Time=       1.739 Sec.
I=20 L=  178831        Time=       1.616 Sec.
End of main loop
End of calculation.    Time=      39.638 Sec.
End of data output.    Time=       0.181 Sec.
Total calculation(I/O) time=      39.819(       4.014) Sec.
------ Ended super_pi run : 2011年 8月 24日 水曜日 13:32:02 JST

cpu使用率を制限しちゃえばsteal発生せずに済むんじゃね?
ってことで、cpulimitというツールを使ってcpu使用率を制限してみました。
こんな感じでsuper piのcpu使用率上限を18%に設定
cpulimit -e pi -l 18

1回目は殆どsteal発生せずで3:28
------ Started super_pi run : 2011年 8月 24日 水曜日 13:44:04 JST
Start of PI calculation up to 2097152 decimal digits
End of initialization. Time=       0.546 Sec.
I= 1 L=       0        Time=       1.637 Sec.
I= 2 L=       0        Time=       1.873 Sec.
I= 3 L=       1        Time=       1.865 Sec.
I= 4 L=       2        Time=       1.861 Sec.
I= 5 L=       5        Time=       1.878 Sec.
I= 6 L=      10        Time=       1.869 Sec.
I= 7 L=      21        Time=       1.879 Sec.
I= 8 L=      43        Time=       1.877 Sec.
I= 9 L=      87        Time=       1.864 Sec.
I=10 L=     174        Time=       1.873 Sec.
I=11 L=     349        Time=       1.877 Sec.
I=12 L=     698        Time=       1.882 Sec.
I=13 L=    1396        Time=       1.843 Sec.
I=14 L=    2794        Time=       1.858 Sec.
I=15 L=    5588        Time=       1.849 Sec.
I=16 L=   11176        Time=       1.860 Sec.
I=17 L=   22353        Time=       1.829 Sec.
I=18 L=   44707        Time=       1.829 Sec.
I=19 L=   89415        Time=       1.751 Sec.
I=20 L=  178831        Time=       1.654 Sec.
End of main loop
End of calculation.    Time=      38.643 Sec.
End of data output.    Time=       0.170 Sec.
Total calculation(I/O) time=      38.813(       3.936) Sec.
------ Ended super_pi run : 2011年 8月 24日 水曜日 13:47:32 JST

続けて2回目を実行しても殆どsteal発生せず1回目と同等の3:36
------ Started super_pi run : 2011年 8月 24日 水曜日 13:47:34 JST
 Start of PI calculation up to 2097152 decimal digits
 End of initialization. Time=       0.570 Sec.
 I= 1 L=       0        Time=       1.660 Sec.
 I= 2 L=       0        Time=       1.862 Sec.
 I= 3 L=       1        Time=       1.888 Sec.
 I= 4 L=       2        Time=       1.892 Sec.
 I= 5 L=       5        Time=       1.890 Sec.
 I= 6 L=      10        Time=       1.862 Sec.
 I= 7 L=      21        Time=       1.858 Sec.
 I= 8 L=      43        Time=       1.905 Sec.
 I= 9 L=      87        Time=       1.877 Sec.
 I=10 L=     174        Time=       1.882 Sec.
 I=11 L=     349        Time=       1.883 Sec.
 I=12 L=     698        Time=       1.862 Sec.
 I=13 L=    1396        Time=       1.873 Sec.
 I=14 L=    2794        Time=       1.865 Sec.
 I=15 L=    5588        Time=       1.870 Sec.
 I=16 L=   11176        Time=       1.864 Sec.
 I=17 L=   22353        Time=       1.842 Sec.
 I=18 L=   44707        Time=       1.830 Sec.
 I=19 L=   89415        Time=       1.756 Sec.
 I=20 L=  178831        Time=       1.645 Sec.
 End of main loop
 End of calculation.    Time=      38.825 Sec.
 End of data output.    Time=       0.170 Sec.
 Total calculation(I/O) time=      38.995(       3.964) Sec.
 ------ Ended super_pi run : 2011年 8月 24日 水曜日 13:51:10 JST

てことで、継続的に高いcpu使用率となるプロセスはインスタンス内でcpu使用率を制限してしまえばstealの発生を抑えられるようです。
合計で20%以下ぐらいになるように調整するとsteal発生せずに済むようです。

2011-07-26

東京リージョンのEC2インスタンスの時計がずれる

このスレッドによれば、EC2インスタンスのホストサーバーはntpdで時間が同期されていて、そのクロックにEC2インスタンスも同期されるので、時間合わせは不要とのことだったのだけれども
東京リージョンでEC2を利用していると、時間がずれるという現象がときどき発生する。
このスレッド
によると、EC2インスタンスにもntpで時間をあわせてやる必要があるとのこと。
てな訳で入れてみました。
yum install ntpd
そして、ホストサーバーの時計と同期する設定を無効化して、ntpd起動!
echo 1 >/proc/sys/xen/independent_wallclock
echo "xen.independent_wallclock = 1" >> /etc/sysctl.conf
service ntpd start
これで、時間が正しく設定されるようになりましたよヾ(*・∀・)ノ"

2011-05-30

一般ユーザーでメールを送信しようとするとエラーになる

一般ユーザーでmailコマンドでメールを送ろうとするとこんなエラーが出て送れなかった(´・ω・`)
WARNING: RunAsUser for MSP ignored, check group ids (egid=500, want=51)
can not chdir(/var/spool/clientmqueue/): Permission denied
Program mode requires special privileges, e.g., root or TrustedUser.

とりあえずこれで一般ユーザーからもメールが送れるようになりましたよヾ(*・∀・)ノ"
$ ls -l /usr/sbin/sendmail
cd /var/spool
chown smmsp.smmsp clientmqueue
cd /usr/sbin
chown root.smmsp sendmail.sendmail
chmod +s sendmail.sendmail

2010-10-15

Amazon Linux AMI 64bitにmuninインストール

yum install cpan httpd

wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/csbuild:/Apache/openSUSE_10.3/x86_64/libdbi0-0.8.3-9.1.x86_64.rpm
rpm -ivH libdbi0-0.8.3-9.1.x86_64.rpm

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm  
rpm -ivH rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
vi /etc/yum.repos.d/rpmforge.repo    ---> enabled=0に編集

yum --enablerepo=rpmforge install munin

cpan > install HTML::Template

mkdir /usr/lib/perl5/vendor_perl/5.10.0/
cp -p /usr/lib/perl5/vendor_perl/5.8.8/Munin.pm /usr/lib/perl5/vendor_perl/5.10.0/Munin.pm
cp -pr /usr/lib64/perl5/vendor_perl/5.8.8 /usr/lib64/perl5/vendor_perl/5.10.0

wget http://neo.fsr.jp:8888/data_box/RRDs.so -O /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/RRDs/RRDs.so

service httpd start

2010-10-08

Amazon Linux AMIにmuninを導入

デフォルトのリポジトリではyumでmuninが見つからないので、rootになってrpmforgeのリポジトリを追加
sudo su -
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
rpm -ivH rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
vi /etc/yum.repos.d/rpmforge.repo
デフォルトではRPMforge リポジトリを有効にしないように
enabled = 0
に編集する。
rpmforgeを有効にしてmuninとmunin-nodeをインストール
yum --enablerepo=rpmforge install munin munin-node
とこんなこと言われる・・・
--> Finished Dependency Resolution
Error: Package: rrdtool-1.4.4-1.el5.rf.x86_64 (rpmforge)
           Requires: libdbi.so.0()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
言われるままに--skip-brokenオプションをくっつけてリトライ。
yum --enablerepo=rpmforge --skip-broken install munin munin-node
お?うまくいった?(・・;
munin-nodeを再起動してみるとなにやらエラーが・・・
# service munin-node restart
Stopping Munin Node agents: cat: /var/run/munin/munin-node.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
                                                           [FAILED]
Starting Munin Node: Can't locate Net/Server/Fork.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/local/share/perl5 /usr/lib64/perl5 /usr/share/perl5 /usr/share/perl5 /usr/lib64/perl5 /usr/share/perl5 /usr/local/lib64/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/local/lib/perl5/site_perl/5.10.0 /usr/lib64/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl /usr/lib/perl5/site_perl) at /usr/sbin/munin-node line 130.
BEGIN failed--compilation aborted at /usr/sbin/munin-node line 130.
                                                           [  OK  ]
Net/Server/Fork.pmが見つからねーぞってことなのでcpanでインストール
# cpan install Net::Server::Fork
-bash: cpan: command not found
デフォルトでは入ってないらしい・・・てことでcpanのインストールから
yum install cpan
cpanを起動
cpan
なんか色々でてくるけどとりあえずyesで答えておく。
そして、Net::Server::Forkをインストール
cpan[1]> install Net::Server::Fork
(中略)
t/Port_Configuration.t .... Can't locate Test/More.pm in @INC (@INC contains: /root/.cpan/build/Net-Server-0.99-I0aiCB/blib/lib /root/.cpan/build/Net-Server-0.99-I0aiCB/blib/arch /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/local/share/perl5 /usr/lib64/perl5 /usr/share/perl5 /usr/share/perl5 /usr/lib64/perl5 /usr/share/perl5 /usr/local/lib64/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/local/lib/perl5/site_perl/5.10.0 /usr/lib64/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl /usr/lib/perl5/site_perl .) at t/Port_Configuration.t line 13.
BEGIN failed--compilation aborted at t/Port_Configuration.t line 13.
t/Port_Configuration.t .... Dubious, test returned 2 (wstat 512, 0x200)
(中略)
Running make install
  make test had returned bad status, won't install without force
Failed during this command:
 RHANDOM/Net-Server-0.99.tar.gz               : make_test NO
Test/More.pmが足りないらしい・・・
てことでまずはTest::Moreからインストール
cpan[2]> install Test::More
cpan[3]> install Net::Server::Fork
無事入ったようなので、munin-nodeの再起動をリトライ
# service munin-node restart
Stopping Munin Node agents: cat: /var/run/munin/munin-node.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
                                                           [FAILED]
Starting Munin Node:                                       [  OK  ]
なんかエラーでたけど、さっきと違う模様。
プロセスIDのファイルが作られてなかったようですね。
もう一度やったらうまくいきました。
# service munin-node restart
Stopping Munin Node agents:                                [  OK  ]
Starting Munin Node:                                       [  OK  ]

2010-10-07

Amazon Linux AMIでrootになるには?

  Amazon Linux AMIを試してみた。

いつものようにインスタンスを起動して
ssh -i keypair root@ec2-xxx-xxx-xxx-xxx.ap-southeast-1.compute.amazonaws.com
でログインしようとすると
Please login as the ec2-user user rather than root user.
と怒られてしまう。
rootではなくec2-userでログインしてねってことなので、言われるままに、ec2-userでログイン

ssh -i keypair ec2-user@ec2-xxx-xxx-xxx-xxx.ap-southeast-1.compute.amazonaws.com
ec2-userにはsudo権限があって特にパスワードを求められるわけでもないので
sudo su -
でrootになれる。