Pages

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の有料版でもいいっちゃあいい。