2011-08-10

gitの設定メモ

今日のトラブル
設定しとかないと恥ずかしいことになるので、まずはじめにやりましょう。 (git config)
Gitをインストールしたら、とにかくgit configで設定は済ませてしまうこと。そうでないとコミットした時のAuthor名とかメールアドレスが、OSの設定そのままが見えてしまいます。
実は、最初にGitHubにプッシュした際に、設定を変えていなくて、使っていた環境のそのままの名前がログに出てしまい大慌てでした。
まずやることは、下記の通り。

# git config --global user.name "使いたい名前"
# git config --global.email "使いたいメールアドレス"

リポジトリごとに切り替えることはできますが、まずはデフォルトで適用される設定を変えておくこと。
こちらの設定は、~/.gitconfig に記載されます。

つぎはGitHubが例ですが、デフォルトの公開鍵・秘密鍵とは別のキーで、リポジトリにアクセスしたい場合の設定です。
こちらは、.ssh/config を設定します。
github用の場合は、下記のとおり。変更する箇所は、秘密鍵の名前のところだけです。
Host github.com
  User git
  Port 22
  Hostname github.com
  IdentityFile ~/.ssh/id_dsa_github ♯わたしの場合はここを変えた
  TCPKeepAlive yes
  IdentitiesOnly yes
これで、あとはSSHコマンドで、下記のような感じで取ってくることができます。

♯ git clone git@github.com:xxxxx/xxxxxxxx.git

まだ全然使いこなせていませんが、公開してもいいモノは、ぜんぜん役に立たないけれど置いてみようと思っています。

2011-08-08

Redmine trunk稼働以前


今日のトラブル: 動作環境はきちんと確認しましょう。

ひさしぶりに思い立って、綺麗な環境にRedmineを入れてみることにしました。(使っているRedmineのバージョンアップを放置していたので、まずは検証用に…という考えから)


Redmineのいろいろ(?)の後、bitbucketがリポジトリになっているということだったので、無謀にも、trunkで試してみることにしました。
今回お世話になったサイトは、下記の通り。公式サイトから個人の皆さんのBlogまで色々ですが、本当にありがとうございました
* * *


さて、まずはMercurialの環境を用意しないといけないのですが、こちらはPythonのeasy_installを利用できたので、とても助かりました。詰まった点は、上記のkuroyagi32mailさまのエントリで助けていただきました。
MySQL等も、Redmine.jp を参考に、確認しつつインストールです。
#ちなみに、mysql_secure_installation というコマンドがあるのを初めて知りました…。
Redmine.jp では、trunkの要件に Rails 2.3.5 と書かれていたので、Rails2.3.5で進めてみます。
hg cloneでソースを取るのは問題なく出来たので、まずdatabase.ymlを調整。
次に、session_store.rb を設定しようとしたところ…。
$ rake config/initializers/session_store.rb
Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`
と言われて、怒られてしまいました。
こちらはメッセージに従って、install。
$ sudo gem install -v=0.4.2 i18n
じゃあ、今度は…と思ったら、またもエラー。
$ rake config/initializers/session_store.rb
Missing the Rails 2.3.11 gem. Please `gem install -v=2.3.11 rails`, update your RAILS_GEM_VERSI
ON setting in config/environment.rb for the Rails version you do have installed, or comment out
RAILS_GEM_VERSION to use the latest version installed.

Rails2.3.11じゃないとダメなよう。物事はどんどん変わっているんですね…。仰せのとおりに、こちらもインストールします。
$ sudo gem install -v=2.3.11 rails
$ gem -v
1.8.7
$ rails -v
Rails 2.3.11
これでどうですか、と思ったら、まだ来ましたよ、エラーが!

$ rake config/initializers/session_store.rb
rake/rdoctask is deprecated.  Use rdoc/task instead (in RDoc 2.4.2+)
WARNING: 'task :t, arg, :needs => [deps]' is deprecated.  Please use 'task :t, [args] => [deps]
' instead.
    at /var/service/redmine/lib/tasks/email.rake:170
googleさんにお世話になると、こちらのissueに該当するようで、rakeは0.9.2じゃなくて0.8.7使ってね、とのこと。
確認してみると、やっぱり0.9.2なので、一度抜いてから0.8.7のものを入れ直しました。
$ rake -V
rake, version 0.9.2

$ gem uninstall rake
$ gem install rake -v=0.8.7
$ sudo rake config/initializers/session_store.rb
(in /var/service/redmine)
実は設定とか動作確認はまだまだですが、ここまでで一休みすることにしました…。


気を取り直して、再開。まずはDBのmigrationですが...。

$ rake db:migrate RAILS_ENV=production
(in /var/service/redmine)
rake aborted!
undefined method `name' for "actionmailer":String
(See full trace by running task with --trace)
なんとまあ、またもやエラー!

Redmine.orgのこのチケットに似ているのですが、どうやらまだ皆さん困っている模様。
gemの1.7以上だとだめなんだそうで、なんでも新しければ良いわけじゃないんですね。
これまたrubygemのバージョンを1.6.2に下げました。


何をするにも、多分皆さんの2倍、3倍はかかるんだろうなあ…、その間にももうどんどん物事は進んでるんだろうなあ、と、寄る年波を感じています。
おそらく次にやろうと思っても、またハマると思われるので、自分のためにメモとさせていただきます。


こんなわたしでも、Redmineのファンです :)



2011-08-03

PloneのZEOクラスタやってみた

Ploneに関わってから、ずーっとスタンドアロンで動かしていたんですが、とうとうユーザさんの業務にもストレスが出てしまう状況になってしまい、なんとか対応を検討。

英語ならいっぱい情報はあるのかもしれませんが、勉強会などで情報交換をすることも難しく、なんだか手さぐり状態でZEOクラスタ化に取りかかりました。
(やっぱり実際に動かしてみないと仕組みが理解できない人間です...)

それでも、MLやtweet、チャットなどでご助言下さった皆様、ありがとうございます!

ちなみに、クラスタ化するには、それなりにサーバのスペックを上げないといけません。実は、意外とネックだったのが、『ただのCMSにそんなにリソース要るの??』という認識を変えてもらわないといけなかったことでした(^^;
この点は、少しずつPloneの利用を進めて行き、「みんな使うようになったし、遅いとこまるでしょ~」みたいな戦略?で、インフラチームからのリソース捻出を図って行きました…。
ZEO化するにあたっては、こちら (単一インスタンスを ZEO クラスターに変更する )を参考にさせていただきました。


もっと最適な方法もあるのかと思いますが、現在こんな状況、という図を載せてみます。

* * *



シングル構成でいろいろプロダクトを追加している状態だったことと、blobstorage化していたこ
ともあり、ZEO化用の設定方法がうまくできずに四苦八苦...。

やっとZEO化できたにしても、ユーザは1つのURLをめがけてリクエストを投げてくるので、どうやって処理を分担すればいいのか全くわかりません...。

ハードウェアは全く専門外なのでハードウェアバランサはNG。(調達能力ももちろん無し)

URLを別々にするのはユーザに負担を強いるし絶対無理。

どうしようと悩んでいたら、Apache2.x系はソフトウェアバランサの機能が使えることが分かりました。
mod_proxy_balancer, Ploneをキーワードにしていくと、数件MLなどで例が出ていたので、ヘッダ等を調整して、なんとかなんちゃってZEOクラスタ化の環境が出来上がりました。

* * *

さて、パフォーマンスの件ですが、CPU数を追加し、それに見合ったプロセスを立ち上げることで、『劇的!』ではないのですが、リクエストを分散できる分、ユーザさんを待たせる状況は減った模様です。

ただし、プロセスを複数立ち上げるので、それなりにメモリも必要になってきます。

さらに、前のエントリに書いたように、いつのまにかメモリの使用量が増加してしまい、放っておいたらメモリ使い切ってしまう、という状況になりました。

こちらは原因と理由に納得したため、運用でカバーする方針としました。
また、おかげ様で、クラスタ化の効果が見えたことで、少しメモリも追加していただきました。

* * *

課題はいろいろあって、「ほんとにそもそもこんな感じの構成って良いのかしら?」ということが一番です。こちらは、皆さんにご指摘、ご意見いただければ幸いです。
(こんなへなちょこじゃダメ!というのでも)

また、ZOPE間のメモリレプリケーションはできないと認識しているので、キャッシュを有効にできるようにStickySessionを利用していますが、このへんもちょっと怪しいです。

たまたま重い処理の多いユーザが同居するインスタンスに接続した人は、損をしてしまいそうな気がして、微妙なところです。

個人的には、スケールアウトの方法が分かったのと、メンテナンス作業をしやすくなったのが幸いかな、と思っています。

まだこちらはPlone3.3.5の環境なので、Plone4もできれば試してみたいと思っています。




2011-08-02

メモリ確認用ワンライナー

メモリやりくりに関連して。
OSの実メモリがどれだけ使われているかをチェックするワンライナーのShell script。
* * *
プロセスに対して仮想メモリとして確保されたサイズのトータルと、プロセスに対して実際に消費されている物理メモリのトータル。(長!)気にするならRSS。
# ps aux | awk 'NR > 1 {vsz += $5; rss += $6} END {printf("VSZ total:%10f GB\nRSS total:%10f GB\n", vsz/1048576, rss/1048576)}'
VSZ total:  4.667442 GB
RSS total:  1.714958 GB

こっちは、メモリの使用率(%) が高いプロセス順に表示するもの。
# ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr | less





free -m, free -m -t でもチェックできます。
  • Mem:のfree が少ない!と言っても慌てない。
  • -/+ buffers/cache の free が少なくなっちゃったら要注意。



また、 cat /proc/meminfo でもチェックできます。