2011年9月30日金曜日

"SUZ-LAB謹製 CentOS AMI"に"s3fs-cloudpack"をインストール

スズキです。

"SUZ-LAB謹製 CentOS AMI"に下記で紹介した"s3fs-cloudpack"をインストールしてみました。
S3ってなんじゃ?(s3fs-c編)
インストールしたCentOSのバージョンは6.0です。

といっても、ほぼ以前下記で紹介した通りです。
"CentOS 5.6"に"fuse-2.8.5"と"s3fs-1.40"のインストール

まずは必要なパッケージのインストールです。

# yum -y install gcc-c++
# yum -y install pkgconfig
# yum -y install make
# yum -y install curl-devel
# yum -y install libxml2-devel
# yum -y install openssl-devel

次に"fuse"のインストールです。

# curl -OL http://sourceforge.net/projects/fuse/files/fuse-2.X/2.8.6/fuse-2.8.6.tar.gz
# cd fuse-2.8.6
# tar xvzf fuse-2.8.6.tar.gz
# ./configure
# make
# make install

そして"s3fs-cloudpack"をインストールします。

# curl -OL https://github.com/memorycraft/s3fs-cloudpack/tarball/master
# tar xvzf master
# cd memorycraft-s3fs-cloudpack-a5e4da3/
# chmod 755 configure
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./configure
# make
# make install

最後に"ldconfig"です。

# cat /etc/ld.so.conf
/usr/local/lib
include ld.so.conf.d/*.conf
# ldconfig

これも、次の"SUZ-LAB謹製 CentOS AMI"で組み込もう!
--------
http://www.suz-lab.com

CentOS-6.0 Continuous Release ( CR ) Repository

スズキです。

これは、CentOSの次期バージョン(6.1)のアップデートパッケージを、
現在のバージョン(6.0)で利用するためのリポジトリです。
セキュリティやバグフィックのアップデートパッケージもあるので、
導入が強く推奨されています。

導入は下記のように行います。

# yum info centos-release-cr
...
Available Packages
Name       : centos-release-cr
Arch       : i686
Epoch      : 10
Version    : 6
Release    : 0.el6.centos
Size       : 3.9 k
Repo       : extras
Summary    : CentOS continuous release configs
URL        : http://wiki.centos.org/AdditionalResources/Repositories/CR
License    : GPL
Description: CentOS continuous release configs

# yum install -y centos-release-cr

すると下記のようなリポジトリが追加されます。

# cat /etc/yum.repos.d/CentOS-CR.repo 
# CentOS-CR.repo
#
# The continuous release  ( CR ) repository contains rpms from the
# next point release of CentOS, which isnt itself released as yet.
#
# Look at http://wiki.centos.org/AdditionalResources/Repositories/CR
# for more details about how this repository works and what users 
# should expect to see included / excluded

[cr]
name=CentOS-$releasever - CR
baseurl=http://mirror.centos.org/centos/$releasever/cr/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

そして下記のようにアップデートすると、実際にCRのパッケージでアップデートされます。

# yum update

次の"SUZ-LAB謹製 CentOS AMI"で組み込もう!
--------
http://www.suz-lab.com

2011年9月29日木曜日

BIND to Amazon Route 53 Conversion Tool

スズキです。

今さらですが、下記を試してみました。
BIND to Amazon Route 53 Conversion Tool

まずはPerlモジュールの準備です。(CentOS 6.0)

# yum -y install perl-CPAN
# cpan -i Net::DNS
# cpan -fi Net::DNS::ZoneFile
※Net::DNS::ZoneFileは強制インストールしています。

そして、実際にダウンロードして実行できるようにします。

# curl -OL http://awsmedia.s3.amazonaws.com/catalog/attachments/bindtoroute53.pl
# chmod 755 bindtoroute53.pl

変換対象のゾーンファイルは下記とします。

# cat suz-lab.com.zone 
$TTL  3600
@   IN  SOA    ns.suz-lab.com.  postmaster.suz-lab.com.  (
                 2011093001     ; Serial
                 3600           ; Refresh
                 900            ; Retry
                 3600000        ; Expire
                 3600           ; Minimum
               )
    IN  A      192.168.1.2
    IN  NS     ns.suz-lab.com.
    IN  MX 10  mx.suz-lab.com.
    IN  TXT    "v=spf1 ip4:192.168.1.2 mx ~all"
*   IN  MX 10  mx.suz-lab.com.
mx  IN  A      192.168.1.2
    IN  TXT    "v=spf1 a -all"
ns  IN  A      192.168.1.2

実際の変換は次の通りです。

# ./bindtoroute53.pl --ignore-origin-ns --ignore-soa --origin suz-lab.com < suz-lab.com.zone > suz-lab.com.xml
Ignoring '. 3600 IN SOA ns.suz-lab.com. postmaster.suz-lab.com. (
     2011093001 ; Serial
     3600 ; Refresh
     900 ; Retry
     3600000 ; Expire
     3600 ) ; Minimum TTL', --ignore-soa enabled.
Ignoring '. 3600 IN NS ns.suz-lab.com.', --ignore-origin-ns enabled.

変換後のXMLは下記となります。

# cat suz-lab.com.xml
<?xml version="1.0" encoding="UTF-8"?>
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
 <ChangeBatch>
  <Comment>This change imports a zone file</Comment>
  <Changes>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>mx.suz-lab.com.</Name>
      <Type>A</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>192.168.1.2</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>mx.suz-lab.com.</Name>
      <Type>TXT</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>"v=spf1 a -all"</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>ns.suz-lab.com.</Name>
      <Type>A</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>192.168.1.2</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>*.suz-lab.com.</Name>
      <Type>MX</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>10 mx.suz-lab.com.</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>suz-lab.com.</Name>
      <Type>MX</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>10 mx.suz-lab.com.</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>suz-lab.com.</Name>
      <Type>A</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>192.168.1.2</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>suz-lab.com.</Name>
      <Type>TXT</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>"v=spf1 ip4:192.168.1.2 mx ~all"</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
  </Changes>
 </ChangeBatch>
</ChangeResourceRecordSetsRequest>

実際の"Route 53"への反映は、これを"dnscurl.pl"などで登録することになります。

ブログ書かなきゃ...
--------
http://www.suz-lab.com

2011年9月26日月曜日

MonitでVarnishの監視

スズキです。

下記のように、Varnish単体で"/healthcheck.txt"にアクセスできるのが前提です。
VarnishでELBヘルスチェックに対応させる
この状態で、下記のような"/etc/monit.d/varnish.conf"で実現できます。

check process varnish with pidfile /var/run/varnish.pid
    start program = "/etc/init.d/varnish start"
    stop program = "/etc/init.d/varnish stop"
    if failed port 80 protocol http request /healthcheck.txt then restart
    if 5 restarts within 5 cycles then timeout

これでMonitを再起動すればVarnishも監視でき、
プロセスが死んだり、コンテンツ(/healthcheck.txt)へのアクセスができなくなったら、
Varnishが再起動されるようになります。

Monitは他のサービスも積極的に使うべきだなー...
--------
http://www.suz-lab.com

Varnishで"x-jphone-copyright"ヘッダに"no-transfer"と"no-peripheral"を指定

スズキです。

下記でレスポンスヘッダに"x-jphone-copyright: no-store"をVarnishで追加したのですが、
VarnishでS3のコンテンツに"x-jphone-copyright"ヘッダを付与
"no-store"ではなく今回は、"no-transfer"と"no-peripheral"の二つを指定してみました。

ちなみに異本的には
no-store: 「コピー」と「メール添付」と「外部転送」の禁止
no-transfer: 「メール添付」の禁止
no-peripheral: 「外部転送」の禁止
となっています。

Apacheの場合は"httpd.conf"で下記のように指定すればOKです。
(二つ目の指定が"append"になっているのがポイントです)

...
Header set x-jphone-copyright no-transfer
Header append x-jphone-copyright no-peripheral
...

しかし、Varnishには"append"のようなものがありません...

ただ、上記の設定は結局下記のようなヘッダになるので、

# telnet localhost 80
...
x-jphone-copyright: no-transfer, no-peripheral
...

Varnish(default.vcl)では下記のように、べたにカンマで区切って指定すればOKでした。

.... 
set resp.http.x-jphone-copyright = "no-transfer, no-peripheral";
...

あとは、負荷テストです。
--------
http://www.suz-lab.com

VarnishでS3のコンテンツに"x-jphone-copyright"ヘッダを付与

スズキです。

下記で紹介されているように、SoftBankの携帯で画像転送の禁止を行うには、
画像ファイルのレスポンスヘッダに"x-jphone-copyright"を付与する必要があります。
携帯サイトの著作物保護 ~画像転送禁止を厳しく設定する~
しかし画像をS3に置く場合は、S3は"x-jphone-copyright"のようヘッダを
つけることはできないので、Varnishなどのプロキシーを経由する必要があります。

例えば、"s3.suz-lab.com"でアクセスできるS3に対して、
"softbank.suz-lab.com"でアクセスできるVarnish経由で上記のS3にアクセスするには、
下記のように設定ファイル(/etc/varnish/default.vcl)を記述すればOKです。

backend default {
    .host = "localhost";
    .port = "80";
}
sub vcl_recv {
    if(req.http.host == "softbank.suz-lab.com") {
        set req.backend   = s3_suz_lab_com;
        set req.http.host = "s3.suz-lab.com";
        return (pass);
    }
    return (lookup);
}
sub vcl_deliver {
    if(req.http.host == "s3.suz-lab.com") {
        set resp.http.x-jphone-copyright = "no-store";
    }
    return (deliver);
}
backend s3_suz_lab_com {
    .host = "s3.suz-lab.com";
    .port = "80";
}

ポイントは、"vcl_deliver"でレスポンスヘッダを付与していることと、
そのときのHostヘッダは、"softbank.suz-lab.com"ではなく、
"s3.suz-lab.com"となっていることでしょうか?

ただし可用性は、このVarnishサーバがボトルネックになってしまうので、
必要に応じて"Auto Scaling"など利用する必要があると思います。

負荷テストしなきゃ...
--------
http://www.suz-lab.com

2011年9月16日金曜日

VarnishでGETメソッド以外をキャッシュしない方法

スズキです。

システム移行の案件などプロキシー型のCDNを動作確認するために。、
Varnishでエミュレートとすることが多々あります。

そのときに、CDNによっては、GETだけキャッシュして、
それ以外は、そのままオリジンサーバに通してしまうものもあり、
その辺りをVarnishでどのように実現するか、です。

といっても下記のようにな設定ファイルをで実現可能です。

sub vcl_recv {
  if(req.request == "GET") {
    return (lookup);
  }
  return (pass);
}

"lookup"はキャッシュからコンテンツを探し、
"pass"は、そのままオリジンサーバにパスする挙動となります。

なので上記は、GETメソッドのときはキャッシュからコンテンツを探し(lookup)
POSTのような、それ以外のメソッドのときは、そのままオリジンサーバに
パスするようになっています。

CDN使ってるシステムの移行はテストが大変...
--------
http://www.suz-lab.com

2011年9月14日水曜日

セキュリティグループの状態をテキストで取得

スズキです。

下記のように取得するのが一番良さそうです。

require_once("../../aws/php/sdk.class.php");
define("AWS_KEY"       , "AAAAAAAAAAAAAAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS");
$ec2 = new AmazonEC2();
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
$response = $ec2->describe_security_groups();
print($response->body->securityGroupInfo->to_yaml());
exit(0);

結果は次のようにYAML形式となります。

item:
  -
    ownerId: '000000000000'
    groupId: sg-00000000
    groupName: default
    groupDescription: 'default group'
    ipPermissions:
      item:
        - { ipProtocol: tcp, fromPort: '0', toPort: '65535', groups: { item: { userId: '000000000000', groupId: sg-00000000, groupName: default } }, ipRanges: {  } }
        - { ipProtocol: udp, fromPort: '0', toPort: '65535', groups: { item: { userId: '000000000000', groupId: sg-00000000, groupName: default } }, ipRanges: {  } }
        - { ipProtocol: icmp, fromPort: '-1', toPort: '-1', groups: { item: { userId: '000000000000', groupId: sg-00000000, groupName: default } }, ipRanges: {  } }
        - { ipProtocol: tcp, fromPort: '80', toPort: '80', groups: {  }, ipRanges: { item: { cidrIp: 0.0.0.0/0 } } }
        - { ipProtocol: tcp, fromPort: '22', toPort: '22', groups: {  }, ipRanges: { item: [{ cidrIp: xxx.xxx.xxx.xxx/32 }, { cidrIp: xxx.xxx.xxx.xxx/32 }] } }
        - { ipProtocol: tcp, fromPort: '3389', toPort: '3389', groups: {  }, ipRanges: { item: { cidrIp: xxx.xxx.xxx.xxx/32 } } }
    ipPermissionsEgress: {  }
  -
    ownerId: '000000000000'
    groupId: sg-00000000
    groupName: xxx-default
    groupDescription: xxx-default
    ipPermissions:
      item:
        ipProtocol: tcp
        fromPort: '22'
        toPort: '22'
        groups: {  }
        ipRanges: { item: { cidrIp: xxx.xxx.xxx.xxx/32 } }
    ipPermissionsEgress: {  }
  -
    ownerId: '000000000000'
    groupId: sg-00000000
    groupName: xxx-web
    groupDescription: xxx-web
    ipPermissions:
      item:
        ipProtocol: tcp
        fromPort: '80'
        toPort: '80'
        groups: {  }
        ipRanges: { item: { cidrIp: 0.0.0.0/0 } }
    ipPermissionsEgress: {  }
  -
    ownerId: '000000000000'
    groupId: sg-00000000
    groupName: default
    groupDescription: 'default VPC security group'
    vpcId: vpc-00000000
    ipPermissions:
      item:
        - { ipProtocol: '-1', groups: {  }, ipRanges: { item: { cidrIp: xxx.xxx.xxx.xxx/24 } } }
        - { ipProtocol: tcp, fromPort: '22', toPort: '22', groups: {  }, ipRanges: { item: { cidrIp: xxx.xxx.xxx.xxx/32 } } }
        - { ipProtocol: '-1', groups: { item: { userId: '000000000000', groupId: sg-00000000 } }, ipRanges: {  } }
    ipPermissionsEgress:
      item:
        ipProtocol: '-1'
        groups: {  }
        ipRanges: { item: { cidrIp: 0.0.0.0/0 } }

後はこれを、毎日出力してSVNなどにコミットしておけば、
変更を追っかけることができるはずです。

ということで、次はSVNです。
--------
http://www.suz-lab.com

2011年9月6日火曜日

S3で一時的に(期限付きで)アクセスできるURLを作成

スズキです。

S3のオブジェクトに一時的に(期限付きで)アクセスする方法があります。

まずは下記のようにコンテンツが表示しないことを確認しておきます。
http://www.suz-lab.com.s3.amazonaws.com/form.html

次に下記スクリプトにて期限付き(5分間)のURLを作成します。

require_once("/opt/aws/php/sdk.class.php");

define("AWS_KEY"       , "ACCESS KEY");
define("AWS_SECRET_KEY", "SECRET KEY");

$s3 = new AmazonS3();
$s3->set_region(AmazonS3::REGION_US_E1);
$url = $s3->get_object_url("www.suz-lab.com", "form.html", "5 minutes");

var_dump($url);

そしてすぐに作成したURLにアクセスすると、今度は表示することを確認できます。

http://www.suz-lab.com.s3.amazonaws.com/form.html?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Expires=1315309784&Signature=H9jDp7k8jsRTiv%2BpudXztARIN5Q%3D

5分後、同じURLにアクセスすると今度は表示できなくなっています。。


認証してからのダウンロードなどで使えそうです!
--------
http://www.suz-lab.com

s3fs-suz

スズキです。

下記の続きです。
"s3fs"から"s3fs-c"へ
"github"で"fork"してローカルに"clone"して"add&commit&push"
"s3fs-suz"として、とりあえず、1.59からの下記の変更を"s3fs-c"にマージしました。
(したつもりです...)
r357, r358, r359, r360, r361, r362
メモリリーク対応系までの変更をマージし、
5G以上のファイル対応はマージしていない形となっています。

ちなみに"s3fs-c"の制限は下記となっています。
  • UID/GIDはサポートせず、オーナーやグループはすべて"root"
  • ファイルやディレクトリのパーミッションは"rwxrwxrwx"にハードコード
"@memorycraft"、使ってみて下さい!
--------
http://www.suz-lab.com

2011年9月5日月曜日

一括決済(Consolidated Billing)の子アカウントで"aiCache"(Amazon Payments)が利用できない!

スズキです。

"@kaz_goto"が下記で紹介してくれていますが、
aiCacheセットアップ on AWS
"aiCache"は"Amazon Payments"での登録(Subscription)が必要になります。(有料です)
登録無しに"aiCache"のAMIを起動すると、下記のようにエラーとなり起動できません。




ということで、まずは下記より"Amazon Payments"で登録です。


するとログイン画面となり、ログインすると...
下記のように何も表示されません...


上記でログインしたアカウントは、一括決済(Consolidated Billing)の子アカウントなので、
それが原因だと思い親アカウントでログインすると、無事、下記のような画面になりました。



そしてそのまま登録(Subscription)すると、下記のように無事、完了画面が表示されます。


この状態で親アカウントの方でaiCacheのAMIからインスタンスを起動すると、
当然、無事、起動することができました。

しかし子アカウントのほうで起動すると、
残念ながら起動直前に最初に紹介したエラーになってしまいます...

ということは、一括決済(Consolidated Billing)の子アカウントでは
"aiCache"が利用できないってことでしょうか !?

どうしよう...
--------
http://www.suz-lab.com

"github"で"fork"してローカルに"clone"して"add&commit&push"

スズキです。

下記の続きです。
"s3fs"から"s3fs-c"へ

さっそく"github"にて、下記に"s3fs-c"を"fork"しました、
https://github.com/suz-lab/s3fs-suz

そして、ローカル環境(CentOS 6.0)に"git"をインストールして準備をします。

# yum install git
# git config --global user.name "suz-lab"
# git config --global user.email "suzuki@suz-lab.com"

リポジトリ情報(github)は下記の通りなので、


次のようにローカル環境に"clone"して変更作業の準備をします。

# cd /usr/local/src
# git clone https://suz-lab@github.com/suz-lab/s3fs-suz.git
Initialized empty Git repository in /usr/local/src/s3fs-suz/.git/
Password: 
remote: Counting objects: 84, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 84 (delta 34), reused 73 (delta 23)
Unpacking objects: 100% (84/84), done.
# git remote -v
origin	https://suz-lab@github.com/suz-lab/s3fs-suz.git (fetch)
origin	https://suz-lab@github.com/suz-lab/s3fs-suz.git (push)

適当にファイルを修正したら、変更内容を追加(add)して、
コミット(commit)して、リモートリポジトリ(github)にプッシュ(push)します。

# cd /usr/local/src/s3fs-suz
# git add .
# git commit -m "test"
[master c2e284a] test
 1 files changed, 0 insertions(+), 1 deletions(-)
# git push     
Password: 
Counting objects: 6, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 443 bytes, done.
Total 4 (delta 2), reused 0 (delta 0)
To https://suz-lab@github.com/suz-lab/s3fs-suz.git
   650f867..c2e284a  master -> master

すると変更内容が"github"にも反映されていることがわかります。


次は、変更内容を反映する泥臭い作業だ...
--------
http://www.suz-lab.com

"s3fs"から"s3fs-c"へ

スズキです。

"s3fs"はフォルダの扱いが他のS3のクライアント(特に"AWS Management Console")と違い、
利用しづらいところがあります。

そこで、互換性のある"s3fs"が無いか調べたところ、下記のようなものがありました。
This project was forked from S3FS (http://code.google.com/p/s3fs/) release 1.59 and being rewritten to be compatible with other S3 clients such as s3cmd, AWS Management Console, etc.

インストールは下記と同じ手順で問題ありませんでした。
"CentOS 5.6"に"fuse-2.8.5"と"s3fs-1.40"のインストール
ただしインストールしたOSは"CentOS 6.0"で、"yum -y install openssl-devel"が必要でした。

インストール後の設定も下記の通りです。
EC2(CentOS 5.6)で"fuse-2.8.5"と"s3fs-1.40"を利用するために

実際にマウントしてみると、"s3fs"上で作成したフォルダが"AWS Management Console"で
確認でき、その逆も可能でした。

また、この"s3fs-c"は"s3fs-1.59"ベースで作成されているのですが、
本家"s3fs"の最新版は"1.61"で、いくつかメモリリークが修正されているようです。

ということで、"s3fs-1.61"ベースの"s3fs-c"が(業務的に)欲しいので、
パッチを作ってみようと思います。

"memorycraft"がやってくれるかも!?
--------
http://www.suz-lab.com


2011年9月2日金曜日

"Oracle RDS"で不思議な現象(未解決...) が解決(11.2.0.2.v3)

スズキです。

以前下記で、"Oracle RDS"のPL/SQLでの日本語まわりで、
うまく動作しないパターンを紹介しました。
"Oracle RDS"で不思議な現象(未解決...)

最近、下記のようにOracle RDSのエンジンが増えており、


"11.2.0.2.v3"で同様のことを試してみると、下記のように問題なく動作しました。

SQL> create or replace procedure suzuki.test is
begin
    dbms_output.put_line('ああああああああああああああああああ');
end;
/
  2    3    4    5  
Procedure created.

念のため"11.2.0.2.v2"で試してみると、やはり同様のエラーになってしまいました。

SQL> create or replace procedure suzuki.test is
begin
    dbms_output.put_line('ああああああああああああああああああ');
end;
/
  2    3    4    5  
create or replace procedure suzuki.test is
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20900: Error in rdsadmin.rdsadmin. ORA-00600: internal error code,
arguments: [kole_t2u], [34], [], [], [], [], [], [], [], [], [], []
ORA-06512: at "RDSADMIN.RDSADMIN", line 183
ORA-06512: at line 2

"11.2.0.2.v3"なら移行できるか!?
--------
http://www.suz-lab.com

Zabbixのインストール

スズキです。

ずっとNagios使ってましたが、そろそろZabbixも勉強することにしました。

インストールは下記に従い、CentOS6上で行っています。

MySQLのインストールとデータベースの構築

# yum -y install mysql-server
# /etc/init.d/mysqld start
# mysql -u root
mysql> create database zabbix DEFAULT CHARACTER SET utf8;
# exit

Zabbix(Server)のインストールと初期データのインポート

# yum -y install zabbix-server-mysql
# cat /usr/share/doc/zabbix-server-mysql-1.8.6/create/schema/mysql.sql | mysql -u root zabbix
# cat /usr/share/doc/zabbix-server-mysql-1.8.6/create/data/data.sql | mysql -u root zabbix
# cat /usr/share/doc/zabbix-server-mysql-1.8.6/create/data/images_mysql.sql | mysql -u root zabbix
# /etc/init.d/zabbix-server start

Zabbix(Web)のインストールとPHPパラメータの調整

Zabbix(Web)のインストール

# yum -y install zabbix-web-mysql

PHPのタイムゾーンは下記のように調整
"phpinfo()"でタイムゾーン関係のWarning

さらに"/etc/php.ini"を下記のように調整

...
; Maximum amount of memory a script may consume (128MB)
; http://www.php.net/manual/en/ini.core.php#ini.memory-limit
#memory_limit = 128M
memory_limit = 256M
...
; Maximum size of POST data that PHP will accept.
; http://www.php.net/manual/en/ini.core.php#ini.post-max-size
#post_max_size = 8M
post_max_size = 32M
...
; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
#upload_max_filesize = 2M
upload_max_filesize = 16M
...
; Maximum execution time of each script, in seconds
; http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
#max_execution_time = 30
max_execution_time = 600
...
; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://www.php.net/manual/en/info.configuration.php#ini.max-input-time
#max_input_time = 60
max_input_time = 600
...

Apacheの起動とZabbixの設定

Apacheの起動

# /etc/init.d/httpd start

下記にアクセスしてZabbixのインストールウィザードで設定
http://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/zabbix/

下記のようにウィザードに従って設定。









"admin/zabbix"でログイン

ウィザードでのインストール(設定)が終了すると下記のようなログイン画面になるので、
User: admin
Pass: zabbix
でログインできます。


ログインすると下記のような感じです。


次はメール通知まで...
--------
http://www.suz-lab.com

2011年9月1日木曜日

VPCの注意点!

スズキです。

二点あります。

一点目は、
"VPN Connection"で利用している"Customer Gateway"(の"Public IP")はAWS上で
一意になっていなければならない。
です。

これは、既に別アカウントで"VPN Connection"で利用している"Customer Gateway"が
あった場合、アカウントが違っても同じ"Public IP"の"Customer Gateway"で"VPN Connection"を
作成することができません。

作ろうとすると
Conflict among chosen gateway IP address
といったエラーになってしまいます。

また、"VPN Connection"が接続できていなくても上記のエラーになってしまうので
注意が必要です。利用するには、既に利用している別アカウントの"VPN Connection"を
削除しなければなりません。

二点目は、
"Virtual Private Gateway"は"VPC"ごとに一つののみしか作成できない。
です。

既存の"Virtual Private Gateway"にアタッチされている"VPC"を、
新規に作成した"Virtual Private Gateway"にアタッチしようとすると、
下記のエラーでアタッチすることができません。
An internal error has occurred
つまり複数の拠点(Customer Gateway)から同じ"VPC"にVPN接続するには、
"Virtual Private Gateway"は一つしか作れないので、その"Virtual Private Gateway"で、
"Customer Gateway"ごとに"VPN Connection"を作成する必要があります。

勘違いしてた...
--------
http://www.suz-lab.com