クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

2014年11月15日
から hiruta
0件のコメント

re:Invent 2014 APP313: Amazon EC2 Container Service in Action セッションレポート #reinvent

re:Invent 2014でAPP313: Amazon EC2 Container Service in Action のセッションについての所感になります。
まだ現時点では疑問点もいくつかあります。随時内容についてはアップデートしてまいります。

概要

  • Resource Pool for task

10422552_778377882236192_7736160342320229150_n

  • Container instance のグループ化

10409647_778377862236194_6601801363327824152_n

  • 動的スケーリング
    Containersのfailover(?)、HA機能(?)

Container instanceについて

  • task scheduled
    • ある時間になったら、Containersを起動させることができるのか(?)
  • ECS Agent included
    • User Data scriptで自動インストール対応は(?)

Containers用のインスタンスタイプ

セッションでは、m3.2xlargeを利用していました。

Containers定義

ファイルはjsonファイル形式になります。

10407352_778377918902855_8056595593601770928_n

  • パラメータ
    name
    image
    cpu
    memory
    portMappings
    hostPort
    links
    essentials

EC2 Cluster View

Containerクラスタの状態を確認できるUI
昨日セッションの画面は開発中なのかUI的に完結できているとは思えないほどシンプル

10368190_778378035569510_4063696012336099942_n

AWS CLIコマンド例

aws ecs create-cluster default

aws ecs register-task-defination -family wordpress –version 1.0 wordpress

AWS CLIへの対応

現時点では対応していない模様

Comming Soon※今後対応予定

Elastic Load Balancing
Amazon CloudWatch
Amazon CloudWatch Logs
AWS Cloudformation
Support for Tags
AWS Management Console
Partner AMIs ( incluing CoreOS )

価格

ECS自体の費用はかからない。EC2のインスタンスの費用等がかかる。こういう意味だと、Opsworks自体も費用がかからないイメージになるのでは。

まとめ

EC2をLaunchしてState check 2/2になるまで少なく見積もっても5分はかかる。AutoScalingなどでインスタンスのヘルスチェックNGを検知してから、
AutoScalingが発動し、インスタンスが復旧するまで時間がかかるのは周知。
Containersの起動の速い特性を利用したシステム構成プランが考えられると思われます。

・Kinesis nodeとして
・演算処理を行うだけでEC2を起動(使い捨てインスタンス)する代用
→AutoScalingで動的で運用している場合、Containersに乗り換えの検討も考えられます。

昨日の時点では、インスタンスタイプに依存はするとは予想されますが、Containers 用のインスタンスでどの程度の数のContainersが起動できるかは不明。

LimitPreview版受付中ですので、ご興味のある方はぜひ。
※Limit PreviewはAWS Managemnt Consoleの対応がComming Soonとなっており、AWS CLIでの操作になると予想。

URLは、https://aws.amazon.com/ecs/preview

2014年11月3日
から hiruta
0件のコメント

Local SSD転送計測してみました。 #gcpja

Google Compute Engine のLocal SSD計測結果です。以下に記載されている情報です。

https://cloud.google.com/compute/docs/local-ssd#replicating_local_ssd_performance

NVMEに対応しているのは、現状Debian v7のみです。まずインスタンス起動から

NVMEのCentOS系OS使えるようにならないか。gcloud compute images create から、現時点ではNVMEイメージ作れなそう。

gcloud compute instances create local-ssd-instance-nvme \
 --machine-type n1-standard-8 \
 --zone asia-east1-b \
 --local-ssd-count 2 \
 --local-ssd-interface NVME \
 --image nvme-backports-debian-7-wheezy-v20140926 \
 --image-project gce-nvme

-local-ssd-count 2としたので、google-local-ssd-0、google-local-ssd-1のデバイスが作成されました。

# /usr/share/google/safe_format_and_mount -m "mkfs.ext4 -F" /dev/disk/by-id/google-local-ssd-0 /mnt/ssd0

300GBのSSDディスクが使用可能

# df -h /mnt/ssd0/
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1    369G   67M  351G   1% /mnt/ssd0
# mv blkdiscard /usr/bin
# blkdiscard /dev/disk/by-id/google-local-ssd-0
  • full write pass
sudo fio --name=writefile --size=100G --filesize=100G \
--filename=/dev/disk/by-id/google-local-ssd-0 --bs=1M --nrfiles=1 \
--direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
--iodepth=200 --ioengine=libaio

WRITE: io=102400MB, aggrb=572807KB/s, minb=572807KB/s, maxb=572807KB/s, mint=183059msec, maxt=183059msec

100G書き込みのに、3分(=183059msec)

  • rand read
sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
--filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
--iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
--numjobs=4 --rw=randread --blocksize=4k --group_reporting

READ: io=23317MB, aggrb=795648KB/s, minb=795648KB/s, maxb=795648KB/s, mint=30009msec, maxt=30009msec

100Gランダムリードで、0.5分(=3009msec)

  • rand write
sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
--filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
--iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
--numjobs=4 --rw=randwrite --blocksize=4k --group_reporting

WRITE: io=16667MB, aggrb=568777KB/s, minb=568777KB/s, maxb=568777KB/s, mint=30007msec, maxt=30007msec

100Gランダムライトで、0.5分(=3009msec)

n1-standard-8相当のm3.2xlarge、Ubuntu 14 HVMでもインスタンスストレージにSSDが使えるので、試そうとしましたが、full write passやってみましたが、時間かかり過ぎるので、なんかおかしいと思い、調査中ですので少々お待ちを。

2014年11月3日
から hiruta
0件のコメント

VyOS Users Meeting Japan #2に参加しました。 #vyosjp

昨日VyOS Users Meeting Japan #2に参加し、@trickv のVyOS 1.1のAMIを作成するbuild-amiを実際試してみました。

  • About vyos/build-ami

https://github.com/vyos/build-ami

※Googleで検索すると、「https://github.com/hydrajump/vyos-build-ami.git」もヒットするが、こちらは、run-instancesの–block-device-mappingsのDeleteOnTerminatationのvalueがダブルコーテーションで囲ってあるので、途中でエラーになるので、修正が必要。こちらは、VyOS 1.0.2が入ります。

上記スクリプトには、vyos 1.1のISOは入っていないので、ミラーサイトなどからリンクを追加要

上記スクリプトだと、Ubuntu 12のAMIを探してくれるようで、どのリージョンでも汎用的に利用が可能です。

bootstrap_host_ami_search: ubuntu-precise-12.04-amd64-server-20140217.1
  • VyOS VXLAN and Linux Device Driver

[slideshare id=41007524&doc=vyos-users-meeting2nd-vxlan-pub-141101223520-conversion-gate01]

  • Kauli SSPにおけるVyOS導入事例

[slideshare id=40996937&doc=vyosusersmeeting201411-141101114135-conversion-gate02]

1日で4億回、VyOSでトラフィックを裁いているとのこと。VyOSはかなりのトラフィックを裁けるか。

  • Debian JessieでVyOSをビルドする話、vyos-cfg-zabbix-agentの話

Debian jessieの下にcowbuilderの環境を作る話。

VyOSがAMD CPUの環境で動かない話の中で、原因切り分けでstraceを使っていました。strace自体、yumから簡単にインストール可能です。

  • 単位時間あたりの新規 NAT session 数の最大値を測ってみた

結果、20,000パケットまでは、ErrorRate 0。

tcpreplayのツールの紹介 → http://tcpreplay.jp

2014年10月19日
から hiruta
0件のコメント

OSC2014 Fallに参加しました。 #osc14tk

本日OSC(オープンソースカンファレンス)2014 Fall二日目に行ってきました。Ⅰ日目は、第四回クラウドデザインパターン勉強会と被ったため行けませんでしたが。

視聴したセッションは以下になります。

  • OpenStack Netron ネットワーク環境構築について、プラグインOVSとMidoNetの比較検証評価
    • Open vSwitchを使った検証
      • 単一ノードで、871.04Mbps
      • Network Nodeをスケールアウトしてもスケールアウトした分のスループットはでず、単一と変わらない。原因として、L3用処理ノードが一台なので、ここがボトルネックになるとのこと
      • Network Nodeを停止しても、ノードの自動移動、セッションが行われない
    • MidoNetのご紹介と検証結果
      • MidoNet Agentのみですべての機能を使用
      • スケールアウトしても、スループットは台数分出る

検証には、https://github.com/wg/wrk のHTTP Benchmark toolを使用したとのこと

  • クラウドOS 「OSv」のご紹介
    • 軽量OS
      • memcached等単一のアプリケーションをlaaSで動かすにはオーバーヘッド
      • 必要最低限の機能のみ実装
    • 対応アプリ
      • Java
        • Tomcat
        • Hetty
        • Solor
      • Ruby
      • Node.js
    • CLI (Luna CLI)、cloud init、OSv GUI
    • Capstan ツールについて
    • OSvには、AWS、Google Compute Engineに対応
      • AWSには、AMI(Community AMIで検索するとOSv demoとなるが)で起動できるが、Google Compute Engineには、capstanから
  • DevOps を実現する為のChef 活用テクニック+ Chef 12 最新情報
    • Chef 12
      • Chef-soloを廃止されるので、chef-client-localへの切替
      • Enterprise chefの機能の統合
      • chef subscription
    • Chefはreceipeが書いた順番で実行するとは限らない。
    • chef-client local = chef-zero
    • Chefアンチパターン
      • 孤独なChef使いにはならないように、receipeの引き継ぎは必須
    • CI環境、Test-kicthen、Berkshelf、librarian-chef、foodCriticで書式のチェックはできるが、実際は構築してみないとわからない
  • 実績多数のOSS、CloudStackとXenServerで作るlaaSクラウド環境
    • OpenStack、CloudStack
      • 部品を提供しているのが、OpenStack、CloudStackは、all-in-one製品
    • CloudStackからXeonなどのハイパーバイザのAPIを実行する
    • プライマリストレージ、セカンダリストレージ
      • 双方の仲立ちをするセカンダリストレージVM

 

  • Linux-HA Japan Project PacemakerなどLinuxを用いた高可用ソリューションのデモ
    • LANを抜いて、2系から1系に切り替わるデモ
  • フォースメディア QNAPのNAS
    • デモ機はRAID5
    • GuestOSで、Windows8を起動するデモ

2014年10月13日
から hiruta
0件のコメント

複数台構成する際の月額料金

複数台構成を構築するのに、どの位月額かかるかAWSとさくらのクラウドで試算してみました。

まずは、AWSから

  • ELB ×1
  • EC2 t2.medium (vCPU 2/4G)  $0.08
    • 外付けEBS 50GB
  • RDS db.t2.micro (vCPU 1/1.7G) $0.026

アウトバウンドトラフィック量100Gを想定しています。

計 $79.93 = ¥8,770 (1$=¥110)

次に、さくらのクラウド

  • 2コア/4G ¥5,292
  • 1コア/1G ¥1,965
  • スイッチ ¥2,160
  • ロードバランサー 標準プラン シングル ¥2,571

計 ¥11,977

AWSの方が安い結果が。その上、さくらのクラウドてAutoScalingに相当するものが自動復旧する仕組みを構築できない。

2014年10月11日
から hiruta
0件のコメント

RDS General Purpose (SSD)を試してみました。

昨日、RDSのStorageに、General Purpose (SSD)が使えるようになりましたので、早速ディスク性能を計測してみました。

インスタンスタイプは、m3.large、東京リージョンで実施。

General Purpose (SSD)の結果から

$ mysqlslap --no-defaults --concurrency=50 --iterations=1 --number-int-cols=7 --number-char-cols=8 --engine=innodb --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=key -auto-generate-sql-write-number=1000 --host=rds-stg-webdb.cjjsp36ssxxa.ap-northeast-1.
rds.amazonaws.com --port=3306 --user=root  -p webdb
Enter password:
Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.065 seconds
        Minimum number of seconds to run all queries: 0.065 seconds
        Maximum number of seconds to run all queries: 0.065 seconds
        Number of clients running queries: 50
        Average number of queries per client: 0

Magneticの結果は

$ mysqlslap --no-defaults --concurrency=50 --iterations=1 --number-int-cols=7 --number-char-cols=8 --engine=innodb --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=key -auto-generate-sql-write-number=1000 --host=rds-stg-webdb.cjjsp36ssxxa.ap-northeast-1.
rds.amazonaws.com --port=3306 --user=root  -p webdb
Enter password:
Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 0.075 seconds
        Minimum number of seconds to run all queries: 0.075 seconds
        Maximum number of seconds to run all queries: 0.075 seconds
        Number of clients running queries: 50
        Average number of queries per client: 0

簡単な負荷テストで微妙ですが、SSDの方が予想通り速い結果ができました。db.t2.microでもGP (SSD)は使用できます。

ディスクタイプ変更する場合は、7-8 Hour程度かかるとmodify画面の下部に記載されます。

本ブログでも、General Purpose (SSD)を利用しています。

2014年9月21日
から hiruta
0件のコメント

Compute Engine Autoscalerを試してみました。 #gcpja

Compute Engine のオートスケール機能を使用してみました。

Compute Engine Autoscalerは、現在Limit Preview機能ですので、デフォルトでは使用することができませんので、ここからリクエストを申請する必要があります。

まずは、Autoscaler機能は現在Limit Previewですので、CLI(gcloud)初期状態はpreview機能は使えませんので以下コマンドを有効にしておきます。

 gcloud components update preview 

Replica Poolファイルを作成します。AWSでいうLaunch Configurationに相当すると思われます。

 vi replica.template 
{ "template": {
    "vmParams": {
      "machineType": "n1-standard-1",
      "baseInstanceName": "my-replica",
      "disksToCreate": [{
        "boot": "true",
        "initializeParams": {
          "sourceImage": "https://www.googleapis.com/compute/v1/projects/centos-
cloud/global/images/centos-7-v20140903",
          "diskSizeGb": "10"
         }
       }],
     "networkInterfaces": [{
       "network": "default",
       "accessConfigs": [{
         "type": "ONE_TO_ONE_NAT",
         "name": "External NAT"
       }]
     }]
   }
  }
}

上記で作成したReplica Pool configでReplica Poolを作成します。

gcloud preview replica-pools --zone asia-east1-a create --size 1 --template replica.template asia-east1a-pool
Replica pool asia-east1a-pool is being created.

replia数を最小値、最大値を1にしてオートスケールの設定をします。

gcloud preview autoscaler --zone asia-east1-a create aisa-east-aurtoscaler --max-num-replicas 1 --min-num-replicas 1 --target-cpu-utilization 0.6 --target https://www.googleapis.com/replicapool/v1beta1/projects/skillful-fx-531/zones/asia-east1-a/pools/asia-east1a-pool

VMインスタンスが起動することが確認できます。そこで、replica数の最小値、最大値を2にしてみます。時間をたたずにもう1つ VMインスタンスが起動できることが確認できます。Replica数を2から1にしても、1 VMインスタンスがterminateされます。

gcloud preview autoscaler --zone asia-east1-a update aisa-east-aurtoscaler  --target https://www.googleapis.com/replicapool/v1beta1/projects/skillful-fx-531/zones/asia-east1-a/pools/asia-east1a-pool --max-num-replicas 2 --min-num-replicas 2

ただ、Replica数を0にすることはできないようです。Autoscalerを発動しないようにしておくことはできなそう。

gcloud preview autoscaler --zone asia-east1-a update aisa-east-aurtoscaler  --target https://www.googleapis.com/replicapool/v1beta1/projects/skillful-fx-531/zones/asia-east1-a/pools/asia-east1a-pool --max-num-replicas 0 --min-num-replicas 0
<pre>{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required field not specified: autoscaling_policy.max_num_replicas."
   }
  ],
  "code": 400,
  "message": "Required field not specified: autoscaling_policy.max_num_replicas."
 }
}

SSD Persistent diskに対応していないゾーンで、disk typeにSSD diskを指定するとエラーになります。SSD Persistent diskに対応していないゾーンは、us-central1-aになります。

VMインスタンスを障害をみたてて、「nmcli c down eth0」でインスタンスに接続できない状況を発生させて、自動復旧できるか試してみました。

が、自動復旧されない。Replica PoolにHealthChecksがある。→ここ

screencapture-developers-google-com-compute-docs-replica-pool-v1beta1-pools

使おうとすると、Unknown field nameとなる。???

 

2014年9月7日
から hiruta
0件のコメント

第4回 コンテナ型仮想化の情報交換会@東京に参加しました。 #lxcjp

昨日 niftyセミナールームで行われた第4回 コンテナ型仮想化の情報交換会@東京に参加しました。

コンテナ技術についてインプットが得られた一日でした。

Cgroupあれこれ

コンテナのリソース管理のキモのCgroupについての話でした。

dockerなどのコンテナではコンテナごとにリソース制御が重要

※AmazonLinux 2013.02、t2.microでリソース Limitを試してみました。

sudo yum install libcgroup

リソース Limitを以下のファイルに記載して、cgconfigサービスを再起動します。CPUをMax 25%に制限する設定になります。

vi /etc/cgconfig.conf
group limittest {
 cpu {
   cpu.cfs_quota_us  = 250000;
   cpu.cfs_period_us = 1000000;
 }
 cpuacct {
 }
}

リミッターをかけて、perlbrewのビルドを実施したコマンドになります。

time cgexec -g cpu:limittest /root/perl5/perlbrew/bin/perlbrew install perl-5.18.2

real 44m10.634s
user 9m5.304s
sys 0m29.512s

Using LXC on Production

mixiがLXCをProduction環境(本番環境)に導入した話

まずは、KVMで仮想環境を構築

が、ディスクIO、ディスク容量を多く消費、BIOS依存(IntelVT/AMD-V)などあった。

次に、OpenStack

scriptを使って構築が楽に

いよいよLXC

2013当時はまだ0.X 2014-02にLXC 1.0がリリースされるが、待てないので、0.9で検証開始

Dockerの簡易版といえるmixi運用に必要な機能に絞って独自LXCラッパーtrailerを開発

コンテナ系はCPU他リソースを共有するので、リソース管理が重要

ファイルディスクリプタ、カーネルパラメータのチューニングが必須 ここ にLXCチューニングについて詳しく書かれています。

CoreOSでDockerクラスタリング

dockerに最適されたCoreOSについての話

コア部分にはユーザ側でアップデートはできない(OSアップデートは勝手にやってくれる)、追加でアプリケーションを入れることができないので、docker経由でアプリケーションを入れる必要があります。

dockerなどはデータの永続化が難しいので、RDBとかは外部ディスクに保存することが必要。(RDS、Goole Cloud SQLを利用するのもあり)

GCE上で、CoreOSのVMを複数起動させて、Failoverのデモ(当日はうまいかなったようですが)

後日試してみようと思いますので、近日アップデートします。

コンテナ?これfreebsdでもできるよ

FreeBSDのjailについて

Oracle Solaris コンテナ技術

Solarisコンテナ技術である Oracle Solaris Zoneについて

FreeBSDのjailに実装的に似ている

LXC最新情報

共通で話されたことが、リソース管理の重要性がありました。

2014年8月16日
から hiruta
0件のコメント

8/15 SendGrid nightに初参加しました。 #eytokyo #SendGrid_JP

昨日8/15 Engine yardで行われたSendGrid nightに参加しました。

  • 構造計画研究所 中井勘介さんによるSendGrid入門

SendGridは決済とかトランザクションメールの処理が得意

ユーザ登録で空メールによる登録を行っているサイトも多々見受けられますが、これにもSendGridのWebhookで実現が可能

Webhookは無料プランでも使えてしまう。無料でもかなり遊べる印象

ruby、php、node.js等のライブラリも充実している

使い方によっては、停止措置を受けてしまうので、使う場合は、ほどほどに

あとは、SendGridのUpdateについて

      • トランザクションメールの複数テンプレート対応
      • SendGridから相手サーバーの間の通信の暗号化(TLS)
        • 本当に暗号化しているかは現状ログで確認するしかない。受け手のヘッダをみればわかるが。
      • sendwithusの紹介
      • クリックトラッキングの中間処理でHTTPプロトコルで通信していたのをHTTPS化
  • Ken Apple氏によるCode workshopのデモ、EventKitのダウンロードからインストールまでのデモ
    • Code workshopによるフォームでパラメータを与えれば、curl、phpコードを出力してくれるデモ
    • ウォームアップ
      • 最初はウォームアップ済IPからメール送信する割合が95%を少しずつ固定IPで送信する割合を増やす
    • SendGridの情報集約ツールEventKitのインストールから実際の動作までのデモ
      • sqliteをバックエンドで利用
        • 少々修正すればMySQLとかにもストアできるようです
      • 検索ワードは現状1バイト文字に限る。(日本語は非対応)

ここからLT

  • 株式会社FLECT 小西さんによるSendGridサンプルの紹介

  •  クラスメソッド 大瀧さんによるLT
    • Amazon SES
      • 共有IPを使っているため、IPがBlockListに入っていてメールがブロックされている場合あり
      • SES自体グローバルのサービスのため、ガラケーとかの日本独自のサービスには非対応
    • SendGridとの使い分けは必要か。

2014年8月12日
から hiruta
0件のコメント

IDCFクラウド試用してみました。 #idcfrontier

JAWS-UGさいたまの勉強会かどうかでアンケートに、「IDCFクラウド30日無料トライアル希望」のような項目がありましたので、チェックしたところ、1週間ほど前に、メールで無料クーポンコードが送られてきました。

アカウント作成編

トライアルでも登録の際、認証があります。電話認証&国際SNSで行うことができますが、電話認証ネガティブなEnglishなので、聞き間違うことがある。また、国際SNSですが、レスポンスが若干遅かった。

仮想マシン起動

CentOS6.5を使用してみました。

初期起動時は時間がかかる印象。二度目以降は速いようです。SELinuxはデフォルトで無効になっています。

仮想マシンを作るとグローバルIPアドレスが付与されますが、ポートフォワード設定を行わないと、仮想マシンにSSH接続も行えない。

AWSのように、public IP付与するようにすると、仮想マシンに接続できると望ましい。

ディスクパフォーマンス

ディスクはかなり高速な部類。

CPU 「S4 ( 1CPU / 4GB RAM )」※AWSだとm3.medium相当。
メモリ CentOS6.5

# hdparm -t /dev/sda1

/dev/sda1:
Timing buffered disk reads: 348 MB in 3.00 seconds = 115.96 MB/sec
# hdparm -t /dev/sda1

/dev/sda1:
Timing buffered disk reads: 468 MB in 3.01 seconds = 155.68 MB/sec
# hdparm -t /dev/sda1

/dev/sda1:
Timing buffered disk reads: 516 MB in 3.01 seconds = 171.30 MB/se


ファイアウォール

ポートベースで設定が行う。SSH、RDP、HTTP、HTTPSとかよく使うプロトコルについては簡易設定のような機能がほしいところ。