Wednesday, May 9, 2012

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

MySQL SSL replication on CentOS5

※this text from livedoor blog 2011/7/25

SSHトンネリングを利用してマスターとスレーブ間をSSLで接続する
バイナリログが転送時に壊れるケースを防ぐ
参考) http://nippondanji.blogspot.com/2009/03/mysql10.html

slave
sudo su mysql
公開鍵作成
ssh-keygen -t rsa
cd /var/lib/mysql/
cat .ssh/id_rsa.pub
XXXXXXXXXXXXXXXXXXXXXXXXXXX

master
slaveのid_rsa.pubをauthorized_keysに書き込み
sudo su mysql
cd /var/lib/mysql/
mkdir -p .ssh
emacs .ssh/authorized_keys
XXXXXXXXXXXXXXXXXXXXXXXXXXX
chmod -R 700 .ssh
slaveアカウントの作成
/usr/bin/mysql -uUSER -pPASS
GRANT REPLICATION SLAVE ON *.* TO slave@XX.XX.XX.XX IDENTIFIED BY 'PASS';
FLUSH PRIVILEGES;
mysqldumpでバックアップデータを作成
/usr/bin/mysqldump -uUSER -pPASS --single-transaction --master-data=2 --all-databases | gzip >  20110725.sql.gz
mysqldumpバックアップデータをslaveへ転送
scp -l 8000 20110725.sql.gz slave@XX.XX.XX.XX:/home/slave/
※上記の例ではscp -l 8000として1000KB/秒で転送している

slave
server-id設定
masterと違うidを設定する
/usr/bin/mysql -uUSER -pPASS
mysql> SET GLOBAL server_id = 101;
mysql> SHOW GLOBAL VARIABLES like '%server_id%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 101   |
+---------------+-------+
1 row in set (0.01 sec)
master(IP XXX.XXX.XXX.XXX)のポート3306をスレーブの3307にマッピング
ssh -f XXX.XXX.XXX.XXX -L 3307:localhost:3306 -N -4
master MySQLへの接続確認
/usr/bin/mysql -uUSER -pPASS -h127.0.0.1 -P3307
mysqldump データインポート
gunzip /home/slave/20110725.sql.gz
/usr/bin/mysql -uUSER -pPASS < /home/slave/20110725.sql
MASTER_LOG_FILEと、MASTER_LOG_POSをチェック
$ head -100 20110725.sql | grep CHANGE
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000024', MASTER_LOG_POS=968653647;
slaveのレプリケーション設定とslave開始
/usr/bin/mysql -uUSER -pPASS
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
           MASTER_HOST='127.0.0.1',
           MASTER_PORT=3307,
           MASTER_USER='USER',
           MASTER_PASSWORD='PASS',
           MASTER_LOG_FILE='mysql-bin.000024',
           MASTER_LOG_POS=968653647,
           MASTER_CONNECT_RETRY=10;

mysql> START SLAVE;

master
Position確認
mysql> SHOW MASTER STATUS\G

slave
Position確認
mysql> SHOW SLAVE STATUS\G

master & slave
110725 14:05:08 [ERROR] Invalid (old?) table or database name '.emacs.d'
110725 14:05:08 [ERROR] Invalid (old?) table or database name '.ssh'
MySQLのエラーログにデータディレクトリでは無いディレクトリのエラーが出力されるので、ファイルを退避しておく
cp -r /var/lib/mysql/.ssh /XXX/XXX
cp -r /var/lib/mysql/.emacs /XXX/XXX
rm -r /var/lib/mysql/.ssh
rm -r /var/lib/mysql/.emacs

install innobackupex on CentOS5

※this text from livedoor blog 2011/7/19

下記の記事を参照して欲しい
XtraBackupを使ってMySQLをバックアップしよう [2012/2/1]


innobackupexを使ってMySQLのデータをバックアップする

参考 http://www.percona.com/docs/wiki/percona-xtrabackup:start http://dbspelunker.blogspot.com/2010/11/xtrabackupmanual.html インストール my.cnfの設定の [mysqld]以下にdatadirの設定を記述 ※innobackupexが/etc/my.cnfからdatadirの値を使うため
# emacs /etc/my.cnf
datadir=/var/lib/mysql/
GnuPGが必須になるのでインストールする
# yum install gpg
Yumレポジトリをインストールする
32bit OS
# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.i386.rpm
64bit OS
# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
yum listに入っているかチェック
# yum list | grep xtrabackup
holland-xtrabackup.noarch                  1.0.6-3.el5                 epel     
xtrabackup.i386                            1.6-245.rhel5               percona  
xtrabackup-debuginfo.i386                  1.6-245.rhel5               percona  
インストール
# yum install xtrabackup
インストール場所のチェック
# which xtrabackup
# which innobackupex
バックアップ バックアップディレクトリ作成
# mkdir -p /mysqlbackup/xtrabackup/
バックアップ実行
# /usr/bin/innobackupex --user UUUUUUU --password PPPPPPP --slave-info /mysqlbackup/xtrabackup/
.............
.............
>> log scanned up to (542812997)
xtrabackup: Stopping log copying thread.
xtrabackup: Transaction log of lsn (542812997) to (542812997) was copied.
110719 18:25:44  innobackupex: All tables unlocked
110719 18:25:44  innobackupex: Connection to database server closed

innobackupex: Backup created in directory '/mysqlbackup/xtrabackup/2011-07-19_18-25-17'
innobackupex: MySQL binlog position: filename 'mysql-bin.000012', position 599281561            
innobackupex: MySQL slave binlog position: master host '', filename '', position 
110719 18:25:44  innobackupex: completed OK!
→/mysqlbackup/xtrabackup/2011-07-19_18-25-17以下にバックアップファイルが配置された ※リストアの際に/etc/my.cnfのデータファイルに関する設定を合わせる必要があるため/etc/my.cnfもバックアップを取ると良い 但し、リストアする時にそのままデータディレクトリにファイルが設置されて/var/lib/mysql/my.cnfが有効にならない様に my.cnf.org の様にリネームしておく ※バックアップファイルは圧縮して別サーバにコピーをしておく WAL(Write Ahead Log)を適用する
# /usr/bin/innobackupex --user UUUUUUU --password PPPPPPP --apply-log /mysqlbackup/xtrabackup/2011-07-19_18-25-17
.............
.............
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
110719 18:32:40  InnoDB: Starting shutdown...
110719 18:32:40  InnoDB: Shutdown completed; log sequence number 542814220
110719 18:32:40  innobackupex: completed OK!
リストア MySQLをストップし、既存のデータディレクトリを移動する
# /etc/init.d/mysqld stop
# mv /var/lib/mysql /var/lib/mysql.bak
# mkdir /var/lib/mysql
リストア実行
# /usr/bin/innobackupex --copy-back /mysqlbackup/xtrabackup/2011-07-19_18-25-17
ディレクトリの権限を変更して、MySQLをスタートする
# chown -R mysql:mysql /var/lib/mysql
# /etc/init.d/mysqld start
起動ログの確認をする
# tail -f /var/log/mysqld.log
もしくは
# tail -f /var/lib/mysql/****.err
※ib_logfile0のサイズによるエラーが出たときは、my.cnfのログデータに関する記述を修正する
InnoDB: Error: log file ./ib_logfile0 is of different size 0 134217728 bytes
InnoDB: than specified in the .cnf file 0 126877696 bytes!
110720 13:48:47 [ERROR] Plugin 'InnoDB' init function returned error.
110720 13:48:47 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
110720 13:48:47 [ERROR] Unknown/unsupported storage engine: InnoDB
110720 13:48:47 [ERROR] Aborting
.............
.............

# emacs /etc/my.cnf
innodb_log_file_size = XXX M
※MySQLのバージョンを上げた時にはmysql_upgradeを実行する
# /usr/bin/mysql_upgrade -uUUUUUUU -pPPPPPPP

install memcached on CentOS5



※this text from livedoor blog 2010/1/4<br />
<br />


RPMforgeレポジトリをインストール
i386の場合
$ sudo rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

x86_64の場合
$ sudo rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

RPMforgeレポジトリを有効にする
$ emacs  /etc/yum.repos.d/rpmforge.repo
enabled = 1

memcachedをインストール
$ sudo yum install memcached

configファイルを編集
$ emacs  /etc/sysconfig/memcached
PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"

memcachedをスタート
$ sudo /etc/init.d/memcached start

接続テスト
$ telnet localhost 11211
telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
stats
STAT pid 15033
STAT uptime 5
STAT time 1262583936
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.000000
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 5
STAT total_connections 6
STAT connection_structures 6
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT evictions 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT threads 4
END
quit
Connection closed by foreign host.

install MeCab on CentOS5

※this text from livedoor blog 2009/12/3

形態素解析エンジンのMeCabをインストールする

mecabをインストール
$ wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.98.tar.gz
$ tar zxvf mecab-0.98.tar.gz
$ cd mecab-0.98
$ ./configure --with-charset=utf8
$ make
$ sudo make install


mecabの辞書をインストール
$ wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8 --with-mecab-config=/usr/local/bin/mecab-config
$ make
$ sudo make install


テストする
$ mecab
すもももももももものうち
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

install mod_evasive on CentOS5

※this text from livedoor blog 2009/12/2

DoS攻撃の対策にApacheモジュールmod_evasiveをインストールする

コンパイルに必要なhttpd-develをyumでインストール
$ sudo yum -y install httpd-devel

mod_evasiveをダウンロードしてインストール
$ wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
$ gtar xvzf mod_evasive_1.10.1.tar.gz
$ cd mod_evasive
$ sudo /usr/sbin/apxs -i -a -c mod_evasive20.c


Apacheのconfigファイルに設定を記述
テストスクリプトを動かす為、ホワイトリストから127.0.0.1を外しておく
$ sudo emacs /etc/httpd/conf.d/evasive.conf
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
#DOSWhitelist 127.0.0.1 192.168.1.*
DOSEmailNotify you@yourhost.com
</IfModule>


Apacheをリスタートする
$ sudo /etc/init.d/httpd restart

テストスクリプトが有るので叩いてみる
このテストスクリプトは100回、127.0.0.1:80へtcpで”GET /?$_ HTTP/1.0\n\n”ヘッダを付けてアクセスする
途中から『HTTP/1.1 403 Forbidden』が出ればOK
$ chmod 755 test.pl
$ ./test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden


ログファイルが/tmp/以下に作成されるので確認
$ cd /tmp/
$ ls -al
-rw-r--r--  1 apache apache    6 Dec  2 16:13 dos-127.0.0.1



insatall munin on CentOS5

※this text from livedoor blog 2009/11/28


Apacheでmuninを使う

最新の epel-release-?-?.noarch.rpm ファイルをチェック
http://download.fedora.redhat.com/pub/epel/5/i386/

EPELレポジトリをインストール
i386の場合
$ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
$ sudo rpm -Uvh epel-release-5-3.noarch.rpm

x86_64の場合
$ wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
$ sudo epel-release-5-3.noarch.rpm

$ sudo emacs /etc/yum.repos.d/epel.repo
enabled=1

$ sudo yum --enablerepo=epel install munin-node
$ sudo yum --enablerepo=epel install munin

Apacheのpluginを使う為にシンボリックリンクを張る
$ sudo ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
$ sudo ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
$ sudo ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume

動作チェック
$ sudo -u munin /usr/bin/munin-cron

munin-nodeをスタート
$ sudo /etc/init.d/munin-node start

デフォルトで設定されているBASIC認証を削除
$ sudo rm /var/www/html/munin/.htaccess

Apacheのconfigファイルを編集
$ sudo emacs /etc/httpd/conf.d/munin.conf
<VirtualHost *:80>
  Alias /munin /var/www/html/munin
  <Directory /var/www/html/munin>
    DirectoryIndex index.html
    Order deny,allow
    Deny from all
    Allow from ***.***.***.***
</Directory>
</VirtualHost>

<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>


Apacheをリスタート
$ sudo /etc/init.d/httpd restart


install mod_rpaf on CentOS5

※this text from livedoor blog 2009/11/27

リバースプロキシサーバの配下にあるバックエンドのApacheでクライアントのIPアドレスが欲しい時にはmod_rpaf を有効にする

httpd-develをyumでインストール
$ yum -y install httpd-devel

mod_rpafの最新版をダウンロード
$ wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
$ tar zxpf mod_rpaf-0.6.tar.gz
$ cd mod_rpaf-0.6


MakefileのAPXS2にapxsのパスを記述
モジュールをapxsを使って追加インストールする
$ emacs Makefile
APXS2=/usr/sbin/apxs

$ make rpaf-2.0
$ sudo make install-2.0


Apacheのconfig fileにmod_rpafの設定を記述
RPAFproxy_ipsにはリバースプロキシサーバのIPを記述
$ sudo emacs /etc/httpd/conf.d/your_virtualhost.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1


Apacheをリスタートして設定を有効にする
$ sudo /etc/init.d/httpd restart


install cronolog on CentOS5 by yum

※this text from livedoor blog 2009/11/25

Apacheのログローテートに便利なcronologをyumでインストール

RPMforgeレポジトリをインストール
i386の場合
$ sudo rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

x86_64の場合
$ sudo rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

cronologをインストール
$ sudo yum install cronolog

ApacheのconfigファイルのErrorLogとCustomLogの所にcronologを仕込む
$ sudo emacs /etc/httpd/conf.d/your_virtualhost.conf
ErrorLog  "|/usr/sbin/cronolog /var/log/httpd/%Y%m/%d/www_error_log"
CustomLog "|/usr/sbin/cronolog /var/log/httpd/%Y%m/%d/www_access_log" combined

時計あわせ Amazon EC2 CentOS5

※this text from livedoor blog 2009/11/21

AmazonEC2などはアメリカ時間なので日本時間にしておく

$ sudo -u root
# sudo rm -f /etc/localtime
# cp -p /usr/share/zoneinfo/Japan /etc/localtime
# date
Sat Nov 21 14:56:14 JST 2009


ntpdateで毎日時計あわせ

# export EDITOR=emacs
# crontab -e
0  0 * * * /usr/sbin/ntpdate clock.nc.fukuoka-u.ac.jp


サーバを再起動

$ sudo reboot

Install keychain on CentOS5

※this text from livedoor blog 2009/11/21

Host 1からHost 2へログインするように設定


At the Host 1


ssh-keygenで鍵を作り、メモ

$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub
ssh-rsa
AAAAB********************************************************

yumでkeychainをインストール

$ sudo yum -y install keychain
$ keychain

ログイン時にkeychainの設定が有効になるよう、.bashrcに記述を追記

$ emacs .bashrc
/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/host1.domain-sh


At the Host 2

Host 1で作成したid_rsa.pubの鍵を置く

$ mkdir .ssh
$ emacs
.ssh/authorized_keys
ssh-dss AAAAB********************************************************

$ chmod 700 .ssh
$ chmod 700 .ssh/authorized_keys


At the Host 1

ログインしてみる

$ ssh user@host2

install ircd on CentOS5 by yum



※this text from livedoor blog 2009/11/13




CentOSにIRCをyumでインストールする


最新の epel-release-?-?.noarch.rpm ファイルをチェック
http://download.fedora.redhat.com/pub/epel/5/i386/

EPELレポジトリをインストール
i386の場合
$ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
$ sudo rpm -Uvh epel-release-5-3.noarch.rpm

x86_64の場合
$ wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
$ sudo  epel-release-5-3.noarch.rpm

yumでircd-hybridをインストール
$ sudo yum install ircd-hybrid
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.iij.ad.jp
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package ircd-hybrid.i386 0:7.2.3-5.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================================
 Package                        Arch                    Version                        Repository               Size
=====================================================================================================================
Installing:
 ircd-hybrid                    i386                    7.2.3-5.el5                    epel                    618 k

Transaction Summary
=====================================================================================================================
Install      1 Package(s)      
Update       0 Package(s)      
Remove       0 Package(s)      

Total download size: 618 k
Is this ok [y/N]: y
Downloading Packages:
ircd-hybrid-7.2.3-5.el5.i386.rpm                                                              | 618 kB     00:00  
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6
epel/gpgkey                                                                                   | 1.7 kB     00:00  
Importing GPG key 0x217521F6 "Fedora EPEL <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : ircd-hybrid                                                                                   1/1

Installed:
  ircd-hybrid.i386 0:7.2.3-5.el5                                                                                  

Complete!

simple.confをコピー
$ sudo cp /usr/share/doc/ircd-hybrid-7.2.3/simple.conf /etc/ircd/ircd.conf

ircd.confを編集する
$ sudo emacs /etc/ircd/ircd.conf
sidの値を変更する、値は「半角大文字の英字か数字」
例)1ABなど

serverinfo {
        name = "irc.example.com";
        sid = "_CHANGE_ME_";
        description = "Test IRC Server";
        hub = no;
};



serverinfo {
        name = "irc.example.com";
        sid = 1AB;
        description = "Test IRC Server";
        hub = no;
};

パスワードを設定する

auth {
        user = "*@*";
        class = "users";
};



auth {
        user = "*@*";
        class = "users";
        password = "thisispassword";
};

ircdをスタートする
$ sudo /etc/init.d/ircd start
Starting ircd: ircd: version hybrid-7.2.3
ircd: pid 22427
ircd: running in background mode from /usr/lib/ircd
                                                           [  OK  ]

ログを確認する
$ sudo tail -f /var/log/ircd/ircd.log

gem install mysql

※this text from livedoor blog 2009/11/4
最近(2012/5)はmysql2を使いますね

gemでmysqlのライブラリをインストール

オプション無しだとエラーとなる
$ sudo gem install mysql
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/usr/bin/ruby
        --with-mysql-config
        --without-mysql-config
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-mlib
        --without-mlib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-zlib
        --without-zlib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-socketlib
        --without-socketlib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-nsllib
        --without-nsllib
        --with-mysqlclientlib
        --without-mysqlclientlib


Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out


オプションを付けてインストール
riドキュメントとrdocドキュメントの生成を省いて(これを省くとインストール時間が早い)、mysql-configから設定を読み込む
$ sudo gem install mysql --no-rdoc --no-ri -- --with-mysql-config
Building native extensions.  This could take a while...
Successfully installed mysql-2.7
1 gem installed


irbで確認
$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'mysql'
=> true

install Passenger for nginx

※this text from livedoor blog 2009/11/2

nginx + Passengerを動かします
Apache + Passengerよりも静的ファイルの配信が良い感じになる筈
但し、Passengerが早くなったりはしない様だ
参考→http://akitaonrails.com/2009/04/16/just-released-phusion-passenger-support-for-nginx

nginxのインストールは別記事を参照→

必要なライブラリをインストール
$ sudo yum install gcc-c++ httpd-devel httpd-devel

Passengerをインストール
$ sudo gem install passenger

Nginxモジュールのビルドとインストール
$ sudo passenger-install-nginx-module
バイナリが/opt/nginx/sbin/nginxに
configファイルが/opt/nginx/conf/nginx.confにできる

configファイルを編集
serverセクションのrootを編集して、passenger_enabled on;を追加
$ sudo emacs /opt/nginx/conf/nginx.conf
    server {

        listen       80;
        server_name  localhost;
                                    
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /var/www/sample/public;
            index  index.html index.htm;
            passenger_enabled on;
        }



起動スクリプトを編集
$ sudo emacs /etc/init.d/nginx
line 22
nginx="/opt/nginx/sbin/nginx"
line 25
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
line 27
#[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

nginxをリスタート
$ sudo /etc/init.d/nginx restart

ブラウザで確認
http://www.yourhost.com/samples/

install nginx on CentOS5 by yum

※this text from livedoor blog 2009/11/2

nginxをyumでインストールします

Apacheなどで80番ポートが使われているか確認、使われていたらストップしておく
$ sudo /usr/sbin/lsof  -i | grep http
httpd     3376   root    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3376   root    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3388 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3388 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3389 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3389 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3390 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3390 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3391 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3391 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3392 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3392 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3393 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3393 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3394 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3394 apache    6u  IPv6  13822       TCP *:https (LISTEN)
httpd     3395 apache    4u  IPv6  13817       TCP *:http (LISTEN)
httpd     3395 apache    6u  IPv6  13822       TCP *:https (LISTEN)
$ sudo /etc/init.d/httpd stop
httpd を停止中:                                            [  OK  ]


EPELレポジトリをインストール
i386の場合
$ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
$ sudo rpm -Uvh epel-release-5-3.noarch.rpm

x86_64の場合
$ wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
$ sudo  epel-release-5-3.noarch.rpm

yumでnginxをインストール
$ sudo yum install nginx
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.jaist.ac.jp
 * base: ftp.jaist.ac.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * rpmforge: fr2.rpmfind.net
 * updates: ftp.jaist.ac.jp
epel                                                                                              | 3.4 kB     00:00    
epel/primary_db                                                                                   | 2.2 MB     00:00    
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package nginx.i386 0:0.6.39-1.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================================================
 Package                    Arch                      Version                            Repository                 Size
=========================================================================================================================
Installing:
 nginx                      i386                      0.6.39-1.el5                       epel                      318 k

Transaction Summary
=========================================================================================================================
Install      1 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        

Total download size: 318 k
Is this ok [y/N]: y
Downloading Packages:
nginx-0.6.39-1.el5.i386.rpm                                                                       | 318 kB     00:00    
警告: rpmts_HdrFromFdno: ヘッダ V3 DSA signature: NOKEY, key ID 217521f6
epel/gpgkey                                                                                       | 1.7 kB     00:00    
Importing GPG key 0x217521F6 "Fedora EPEL <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : nginx                                                                                             1/1

Installed:
  nginx.i386 0:0.6.39-1.el5                                                                                             

Complete!

nginxを起動する
$ sudo /etc/init.d/nginx start
nginx を起動中:                                            [  OK  ]


ブラウザで確認
http://192.168.197.1/

make Sample Rails Application

※this text from livedoor blog 2009/10/30

Railsのサンプルアプリを作る

MySQLを使うのでアダプタをインストール
$ sudo gem install mysql

アプリケーションのスケルトンを作成
$ cd /var/www
$ sudo rails -d mysql sample
$ cd sample/


productionの項目を設定
$ sudo emacs config/database.yml
production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: sample_production
  pool: 5
  username: root
  password:
  socket: /var/lib/mysql/mysql.sock


rakeコマンドでデータベースを構築
$ sudo rake db:create:all
(in /var/www/sample)


データベースが構築されている事を確認
$ /usr/bin/mysql -uroot -p******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.1.40-community MySQL Community Server (GPL)

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

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| sample_development |
| sample_production  |
| sample_test        |
| test               |
+--------------------+
6 rows in set (0.03 sec)

mysql> use sample_production;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> Bye


generateスクリプトでscaffoldを指定して実行
$ sudo ruby script/generate scaffold Sample title:string body:text

マイグレーションファイルの存在を確認
$ cat db/migrate/20091029200846_create_samples.rb
class CreateSamples < ActiveRecord::Migration
  def self.up
    create_table :samples do |t|
      t.string :title
      t.text :body

      t.timestamps
    end
  end

  def self.down
    drop_table :samples
  end
end


rakeコマンドでテーブルを生成
$ sudo rake db:migrate RAILS_ENV=production
(in /var/www/sample)
==  CreateSamples: migrating ==================================================
-- create_table(:samples)
   -> 0.0146s
==  CreateSamples: migrated (0.0151s) =========================================


テーブルが構築されている事を確認
$ /usr/bin/mysql -uroot -p******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.1.40-community MySQL Community Server (GPL)

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

mysql> use sample_production;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------------------+
| Tables_in_sample_production |
+-----------------------------+
| samples                     |
| schema_migrations           |
+-----------------------------+
2 rows in set (0.00 sec)

mysql> desc samples;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255) | YES  |     | NULL    |                |
| body       | text         | YES  |     | NULL    |                |
| created_at | datetime     | YES  |     | NULL    |                |
| updated_at | datetime     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> Bye


Apacheのconfigファイルを編集
$ sudo emacs /etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5
PassengerRuby /usr/bin/ruby

<VirtualHost *:80>
     ServerName www.yourhost.com
     DocumentRoot /var/www/sample/public
</VirtualHost>


httpdのリスタート
$ sudo /etc/init.d/httpd restart

サンプルアプリの画面がブラウザで見れるかチェック
http://www.yourhost.com/samples/




development環境を構築する

developmentの項目を設定
$ sudo emacs config/database.yml
development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: sample_development
  pool: 5
  username: root
  password:
  socket: /var/lib/mysql/mysql.sock


rakeコマンドでテーブルを生成
$ sudo rake db:migrate
(in /var/www/sample)
==  CreateSamples: migrating ==================================================
-- create_table(:samples)
   -> 0.0055s
==  CreateSamples: migrated (0.0061s) =========================================


Apacheのconfigファイルを編集、RailsEnv developmentを追加
$ sudo emacs /etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.5
PassengerRuby /usr/bin/ruby

<VirtualHost *:80>
     ServerName vmware
     DocumentRoot /var/www/sample/public
     RailsEnv development
</VirtualHost>


httpdのリスタート
$ sudo /etc/init.d/httpd restart

ウェルカム画面をチェック
http://www.yourhost.com/

About your application’s environmentをクリック
Environmentがdevelopmentになっている事を確認
Ruby version    1.8.7 (i686-linux)
RubyGems version    1.3.5
Rack version    1.0
Rails version    2.3.4
Active Record version    2.3.4
Active Resource version    2.3.4
Action Mailer version    2.3.4
Active Support version    2.3.4
Application root    /var/www/sample
Environment    development
Database adapter    mysql
Database schema version    20091029213630


サンプルアプリの画面がブラウザで見れるかチェック
http://www.yourhost.com/samples/