2012年12月25日火曜日

ip_conntrackを設定する理由

http://www.e-agency.co.jp/column/20121225.html
blogを書きました
大量配信サーバでiptablesを使っているときのTIPSです
参考になれば幸いでございます

2012年12月20日木曜日

eAブログに『MySQLTunerでMySQLのチューニングを診断する方法』と題して記事を書きました

http://www.e-agency.co.jp/column/20121220.html
eAブログに『MySQLTunerでMySQLのチューニングを診断する方法』と題して記事を書きました。
MySQLのチューニングを診断してくれるアプリの紹介です。
参考になれば幸いでございます。

2012年12月18日火曜日

httpd gracefulしたときに、RailsがCPUリソースを100%食う

Rails 2.3.4 + Phusion Passenger 3.0.7とちょっと古めのアプリなのですが
/etc/init.d/httpd graceful
httpd gracefulをして、Railsのプロセスが完全に落ちず、CPUリソースを100%食い続けてしまう事象がありました
httpd restartしても暴走しているプロセスは落ちてくれないので、プロセスをkillして治めました
こんな事も有るのですね
load averageのアラートの閾値を下げて直ぐ気付くようにしておきましたが、httpd gracefulするときは要注意ですね

2012年12月13日木曜日

Hadoopをさくらのクラウド(CentOS6)にインストールする

Hadoopをインストールします

参考)「Hadoopファーストガイド」を執筆しました
http://blog.livedoor.jp/sasata299/archives/51842860.html

環境

さくらのクラウド
CentOS6(64bit)

JDKのインストール
# yum install java-1.6.0
# java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.25.1.10.6.el5_8-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)

Apache Hadoopのインストール

http://www.apache.org/dyn/closer.cgi/hadoop/common/
最新のstableバージョンを探します

hadoopをダウンロードして設置
# /usr/sbin/useradd hadoop
# wget http://ftp.kddilabs.jp/infosystems/apache/hadoop/common/stable/hadoop-1.1.1.tar.gz
# tar zxvf hadoop-1.1.1.tar.gz
# mv hadoop-1.1.1 /usr/local/
# chown hadoop:hadoop -R /usr/local/hadoop-1.1.1/

javaがインストールされたディレクトリを確認
2段上の親ディレクトリがJAVA_HOMEに指定するディレクトリです
# readlink -e $(which javac)
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin/javac

.bashrcに環境変数を追記
# cd
# vi .bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
export HADOOP_INSTALL=/usr/local/hadoop-1.1.1
export PATH=$PATH:$HADOOP_INSTALL/bin:$JAVA_HOME/bin:$PATH

ホスト名を/etc/hostsに追記
# hostname
my.kyoto.local
# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 my.kyoto.local

Hadoop動作テスト

スタンドアロンモードで動作テストをします
同じ文字を数えてみましょう
ファイルを用意します
# mkdir input
# mkdir output
# vi input/a
a b c
# vi input/b
a a b c c c

hadoop実行
# hadoop jar /usr/local/hadoop-1.1.1/hadoop-examples-1.1.1.jar wordcount input output

出力結果確認
# cat output/part-r-00000
a       3
b       2
c       4

簡単ですね!

2012年11月21日水曜日

muninで特定のディレクトリのサイズを測るプラグイン


muninで指定したディレクトリのサイズを監視する(キャッシュ対応)
http://d.hatena.ne.jp/uunfo/20100414/1271244655

使ってみました

muninのデフォルトで入るプラグインではパーセンテージ%のチェックはあるのですが、サイズは測ってくれません
これは、特定ディレクトリのサイズを記録しておきたいときに使えます
duで集計しているので/とかは鈍いですけど、決まったディレクトリ、例えば、logやmysqlのデータディレクトリを見るのに最適かもです

以下作業ログ

muninのプラグインファイルを用意
# emacs /usr/share/munin/plugins/du
#!/bin/sh
#
# Disk Usage (per directory)
# version 1.1
#
# sample conf
# [du]
# user root
# env.dirs /var/log:/var/www
# #env.cache /tmp/munin-plugin-du
#
# crontab to use cache
# 2 * * * * rm /tmp/munin-plugin-du && /usr/sbin/munin-run du
#
#%# family=auto
#%# capabilities=autoconf

du=${du:-`which du`}
dirs=${dirs:-/home}":"
cache=${cache:-/tmp/munin-plugin-du}

if [ "$1" = "autoconf" ]; then
        if [ -x $du ]; then
                echo "yes"
                exit 0
        else
                echo "no (command 'du' not found)"
                exit 1
        fi
fi

if [ "$1" = "config" ]; then

        echo 'graph_title Disk usage '
        echo 'graph_args --upper-limit 1000 -l 0'
        echo 'graph_vlabel size (byte)'
        echo 'graph_category disk'
        echo 'graph_info This graph shows size of designated directories.'

        stack=0
        while [ $dirs  ]
        do
                dir=${dirs%%:*}
                dirs=${dirs#*:}

                basename=`basename $dir`
                echo "$basename.label $dir"
                if [ $stack -eq 0 ]; then
                        echo "$basename.draw AREA"
                        stack=1
                else
                        echo "$basename.draw STACK"
                fi
                
        done
        exit 0
fi

# Delete cache if two hours (120 minutes) have passed since its last modification.
find `dirname $cache` -name `basename $cache` -mmin +120 | while read file
do
        rm $file
done

if [ -e $cache ]; then
# Use cache if it exists.
        cat $cache
else
# Excecute du and create a cache file if it does not exist.
        while [ $dirs  ]
        do  
                dir=${dirs%%:*}
                dirs=${dirs#*:}
                basename=`basename $dir`
                
                size=`$du -sb $dir | cut -f 1`
                echo "$basename.value $size"
                echo "$basename.value $size" >> $cache
        done
fi

exit 0
実行権限を付与
# chmod 755 /usr/share/munin/plugins/du
munin-nodeの設定ファイルに追記
今回は、/var/lib/mysqlと/homeディレクトリをチェックします
# emacs /etc/munin/plugin-conf.d/munin-node
[du]
user root
env.dirs /var/lib/mysql:/home
env.cache /tmp/munin-plugin-du
crontabの設定
1時間に1回の実行としました
# crontab -e
0 * * * * rm /tmp/munin-plugin-du & /usr/sbin/munin-run du
動作チェック
/usr/sbin/munin-run du
シンボリックリンクを張る
# ln -s /usr/share/munin/plugins/du /etc/munin/plugins/du 
munin-nodeをリスタート
# /etc/init.d/munin-node restart
以上です

2012年11月20日火曜日

『マウスでリンクをクリックしてから画面が表示されるまでの約0.5杪あなたの寿命は縮んでいる!』



『マウスでリンクをクリックしてから
画面が表示されるまでの約0.5杪あなたの寿命は縮んでいる!』

今年一番のフレーズはこれだな・・・

2012年11月19日月曜日

GIGABYTEマザーボードのBIOSアップデート方法


使用しているマザーボードはGIGABYTE GA-H67MA-UD2H-B3で、OSはWindows 8です

いままで、CPUにCore i3-2100TというSandy Bridgeの物を使っていたのですが、
先日、秋葉原に行ったときにCore i5 3570が1万6千円ほどで売っていて安かったので買ってきました
Core i5 3570は、今までのCPUと違ってIvy Bridgeなので、マザーボードのBIOSをアップデートをしないとPC立ち上がらないんですよね…
ここに、今回やった作業をメモしておきます

1)@BIOSを手に入れる

GIGABYTE @BIOS』で検索すると、公式サイトのダウンロードページが出てきます
このソフトをダウンロードしましょう

2)@BIOSでBIOSのバージョンを確認する

BIOS Sign on Messageの項目の後ろに『F5』などといった表記があると思います
ここを確認してください

3)BIOSをアップデートする

@BIOSを立ち上げて『Update BIOS from GIGABYTE Server』をクリック
再起動がかかります

4)CPUを設置して電源ON

PCのハコを開けてCPUを設置
電源ボタンを押します
※Windows 8が立ち上がるときに何やら色々聞かれたりしますが、便宜設定してください
@BIOSを立ち上げてBIOSのバージョンが上がっているか確認しましょう

以上です
最近は、BIOSのアップデートが楽になっていて良いですね~!

さくら石狩DC見学ツアーにいってきた! #石狩DCツアー 公式写真


あ、、、ど真ん中じゃん!

2012年11月14日水曜日

2012 Googleアナリティクス サミットの最新情報をレポート

http://www.e-agency.co.jp/column/20121114-2.html
e-Agencyのblogに『2012 Googleアナリティクス サミットの最新情報をレポート』と題して記事を投稿しました
参考になれば幸いでございます
是非シェアなどを、お願いいたします

購読しているRSSを数えたら、ちょうど700だった キリがイイワー! ∩(´∀`)∩


2012年11月10日土曜日

Windows 8でGoogle Chromeを高速化する


Windows XPからWindows 8に移行して、まっさらな環境にGoogle Chromeをインストールしたところ、かなりもっさりしてしまいました。
色々試した結果、下記の方法で改善しました。
参考になりましたら幸いです。
Google Chromeのバージョンは23.0.1271.64 m です。

Google Chromeが遅い。(ページ読込みが遅い・解決方法)
http://www.ah-2.com/2010/04/29/google-chrome-slow.html
ブラウザを立ち上げたとき、通知領域に「プロキシを解決しています」といった表示が2~3秒出ていて待たされていましたが、この設定で改善しました。

Google Chrome で画像の読み込みが遅い場合の対処方法
http://memo-em.blogspot.jp/2012/10/google-chrome.html
Googleトップページでタイトル画像の表示が遅くなっていましたが、これで解決しました。
他のウェブサイトの画像の読み込み速度も改善しています。

※ご注意 すべてのパソコン環境についての動作を保証するものではありません。

2012年11月5日月曜日

MySQLをFusion-io ioDriveで使うためのチューニング

これは、こちらの記事の下書きです
http://www.e-agency.co.jp/column/20121107.html


使用したサーバ

http://server.sakura.ad.jp/dedicated/expressg2.html

さくらの専用サーバ エクスプレスG2シリーズ
Fujitsu RX100 S7 Xeon 4Core SATA + ioDrive 320GB Memory 32GB


ioDriveの接続とライブラリの確認

ioDriveの接続を確認
# lspci | grep -i fusion
01:00.0 Mass storage controller: Fusion-io ioDimm3 (rev 01)

ioDriveのRPMパッケージを確認
# rpm -qa | grep "iomemory"
iomemory-vsl-config-2.6.32-220.el6.x86_64-2.3.10.110-1.0.el6.x86_64
iomemory-vsl-source-2.3.10.110-1.0.el6.x86_64
iomemory-vsl-config-2.6.32-279.9.1.el6.x86_64-2.3.10.110-1.0.el6.x86_64
iomemory-vsl-2.6.32-220.el6.x86_64-2.3.10.110-1.0.el6.x86_64
iomemory-vsl-2.6.32-279.9.1.el6.x86_64-2.3.10.110-1.0.el6.x86_64
# rpm -qa | grep "fio"
fio-util-2.3.10.110-1.0.el6.x86_64
fio-firmware-107053-1.0.noarch
fio-common-2.3.10.110-1.0.el6.x86_64
libfio-2.3.10.110-1.0.el6.x86_64
fio-sysvinit-2.3.10.110-1.0.el6.x86_64

ioDriveのステータスを確認
# fio-status -a

Found 1 ioDrive in this system
Fusion-io driver version: 2.3.10 build 110

Adapter: ioDrive
        HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21 SN:484653
        Low-Profile ioDIMM Adapter, PN:00119200008, Mfr:003, Date:20120507
        External Power: NOT connected
        Powerloss protection: available
        PCIE Bus voltage: avg 12.10V, min 12.06V, max 12.11V
        PCIE Bus current: avg 0.43A, max 0.99A
        PCIE Bus power: avg 5.26W, max 11.96W
        PCIE Power limit threshold: 24.75W
        PCIE slot available power: 75.00W
        Sufficient power available: Unknown
        PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
        Connected ioDimm module:
          fct0: HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21 SN:488443

fct0    Attached as 'fioa' (block device)
        HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21 SN:488443
        HP ioDIMM 320GB, PN:00309800503, Mfr:003, Date:20120507
        Powerloss protection: protected
        PCI:01:00.0
        Vendor:1aed, Device:1005, Sub vendor:103c, Sub device:178c
        Firmware v5.0.7, rev 107053
        320.00 GBytes block device size, 406 GBytes physical device size
        Format: block, v300, 625,001,920 sectors, 512 bytes per sector
        Error correction: 39 bits per 960 bytes
        FPGA ID:0 Format UID:0000000773fb013303bb0049dcb8dc00
        PCIE slot available power: 75.00W
        Sufficient power available: Unknown
        PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
        Internal temperature: 66.0 degC, max 67.9 degC
        Board temperature: 54 degC
        Internal voltage: avg 0.993V, max 0.996V
        Aux voltage: avg 2.470V, max 2.473V
        Media status: Healthy; Reserves: 100.00%, warn at 10.00%
        Lifetime data volumes:
           Physical bytes written: 1,382,385,168
           Physical bytes read   : 7,432,989,232
        RAM usage:
           Current: 108,025,856 bytes
           Peak   : 108,025,856 bytes


ioDriveのパーティションを設定

パーティションを確認。
# /sbin/fdisk -l

Disk /dev/fioa: 320.0 GB, 320000983040 bytes
255 heads, 63 sectors/track, 38904 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 32768 bytes
Disk identifier: 0x00000000


Disk /dev/sda: 999.7 GB, 999653638144 bytes
255 heads, 63 sectors/track, 121534 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003365b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          32      256000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              32        1052     8192000   82  Linux swap / Solaris
/dev/sda3            1052      121535   967775232   83  Linux

ディスクのパーティションを設定します。
# fdisk /dev/fioa
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2ee10d3c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): [n]

Command action
e extended
p primary partition (1-4)
[p]
Partition number (1-4): [1]
First cylinder (1-38904, default 1): [Enter]
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-38904, default 38904): [Enter]
Using default value 38904

Command (m for help): [p]

Disk /dev/fioa: 320.0 GB, 320000983040 bytes
255 heads, 63 sectors/track, 38904 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 32768 bytes
Disk identifier: 0x2ee10d3c

Device Boot Start End Blocks Id System
/dev/fioa1 1 38904 312496348+ 83 Linux

Command (m for help): [w]
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

パーティションブロックの割り当て情報を確認。
# cat /proc/partitions
major minor  #blocks  name

 252        0  312500960 fioa
 252        1  312496348 fioa1
   8        0  976224256 sda
   8        1     256000 sda1
   8        2    8192000 sda2
   8        3  967775232 sda3


XFSファイルシステムの設定

ioDriveをXFSファイルシステムでフォーマットします。

ファイルシステムの違い
ext3は同一ファイルへの書き込みが、同時に1スレッドしかできない(ext4も同様)
xfsはrawデバイスに近い並列性(複数スレッドでの同時書き込み可)
Fusion-ioで使うならXFS
DeNA松信さんの「MySQL環境におけるFusion-io検証結果とDeNAにおける活用価値」セッションメモ(http://d.hatena.ne.jp/rx7/20101015/p1

xfsフォーマットをするのに必要なライブラリをインストール。
# yum install xfsprogs

xfsprogsがインストールされた事を確認。
# yum list | grep xfs
xfsprogs.x86_64                         3.1.1-7.el6               @base      
xfsdump.x86_64                          3.0.4-2.el6               base        
xfsprogs.i686                           3.1.1-7.el6               base        
xfsprogs-devel.i686                     3.1.1-7.el6               base        
xfsprogs-devel.x86_64                   3.1.1-7.el6               base        
xfsprogs-qa-devel.i686                  3.1.1-7.el6               base        
xfsprogs-qa-devel.x86_64                3.1.1-7.el6               base        


ファイルシステムxfsでフォーマット。
ブロックサイズを4KBとします。


MySQL+ioDrive
XFSは bs=4K 、InnoDBは bs=16K、トランザクションログは 512K とポイントは色々ありますが、MySQL+ioDriveとしては 4Kbyteが最も良好な性能を記録しているため、4Kbyteでフォーマットすることがよさそうです。
Fusion-io ioDriveの検討資料~運用設定編~(http://blog.father.gedow.net/2012/08/06/fusion-io-iodrive-operaton-configuration/


# /sbin/mkfs.xfs -s size=4096 -b size=4096 /dev/fioa1 -f
meta-data=/dev/fioa1             isize=256    agcount=16, agsize=4882756 blks
         =                       sectsz=4096  attr=2
data     =                       bsize=4096   blocks=78124087, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=38146, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


ioDriveをマウント

# mkdir /fioa
# mount /dev/fioa1 /fioa

ioDriveがXFSファイルシステムでマウントされています。
# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda3     ext4   952589244   3222600 900977884   1% /
tmpfs        tmpfs    16490208         0  16490208   0% /dev/shm
/dev/sda1     ext4      247919     73226    161893  32% /boot
/dev/fioa1     xfs   312343764     33504 312310260   1% /fioa

サーバ起動時に自動でマウントするように、fstabファイルに追記。
# vi /etc/fstab
/dev/fioa1 /fioa xfs defaults 1 2


I/Oスケジューラの設定

ioDriveドライバのI/Oスケジューラを設定します。
MySQLはI/Oスケジューラをバイパスしてデバイスに直接アクセスする事で、パフォーマンスの向上が見込めます。


I/O Schedulers
- Default with Fusion-io is NOOP
- Merges requests but does not optimize for rotational devices
- For MySQL, submitting requests directly to the device have shown performance improvements. use_workqueue=0
Tuning For Speed: Percona Server and Fusion-io(http://www.percona.com/files/presentations/percona-live/nyc-2011/PerconaLiveNYC2011-Tuning-For-Speed-Percona-Server-and-Fusion-io.pdf

Linuxカーネルのモジュールを設定します。
# modprobe iomemory-vsl use_workqueue=0

設定を確認。
# modprobe -c | grep use_workqueue
options  iomemory-vsl use_workqueue=0

iomemory-vsl.confに書き込みしておく。
# vi /etc/modprobe.d/iomemory-vsl.conf
options  iomemory-vsl use_workqueue=0

参考)
http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c02737596/c02737596.pdf

The following table describes the module parameters you can set by editing the
/usr/modprobe.d/iomemory-vsl.conf file and changing the values.
/etc/modprobe.d/iomemory-vsl.conf
use_workqueue 3 (1 or 3) Linux only:
3 = Use standard OS I/O elevators
0 = bypass

One-time configuration
The IO Accelerator driver options can be set when the driver is installed on the command line of either
insmod or modprobe. For example, set the auto_attach driver option to 0:
$ modprobe iomemory-vsl auto-attach=0
This option takes effect only for this load of this driver. This option is not set for subsequent calls to modprobe
or insmod.
Persistent configuration
To maintain a persistent setting for an option, add the option to the
/etc/modprobe.d/iomemory-vsl.conf file or a similar file. To prevent the IO Accelerator from
auto-attaching, add the following line to the iomemory-vsl.conf file:
options iomemory-vsl auto_attach=0
The driver option then takes effect for every subsequent driver load, as well as on autoload of the driver
during boot time.


MySQL5.5(Percona XtraDB)のインストール

MySQL5.5(Percona XtraDB)の64bit versionを使います。
Percona XtraDB(http://www.percona.com/software/percona-server)は、MySQLコンサルティング会社であるPercona社(http://www.percona.com/)が提供しています。
MySQL Community Serverをフォークしたプロダクトです。
通常のMySQLより、マルチコアプロセッサ・I/Oに配慮した設計になっています。
ライセンスはGPLv2で、無料で使えます。

先に、MySQLがインストールされていたら、予めアンインストールしておきましょう。
# yum remove mysql mysql-server mysql-libs php-mysql

Percona公式リポジトリをインストールしたあと、yumコマンドでインストールできます。
# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
# yum install Percona-Server-devel-55 Percona-Server-server-55 Percona-Server-client-55
# /usr/bin/mysql_install_db
# /etc/init.d/mysql start
Starting MySQL (Percona Server).. SUCCESS!
# /usr/bin/mysqladmin -u root password 'new-password' #パスワードは便宜設定しましょう
# /usr/bin/mysql -uroot -pnew-password

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.28-29.1 Percona Server (GPL), Release rel29.1, Revision 335

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MySQLが立ち上がりました。
InnoDBエンジンのコメントがPercona-XtraDBとなっていることを確認します。

mysql> SHOW ENGINES \G
*************************** 9. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Percona-XtraDB, Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
9 rows in set (0.00 sec)

起動ログも確認しておきましょう。
# cat /var/log/mysqld.log
121029 14:42:55 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
121029 14:42:56 [Note] Plugin 'FEDERATED' is disabled.
121029 14:42:56 InnoDB: The InnoDB memory heap is disabled
121029 14:42:56 InnoDB: Mutexes and rw_locks use GCC atomic builtins
121029 14:42:56 InnoDB: Compressed tables use zlib 1.2.3
121029 14:42:56 InnoDB: Using Linux native AIO
121029 14:42:56 InnoDB: Initializing buffer pool, size = 128.0M
121029 14:42:56 InnoDB: Completed initialization of buffer pool
121029 14:42:56 InnoDB: highest supported file format is Barracuda.
121029 14:42:56  InnoDB: Waiting for the background threads to start
121029 14:42:57 Percona XtraDB (http://www.percona.com) 1.1.8-rel29.1 started; log sequence number 1595675
121029 14:42:57 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
121029 14:42:57 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
121029 14:42:57 [Note] Server socket created on IP: '0.0.0.0'.
121029 14:42:57 [Note] Event Scheduler: Loaded 0 events
121029 14:42:57 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.28-29.1'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Percona Server (GPL), Release rel29.1, Revision 335


phpをインストールするときには、remiレポジトリを使います。
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5.rpm
# yum --enablerepo=remi install php php-mysql
# php -v
PHP 5.3.18 (cli) (built: Oct 18 2012 08:50:17)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies


my.cnfの設定

ioDrive上にMySQLのデータディレクトリを移動します。
# /etc/init.d/mysql stop
# mv /var/lib/mysql /fioa/

シンボリックリンクを張ります
# ln -s /fioa/mysql  /var/lib/mysql

https://github.com/kazeburo/mysetup/blob/master/mysql/my55.cnf
kazeburoさんがgithubで公開されているmy.cnfファイルをベースに設定してきます。

# git clone https://github.com/kazeburo/mysetup.git
# cp /etc/my.cnf /etc/my.cnf.org
# cp mysetup/mysql/my55.cnf /etc/my.cnf

# vi /etc/my.cnf

変更した項目

# サーバID
server-id       = 1

# 控えめに搭載メモリ32GBの約70%とします
innodb_buffer_pool_size = 20G

# DiskのIO/secを指定します
innodb_io_capacity = 10000

# CPUのスレッド数を無制限にします
# 参考 innodb_thread_concurrencyとか計測してみました http://www.inter-office.co.jp/contents/122/
innodb_thread_concurrency = 0

# データのflushのタイミングを改善して、I/Oバーストを解消します
# 参考 MySQL Conference&Expo 2010に行ってきました http://engineer.dena.jp/2010/06/mysql-conferenceexpo-2010.html
innodb_adaptive_flushing = 1

# I/Oの速度を0.1秒間隔に保ちます
# 参考 variable innodb_adaptive_flushing_method http://www.percona.com/doc/percona-server/5.5/scalability/innodb_io_55.html#innodb_adaptive_flushing_method
innodb_adaptive_flushing_method = keep_average

# ioDraiveはランダムアクセスのコストがないため、バッファプール内に保留されたダーティページを纏めてテーブルスペースへ書き込む必要がありません。
# 設定をオフにしてパフォーマンスを発揮させます。
innodb_flush_neighbor_pages = 0

MySQLをリスタートします。
innodb_log_file_sizeの値が変わっていますので、ib_logfile0とib_logfile1を退避しておきます。
# /etc/init.d/mysql stop
# mv /var/lib/mysql/ib_logfile0 /tmp
# mv /var/lib/mysql/ib_logfile1 /tmp
# /etc/init.d/mysql start

ログの確認
# tail -f /var/lib/mysql/*.err


MySQLのベンチマーク

MySQLベンチマークツールのtpcc-mysqlを使ってテストデータを挿入します。

tpcc-mysqlをインストール。
# cd /usr/share/
# rpm -Uvh  http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# yum --enablerepo=epel install bzr
# bzr branch lp:~percona-dev/perconatools/tpcc-mysql
# cd tpcc-mysql/src
# make all
# cd ..; ls -l

データベースの設定をインポート。
# cd /usr/share/tpcc-mysql
# mysqladmin -uroot -pnew-password create tpcc
# mysql -uroot -pnew-password tpcc < create_table.sql
# mysql -uroot -pnew-password tpcc < add_fkey_idx.sql

テストデータを挿入。
tpcc_loadにはwarehouse(倉庫)というパラメータで挿入するデータ量を決めます。
1 warehouse = 約75MBです。

# ./tpcc_load -h
*************************************
*** ###easy### TPC-C Data Loader  ***
*************************************

 usage: tpcc_load [server] [DB] [user] [pass] [warehouse]
      OR
        tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]

           * [part]: 1=ITEMS 2=WAREHOUSE 3=CUSTOMER 4=ORDERS
# time ./tpcc_load localhost tpcc root 'new-password' 400


挿入完了まで5時間ほどかかりました。
データベースのサイズを見てみましょう。
mysql> SELECT SUM(data_length)/1024/1024 AS total_db_data_in_MB FROM information_schema.tables WHERE table_schema = 'tpcc';
+---------------------+
| total_db_data_in_MB |
+---------------------+
|      30628.68750000 |
+---------------------+
1 row in set (0.02 sec)

30GBのテストデータが準備できました。
このサーバのメモリ量と比べるときついサイズです。

ベンチマークを走らせる前に、テストデータのバックアップをしておきます。
ベンチマークスクリプトはテストデータを更新するためです。
今回は、MySQLバックアップツールのXtraBackup(http://www.submit.ne.jp/1211#1)を使いました。

バックアップ
# time /usr/bin/innobackupex --user root --password pnew-password --slave-info /tmp/xtrabackup/
# time /usr/bin/innobackupex --user root --password pnew-password --apply-log /tmp/xtrabackup/2012-11-02_16-33-27

リストア
# time /usr/bin/innobackupex --copy-back /tmp/xtrabackup/2012-11-02_16-33-27


それでは、ベンチマークを開始しましょう。
warehouseの数を100、同時接続数を10、測定を開始するまでの助走時間を60秒、測定時間を600秒とします。

# ./tpcc_start -h
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
./tpcc_start: option requires an argument -- 'h'
Usage: tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time -i report_interval -f report_file -t trx_file

# time ./tpcc_start -h localhost -d tpcc -u root -p 'new-password' -w 400 -c 10 -r 60 -l 600

測定終了まで
topやvmstat 1を眺めて待ちましょう。

TpmCは1分間に処理できるトランザクションの数です。
比較して数値が大きいほど、性能が高い事を示します。

・ファイルシステム XFS フル設定
----------------------------------------------
<TpmC>
                 29288.500 TpmC

real    11m0.032s
user    3m18.081s
sys     2m50.399s
----------------------------------------------

・ファイルシステム XFS kazeburoさんのmy.cnfに、server-idとinnodb_buffer_pool_size = 20Gを設定したのみのmy.cnf
----------------------------------------------
<TpmC>
                 25305.900 TpmC

real    11m0.083s
user    2m50.603s
sys     2m25.939s
----------------------------------------------

・ファイルシステム ext4 フル設定
----------------------------------------------
<TpmC>
                 27609.500 TpmC

real    11m0.052s
user    3m3.894s
sys     2m34.845s
----------------------------------------------


・ファイルシステム ext4  kazeburoさんのmy.cnfに、server-idとinnodb_buffer_pool_size = 20Gを設定したのみのmy.cnf
----------------------------------------------
<TpmC>
                 27358.000 TpmC

real    11m0.276s
user    3m5.723s
sys     2m37.755s
----------------------------------------------


まとめ

試行回数やパラメータ設定が少なくて、ちょっとベンチマークとしてはいけていないのですが、、、、
それぞれ、大きな差は有りませんでした。
my.cnfの設定はkazeburoさんのmy.cnfにserver-idとinnodb_buffer_pool_sizeを設定したのみの物でも十分にいけると思います。
勿論、実運用へ向けたチューニングとして、実際の挙動にできるだけ近いベンチマークを行う事が望ましいです。
次回は、もう少し細かくベンチマークを取っていきたいですね。



参考資料

http://www.percona.com/files/presentations/percona-live/nyc-2011/PerconaLiveNYC2011-Optimizing-MySQL-for-Solid-State-Storage.pdf
Optimizing MySQL for Solid State Storage

http://blog.father.gedow.net/2012/08/28/iodrive-mysql-event/
第2回 ioDrive+MySQL勉強会 発表資料

http://d.hatena.ne.jp/rx7/20101015/p1
DeNA松信さんの「MySQL環境におけるFusion-io検証結果とDeNAにおける活用価値」セッションメモ

http://www.percona.com/about-us/mysql-white-paper/virident-flashmax-m1400-mysql-tpcc-mysql-report/
Virident FlashMAX M1400 MySQL - tpcc-mysql report

http://www.percona.com/live/london-2011/session/tuning-for-speed-percona-server-and-fusion-io/
Tuning For Speed - Percona Server and Fusion-io

http://www.percona.com/files/white-papers/virident-mlc-tpcc.pdf
Virident FlashMAX M1400 MySQL - Tpcc-Mysql Report

http://blog.nomadscafe.jp/2012/10/mysql-mycnf-github.html
MySQLの設定ファイル my.cnf をgithubにて公開しました & チューニングポイントの紹介

http://www.fusionio.com/blog/mysql-acceleration-through-new-flash-storage-api-primitives/
MySQL Acceleration Through New Flash Storage API Primitives

http://d.hatena.ne.jp/sh2/20090212
tpcc-mysqlによるMySQLのベンチマーク




2012年11月1日木曜日

「パナソニックの赤字が7650億円」をわかりやすく例えると

東京ドーム何個分みたいな説明って、ざっくりしているのはわかっているのだけれども わかりやすいよね

2012年10月30日火曜日

Oracle MySQL Executive Summary 超訳

http://www.oracle.com/technetwork/topics/security/cpuoct2012-1515893.html
Oracle MySQL Executive Summary 超訳
『このパッチには、Oracle MySQLのための14つの新しい脆弱性の修正が含まれています。 これらの脆弱性によって、認証なしでリモートから悪用する事が可能になるかもしれません、 すなわち、ユーザー名とパスワードを必要とせずに、ネットワーク経由で悪用される可能性があります。』

2012年10月26日金曜日

『Oracle MySQL Tech Tour - Tokyo』にいってきました

Oracle MySQL Tech Tour - Tokyo』にいってきました
ざっくりとしていますが、参考になりましたら幸いです

日時:2012年10月25日(木)13:30~17:00
場所:日本オラクル株式会社 本社 13Fセミナールーム

資料 ※先日のセミナー資料ではありませんが、近しい物がこれです
http://www.ospn.jp/osc2012-fall/pdf/osc2012TokyoFall_Oracle_MySQL.pdf


◆MySQL5.6 RCリリース

MySQL5.6での主な改善点は以下の5つのカテゴリです

オプティマイザ
→パフォーマンスアップ

パフォーマンス・スキーマ
→今まではMySQLの開発者向けの情報が多かったが
MySQLの利用者向けの統計情報を出すようにした

InnoDB
→MyISAMはメンテナンスモードにある為、迷わずInnoDBを使いましょう
InnoDBはコア数が多ければ多いほどパフォーマンスが上がります

レプリケーション
→より、クラッシュセーフに
バイナリログのサイズを落として、帯域を節約するオプション
バイナリログにチェックサムを追加するオプション
クラッシュ後のバイナリログを自動修復する機能により、クラッシュセーフなスレーブを構築する事が出来るようになります

「NotOnlySQL」オプション
→速度は、memcachedやKyoto Tycoonに劣ります
参考)MySQL 5.6のInnoDB memcached pluginを使ってみる http://d.hatena.ne.jp/sfujiwara/20121004/1349336278
SQLでも検索ができるという利点は大きいです
使いどころを考えると良いです


◆MySQL5.6の正式リリースは今年中



◆面白そうなもの

MySQL for Excel
http://dev.mysql.com/doc/refman/5.5/en/mysql-for-excel.html
Windows版からMySQL5.6のテーブルをエクセルで変更できてしまいます
http://dev.mysql.com/doc/refman/5.5/en/mysql-for-excel-edit.html


◆導入する時期

得てして、MySQLはリリース後にバグ修正を沢山します
半年くらいは様子見をすることをオススメします

2012年10月18日木曜日

Google Data Centerは帝国兵が守っているようだ

コーヒーメーカーの設定が変更される脆弱性

http://jvndb.jvn.jp/ja/contents/2009/JVNDB-2009-004384.html
『コーヒーメーカーの設定が変更される脆弱性がある 深刻度:10(危険)』
 ・・・これは一大事ですよ!

2012年10月16日火曜日

2012年10月12日金曜日

iPod touchが上海から来たようだ


クロネコ再配達依頼done

2012年10月2日火曜日

2012年10月1日月曜日

YAPC::Asia Tokyo 2012 ボランティアスタッフ集合写真

ボランティアスタッフ集合写真 via http://blog.kushii.net/archives/1782461.html
うん、自然に笑顔を作れるようにしたい...!

riywoさんのスライド Most Powerful High Availability / Load Balancing #yapcasia 2012

職種が同じなので参考になります
LT本編の資料は必見
DNSを利用してアレコレしてなんやかんやHA構成つくっていて面白いです
MyDNSさわってみよう

Masahiro Naganoさんのスライド 1台から500台までのMySQL運用(YAPC::Asia編)

P78の某Flush DraiveはおそらくioDrive パフォーマンスの差が凄すぎる・・・

超クールなFacebook名刺を300円で作る方法

http://www.submit.ne.jp/1244

『最近、イベントや飲み会などで仲良くなった人に、『Facebookやっていますか?』という話題をした事がある方は多いのではないでしょうか。 でも、いざ友達申請をしようとして検索しても出てこない・・・といった事は良くあります。 そういう時にこのFacebook名刺を渡しておけば間違いないですね。 さらに『Facebookで名刺を作ったんですよ~』という話でも盛り上がること必至です。』
名刺が切れたので再び申し込んだ
£10.00なり
ちょい高めの価格ですが、厚手の紙で手触りがいいのです

YAPC::Asia Tokyo 2012, 2日目レポート[随時更新]

http://gihyo.jp/news/report/01/yapcasia2012/0002
”M_Ishikawaさん「おせっかい駆動開発のススメ」
おせっかい駆動とは,主に自己満足のために勝手にものを作ることだそうです。これに加えて,スターバックスなどでドヤ顔することで開発を高速に進めるドヤリング型開発も提唱していました。これらにより,M_Ishikawaさんは2chのスクレイパーを開発できたそうです。”

ドヤリング型開発・・・
#yapcasia

2012年9月19日水曜日

Apple’s next huge data center will be in Hong Kong, groundbreaking Q1 2013

http://9to5mac.com/2012/09/18/apples-next-huge-data-center-will-be-in-hong-kong-groundbreaking-q1-2013/

『We received word that Apple is building another enormous data center—this time in Hong Kong SAR, China. Apple recently finalized a location in the New Territories region of Hong Kong near the Shenz...』

http://9to5mac.com/2012/09/18/apples-next-huge-data-center-will-be-in-hong-kong-groundbreaking-q1-2013/ 香港にアップルのデータセンター Googleも香港を選んでいる その理由は ”香港には信頼性の高いエネルギーインフラがあります。 また、熟練した労働力があり、東アジアの中心に位置しています。 香港は世界中のユーザーの皆様にサービスを提供するのに最適な場所です。” とのこと

2012年9月18日火曜日

Takeshi Yako (takeshiyako) on Twitter

https://twitter.com/takeshiyako

『Instantly connect to what's most important to you. Follow your friends, experts, favorite celebrities, and breaking news.』

https://twitter.com/takeshiyako Twitterのプロフィール背景をセットアップしたぞ ・・・しかし、文字が白抜きで見にくいのであった

サービス | shttoでスマートフォンサイト変換ホームページ作成・システム開発 株式会社 楽都

http://www.ract.jp/shutto/campaign.html
『ホームページ制作、スマートフォン(スマホ)対応・システム開発の株式会社楽都。京都、大阪、奈良など近畿圏のホームページ制作、WEBサイト制作、システム開発、スマートフォンサイト制作なら一度ご相談下さい』
http://www.ract.jp/shutto/campaign.html
楽都さんのshutto ”TOPページ変換無料キャンペーン” がスタートしました
0円でスマートフォンサイト作ってくれます
どうぞ、よしなにお願いします

2012年9月7日金曜日

4chan - News


http://www.4chan.org/news#108
『In May we launched a radical refactor of our frontend code, migrating 8 year old spaghetti HTML to code that validates HTML5/CSS3. The change was made to improve the rendering speed of large threads and consistency across browsers, and enable extension developers to more easily develop for the site....』
http://www.4chan.org/news#108
4chanが情報読み取り用のJSON APIをリリース...あとで遊んでみる
いろいろできる予感

坂口安吾 敬語論

2012年8月20日月曜日

Cassandraクラスタと、DataStax OpsCenterの構築

http://www.submit.ne.jp/1513
『Cassandraクラスタと、DataStax OpsCenterの構築』というタイトルで、blogを書きました
おもにCassandraの導入についての初心者向けの内容となっております
DataStax OpsCenterについては情報があまりありませんでしたのであわせて紹介しています
お時間が有りましたら、ご覧いただけますと幸いです

2012年8月17日金曜日

Born from Japan disasters, Line app sets sights on U.S., China

Born from Japan disasters, Line app sets sights on U.S., China

TOKYO (Reuters) - Born in the chaos after Japan's 2011 disasters, the smartphone application Line has attracted 50 million users faster than Facebook with a made-in-Japan blend of cute and the promise

--------------------------------------------------------------

gr8

2012年7月12日木曜日

http://gyazo.com/ccc995d5d11733f861c9528d39b911a4.png



http://gyazo.com/ccc995d5d11733f861c9528d39b911a4.png



--------------------------------------------------------------

伝説の#web3-gにょろにょろが・・・


2012年6月21日木曜日

shutto(シュット)| カンタンスマホ変換サービス



shutto(シュット)| カンタンスマホ変換サービス

ドラッグ&ドロップだけの簡単手順であなたのサイトをスマートフォン対応サイトに変換!

--------------------------------------------------------------

http://shutto.com/
次のさぶみっと!オフ会(制作会社の交流会)ではshuttoのデモンストレーションや、PCを用意して皆様にさわって頂くなどを企画しています
shuttoの使い勝手のフィードバックをいただけたら嬉しいです
また、shuttoのマーケティングに関して、こうしたらどう?こうしたら知ってもらえるのでは?みたいなアイディアも言ってもらえたらありがたいです


2012年6月20日水曜日

2012年5月9日水曜日

Installing MySQL 5.5 from source on CentOS5

※this text from livedoor blog 2012/1/17

既にMySQLが起動しているサーバに新たにMySQL 5.5をインストールして MySQLを複数起動した状態にします ※まっさらな状態からMySQLをインストールして複数起動するならばmysqld_multiを利用すると良いです makeに必要なライブラリをインストール
# yum install openssl
# yum install cmake
# yum install ncurses-devel
最新版のソースをダウンロードして解凍 http://www.mysql.com/downloads/mysql/ から最新版を探す
wget 'http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.20.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/'
tar zxfv  mysql-5.5.20.tar.gz
cd mysql-5.5.20
Configuration Optionsを設定 PORTは3307、インストールディレクトリを現在使用しているMySQLとは別のディレクトリを指定
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql_second \
-DMYSQL_DATADIR=/var/lib/mysql_second \
-DMYSQL_UNIX_ADDR=/var/lib/mysql_second/mysql.sock \
-DMYSQL_TCP_PORT=3307 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SSL=yes
詳細なオプションは下記参照 http://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.5/en/source-configuration-options.html インストール
# make
# make install
設定ファイルを編集
# cp /usr/local/mysql_second/support-files/my-medium.cnf /usr/local/mysql_second/my.cnf
# emacs /usr/local/mysql_second/my.cnf

[mysqld]
datadir = /var/lib/mysql_second
max_connections = 1000
expire_logs_days = 30
innodb_buffer_pool_size = 200M
データディレクトリを作成
# /usr/local/mysql_second/scripts/mysql_install_db --datadir=/var/lib/mysql_second --basedir=/usr/local/mysql_second --defaults-file=/usr/local/mysql_second/my.cnf
MySQL用アカウント/グループ作成、データディレクトリの権限変更
# groupadd mysql
# useradd -g mysql -d /home/mysql mysql
# chown -R mysql:mysql /var/lib/mysql_second/
# chmod 755 /var/lib/mysql_second/
MySQLのスタート
# /usr/local/mysql_second/bin/mysqld_safe --defaults-file=/usr/local/mysql_second/my.cnf --user=mysql &
プロセスの確認
# ps -ax | grep mysql
起動ログの確認
# tail -f /var/lib/mysql_second/xxxxxxxx.err
接続テスト
# /usr/local/mysql_second/bin/mysql -uroot -P3307 --socket=/var/lib/mysql_second/mysql.sock
rootのパスワードを設定
# /usr/local/mysql_second/bin/mysqladmin -uroot -P3307 --socket=/var/lib/mysql_second/mysql.sock password 'your-password'
設定したパスワードで接続テスト
# /usr/local/mysql_second/bin/mysql -uroot -pyour-password -P3307 --socket=/var/lib/mysql_second/mysql.sock

さくらのクラウド スイッチの接続 on CentOS5

※this text from livedoor blog 2011/12/7

さくらのクラウドのコントロールパネルでスイッチを作成してサーバに接続します

スイッチを作成

http://support.sakura.ad.jp/manual/cloud/basic/switch.html#switch-make 公式オンラインマニュアルに沿ってスイッチを作成します

スイッチをサーバに接続

サーバをシャットダウンする コンソールにログイン ↓ [サーバ] ↓ 左メニューからスイッチを接続したいサーバを選択 ↓ [シャットダウン] ↓ [更新] さくらのクラウドスイッチ2
サーバをシャットダウンし[NICを追加]をクリック
さくらのクラウドスイッチ3
NICを追加してもよろしいですか?
[はい]
さくらのクラウドスイッチ4
eth1: 未接続 (1A:2B:3C:4D:5E:6F) のような表示が現れる
このMACアドレスをメモしておく
右側のコネクションマークをクリック
さくらのクラウドスイッチ5
先程作成したスイッチを選択

[接続]

右上の[起動]をクリックしてサーバを起動
さくらのクラウドスイッチ6


sshログインして接続設定

NICにIPアドレス等を設定
設定ファイル/etc/sysconfig/network-scripts/ifcfg-eth1を編集します
# emacs /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
HWADDR=1A:2B:3C:4D:5E:6F
BROADCAST=192.168.0.255
IPADDR=192.168.0.30
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
HWADDRにサーバの詳細情報に記載されていたMACアドレスを入力
上記例では、HWADDRが1A:2B:3C:4D:5E:6F、IPアドレスが192.168.0.30
イーサネットを無効に
# ifdown eth1
イーサネットを有効に
# ifup eth1
ネットワークの設定を確認
# ifconfig
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:100.100.100.100  Bcast:100.100.100.100  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10000 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1000 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15000000 (15.0 MiB)  TX bytes:14000 (140.0 KiB)

eth1      Link encap:Ethernet  HWaddr 1A:2B:3C:4D:5E:6F
          inet addr:192.168.0.30  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:200 (200.0 b)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16000  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2000 (2.0 KiB)  TX bytes:2000 (2.0 KiB)
eth1が設定されている事を確認
もう1つサーバをスイッチに接続して通信できるか確認してみましょう

さくらのクラウド ディスクの追加 on CentOS5

※this text from livedoor blog 2011/11/16

さくらのクラウドのコントロールパネルでディスクを追加・接続した後に ディスクをマウントして使えるようにします

ディスクのパーティションを確認

# /sbin/fdisk -l

Disk /dev/hda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        2355    18812115   83  Linux
/dev/hda3            2356        2610     2048287+  82  Linux swap / Solaris

Disk /dev/hdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdb1               1       13054   104856223+  83  Linux
ディスク/dev/hdb1が追加された事がわかる

ディスクのパーティションを設定

# /sbin/fdisk /dev/hdb1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 13053.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): p

Disk /dev/hdb1: 107.3 GB, 107372772864 bytes
255 heads, 63 sectors/track, 13053 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

     Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-13053, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-13053, default 13053): 
Using default value 13053

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.


ext3 形式でファイルシステムを構築

# /sbin/mkfs -t ext3 /dev/hdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
13107200 inodes, 26214055 blocks
1310702 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


マウントポイントの作成とマウント

# mkdir /hdb1
# mount /dev/hdb1 /hdb1
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda2              18G  1.5G   16G   9% /
/dev/hda1              99M   17M   77M  18% /boot
tmpfs                 1.8G     0  1.8G   0% /dev/shm
/dev/hdb1              99G  188M   94G   1% /hdb1
これで、追加したディスクが/hdb1で使えるようになりました

起動時に自動マウントするようにしておく

# emacs /etc/fstab
/dev/hdb1               /hdb1                   ext3    defaults        1 2

install innotop on CentOS5


※this text from livedoor blog 2011/11/7


topコマンドライクなMySQLのモニタリングツールです

インストール

yum -y install perl-TermReadKey
yum -y install perl-DBI
yum -y install perl-DBD-mysql

wget http://innotop.googlecode.com/files/innotop-1.8.0.tar.gz
tar zxf innotop-1.8.0.tar.gz
cd innotop-1.8.0
perl Makefile.PL
make install


起動例

例) 更新間隔 0.5秒でモニタリング

/usr/local/bin/innotop -uXXXX -pXXXXXXXXXXXXXX -d0.5

install Maatkit on CentOS5

※this text from livedoor blog 2011/10/18

オープンソースのデータベースをテストする為のコマンドラインツール
MySQLのクエリをチューニングする時などに役に立ちます


install
# yum install perl-TermReadKey
# wget http://maatkit.googlecode.com/files/maatkit-7540-1.noarch.rpm
# rpm -ivh maatkit-7540-1.noarch.rpm


mysqld-slow.log を解析
# mk-query-digest /var/lib/mysql/mysqld-slow.log

tcpdumpを解析
# /usr/sbin/tcpdump -s 65535 -x -n -q -tttt -i eth0 port 3306 > db-server_tcpdump.log &
# mk-query-digest --type tcpdump db-server_tcpdump.log


reference
official

http://www.maatkit.org/

AWS Auto Scaling

※this text from livedoor blog 2011/9/14

AmazonのAuto Scalingを利用してインスタンスの負荷をモニタリング インスタンスを自動で増減させ、ロードバランス配下に設置します ※起動するAMIイメージの準備と、Elastic Load Balancingの設定がされている必要があります 参考文献) http://awsdocs.s3.amazonaws.com/AutoScaling/latest/as-dg.pdf


AutoScaling, CloudWatch APIを設定
※ APIがインストールされていないサーバ向けの記事になります Amazon Linux AMIなどはデフォルトでAPIが使えるので、これを利用する手もあります APIがインストールされているならば、環境変数の設定だけ行なえば良いです


Javaのインストール
# yum install java-1.6.0-openjdk



APIの準備
Auto Scaling Command Line Tool http://aws.amazon.com/developertools/2535
# mkdir /usr/local/ec2-api-tools
# cd /usr/local/ec2-api-tools
# wget http://ec2-downloads.s3.amazonaws.com/AutoScaling-2011-01-01.zip
# unzip AutoScaling-2011-01-01.zip
Amazon CloudWatch Command Line Tool http://aws.amazon.com/developertools/2534
# cd /usr/local/ec2-api-tools
# wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip
# unzip CloudWatch-2010-08-01.zip



API用の証明書ファイルの設定
https://aws-portal.amazon.com/ アカウント ↓ セキュリティ証明書 ↓ 「アクセスキー ID」と「シークレットアクセスキー」を確認
# cd /usr/local/ec2-api-tools/AutoScaling-1.0.39.0
# cp AutoScaling-1.0.39.0/credential-file-path.template ./credential-file
# chmod 600 credential-file
# emacs credential-file
AWSAccessKeyId= # アクセスキー IDを入力
AWSSecretKey= # シークレットアクセスキーを入力



環境変数の設定
証明書をダウンロードし/home/username/aws_config/以下に証明書を設置する
/home/username/aws_config/cert-xxxxx.pem
/home/username/aws_config/pk-xxxxx.pem
# cd
# emacs .bashrc
# Java for AWS
export JAVA_HOME=/usr

# AWS cert
export EC2_PRIVATE_KEY=/home/username/aws_config/pk-xxxxx.pem
export EC2_CERT=/home/username/aws_config/cert-xxxxx.pem

# AWS CREDENTIAL
export AWS_CREDENTIAL_FILE=/usr/local/ec2-api-tools/credential-file

# AWS auto-scaling-api
export AWS_AUTO_SCALING_HOME=/usr/local/ec2-api-tools/AutoScaling-1.0.39.0
export AWS_AUTO_SCALING_URL=https://autoscaling.us-east-1.amazonaws.com
export PATH=$PATH:$AWS_AUTO_SCALING_HOME/bin

# AWS CloudWatch
export AWS_CLOUDWATCH_HOME=/usr/local/ec2-api-tools/CloudWatch-1.0.12.1
export PATH=$PATH:$AWS_CLOUDWATCH_HOME/bin
export EC2_REGION=ap-northeast-1 # Tokyo = ap-northeast-1
# bash



コマンドの一覧を確認
# as-cmd
Command Name                                Description                                            
------------                                -----------                                            
as-create-auto-scaling-group                Create a new auto scaling group                        
as-create-launch-config                     Create a new launch config                             
as-create-or-update-trigger                 Creates a new trigger or updates an existing trigger.  
as-delete-auto-scaling-group                Delete the specified auto scaling group                
as-delete-launch-config                     Delete the specified launch configuration              
as-delete-policy                            Delete the specified policy                            
as-delete-scheduled-action                  Delete the specified scheduled action                  
as-delete-trigger                           Delete a  trigger.                                     
as-describe-adjustment-types                Describes all policy adjustment types.                 
as-describe-auto-scaling-groups             Describes the specified auto scaling group(s)          
as-describe-auto-scaling-instances          Describes the specified auto scaling instance(s)       
as-describe-launch-configs                  Describe the specified launch configurations           
as-describe-metric-collection-types         Describes all metric colle... metric granularity types.
as-describe-policies                        Describes the specified policy/policies                
as-describe-process-types                   Describes all scaling process types.                   
as-describe-scaling-activities              Describe a set of activiti...ties belonging to a group.
as-describe-scheduled-actions               Describes the specified scheduled action(s)            
as-describe-triggers                        Describes a trigger including its internal state.      
as-disable-metrics-collection               Disable collection of AutoScaling group metrics        
as-enable-metrics-collection                Enable collection of AutoScaling group metrics         
as-execute-policy                           Executes the specified policy                          
as-put-scaling-policy                       Creates or updates a scaling policy                    
as-put-scheduled-update-group-action        Creates or updates a scheduled update group action     
as-resume-processes                         Resumes all suspended scal... given auto scaling group.
as-set-desired-capacity                     Set the desired capacity of the auto scaling group     
as-set-instance-health                      Set the health of the instance                         
as-suspend-processes                        Suspends all scaling proce... given auto scaling group.
as-terminate-instance-in-auto-scaling-group Terminate a given instance.                            
as-update-auto-scaling-group                Update specified auto scaling group                    
help                                        
version                                     Prints the version of the CLI tool and the API.        

    For help on a specific command, type ' --help'
# mon-cmd
Command Name                       Description                                            
------------                       -----------                                            
help                               
mon-delete-alarms                  Delete alarms                                          
mon-describe-alarm-history         Describe alarm history                                 
mon-describe-alarms                Describe alarms fully.                                 
mon-describe-alarms-for-metric     Describe all alarms associated with a single metric    
mon-disable-alarm-actions          Disable all actions for a given alarm                  
mon-enable-alarm-actions           Enable all actions for a given alarm                   
mon-get-stats                      Get metric statistics                                  
mon-list-metrics                   List user's metrics                                    
mon-put-metric-alarm               Create a new alarm or update an existing one           
mon-set-alarm-state                Manually set the state of an alarm                     
version                            Prints the version of the CLI tool and the API.        

    For help on a specific command, type ' --help'



Amazon AutoScalingを設定
ここよりAutoScalingの設定をしていきます


Elastic Load Balancerを設定
http://aws.amazon.com/console/ ↓ Amazon Elastic Compute Cloud (EC2) ↓ Region指定 ↓ Load Balancers ↓ Create Load Balancer Availability Zonesの設定をする 作成したLoad Balancerを選択 ↓ Instance ↓ Availability Zones ↓ 全てのAvailability Zonesをチェック ↓ Save


セキュリティグループを設定
http://aws.amazon.com/console/ ↓ Amazon Elastic Compute Cloud (EC2) ↓ Region指定 ↓ Security Groups ↓ Create Security Group 80番など、必要なポートを開けておく


LaunchConfigの設定
起動するインスタンスに関する設定を行なう Key Pair Nameの確認方法 http://aws.amazon.com/console/ ↓ Amazon Elastic Compute Cloud (EC2) ↓ Key Pairs
as-create-launch-config コンフィグ名 --key [Key Pair Name] --image-id AMIのID --group セキュリティグループ --instance-type インスタンスタイプ --region リュージョン
例)
# as-create-launch-config launch-config --key my-key-pair-name --image-id ami-xxxxxxxx --group quick-start-1 --instance-type m1.xx-large --region ap-northeast-1
OK-Created launch config
LaunchConfig確認
# as-describe-launch-configs
LAUNCH-CONFIG  launch-config  ami-xxxxxxxx  m1.xx-large



Auto Scaling Groupの設定
スケーリングするときの基本設定を行なう
# as-create-auto-scaling-group [グループ名] --launch-configuration [LaunchConfigのコンフィグ名] --availability-zones [ゾーン名] --min-size [最小サイズ] --max-size [最大サイズ] --load-balancers [Elastic Load BalancerのLoad Balancer名]
例)
as-create-auto-scaling-group scaling-group --launch-configuration launch-config --availability-zones ap-northeast-1a,ap-northeast-1b --min-size 1 --max-size 5 --load-balancers MyLoadBalancer
OK-Created AutoScalingGroup
成功するとインスタンスが立ち上がるので確認する ※インスタンスが確認できるようになるまで1~2分ほど必要
# as-describe-auto-scaling-groups [グループ名]
例)
# as-describe-auto-scaling-groups scaling-group
AUTO-SCALING-GROUP  scaling-group  launch-config  ap-northeast-1b,ap-northeast-1a  MyLoadBalancer  1  5  1
INSTANCE  i-9497a395  ap-northeast-1b  Pending  Healthy  launch-config
ステータスがPendingからInServiceになったら、サーバにアクセスして起動を確認 ※InServiceになってからも、アクセスできるまでに1~2分ほど待つ必要がある


Auto Scaling Policyの設定
スケーリングするときの動作を設定する インスタンスを増やすときの設定
# as-put-scaling-policy [ポリシー名] --auto-scaling-group [Auto Scaling Groupのグループ名] --adjustment=[変動するインスタンス数の値、1以上の数] --type [適応ポリシー ExactCapacity, ChangeInCapacity, PercentChangeInCapacity] --cooldown [インスタンス増減後、現状維持をする秒数]
例)
# as-put-scaling-policy instance-policy-add --auto-scaling-group scaling-group --adjustment=1 --type ChangeInCapacity --cooldown 60
arn:aws:autoscaling:ap-northeast-1:111111111111:scalingPolicy:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:autoScalingGroupName/scaling-group:policyName/instance-policy-add
表示された値をMetric Alarmの設定で使用するのでコピーしておく インスタンスを減らすときの設定
# as-put-scaling-policy [ポリシー名] --auto-scaling-group [Auto Scaling Groupのグループ名] --adjustment=[変動するインスタンス数の値、-1以下の数] --type [適応ポリシー ExactCapacity, ChangeInCapacity, PercentChangeInCapacity] --cooldown [インスタンス増減後、現状維持をする秒数]
例)
# as-put-scaling-policy instance-policy-delete --auto-scaling-group scaling-group --adjustment=-1 --type ChangeInCapacity --cooldown 60
arn:aws:autoscaling:ap-northeast-1:111111111111:scalingPolicy:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:autoScalingGroupName/scaling-group:policyName/instance-policy-delete
表示された値をMetric Alarmの設定で使用するのでコピーしておく


Metric Alarmの設定
# mon-put-metric-alarm [アラーム名] \
--comparison-operator [不等号の設定] \
--metric-name [監視項目] \
--namespace "AWS/EC2" \
--period [監視間隔] \
--statistic [測定値の算出方法 SampleCount, Average, Sum, Minimum, Maximum] \
--threshold [監視対象の閾値] \
--evaluation-periods [何回目の閾値オーバーからトリガーが発動するか] \
--dimensions "AutoScalingGroupName=[Auto Scaling Groupのグループ名]" \
--alarm-actions [Auto Scaling Policyの値]
例) インスタンスを増やすときの設定 300秒間の平均CPU使用率が50%より多い場合にインスタンスを増やす
# mon-put-metric-alarm HighCPUAlarm \
--comparison-operator GreaterThanThreshold \
--metric-name CPUUtilization \
--namespace "AWS/EC2" \
--period 300 \
--statistic Average \
--threshold 50 \
--evaluation-periods 1 \
--dimensions "AutoScalingGroupName=scaling-group" \
--alarm-actions arn:aws:autoscaling:ap-northeast-1:111111111111:scalingPolicy:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:autoScalingGroupName/scaling-group:policyName/instance-policy-add
インスタンスを減らすときの設定 300秒間の平均CPU使用率が10%より少ない場合にインスタンスを減らす
# mon-put-metric-alarm LowCPUAlarm \
--comparison-operator LessThanThreshold \
--metric-name CPUUtilization \
--namespace "AWS/EC2" \
--period 300 \
--statistic Average \
--threshold 10 \
--evaluation-periods 1 \
--dimensions "AutoScalingGroupName=scaling-group" \
--alarm-actions arn:aws:autoscaling:ap-northeast-1:111111111111:scalingPolicy:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:autoScalingGroupName/scaling-group:policyName/instance-policy-delete
Metric AlarmはAWSコンソールからも設定できる http://aws.amazon.com/console/ ↓ Amazon CloudWatch ↓ Region指定 ↓ 該当のアラームを選ぶ ↓ Modify ↓ Define Alarm Thresholdの値を編集 ↓ Continue ↓ Continue ↓ Save Alarm


Auto Scaling Policyの確認
# as-describe-policies
戻り値
SCALING-POLICY  [グループ名]  [ポリシー名]     [adjustmentの値]   [適応ポリシー]  [cooldownの値]  「alarm-actionsの値」
ALARM  [アラーム名] [ポリシー名]
例)
# as-describe-policies
SCALING-POLICY  scaling-group  instance-policy-add     1   ChangeInCapacity  60  arn:aws:autoscaling:ap-northeast-1:111111111111:scalingPolicy:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:autoScalingGroupName/scaling-group:policyName/instance-policy-add
ALARM  HighCPUAlarm  instance-policy-add
SCALING-POLICY  scaling-group  instance-policy-delete  -1  ChangeInCapacity  60  arn:aws:autoscaling:ap-northeast-1:111111111111:scalingPolicy:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:autoScalingGroupName/scaling-group:policyName/instance-policy-delete
ALARM  LowCPUAlarm  instance-policy-delete



Metric Alarmの確認
# mon-describe-alarms  
戻り値
[アラーム名] [ステータス] [ARM] [namespace] [監視項目] [監視間隔] [監視対象の閾値] [測定値の算出方法] [不等号の設定] [監視対象の閾値]
例)
# mon-describe-alarms  
HighCPUAlarm  OK     arn:aws:autoscalin...instance-policy-add  AWS/EC2  CPUUtilization  300  Average  1  GreaterThanThreshold  50.0
LowCPUAlarm   ALARM  arn:aws:autoscalin...tance-policy-delete  AWS/EC2  CPUUtilization  300  Average  1  LessThanThreshold     10.0



Auto Scalingに関するプロセスを確認
# as-describe-process-types
PROCESS  AZRebalance
PROCESS  AddToLoadBalancer
PROCESS  AlarmNotification
PROCESS  HealthCheck
PROCESS  Launch
PROCESS  ReplaceUnhealthy
PROCESS  ScheduledActions
PROCESS  Terminate



Auto Scalingの通知設定
Amazon Simple Notification Serviceで通知先を設定する http://aws.amazon.com/console/ ↓ Amazon Simple Notification Service (SNS) ↓ Region指定 ↓ Create New Topic ↓ Topic Nameを指定する ↓ 作成したトピックを選択 ↓ Create New Subscription ↓ ProtocolでEmailを選択、Endpointに通知先のemailアドレスを入力 ↓ 10分後くらいに確認メールが届くので、confirm URLを開いて認証する ↓ Publish Topicからテストメールを送る Topic ARNをコピーしておく 通知タイプの確認 起動・起動エラー・削除・削除エラー・テストの5種類
# as-describe-auto-scaling-notification-types --region ap-northeast-1
NOTIFICATION-TYPE  autoscaling:EC2_INSTANCE_LAUNCH
NOTIFICATION-TYPE  autoscaling:EC2_INSTANCE_LAUNCH_ERROR
NOTIFICATION-TYPE  autoscaling:EC2_INSTANCE_TERMINATE
NOTIFICATION-TYPE  autoscaling:EC2_INSTANCE_TERMINATE_ERROR
NOTIFICATION-TYPE  autoscaling:TEST_NOTIFICATION
通知設定
# as-put-notification-configuration [AutoScalingグループ名] --notification-types [通知タイプ] --topic-arn [Topic ARN] --region [リュージョン]
テストメールを送る
# as-put-notification-configuration scaling-group --notification-types autoscaling:TEST_NOTIFICATION --topic-arn arn:aws:sns:ap-northeast-1:111111111111:notification-user --region ap-northeast-1
OK-Put Notification Configuration
それぞれの通知タイプの設定をする
as-put-notification-configuration scaling-group --topic-arn arn:aws:sns:ap-northeast-1:111111111111:notification-user --notification-types autoscaling:EC2_INSTANCE_LAUNCH,autoscaling:EC2_INSTANCE_LAUNCH_ERROR,autoscaling:EC2_INSTANCE_TERMINATE,autoscaling:EC2_INSTANCE_TERMINATE_ERROR
確認
as-describe-notification-configurations [AutoScalingグループ名] -headers
例)
# as-describe-notification-configurations scaling-group -headers

NOTIFICATION-CONFIG  GROUP-NAME       TOPIC-ARN                                          NOTIFICATION-TYPE-NAME
NOTIFICATION-CONFIG  scaling-group    arn:aws:sns:ap-northeast-1:111111111111:notification-user  autoscaling:EC2_INSTANCE_LAUNCH
NOTIFICATION-CONFIG  scaling-group    arn:aws:sns:ap-northeast-1:111111111111:notification-user  autoscaling:EC2_INSTANCE_LAUNCH_ERROR
NOTIFICATION-CONFIG  scaling-group    arn:aws:sns:ap-northeast-1:111111111111:notification-user  autoscaling:EC2_INSTANCE_TERMINATE
NOTIFICATION-CONFIG  scaling-group    arn:aws:sns:ap-northeast-1:111111111111:notification-user  autoscaling:EC2_INSTANCE_TERMINATE_ERROR
削除方法
# as-delete-notification-configuration [グループ名] --topic-arn [arnの値]
例)
# as-delete-notification-configuration scaling-group --topic-arn arn:aws:sns:ap-northeast-1:111111111111:notification-user
    Are you sure you want to delete this notification configuration? [Ny]Y
OK-Deleted Notification Configuration



CloudWatch Alarmsの設定
※Auto Scalingによるインスタンスの増減結果を通知する前に より詳細な情報を通知できるので、合わせて設定しておく コンソールから設定する場合 http://aws.amazon.com/console/ ↓ Amazon CloudWatch ↓ Region指定 ↓ アラーム指定 ↓ Modify ↓ Continue ↓ Define Your Actionsから通知先を設定 ↓ Continue ↓ Save Alarm


負荷テスト
立ち上がっているサーバにログインしてCPU負荷を掛けてテスト ストレステストツールのインストール
# wget http://weather.ou.edu/~apw/projects/stress/stress-1.0.4.tar.gz
# tar zxf stress-1.0.4.tar.gz 
# cd stress-1.0.4
# ./configure
# make
# make install
360秒間CPUに負荷を掛ける
# stress --cpu 8 --timeout 360s
Auto Scalingで立ち上がっているInstanceを確認
# as-describe-auto-scaling-instances --headers



AutoScalingの設定削除
これよりAutoScalingの設定を解除する説明をします


AutoScalingの状態を確認
# as-describe-auto-scaling-groups [グループ名]
例)
# as-describe-auto-scaling-groups scaling-group
AUTO-SCALING-GROUP  scaling-group  launch-config  ap-northeast-1b,ap-northeast-1a  MyLoadBalancer  1  3  1
INSTANCE  i-xxxxxxxx  ap-northeast-1a  InService  Healthy  launch-config



AutoScalingのプロセスを停止
# as-suspend-processes [グループ名]
例)
# as-suspend-processes scaling-group
OK-Processes Suspended



インスタンス増減の値を0に設定
# as-update-auto-scaling-group [グループ名] --min-size 0 --max-size 0 
例)
# as-update-auto-scaling-group scaling-group --min-size 0 --max-size 0 
OK-Updated AutoScalingGroup



起動中のインスタンスをTerminate
# as-terminate-instance-in-auto-scaling-group [インスタンスID] --decrement-desired-capacity
例)
# as-terminate-instance-in-auto-scaling-group i-xxxxxxxx --decrement-desired-capacity
    Are you sure you want to terminate this instance?  [Ny]Y
INSTANCE  edfc6b26-5dde-4dd2-a515-46ffc84f5437  InProgress  "At 2011-09-14T08:18:15Z a user request update of AutoScalingGroup constraints to min: 0, max: 0, desired: 0 changing the desired capacity from 1 to 0.  At 2011-09-14T08:19:26Z instance i-xxxxxxxx was taken out of service in response to a user request, shrinking the capacity from 1 to 0."



AutoScalingの状態を確認
INSTANCEがTerminatingになっているのを確認、完全に削除されるのを待つ
# as-describe-auto-scaling-groups scaling-group
例)
# as-describe-auto-scaling-groups scaling-group
AUTO-SCALING-GROUP  scaling-group  launch-config  ap-northeast-1b,ap-northeast-1a  MyLoadBalancer  0  0  0
INSTANCE  i-xxxxxxxx ap-northeast-1a  Terminating  Healthy  launch-config
SUSPENDED-PROCESS  AZRebalance                        User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  HealthCheck                        User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  Launch                             User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  ScheduledActions                   User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  ReplaceUnhealthy                   User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  Terminate                          User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  AlarmNotification                  User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  RemoveFromLoadBalancerLowPriority  User suspended at 2011-09-14T08:16:37Z  scaling-group
SUSPENDED-PROCESS  AddToLoadBalancer                  User suspended at 2011-09-14T08:16:37Z  scaling-group



AutoScalingグループを削除
# as-delete-auto-scaling-group [グループ名]
例)
# as-delete-auto-scaling-group scaling-group
    Are you sure you want to delete this AutoScalingGroup? [Ny]Y
OK-Deleted AutoScalingGroup



LaunchConfigを削除
# as-delete-launch-config [コンフィグ名]
例)
# as-delete-launch-config launch-config
    Are you sure you want to delete this launch configuration? [Ny]Y
OK-Deleted launch configuration



再びAutoScalingの状態を確認
# as-describe-auto-scaling-groups [グループ名]
例)
# as-describe-auto-scaling-groups scaling-group
No AutoScalingGroups found

create an Amazon Machine Image (AMI)

※this text from livedoor blog 2011/9/14

Amazon EC2 のインスタンスのAMIイメージを作成します
install JAVA
# yum install java-1.6.0-openjdk

install ec2-api-tools
ec2-ami-tools.zipをダウンロードして解凍
# mkdir /usr/local/ec2-api-tools
# cd /usr/local/ec2-api-tools
# wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
# unzip ec2-api-tools.zip
# wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
# unzip ec2-ami-tools.zip
.bashrcを編集
# cd
# emacs .bashrc
# Java for AWS
export JAVA_HOME=/usr

# AWS ami-tools
export EC2_HOME=/usr/local/ec2-api-tools/ec2-api-tools-1.4.4.2
export EC2_AMITOOL_HOME=/usr/local/ec2-api-tools/ec2-ami-tools-1.4.0.1
export PATH=$PATH:${EC2_AMITOOL_HOME:-EC2_HOME}/bin
# bash

ruby 1.9を使用している場合
String#each を each_line に変更する必要がある
Please specify a value for arch [x86_64]: 
Copying / into the image file /mnt/ami/image...
Excluding: 
         /proc
         /sys
         /dev/pts
         /proc/sys/fs/binfmt_misc
         /dev
         /media
         /mnt
         /proc
         /sys
         /mnt/ami/image
         /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.001476 seconds, 710 MB/s
mke2fs 1.39 (29-May-2006)
/etc/fstab:
ERROR: undefined method `each' for #
上記のように、エラーとなってしまう image.rbを編集して対応する
$ diff -c ec2-ami-tools-1.4.0.1/lib/ec2/platform/linux/image.rb.org ec2-ami-tools-1.4.0.1/lib/ec2/platform/linux/image.rb
*** ec2-ami-tools-1.4.0.1/lib/ec2/platform/linux/image.rb.org   2011-10-19 17:45:16.000000000 +0900
--- ec2-ami-tools-1.4.0.1/lib/ec2/platform/linux/image.rb       2011-10-19 17:45:55.000000000 +0900
***************
*** 276,282 ****
              fstab_content = make_fstab
              File.open( fstab, 'w' ) { |f| f.write( fstab_content ) }
              puts "/etc/fstab:" 
!             fstab_content.each do |s|
                puts "\t #{s}" 
              end
            end
--- 276,282 ----
              fstab_content = make_fstab
              File.open( fstab, 'w' ) { |f| f.write( fstab_content ) }
              puts "/etc/fstab:" 
!             fstab_content.each_line do |s|
                puts "\t #{s}" 
              end
            end

API用の証明書ファイルの設定
証明書をダウンロード https://aws-portal.amazon.com/ ↓ アカウント ↓ セキュリティ証明書 cert-xxxxx.pemとpk-xxxxx.pemを用意 /mnt/以下に証明書を設置
/mnt/pk-xxxxx.pem
/mnt/cert-xxxxx.pem
口座番号の値を確認しておく https://aws-portal.amazon.com/ ↓ アカウント ↓ 口座番号 xxxx-xxxx-xxxx
AMI作成
# ec2-bundle-vol -d /mnt --privatekey /mnt/pk-xxxxx.pem --cert /mnt/cert-xxxxx.pem --user [口座番号] --fstab /etc/fstab

Please specify a value for arch [x86_64]: 
Copying / into the image file /mnt/image...
Excluding: 
         /sys
         /proc
         /dev/pts
         /proc/sys/fs/binfmt_misc
         /dev
         /media
         /mnt
         /proc
         /sys
         /mnt/image
         /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.001659 seconds, 632 MB/s
mke2fs 1.39 (29-May-2006)
/etc/fstab:
         /dev/sda1  /         ext3    defaults        0  0  
         /dev/sdb   /mnt      ext3    defaults        0  0  
         none       /dev/pts  devpts  gid=5,mode=620  0  0  
         none       /dev/shm  tmpfs   defaults        0  0  
         none       /proc     proc    defaults        0  0  
         none       /sys      sysfs   defaults        0  0  
Bundling image file...
Splitting /mnt/image.tar.gz.enc...
Created image.part.00
Created image.part.01
Created image.part.02
Created image.part.03
Created image.part.04
Created image.part.05
~~~~~~~
Generating digests for each part...
Digests generated.
Unable to read instance meta-data for ancestor-ami-ids
Unable to read instance meta-data for product-codes
Creating bundle manifest...
ec2-bundle-vol complete.

AMI確認
# cd /mnt
# ls -al

AMIを保存するS3のバケットを作成
http://aws.amazon.com/console/ ↓ Amazon Simple Storage Service (S3) ↓ Create Bucket ↓ バケット名とリュージョンを指定(ここではTokyoを指定する) ↓ Create
AMIをS3へアップロード
https://aws-portal.amazon.com/ アカウント ↓ セキュリティ証明書 ↓ 「アクセスキー ID」と「シークレットアクセスキー」を確認
# ec2-upload-bundle --bucket バケット名 --manifest image.manifest.xml --access-key アクセスキーID --secret-key シークレットアクセスキー

Uploading bundled image parts to the S3 bucket バケット名 ...
Uploaded image.part.00
Uploaded image.part.01
Uploaded image.part.02
Uploaded image.part.03
Uploaded image.part.04
Uploaded image.part.05
~~~~~~~
Uploading manifest ...
Uploaded manifest.
Bundle upload completed.

AMI 登録
# ec2-register --region ap-northeast-1 -K /mnt/pk-xxxxx.pem -C /mnt/cert-xxxxx.pem バケット名/image.manifest.xml
IMAGE   ami-xxxxxxxx
※--regionにS3のリュージョンを指定する Tokyoの場合はap-northeast-1
登録されたAMIを確認
# ec2-describe-images -o self --region ap-northeast-1 -K /mnt/pk-xxxxx.pem -C /mnt/cert-xxxxx.pem
IMAGE   ami-xxxxxxxx    バケット名/image.manifest.xml    111111111111    available       private         x86_64  xxxxxxxxx-22222222     xxx-33333333            instance-store
http://aws.amazon.com/console/ ↓ Amazon Elastic Compute Cloud (EC2) ↓ Region指定 ↓ Launch Instance ↓ My AMIs ↓ Viewing: Privete Images

install Q4M on Fedora release 13

※this text from livedoor blog 2011/7/27

Fedora release 13でMySQL 5.1.56とQ4M 0.9.5をインストールします ライブラリをインストールしてMySQLスタート
yum install gcc-c++
yum -y install gperf
yum -y install readline-devel
yum -y install libtool
yum -y install time
yum -y install auto-buildrequires
yum -y install boost-devel
yum -y install mysql*

/etc/init.d/mysqld start
パスワード設定
/usr/bin/mysqladmin -u root password 'PASSWORD'
/usr/bin/mysqladmin -u root -h HOSTNAME.jp password 'PASSWORD'

mysql -uroot -pPASSWORD
MySQLのrpmとQ4Mをダウンロード
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-community-5.1.56-1.rhel5.src.rpm/from/http://ftp.jaist.ac.jp/pub/mysql/
wget http://q4m.31tools.com/dist/q4m-0.9.5.tar.gz  
tar zxfv q4m-0.9.5.tar.gz  
MySQLのrpmをリビルド ※長時間必要
rpmbuild --recompile --define 'community 1' MySQL-community-5.1.56-1.rhel5.src.rpm
Q4Mのインストール
cd ./q4m-0.9.5
./configure --with-mysql=/root/rpmbuild/BUILD/mysql-5.1.56
make
make install
/usr/bin/install -c support-files/q4m-forward /usr/bin
mysql -u root -pPASSWORD -f mysql < support-files/install.sql
プラグインにQUEUEがある事を確認
/etc/init.d/mysqld restart
mysql -uroot -pPASSWORD
mysql> show plugins;
+------------+--------+----------------+--------------------+---------+
| Name       | Status | Type           | Library            | License |
+------------+--------+----------------+--------------------+---------+
| binlog     | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| partition  | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| CSV        | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| MEMORY     | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| InnoDB     | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| MyISAM     | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL               | GPL     |
| QUEUE      | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL     |
+------------+--------+----------------+--------------------+---------+
8 rows in set (0.00 sec)

install munin-server on CentOS5

※this text from livedoor blog 2011/7/26

CPUやメモリ、ネットワークトラフィック、ミドルウェアの性能状況などをグラフ化し、キャパシティプランニング、システム障害の追求に利用 サーバの情報を取得するmunin-nodeと、HTMLやグラフを作成するmunin-serverとで構成 このエントリーではmunin-serverのセットアップについて書く munin-nodeへ接続確認
telnet XX.XX.XX.XX 4949
Trying XX.XX.XX.XX...
Connected to XX.XX.XX.XX.
Escape character is '^]'.
# munin node at XX.XX.XX.XX
list
open_inodes sendmail_mailtraffic apache_processes if_err_eth0 irqstats entropy sendmail_mailstats processes if_eth0 apache_accesses apache_volume df interrupts netstat swap load sendmail_mailqueue hddtemp_smartctl df_inode cpu open_files ntp_ntp1_sakura_ad_jp iostat forks memory vmstat

# Unknown command. Try list, nodes, config, fetch, version or quit
fetchload
load.value 0.32
.
quit
Connection closed by foreign host.
muninインストール epelレポジトリをインストール
32bit OS
sudo rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

64bit OS
sudo rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
yumでインストール
yum --enablerepo=epel install munin
設定ファイルを編集
emacs /etc/munin/munin.conf

[deliver;server1]
    address XX.XX.XX.XX
    use_node_name yes
[deliver;server2]
    address XX.XX.XX.XX
    use_node_name yes
ログ確認
tail -f /var/log/munin/munin-update.log
tail -f /var/log/munin/munin-graph.log
tail -f /var/log/munin/munin-html.log
Apacheのconfigファイルを設定
vi /etc/httpd/conf.d/munin.conf
<VirtualHost *:80>
  Alias /munin /var/www/html/munin
  <Directory /var/www/html/munin>
    DirectoryIndex index.html
    Order allow,deny
    Allow from all
    
    # BASIC Auth
    AllowOverride AuthConfig
    AuthType Basic
    AuthName Basic
    AuthUserFile /etc/munin/munin-htpasswd
    Require valid-user
</Directory>
</VirtualHost>
.htaccess削除
rm /var/www/html/munin/.htaccess
パスワード設定
/usr/bin/htpasswd -c /etc/munin/munin-htpasswd munin
httpdリスタート
/etc/init.d/httpd configtest
/etc/init.d/httpd graceful
アップデート確認 http://XX.XX.XX.XX/munin/index.html

install munin-node on CentOS5

※this text from livedoor blog 2011/7/26

CPUやメモリ、ネットワークトラフィック、ミドルウェアの性能状況などをグラフ化し、キャパシティプランニング、システム障害の追求に利用 サーバの情報を取得するmunin-nodeと、HTMLやグラフを作成するmunin-serverとで構成 このエントリーではmunin-nodeのセットアップについて書く munin-nodeインストール epelレポジトリをインストール
32bit OS
sudo rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

64bit OS
sudo rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
yumでインストール
yum --enablerepo=epel install munin-node
設定ファイルにホストサーバのIPアドレスを記述する
emacs /etc/munin/munin-node.conf
allow ^XXX\.XXX\.XXX\.XXX$
munin-nodeをスタートする
/etc/init.d/munin-node start
ログ確認
tail -f /var/log/munin/munin-node.log
2011/07/26-10:56:20 Munin::Node::Server (type Net::Server::Fork) starting! pid(17234)
Using default listen value of 128
Binding to TCP port 4949 on host *
Setting gid to "0 0"
アクセス数、プロセス数、転送量を記録
ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/
ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/
ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/
Apacheの情報を取得する為にmod_statusセットアップ
emacs /etc/httpd/conf.d/status.conf

<IfModule mod_status.c>
    ExtendedStatus On
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</IfModule>

/etc/init.d/httpd graceful
server-status確認
wget -q -O - http://127.0.0.1/server-status/?auto
munin-nodeリスタート
/etc/init.d/munin-node restart
httpアクセスのレスポンスタイムを記録 参考) http://exchange.munin-monitoring.org/plugins/http_responsetime/details ダウンロード
cd /usr/share/munin/plugins/
wget -O http_loadtime http://exchange.munin-monitoring.org/plugins/http_responsetime/version/1/download
chmod 775 http_loadtime
チェックするURLを編集
emacs http_loadtime
target=${target:-"http://localhost/"}
動作テスト
./http_loadtime
シンボリックリンクを張る
ln -s /usr/share/munin/plugins/http_loadtime /etc/munin/plugins/http_loadtime
munin-nodeリスタート
/etc/init.d/munin-node restart
更なる情報を記録 コネクション数、queries、slow queries、threads、throughput 設定ファイルにMySQLのログイン情報を記述する
emacs /etc/munin/plugin-conf.d/munin-node
[mysql*]
env.mysqlopts -u USER --password=PASS
munin-nodeリスタート
/etc/init.d/munin-node restart
シンボリックリンクを張る
ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes
ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads
それぞれ動作テストをする
cd /etc/munin/plugins
/usr/sbin/munin-run mysql_bytes
/usr/sbin/munin-run mysql_queries
/usr/sbin/munin-run mysql_slowqueries
/usr/sbin/munin-run mysql_threads
munin-nodeリスタート
/etc/init.d/munin-node restart
MySQLの情報を記録 MySQL コマンド、InnoDB Buffer Pool、InnoDB IO、InnoDB Log、InnoDB Transactions、Select types、Table locks ライブラリをインストールする
yum install --enablerepo=epel perl-IPC-ShareLite perl-Cache-Cache perl-Cache perl-DBD-MySQL
設定ファイルにMySQLのログイン情報を記述する
emacs /etc/munin/plugin-conf.d/munin-node
[mysql*]
env.mysqlconnection DBI:mysql:mysql;host=localhost;port=3306
env.mysqluser USER
env.mysqlpassword PASS
munin-nodeリスタート
/etc/init.d/munin-node restart
シンボリックリンクを張る
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_commands
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_bpool
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_io
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_log
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_innodb_tnx
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_select_types
ln -s /usr/share/munin/plugins/mysql_ /etc/munin/plugins/mysql_table_locks
それぞれ動作テストをする
cd /etc/munin/plugins
/usr/sbin/munin-run mysql_commands
/usr/sbin/munin-run mysql_innodb_bpool
/usr/sbin/munin-run mysql_innodb_io
/usr/sbin/munin-run mysql_innodb_log
/usr/sbin/munin-run mysql_innodb_tnx
/usr/sbin/munin-run mysql_select_types
/usr/sbin/munin-run mysql_table_locks
munin-nodeリスタート
/etc/init.d/munin-node restart