ao-log

インフラ系ITエンジニアのメモ帳です。

Amazon linux に Chef で Fluentd をインストールする

ここを参考にした。
https://github.com/treasure-data/chef-td-agent

少しハマったのが、レシピの platform に amazon が書かれていないので、それを追加するところですね。

以下、手順です。

td-agent の cookbook を追加。

$ /opt/chef/embedded/bin/gem install knife-github-cookbooks
$ cd chef-repo
$ knife cookbook github install treasure-data/chef-td-agent

レシピのplatformにamazon追加。これをしないと、リポジトリが追加されず、yum でパッケージがインストールされない。

$ cat cookbooks/td-agent/recipes/default.rb
...(省略)
case node['platform']
when "ubuntu"
...(省略)
when "centos", "redhat", "amazon"
  yum_repository "treasure-data" do
    url "http://packages.treasure-data.com/redhat/$basearch"
    action :add
  end
end
...(省略)

apt と yum の cookbook も必要なので追加。

$ knife cookbook github install opscode-cookbooks/apt
$ knife cookbook github install opscode-cookbooks/yum

JSON ファイルを修正。

$ cat nodes/localhost.json
{
     "run_list":[
          "recipe[td-agent]"
     ]
}

knife solo 実行。

$ knife solo cook localhost

PythonでCommandパターンを実装する

Rubyによるデザインパターン』は、デザインパターンの使いどころや各パターンの意図を順を追って説明してくれるので、読みやすい良本でした。

Rubyによるデザインパターン

Rubyによるデザインパターン

数多くの操作を蓄え、それらを一気に実行させたい、といった処理をするときは、Command パターンが役に立つ一例となります。Python で実装すると以下のようになります。実行した処理を戻したい場合は、更に Undo 処理を実装することになります。

#!/usr/bin/env python

class Command():
    def execute():
        pass

class CompositeCommand(Command):
    def __init__(self):
        self.__cmd_list = []

    def append_cmd(self, cmd):
        self.__cmd_list.append(cmd)

    def execute(self):
        for cmd in self.__cmd_list:
            cmd.execute()

class FileTouchCommand(Command):
    def __init__(self, path):
        self.__path = path

    def execute(self):
        cmd = "touch %s" % (self.__path)
        print cmd

class ChmodCommand(Command):
    def __init__(self, path, permission):
        self.__path = path
        self.__permission = permission

    def execute(self):
        cmd = "chmod %s %s" % (self.__permission, self.__path)
        print cmd

if __name__ == "__main__":

    cc = CompositeCommand()

    # コマンドを組み立てる
    cc.append_cmd(FileTouchCommand("/tmp/test"))
    cc.append_cmd(ChmodCommand("/tmp/test", "600"))

    # 組み立てたコマンドを実行する
    cc.execute()

日本OpenStackユーザ会 第15回勉強会の感想

11/15に開催された「日本OpenStackユーザ会 第15回勉強会」に行ってきました。
[connpass] http://connpass.com/event/3798/
[togetter] http://togetter.com/li/590779

内容と感想を簡単にまとめておきます。

HP Public Cloudで感じるOpenStackのリアリティ

http://www.slideshare.net/ToruMakabe/open-stack15-hp-public-cloud

  • Openstack を全面的に採用。
  • AWS と同じような値段。従量課金。リージョンは北米(西海岸と東海岸)。それぞれ 3 つの Availability Zone。
  • Classic(diablo) と Horizon Preview Edition がある。Classic の Web ページは自前で作っている。diablo++(プラスプラス)と呼んでいるらしい。Horizon Preview Edition では Web コンソールが JQuery を使ってきれいに今風になった。
  • diablo から havana、grizzly への移行は一斉にではなく、コンポーネントごとに検証しつつ対応。

デモ

  • ネットワークトポロジの可視化。コンピュートインスタンスがどのサブネット上にいるかも一目瞭然に。
  • Web コンソールから、サーバの画面を引っ張ってこれる。


HP 様というと私はサーバや PC のイメージが強かったので、新鮮な内容でした。AWS の後追いという立場ですが、今後どうなっていくのか楽しみです。また、明言はしなかったものの、日本のリージョンを開設させて、日本でのシェア確保に前向きな雰囲気を、個人的にですが感じました。

1Uサーバーから始めるスケーラブルな「mCloud Project Server」とOpenStackハンズオン・トレーニングのご紹介

http://www.slideshare.net/stussykonno/morphlabs-20131115

  • Morphlabs 様はオープンソースの企業向け導入が得意な会社。最近はアジアのマーケットに注目している。
  • マーケットのガートナーの予測では Iaas は 2020 年に Saas を追い越す見込み。Paas は今一つ伸びない。Iaas は 2014 年に 1.3 兆円程度の市場になり、AWS が 50 % くらいになるのではないか?
  • AWS の成功事例を無視できない。また、AWS に勝つにはサーバの高密度実装が不可欠。AWS が 1 U に 25 個くらいといわれているが、100 くらいでないと勝てないのではないか。また、AWS の開発速度は早すぎる。100 % は難しいが 80 % は追随していく。
  • シンプルなユーザインタフェースで差別化。
  • OpenStack のハンズオントレーニングを実施予定。とにかく手を動かして検証する方式で。

mCloud

  • 初期は小さい構成ではじめて、モジュール単位で拡張していくことができる。
  • パブリッククラウドの 1/2 以下のコストで。
  • 24時間265日のサポート体制。


コストに関する話が多く、提供側からみたら投資額を回収できるかどうか、(当たり前ですが)そういう視点で考えているんだなと参考になりました。個人的には高密度実装の話が興味深く、そうなると ARM 系サーバのアプローチって結構面白いのではないかと妄想しています。ARM 系はどちらかというと HP 様ですが、注目してます。

OpenStackで利用可能な国産分散ストレージ「Amage」のご紹介

スライドを見つけられなかったので、製品のページの URL を。

http://www.creationline.com/amage/

  • SPOF の排除。P2Pアーキテクチャ
  • インライン重複排除。書き込む段階で重複を排除している。
  • スナップショットの世代管理。
  • ノンストップ拡張。シンプロビジョニング

なんと、発表された CREATIONLINE 様の技術者の方が、フルスクラッチで書いた製品だそうで、凄すぎです。

OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介&デモ

http://www.slideshare.net/takashisogabe/openstack-usersjasogabedraft1

あらかじめ事前知識を入れておくのがよさそう。

[Juniper: 10分でわかるOpenContrail(前半)]
http://forums.juniper.net/t5/%E3%83%96%E3%83%AD%E3%82%B0/10%E5%88%86%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8BOpenContrail-%E5%89%8D%E5%8D%8A/ba-p/212369

BGPとXMPPを利用したオーバーレイネットワークを構築することが可能で、仮想ネットワークを構成するために必要な、SDNコントローラ、vRouter(仮想ルータ)、アナリティクスエンジンなどが提供されている。具体的には、サーバーにvRouterをインストールし、仮想ルータ、あるいは物理ルータとの間でトンネルを張り、仮想的なネットワークを構築する。また、トンネリングの仕組みとしてはMPLS VPN技術を利用しており、「これらの、すでに実証されているテクノロジーに基づいて仮想ネットワークを構築できる点が最大の特徴」
http://cloud.watch.impress.co.jp/docs/news/20131004_618112.html より

Web UI でマルチテナントのネットワーク構成を設定していくような内容でした。また、モニタリングで Web コンソールから ping をうったり、Web 画面上でオーバレイしたネットワークの Flow 情報を確認できるようです。Web もしくは REST API で色々できるようでした。

AWSでnetperfを用いてネットワーク帯域を調べる

AWS の AmazonLinux 上で、netperf を用いて EC2 インスタンス間のネットワーク帯域を調べる手順のメモです。
サーバのホスト名は host001、host002 として、host002 で netserver を起動、host001 で host002 に向けて netperf を実行する手順となります。

netperf パッケージをインストール

netperf パッケージをインストール。これは host001, host002 両方に必要。

$ sudo yum install netperf

netserver を起動

host002 上で、netserver コマンド実行。netserver プロセスが起動し、TCP の 12865 番ポートで LISTEN している状態になります。

$ netserver

セキュリティグループの確認

少しハマった部分。host001、host002 を同一セキュリティグループに属させます。
インバウンドの TCP 通信を許可し、Source は host001、host002 が属するセキュリティグループにします。

netperf 実行

$ netperf -H host002
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to host002 () port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

87380 20480 20480 10.05 145.64

同一 AZ 内の micro インスタンス間では、70 ~ 150 Mbps でした。測定のたびに結構ばらけました。

第35回R勉強会@東京(#TokyoR)の感想

11/9に開催された、第35回R勉強会@東京(#TokyoR)に行ってきました。
http://atnd.org/events/45114
初めての参加でしたが常連の方が多く、アカデミック要素がやや高い会という印象を持ちました。私はデータサイエンティストの方たちがどのような成果を出しているのか興味があり行ってみたのですが、想像以上にガチな会だったので、ちょっと参加したのが申し訳ないなと思いました。とはいえ初心者の方のセッションを設けたり堅苦しい雰囲気でもなく、初めての方でも入りやすいと感じました。感想と学んだことを、まとめておきます。

初心者向けセッション

簡単な文法やデータフレームについての説明、役立つパッケージ、情報源について。Rは速度面では不利なのでプロトタイプでざっくり感触をつかむ用途で使って、実際は自作で他の言語で書いたもので分析するといったプロジェクトの進め方の話も。
情報源は R のための検索エンジンがあるということすら私は知らず、この情報はありがたかったです。

Rのための検索エンジン。こんな便利なものがあったんですね。
http://seekr.jp/

R言語のwiki
http://www.okada.jp.org/RWiki/

人工データの発生

http://www.slideshare.net/yokkuns/tokyor35

特定の条件を満たすデータが欲しいときがあります。
たとえば正規分布に従うようなデータが欲しい場合は、正規分布に従う乱数を生成する関数 rnorm を使うといったように、確率分布に従って乱数を生成する関数を使うことで実現できるとのことでした。大数の法則(例としては、さいころを投げる回数が多くなるほど、個々の目が出る確率は1/6に近くなるという法則)を、人工的に発生させたデータを用いて正しそうだなと確かめる説明が分かりやすかったです。

Julia 入門

http://www.slideshare.net/Nikoriks/julia-28059489

高水準な記述ができるが、速いということで、発表者の方が今後どうなるか注目されている言語です。性能については6枚目。Cと比べても遜色がない。Rは遅い。

data.tableパッケージで大規模データをサクッと処理する

http://www.slideshare.net/sfchaos/datatable?utm_source=dlvr.it&utm_medium=twitter

データフレームと比べて、data.table パッケージを用いると、データの読み込みや、SQLでいうところのWHERE、SUM、JOINといった処理が高速になるとのことです。
質疑応答で、日本語のデータの読み込みはうまくいかなかったといった話もあり、日本語が含まれるデータの取り扱いは R では手間がかかることが多いようです。

Rでネットワーク解析とGIS

http://www.slideshare.net/Med_KU/20131109tokyor35

ネットワーク解析の結果や R で地図をプロットする際のレイアウトが難しく、うまくやらないと地図と位置情報データをマージする時にずれたり、ゴリ押しで修正したりと、簡単にはうまくいかない感じでした。個人的には有向グラフ、無向グラフの説明が面白かったです。

Rakuten Technology Conference 2013の感想

10/26に開催された「Rakuten Technology Conference 2013」に行ってきました。
http://tech.rakuten.co.jp/

内容と感想を簡単にまとめておきます。

Rakuten's New DataCenter Infrastructure

RIaas(楽天の自社製プライベートクラウド)構築の話。

概要

従来の主な課題として、コンピュータ資源の確保に時間がかかる、費用も掛かる、システムが複雑といった諸問題があった。その改善のため、仮想化を進め、各種デプロイをシンプルかつ自動化するようにした。その結果、デプロイ速度が、6 week → 5 day、価格が従来比 18 % にまで減少したという話。開発者が簡単にデータベースをデプロイできるデモあり。

感想

仮想化が、従来あった数々の問題をよく解決できており、それがしっかり数字にも表れている、いい事例だと感じました。ロードマップも土台が固まっている感じで、目的意識がはっきりしており、トップダウンでの戦略が浸透してそうな印象を受けます。プレゼンは楽天らしく終始英語でしたがパッションにあふれており、グローバルに活躍できる企業になる意気込みを感じる内容でした。

Aiming the Moving Target

http://www.youtube.com/watch?v=obiljftVy0g&list=SPNVIqXmk6x8wYOCIAYqlLHhKq94896mx9&index=2

まつもとゆきひろさんのプレゼン。エンジニアに向けて、エンジニアの生き方の参考になる内容のプレゼン。まつもとさんと会場との一体感がすごかったです。

従来の「何を作っているか把握している」「状況は変化しない」といった誤った想定のもと進める開発プロセスに、まつもとさんは疑問を持っていたようです。ソフトウェアの世界は変化が激しく、このような想定の戦略はよくない点、すごく共感できました。そのためには、失敗してもよい、進み続けるマインドが大事。とのことで、進み続けるマインドは、私も持たないといけないなと勇気づけられる内容でした。
また、個人的に印象に残ったのは、「無知の知」です。未来は正しく予測できないし、人は知らないことが多い。だからこそ、自分の無知を自覚して、自分の能力を磨かないといけないなと考えさせられました。

Amazon linux 上に chef solo の環境づくり

Amazon Linux 上で、chef solo を利用するときの注意点。それは ruby のバージョンですね。Amazon Linux では ruby 1.8.7。バージョンの問題で、gem で Chef Solo や knife を入れると失敗します。

なので、まず、gem を利用せずに Chef をインストール。

curl -L https://www.opscode.com/chef/install.sh | sudo bash

/opt/chef/embedded 下に ruby 1.9.3p429 が入るので、embedded 下の gem コマンドで、knife-solo をインストール。

sudo /opt/chef/embedded/bin/gem install knife-solo --no-ri --no-rdoc

これで、knife-solo も入ります。


ニコニコサーバ構築の次の記事がすごく参考になりました。
[Chef Soloと Knife Soloでの ニコニコサーバー構築 (2) 〜導入編〜]
http://ch.nicovideo.jp/dwango-engineer/blomaga/ar322283