Pages

2011/09/01

2度目のブログ移転で3G

Wordpressの管理が面倒になってきたためBloggerに移転。

これで旧記事のインポートをしておいたけど、あまり必要なかったかな?
http://wordpress2blogger.appspot.com/

2011/08/30

mongoDBのRESTインターフェイスをJSONPで使う

mongodbにrestオプションをつけるとWEBインターフェイスからjsonで色々情報が取れる。

JSONPならほぼjsだけのShaed環境向けViewerが作りやすいのにと思ったらひそかに対応していた。
 


"mongod -h" には出てくるんだが、公式の「Command Line Parameters」には載っていない、なんでかね?

--jsonp allow JSONP access via http (has security implications)



mongodの起動時に --jsonp を渡すか、コンフィグにて下記オプションを追加すると

jsonp = true


クエリにpadding用文字列をつけて "?jsonp=hogehgoe" などとリクエストすれば、hogehoge() の関数として返してくれる。
 

2011/08/17

Capistranoのデフォルトdeployタスクをつぶす

Capistranoが便利なので、複数サーバの管理に使いまわそう。

ただもともとがRails用なので、間違えて"cap deploy"すると多少悲しくなる。
ここは deployに含まれる動作を事前に上書きして置くと安心。

namespace :deploy do
# all default task disabler.
task :setup do; end
task :update_code do; end
task :symlink do; end
task :restart do; end
end



Rails以外に対応したフォークがあったような気もするが。
 

2011/07/28

syslog-ngでsyslogをmongodbに直行させる

少々前に似たような記事、logger代わりにmongoimportを上げた。

が、syslogデーモンにsyslog-ngを使った場合、出力先を指定プログラムのSTDINにできるので直接mongodbに突っ込めるのだった。
 

2011/07/26

GlusterFS を 3.2.2へ更新

GlusterFSの3.2.2が出ていたので、3.2.1から更新した。
 

前のUpgrade手順はRemoveしてからだったが、ReleaseNoteによると上書きでよいらしい。
Ubuntuだったらいきなり "dpkg -i" でOK.


serverのほうを順繰りに更新し、daemonの再起動。
特に問題なくPeerとのコネクションが再開された。
 

クライアント側ではServerへの接続が途切れたログが一行でたが、見た目で分かる影響は無かった。

W [socket.c:1494:__socket_proto_state_machine] 0-glusterfs: reading from socket failed. Error (Transport endpoint is not connected)

 
 

Bigfixもそこそこ多いので、更新しておいたらよい。
 

2011/07/18

nginxのupstreamから502を対象外にする

railsをunicornでrackupする際、よくunixsocket経由でnginxをフロントに使う。
で、それをバックエンドにしてさらにNginxでロードシェアする時の設定。
 

画像:nginx-nginx-unicorn_01
 

2011/07/12

Gluster server でログローテーション時に Volume Fail.

Glusterfs(3.2.1) でサーバ側のログをローテーションしようとした。
 

あちらこちらで 『-HUPを渡せ』 と書いてあるのでそのとおりにしたらローテーション時に下記のエラーが記録されている。

[glusterfsd.c:780:reincarnate] 0-glusterfsd: volume initialization failed.


案の定一部のクライアントからWrite不可の状態だった。
 

もうお前にHUPは渡さん。
 
 

さてどうするか、ということで copytruncate
することにした。
copytruncate についてはmanを見て。

man logrotate8
http://linuxcommand.org/man_pages/logrotate8.html


 

毎晩restartさせるよりtruncate中のログがないほうマシだわ。
 

2011/07/07

Upstart で god を respawn

ruby でかかれたプロセスライフサイクル管理のフレームワーク god。
 

肝心のgodが止まらないようにUpstartでrespawnさせます。
 

2011/07/02

Vyatta、 Vyatta自身へのFireWall適用

VyattaのFireWallは賢い子なので、フィルタリングのルールは本体宛とは別のCHAINで管理・適用している。

つまりいきなりポート全遮断などのルールを適用してもVyattaへは繋がるので無問題、リカバリ可能というわけだ。
 

しかし、そのVyatta自身宛へのパケットをフィルタしたい場合はどうするのかな?
と思いつつ設定見直していたら発見。
 

# set interfaces ethernet eth0 firewall
Possible completions:
in Ruleset for forwarded packets on inbound interface
local Ruleset for packets destined for this router
out Ruleset for forwarded packets on outbound interface

 

なんだlocal でいいのか。
 

2011/07/01

mongodb、config serverをjournalする

気づいたらmongodbに従来の周期的なDisk書き出しに加えてjournalという方式がついていた。
 

journalについては @doryokujin さんの解説が詳しいのでそちらへ

>> MongoDBの新機能:ジャーナリングについて詳しく


2011/06/29

Microsoftのワイヤレスマウス(3500)を正式採用

俺が採用。
 

マウスに線がついているのが嫌なのでワイヤレスタイプをいくつか試していた。
そんななかでMSの「Wireless Mobile Mouse 3500」がよかったので職場用に加えて自宅&ノートのため2つ追加で購入。
 

良かったところ。

  • BlueTrackがいい。 赤外線なりの古めかしいスキャン方式は全然アカン

  • レシーバ小さい

  • ホイールが引っ掛かるタイプ。 止まらないの(チルトホイール)はどうも使いにくい。

  • 安い、Amazonで2000円切る。





 

これは広くおススメする。
ただしオーシャン ブルー、ユーロ シルバーおよびアーバン レッドだと私と被ります。
 

2011/06/27

Pocket WiFi「D25HW」とURoad-8000の大きさを比較

スペックとかでなく、単純に比較した。

写真:タテヨコ

写真:奥行

URoad-8000の厚みが目立つが、一回り大きい分D25HWにバスタブをつけるよりはマシっぽい。

新しいほうのPocket WiFi、GP01も似たようなもんだろうか。
 

monitでMySQL Clusterの監視

monitの監視はサービスポートへの接続やプロトコルを少々やり取りさせるのが定石。

MySQL Clusterの管理ノード・データノードをTCPポートで監視する場合のMonit設定例。

RalinkのUtilityで無線LANのリージョンを変更

今回調整したのは「802.11g Mini Card Wireless Adapter」
型番は確かRalink2870だった。
 


ノートPCからWiMAXの無線LANルータに繋ごうとしたらSSIDを検出しない。
他のデバイスから確認すると、自動で13chに設定されていたので1-11chに設定すると検出。

なるほどデバイス自身のモード変更が必要ということで、下記からUtilityをゲット。

http://www.ralinktech.com/support.php?s=1

画像:ralink_util

リージョン変更して再起動、無事1-13chの検出に対応した。
 

2011/06/22

ubuntuでzeromq

メモエントリ

zeromq≒libzmqをubuntu10.10にインストール。
http://www.zeromq.org/area:download
 

作業時点のzeromqバージョンは2.1.7。

aptitude install uuid-dev

mkdir /usr/local/src/zeromq
cd /usr/local/src/zeromq


wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar xvzf zeromq-2.1.7.tar.gz

cd zeromq-2.1.7/
./configure

make install
ldconfig


あとでcookbookにする。

2011/06/21

Ubuntu10.10のcactiにPlugin Architecture

Ubuntu10にcactiを入れて、pluginを有効にする。
環境は cacti 0.8.7g(apt)、Plugin Architecture v2.8。
 

2011/06/17

mongodbのlogorotate対応

mongodb-10genのリポジトリからインストールしたmongodbをloglotateに対応させるメモ。
 

2011/05/20

Ubuntu10.10で bonding + vlan + bridge(NG編)

XenServerやVMWare等では簡単な操作で可能な「VLAN + Bonding」の構成、KVMやlxcでは手動で設定しておきます。
 



追記:このbondにvlanを付ける設定では、ゲスト同士がVLANでやり取りできない。
bond0, bond0.100 とするのでなく、bond0(eth0+eth1), bond1(eth0.100+eth1.100) となるように設定するとうまくいく。


2011/05/11

Mongodb ShardのためにUpstart起動スクリプト

Ubuntu向け。

10-genのリポジトリからmongodb(mongodb-10gen)を入れた場合、普通のMongoDB起動スクリプトがはいります。

Shardingするなら必須のConfig, Router用は別途必要なのでUpstart用に作成した。

init.dのことは忘れなさい。
 

2011/05/10

2011/05/09

VyattaのbridgeでSTP

Vyattaで透過FWなんかを作った際に冗長化できるかとSTPを有効にしてみた。

こんな感じ。
# set interfaces bridge br0 stp true


やってることは"brctl stp"と同じですが。



$ show bridge br0 spanning-tree
br0
bridge id 0000.0800277d3173
designated root 0000.08002722f2bc
root port 1 path cost 4
max age 20.00 bridge max age 20.00
hello time 2.00 bridge hello time 2.00
forward delay 15.00 bridge forward delay 15.00
ageing time 300.01
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 54.06
flags

eth0 (2)
port id 8002 state blocking
designated root 0000.08002722f2bc path cost 4
designated bridge 0000.08002722f2bc message age timer 18.63
designated port 8002 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags

eth1 (1)
port id 8001 state forwarding
designated root 0000.08002722f2bc path cost 4
designated bridge 0000.08002722f2bc message age timer 18.63
designated port 8001 forward delay timer 0.00
designated cost 0 hold timer 0.00
flags


nice blocking.

FWの設定は同期できるので、これで十分そうだ。

2011/05/06

Vyatta6.2からNetFlow

2行でよかった。

set system flow-accounting interface br0
set system flow-accounting netflow server 192.168.10.1 port 9996


Vyattaは出来る子だなあ。

2011/05/03

Nginxのログをmongodbに入れるために

mongoimportが便利でmongodbが柔軟なので、ログを入れたくなる。
取り急ぎWebのログでもいれちゃうか、というお話。
 

HTTPサーバのアクセスログはそれなりの解析ツールもあるんだが、あえてMongoDBに突っ込んでみよう。

2011/04/30

素で運用中のMongodbをShardにするステップ

とり急ぎで作ったmongodb、分散も冗長もしてないがこの先どうする?
と思いきや実は結構簡単に拡張できる。
 

単体からShardにする場合のステップをまとめてみた。
 

2011/04/28

dnsmasqとunboundを比べて、dnsmasqを選んだ

だってキャッシュなのにround robinしてくれるんですもの。
 


ラウンドロビンの確認


googleを2回聞いてみる。

$ sudo netstat -naplu
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:53 0.0.0.0:* 4832/dnsmasq

$ dig www.google.com @127.0.0.1
;; ANSWER SECTION:
www.google.com. 53288 IN CNAME www.l.google.com.
www.l.google.com. 236 IN A 64.233.183.103
www.l.google.com. 236 IN A 64.233.183.99
www.l.google.com. 236 IN A 64.233.183.147
www.l.google.com. 236 IN A 64.233.183.106
www.l.google.com. 236 IN A 64.233.183.105
www.l.google.com. 236 IN A 64.233.183.104
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)

$ dig www.google.com @127.0.0.1
;; ANSWER SECTION:
www.google.com. 53287 IN CNAME www.l.google.com.
www.l.google.com. 235 IN A 64.233.183.104
www.l.google.com. 235 IN A 64.233.183.103
www.l.google.com. 235 IN A 64.233.183.99
www.l.google.com. 235 IN A 64.233.183.147
www.l.google.com. 235 IN A 64.233.183.106
www.l.google.com. 235 IN A 64.233.183.105
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)


順番入れ替え、Query time 0 msec. よいね。
 
 

ubuntuにすぐインストール


大体30秒で終わる、簡単インストール&Setup。

aptitude install dnsmasq

 

ローカルアドレスのみListen


インターフェースの指定とresolv.confの編集が必要、まあスクリプト流して終わりだ。

# Local Listen
cat >/etc/dnsmasq.d/listenlocal.conf<<'EOFEOF'
interface=lo
except-interface=eth0
listen-address=127.0.0.1
EOFEOF

# include設定
sed s/\#conf-dir=\\/etc\\/dnsmasq.d/conf-dir=\\/etc\\/dnsmasq.d/ /etc/dnsmasq.conf -i
service dnsmasq restart

# 1行目に差し込み
sed 1s/^/nameserver\ 127.0.0.1\\n/ /etc/resolv.conf -i
service dnsmasq restart

 
 

RRはDNSコンテンツサーバだけがやるべきで、キャッシュサーバは順番を固定するのが推奨されているようだ。
だが俺はUnboundを選ばなかったなあ。
 

[再掲]MySQLでバイナリログから更新系のクエリをトレースする

旧ブログから、自分で参照したので再掲。
 
MySQLのバイナリログから発行されているSQLをトレースする。
 

MySQLのバイナリログ取得設定


MySQLのバイナリログをとっておけば色々出来る、その辺は公式やら書籍が詳しいので割愛。
 

2011/04/25

Chef-Clientを既存Gem環境に影響なくインストール

Chefは便利だが、少なくともRuby+Gems(Chef)まで必須で、もちろん依存するGemsも必要だ。

Rubyを利用していない環境ならともかく、他とお互い干渉しないようにしておきたい。


ただのBundlerの紹介になるが、Chef-Clientを既存環境に影響ないよう使ってみる。

pem(RSA PRIVATE KEY)からssh-rsa形式の公開鍵を作成する。

sshの鍵認証でauthorized_keysに記載する内容は、通常ssh-keygenで作成したものを使う。

Chefのclient(ここではサーバ上のユーザ)を作成するときに鍵セットができるんだが、Knife sshを使うときにこの秘密鍵を使いまわせると楽だ。
 

2011/04/21

MonitでKyoto Tycoon(with memcached plugin)を監視する

Kyoto Tycoonは局地で一定の支持があるFAL Labsさんのプロダクトです。
 

memcached互換の(プラガブル)リモートサーバを持ちつつ、本家よりメモリ効率がよいらしいので使ってみることにしました。

さて使用に当たってmonitの内部監視を立てるんだけども、プリセットのmemcachプロトコルではfailになる。
見た目は完全に互換があるように見えるが、monitの見ている所は違うんだろう。。

しかしL4監視なんて全く意味がないので、ここはmonitの"send&expect"を使ってプロトコル監視をします。
 

2011/04/18

Upstartでmonitをrespawn

みんな大好きサーバ放置ツールのmonitです。

多少のトラブルなら「対処してみた」という事後報告が来るだけなので重宝します。
 

公式のマニュアルにはinitしか例がないのでUpstartに置き換わったディストリビューションではどうやるの?
 

Ubuntu10.10(maverick)にRedis2.2系をインストール

Redisを使うんだが、Ubuntuの標準パッケージでは2.0でrc版なのでtarボールからインストールする。
起動スクリプト、ログローテーションはパッケージ版を参考にしました。
 

2011/04/13

Vyattaで作るTransparent FireWall その1/n

Linux-Debianベースのルータアプライアンス、VyattaTransparent FireWallを構築する手順。
 

Transparent FireWallは透過型、トランスペアレント型とか言われますね。
便利な構成が作れますが、Vyattaでの作り方は公式のFireWall Reference Guideでもちゃんと取り扱っていません。
基本過ぎるから?周囲を見るとそうでもないように思うけど。。
 

ということで数回に分けて構築方法をまとめてみます。
 

2011/04/11

mongodbのrepair時、パーミッションに注意

壊れたmongodbを修復するにはオプション、"--repair" をつけてmongodコマンドを実行します。

mongod --dbpath=/var/lib/mongodb --repair


これで修復したmongodbが起動しない時はパーミッションが変更されているせいかも。


DBの実ファイルのパーミッションがrepairを実行したユーザになります。
rootでrepairしちゃうと、DBのファイルがroot所有になってしまうということですね。


ログを確認したら"Permission denied" が出ていたのでパーミッションを修正しました。
chown -R mongodb:nogroup /var/lib/mongodb/



環境はUbuntu10.10、MongoDB1.8.1 でした。
 

どうやったらMongodbが要修復になるかっていうと、例えば無限ループをdiskfullになるまで突っ込んでみるとか。。
 

2011/04/07

MongoDBの1.8.1 が出たようなので更新する

バグフィックスらしいね。

パッケージインストールにしていたので隙はなかった。

# aptitude update
# aptitude upgrade mongodb-10gen



SECONDARY(全部) > PRIMARY の順にやろう。


# mongo
MongoDB shell version: 1.8.1
connecting to: test
mondev:PRIMARY>

2011/04/05

nginxのログをsyslogに投げる

名前つきパイプの例、古典的なやり方。

rm /var/log/nginx/access.log
mkfifo /var/log/nginx/access.log




パイプの取り出し側にはそれなりに工夫が必要だと思うが、
とりあえずnginxを起動してから。
# cat /var/log/nginx/access.log | logger -p local4.info


とすると、loggerがsyslogに投げてくれる。

1301982441 local4.info prox01 "xx.xxx.xxx.xxx - - [05/Apr/2011:14:47:21 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0""

(フォーマットは少々いじっている。)


syslog-ngならsourceに指定することもできそうだ。


ただこれをやると、nginxがパイプの処理を待つようになっちゃうので使いどころ注意。

syslog-ngを使ってフリーダムなsyslogを:json編

syslog-ngでは、syslog,rsyslog※に比べてログの出力を比較的容易にカスタマイズできる。

※基本的にRFC3164に準拠

確かにSyslogはパースしにくい、ならたとえばjsonで出してしまうというのはどうか。

ubuntu10.10(Merverick)のsyslog2ng

ubuntu10.10をrsyslogからsyslog-ngに入れ替えようと思いました。

デフォルトで入っているのはrsyslog、aptでsyslog-ngを入れると勝手にremoveされます。


さて、syslogからsyslog-ngに変更する際はsyslog2ngというスクリプトが使えますが、ubuntuのrsyslogからではどうかな。

2011/04/01

refinerycms, radiant などをbundleでインストール

railsで製造されたアプリケーションは、gemでインストールしたコマンドを使ってサイトをビルドするタイプのものがある。
refinerycms, radiant などがそういう感じ。
 

たとえばrefinerycmsだとこの4行でインストールOKとあるが。。

gem install refinerycms
refinerycms path/to/my_new_app
cd path/to/my_new_app/
rails server


このやり方は標準で読み込むGEMSがやたらと増えるしバージョン依存とかいやだ。

これをbundlerを使って何とか影響範囲をRaisHome内にとどめてみよう。

富豪的ともいわれるが。
 

Gitorious:さくらのVPSをUbuntu10.10にしてチーム共有のリポジトリにする

開発チームでグローバルなGitが欲しいとなった。

Gitosisはgitosis-adminのリポジトリ編集が必要で、皆が自由にリポジトリを作るのにはひと工夫がいる。

なのでGitoriousを置こうと。http://gitorious.org/
パブリックにしたいところだが、そこは堪えてプライベートモードにしよう。

構築先はさくらVPSが適当だろう。

事前にRackSpaceでUbuntu10.10へのGitorious構築手順を確認した。
http://www.sawanoboly.net/dwiki01/devops/gitorious
Cookbookにするのはちょっとしんどいな。

Githubの有料版でもいいっちゃあいい。

2011/03/31

PPA版Nginxのコンフィグオプションをチェック

Ubuntu10.10(maverick)などでnginxを使う場合は、公式が用意しているLaunchPadのPPAからStableを使うのがよさそうだ。

インストールして、どんなモジュールが使えるかチェックした。

# nginx -V
nginx version: nginx/0.8.54
TLS SNI support enabled
configure arguments:\
--conf-path=/etc/nginx/nginx.conf\
--error-log-path=/var/log/nginx/error.log\
--http-client-body-temp-path=/var/lib/nginx/body\
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi\
--http-log-path=/var/log/nginx/access.log\
--http-proxy-temp-path=/var/lib/nginx/proxy\
--http-scgi-temp-path=/var/lib/nginx/scgi\
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi\
--lock-path=/var/lock/nginx.lock\
--pid-path=/var/run/nginx.pid\
--with-debug\
--with-http_addition_module\
--with-http_dav_module\
--with-http_geoip_module\
--with-http_gzip_static_module\
--with-http_image_filter_module\
--with-http_realip_module\
--with-http_stub_status_module\
--with-http_ssl_module\
--with-http_sub_module\
--with-http_xslt_module\
--with-ipv6\
--with-sha1=/usr/include/openssl\
--with-md5=/usr/include/openssl\
--with-mail\
--with-mail_ssl_module\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-echo\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-upstream-fair


主要なモジュールに加え、サードパーティのモジュールも入ってますね。
Fairが使えるのは嬉しいのかもしれない。

Nginx用の a2ensite, a2dissite がないのでツールを作る

最近ChefのCookbookを触っているが、Rubyをちゃんと読めるほうが都合がよいので練習がてら。

ubuntuなどのdeb系はapache httpdのサイト管理がよく作られており、サイト単位の有効無効を a2ensite, a2dissiteというツールで切り替えるように工夫がされています。

Nginxでもコマンドでサイト管理やりたいなあと思い作成。
 



使い方


3つのメソッド(サブコマンド)を持ちます、オプションなしでたたくと一応使い方を出すようにしました。


  • list:sites-available にあるコンフィグファイルをリストアップ。
    現在有効なものは+(プラス)を、無効なサイトは-(マイナス)を付与して表示。

  • enable {configfile}:sites-enabled にリンクを作成してnginxをリロード。

  • disable {configfile}:sites-enabled からリンクを削除してnginxをリロード。


 


コマンド例


ngsitectl.rb disable default

とか

ngctlにエイリアスして
ngctl enable example.com

このようにします。


リストはこんな感じで出します。
# ngctl list
- example.com
+ 8082
+ rprox.conf
+ 8081
- default
+ 8083
+ ssl_rprox.conf




リロードがいやな人はコメントアウトしたりgracefulに相当する手続きがあるのでそれを変わりに仕込みましょう。
この辺は改良の余地が大きいですね。
 

コード


自分でつかうのでGithubにも置いてます。
https://github.com/sawanoboly/optools/blob/master/ngsitectl.rb
うちはハイライトしてないからGithubのほうが見やすいですね。

そうそう、1.9.2 p180 で作っているので他のVerについては動くか見てないです。

ngsitectl.rb
#!/usr/bin/env ruby
# encording: utf-8

## Const
AvailDir = "/etc/nginx/sites-available/"
EnableDir = "/etc/nginx/sites-enabled/"


# list up all site and add "+" for enable sites.
def list(sitename)
sitesall = Dir.entries(AvailDir)

# exclude dots
sites = sitesall.select{|elem| elem != "." and elem !=".."}

# enabled sites check.
sites.each do |site|
if File.exist?(EnableDir + site) then
puts "+ " + site
else
puts "- " + site
# File.symlink(AvailDir + site, EnableDir + site)
end
end
end

def enable(sitename)
if File.exist?(EnableDir + sitename) then
puts "Site:" + sitename + " is already enabled.\nDo nothing."
elsif File.exist?(AvailDir + sitename) then
puts "enable: " + sitename
File.symlink(AvailDir + sitename, EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end

def disable(sitename)
if File.exist?(AvailDir + sitename) then
if File.exist?(EnableDir + sitename) then
puts "disable: " + sitename
File.unlink(EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " is already disabled.\nDo nothing."
end
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end


begin
method(ARGV[0]).call(ARGV[1])
rescue TypeError => ex then
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
rescue => ex
puts "Exception " + "#{ex.class}"
puts "#{ex.message}"
puts
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
end

2011/03/26

Ubuntu10.10、Open vSwitch(1.1)でBonding

Linux、特に仮想ホストでブリッジをOpen vSwitchにしておくことは色々と良い気がするのでKVMのホストに導入してみた。
 

さて、Helpを見るとBondingができるようです。

# ovs-vsctl --help
--snip--
Bridge commands:
add-br BRIDGE create a new bridge named BRIDGE
--snip--
Port commands:
add-port BRIDGE PORT add network device PORT to BRIDGE
add-bond BRIDGE PORT IFACE... add bonded port PORT in BRIDGE from IFACES

add-bondなどというサブコマンド。

既存のbondingモジュールを外して設定してみます。
 

2011/03/22

さくらVPSのUbuntu10.10にRuby1.9.2

サーバにOSをインストール(過去記事参照)したら、次に入れるのはRubyだろう。
Chef-clientにするためだ。

最近やっている手順をメモっておく。
※rubyのパッチバージョンは適当に読み替えで。
 

2011/03/21

ネットワーク経由でmembaseとmemcachedを比較

memcachedは便利だがスケールさせるとなるといろいろ考え方がある。

プロダクトもいろいろあるが、memcachedの本家が作っており導入が簡単なmembaseを試してみた。
ネットワーク越しだと割り切ればそれなりだ。

さくらのVPS(1G)にUbuntu10.10をインストール

さくらのVPS(1G)を使おう。入れる予定はChefとSwiftとgit。

シリアルコンソールがつながっているため、手動Netbootなりの方法が使える。
ubuntu10.10を入れてみよう。
 


参考:第154回 さくらVPSへのネットブートインストールをPreseedingで自動化する

手法自体は参考記事の出だし部分があれば大体OKなんだけども、
GRUBの設定を少し修正する必要があった。※元記事はGRUB1, ここでは10.04を一度入れていたのでGRUB2なのです。

menuentry "Ubuntu Netboot Install" {
set root=(hd0,1)
linux /ubuntu/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r
initrd /ubuntu/initrd.gz
}

 


これでOK。
またはGRUBのコンソールで頑張ってもいいけど。
 

2011/03/18

mongoDBを1.6.xから 1.8.0にアップグレードする

monogoDB1.8の正式版がリリースされた。
開発環境にはubuntu10.10Serverにパッケージで入れている1.6.5が動いている。


公式ドキュメントUpgrading to 1.8.0を見ると、バイナリ上書きでOK! みたいなことがあるのでUpgradeしてみた。

気になるレプリカセット構成も順繰りでUpgrade可能だった。
 

2011/03/16

MongoDBのレプリカセットで、Slave(Secondary)からもget (Readの負荷分散)

MongoDBの負荷分散ではReadのためのReplicaSet、WriteのためのShardと2つの方式を取ることができます。

ReplicaSetは冗長化・ミラーリング、Shardingはストライピング風の役割で、スケールアップするためにはRaid10を構成するように拡張していくことになります。
 

libvirt下のVMでSheepdogのdiskを使おう

SheepdogからのVM作成ができたらば、次はvirshやvirt-managerから操作するためにlibvirtで管理できると助かると思う。
 

前提としてこのくらい必要だが、できるようになっている。

  • Sheepdogが動いており、利用可能なボリュームがある

  • libvirtのバージョンは0.8.7 以降(diskのtypeにnetworkが追加)

  • virshがどこかで使える


 

2011/03/15

[再掲]Pythonの一行WEBサーバ

旧ブログから再掲。
 

Linuxサーバで作業中、カレントディレクトリをルートにしていきなりWEBサーバを上げる。
 

python -m SimpleHTTPServer

 

TCPの8000番で上がってくるので、ブラウザからファイルを参照することができる。
index.htmlがあればそれが表示される。

画像:libvirtのDocs
 

読もうとしたDocumentがHTML形式だったときは、読む際にWEBサーバで上げてしまう。
Rubyでもできるけども、OS入れたら大抵入ってるPythonなのがいい。
 

物理サーバ1台でSheepdogの分散を試す 経過 2/n

物理サーバ1台でSheepdogの分散を試す 計画編の続き。
 

仮想ブロックデバイスのクラスタリングエンジンSheepdogについて。


画像:Sheepdogを使ったVM
 

こんな環境でSheepdogは動作するのか?というテスト。
 

2011/03/12

knifeのInteractiveモードがとてもインタラクティブ(chef)

またChef - knifeの話だ。
 
knife sshにはインタラクティブモードというのがある。
やってみよう。
 


# knife ssh "lsb_id:Ubuntu" interactive  -x root -P passwd


クエリは前回同様だが、コマンド部にて"interactive"を指定しよう。
複数ノードが引っかかるようにクエリしたほうがよくわかる。
 

では動作についてちょっと紹介。

Knife sshで任意のサーバにコマンド実行(Chef)

前回のChefServer紹介で、クライアントがインベントリされるのが分かりました。

recipe通りに仕上がったサーバに手を加えるときにこのインベントリが役に立ちます。
 


これを活用するにはknifeのサブコマンド、knife sshを使うのが分かりやすいでしょう。
単純な話なので例だけ。
 

2011/03/11

Chef-Server/Client で楽をしたい

自動デプロイツールのChefってどうやねんという人向けにこうなるというのを手順無視でお届け。
 

ちなみに導入するなら初めはServerをマニュアルで入れるのが使っている部品が分かってよい。

2011/03/08

物理サーバ1台でSheepdogの分散を試す 計画編

最近分散ストレージのSheepdogが気になるのです。
http://www.osrg.net/sheepdog/


試してみようと思っているが、今丁度よさげなサーバは数台。
仕方がないので物理サーバ1台で分散する構成を考えました。

※まだ試してないので計画段階です、何かで頓挫するかもね。
 

ubuntu10.10Serverでbonding

UbuntuBonding
https://help.ubuntu.com/community/UbuntuBonding

を参考に設定したがそれだけでは設定がうまくいかなかったのでメモ。
 

2011/03/03

mongodbでRESTをON(confファイル)

mongodbを立ち上げるとついてくるWebUI、初期値ではRESTがOFF。
オプション "--rest" を付けて立ち上げるように促される。


なぜかアンドキュメンテッドなんだが、

設定ファイル(/etc/mongodb.confなど)に
rest = true


としても有効になるのだ。

MySQL Clusterの管理ノード(ndb_mgmd)冗長化

MySQL Clusterの情報をいくつか見てましたが、ndb_mgmdが冗長化された状態のサンプルが見当たらなかったので自分のところで載せておこう。
 


設定例


SQLノード(mysqld)、データノード(ndbd)の設定


ndb-connectstring をカンマ区切りで並べたらよいみたいです。

参考:クラスタの 接続文字列
http://dev.mysql.com/doc/refman/5.1/ja/mysql-cluster-connectstring.html

 


ndb-connectstring=192.168.30.227,192.168.30.235

 

管理ノード(ndb_mgmd)のconfig.ini



IDを分けて2つ定義します。
# node A
[NDB_MGMD]
hostname=192.168.30.227
datadir=/var/lib/mysql-cluster
id=1

# node B
[NDB_MGMD]
hostname=192.168.30.235
datadir=/var/lib/mysql-cluster
id=2



管理ノードの初回起動時にコマンドラインで自分のIDを指定しました。
NodeA # ndb_mgmd --ndb-nodeid=1
NodeB # ndb_mgmd --ndb-nodeid=2


一度起動しておけば、バイナリ化されたコンフィグに持つのか、移行は自分のIDを覚えててくれるようです。
 


起動してみる


お互いをの管理ノードを起動して、しばらく待てば2つの管理ノードが並ぶ。

 -- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.30.227:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 4 node(s)
id=11 @192.168.30.227 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 0, Master)
id=12 @192.168.30.235 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 0)
id=13 @192.168.30.228 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 1)
id=14 @192.168.30.236 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 1)

[ndb_mgmd(MGM)] 2 node(s)
id=1 @192.168.30.227 (mysql-5.1.51 ndb-7.1.10)
id=2 @192.168.30.235 (mysql-5.1.51 ndb-7.1.10)

[mysqld(API)] 2 node(s)
id=51 @192.168.30.227 (mysql-5.1.51 ndb-7.1.10)
id=52 @192.168.30.235 (mysql-5.1.51 ndb-7.1.10)


どちらからでもndb_mgmシェルで操作可能、片方をkillしても一応稼働しいてた。

管理ノードを冗長化したら、動作はActive+Standbyだと見た気がするんだがどっちかがマスターなのかしら?

Amazon AWSで リージョンTokyoをデフォルトで使う

Twitterで何やら騒がしいのでAWSをのぞいてみた。
Tokyo(ec2.ap-northeast-1) が来ていたのか。

EC2_URL の環境変数を設定しておけば、デフォルトのリージョンが指定できるのでTokyoにした。

[sawanobori@dev ~]$ export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
[sawanobori@dev ~]$ ec2-describe-regions
REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION us-east-1 ec2.us-east-1.amazonaws.com
REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
REGION us-west-1 ec2.us-west-1.amazonaws.com
REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com


うーん、来てしまったね。。

mysqlslapをrpmから取り出してつかう

mysqlslapの記事を見て使って見ようと思ったら、5.1のクライアントパッケージから同梱されていると。

CentOSから使おうとしたら入ってなかったので公式配布のクライアントrpmをばらして叩いてみた。


拾ってきたのはGenericのパッケージ、"MySQL-5.5.9-1.linux2.6.i386.tar"

展開して叩いてみる。
tar xvf MySQL-5.5.9-1.linux2.6.i386.tar
rpm2cpio MySQL-client-5.5.9-1.linux2.6.i386.rpm | cpio -id | cpio -id


usr/bin/mysqlslap -V
usr/bin/mysqlslap Ver 1.0 Distrib 5.5.9, for Linux (i686)


使えるかな?


# usr/bin/mysqlslap -h 192.168.1.10 -P 4040 -u root -p -a --number-of-queries=100
Enter password:
Benchmark
Average number of seconds to run all queries: 0.446 seconds
Minimum number of seconds to run all queries: 0.446 seconds
Maximum number of seconds to run all queries: 0.446 seconds
Number of clients running queries: 1
Average number of queries per client: 100


ちゃんと動くようだね。

※mysqlslap.t1 というテーブルを事前につくっています。

ubujntu10.10のmysql-proxyパッケージ

mysql-proxyを入れたが起動スクリプトが何もしないで
exitするので開いてみた。

しょっぱなからパスが違う。

×DAEMON="/usr/sbin/mysql-proxy"
○DAEMON="/usr/bin/mysql-proxy"

これでOKさ。

2011/03/01

phpのMySQLモジュールを差し替える

ただしSharedに限る。
 

LAMPな環境でMySQLだけ差し替えたりすると、しばしばこういう目に合う。
 


phpMyAdmin さんからの警告。
PHP MySQL ライブラリのバージョン 5.0.90 が MySQL サーバのバージョン 5.1.53 と異なります。

 

このままでも動くけど気持ち悪いのでMySQL関連のライブラリだけ差し替えます。
 

2011/02/23

UbuntuでNetworkInterfaceにIPアドレスを振らない

仮想PCのホストや、L2をブリッジだけさせたい場合にはNICにIPアドレスを振らないことはままある。
 



このように "manual" パラメータを指定できるようだ。
auto br100

iface br100 inet manual
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0

2011/02/16

RackSpace Cloud Server からIPv6

RackSpaceのCloud Serverというのを使い始めてみました。
256MBのサーバなら1月あげても$10くらいで、検証用にあげたり下げたりに使えそうです。
 
 

さて、せっかくグローバルな環境なのでIPv6が使いたいと思い、トンネル屋さんを調査。

無料で5個までIPv6トンネルが作れる、Tunnel Bloker というのに登録してみました。
http://tunnelbroker.net/

↑指摘があったので追記:
Hurricane Electric というホスティング他ISPをやっている会社が提供しているらしい。



以降、IPv6適用までを。

2011/02/15

ubuntu server 10.10 を導入、IPv4アドレスの固定

インストーラがDHCPだもんで、OS起動後に設定した。
その時のメモ。

インターフェイス関連の設定ファイルはこれだった。
(以下は sudo -s でrootになって作業した。)
vi /etc/network/interfaces


lo の設定の後に以下を追記。

auto eth0
iface eth0 inet static
address ***.***.***.***
netmask 255.255.255.0
gateway ***.***.***.***


ネットワークサービスの再起動
/etc/init.d/networking restart


あとは/etc/resolv.conf でNSを指定すればOK.
もともとのIP割り当てがなかった場合、sshも同時に上がってくる。

2011/01/28

再掲:Visioでオブジェクトのテキストを常に水平に表示

※旧ブログ2009年の記事を自分用に引っ張ってきました。文中のリンク切れなどがあるかもしれませんがご容赦を。


 

Microsoft のVisioで図を描くとして、オブジェクトにテキストを載せたとします。
通常、オブジェクトを回転させたらテキスト部分も一緒に回転するけど、それを自動で水平に保つやり方。
 

だいぶ前にそういう動作をする図を見て、少々ヘルプなど見てもどうやるかわからなかったのでほっといたんだけど、VISIOの解説書(MSのサイトを分かり易く再編) 見ながらシェイプシートのいじり方を見ていたら分かった。
 

ちなみに試したVisioは2003、資料は2000用だった、多分2007でも似たようなもんだろう。

追記:2007でも2010でもOKでした


 

2011/01/22

やはりMonitはいい

状態変化のイベントを収集するのにZabbixを使おうかとセットアップ。
 

他のサーバ/サービスはZabbixが見てくれるが、zabbix-serverのプロセス自体はどうするのよ、という所でmonitを入れた。

monit公式:http://mmonit.com/monit/
 

monitのやり方はいい、少し監視について話します。
 

2011/01/12

VyattaブリッジでVlanタグ(802.1Q)のつけ外し

まあ、Vyattaでなくてもできます。
 
 

諸事情で所属するVLANが異なるけどもサブネットが同じホスト同士を通信させたくなりました。
 

画像:ブリッジ1

単に802.1Qに対応したインテリなL2を入れればOKなんですが手元になかった為、Vyattaに中継してもらいます。
 

構成と設定を紹介。
 

2011/01/06

Proxmox VE を使う

Proxmox VE」は仮想サーバをホストするベアメタルもの、XenServerとかVMWareのESXiと同様です。

ベアメタル系は物理サーバにインストールするだけでラクにVMの管理ができるので重宝しますね。

ダウンロードはこのへんから => http://pve.proxmox.com/wiki/Downloads
 
 

Proxmox VE」の特徴は完全仮想にKVM,準仮想にOpenVZコンテナを作れるとのこと、ISOから入れてみます。
どうやら本来は、「ProxmoxのアプライアンスをVMで簡単につかえるよ」という趣旨のようですが気にしなくても問題ありません。