スタッフブログ

ローハイドのスタッフが、日常のこと、ネットで見つけた便利な情報、仕事に役立つとっておきのテクニックを紹介します。

Fight! the Rawhide

2011年7月15日16:34

herokuでRails3.1rc4を動かす

STAFF BLOG タグ: Comments (0)

おーた

普通にやったら動かなかったのでハマりました。

結論はGemfileに以下4行追加でOK

group :production do
 gem ‘therubyracer-heroku’, ’0.8.1.pre3′
 gem ‘pg’
end

have fun

2011年5月6日9:12

[Rails]Railsで簡単にforkして別プロセスで処理

STAFF BLOG Comments (0)

おーた

押忍、おおたです。

大量のデータの生成や取り込みで、別プロセスに処理を任せたい時、結構ありませんか?_?

DelayedjobやBackgrounDRbを使うのが常套手段ではありますが、
リッチすぎて使いたく無い病になってしまったので
「rubyのnativeな感じでforkしてみました。(長嶋風)」


class HogeCsvController < ApplocationController
.
.
.
 #POST /create
 #CSVファイルをいっぱいつくる
 def create
  #このdoブロックの中にプロセスをforkする処理を書きます。
  fork do
   exec "RAILS_ENV=#{Rails.env} #{Rails.root}/script/rails runner 'HogeCsv.generatel' > /dev/null"
  end
 end
end

たったこれだけで、別プロセスにて「CSVをいっぱいつくる処理」が起動します。

素直にDelayedJobつかえばいいやんって突っ込みは一先ず置いておいてw
個人的にはこのくらいがミニマルな感じが楽でいいなーと思ってます。

*どうにも/dev/nullにredirectしないとゾンビが大量生産されてしまうようです。もっとsmartな方法は無いものか。。

けど、これならナチュラルにphpとかCで書いたプログラムも呼べるし、
Workerとかいちいち作らなくていいし、結構いけてるんじゃないかなー。

そんな感じで、ぼつぼつ技術的なことも書いていこうとおもいました。

押忍

2011年1月19日4:04

24時間働きますか?

STAFF BLOG Comments (0)

おーた

こんにちわ

rawhide.のアリナミンVことおおたです。

べ、べつに徹夜が好きな訳じゃないんです。。

そういえばつい最近、弊社オフィスにピアノが設置されました。

深夜まで作業していると、周りを気にしないで思いっきり弾くことができます。

気分転換にいかがでしょうか。

朝日が近いのですき屋の牛丼を買ってきます。

意味不明なのでこの辺で。。。

2010年12月24日4:28

24時間働けますか?

STAFF BLOG Comments (0)

おーた

おはようございます。ローハイドのリゲインことおおたです。

このブログに書くのは4年ぶりぐらいです。

今宵もrawhide.は絶賛営業中です

師走っていそがしいですよね!!!!!

無駄にテンションがあがってこまってます。はい。

そんなかんじで。。

2007年5月26日23:12

[mysql]5.1.x系 クラスタリングの機能紹介1

STAFF BLOG Comments (0)

おーた

mysqlclusterの導入手順 PART2

FAQ編 2

Q.わーいわーい、ndbクラスタが動いたよ!!!

でも・・・server1のmysqlで

create database hoge;を実行して

hogeスキーマを作ったんだ。

で、

hogesテーブルをNDB型でつくったんだけど、

server2から見るにはどうしたらいいんだろう?

そもそもserver2にhogeスキーマがないしさぁ。

 

A.ここはmysqlクラスタの力の見せ所だね。どれ・・・

カタッカタッ
(server2のmysqlを起動した音)
カタカタカタッ
(server2でcreate database hoge;を実行した音)

>show tables;
+—————-+
| Tables_in_hoge |
+—————-+
| hoges        |
+—————-+
Q.すっげー!!!hogesテーブルが勝手に出来たよ!!

A.クラスタリングではもともと同じデータストアを利用するわけ
だから、当然スキーマがあればテーブルは既に存在してるわけさ。

Q.じゃあさ、mysql clientをserver1で立ち上げて
insert into hoges values(“こんにちわー”);
ってやってね、server2でselectすれば当然

+—-+——————–+
| id | name           |
+—-+——————–+
|  1 | こんにちわー   |
+—-+——————–+
ってでるんだよね。
これならinsertとselectでチャットが出来るね!!!!!

mysqlマニア感激のチャットクライアントさ!

 

A.・・・・

 

 

o.t.a

22:58

[mysql]5.1.x系 クラスタ起動手順&設定

STAFF BLOG Comments (0)

おーた

mysqlclusterの導入手順 PART3
便利な設定へん

ndb_mgmdを起動するときに
ndb_mgmd –config-file=/hoge/hoge/config.ini &
みたいにいちいち書くのはだるい!

そんなときはmy.cnfに書いちゃおう!

my.cnfに以下の項目を追加

[ndb_mgmd]
config-file=/var/lib/ndb/config.ini
(configファイルのフルパス)

これでndb_mgmd &だけでconfigを
自動的にロードして動きます。

 

サーバ2からndbd(データノード)を接続するときに
ndbd –ndb-connctstring=server1
みたいに書くのもだるいんだけど・・・

[ndbd]
connect-string=server1
(ndb_mgmdが動いてるサーバのホスト名)

これでserver2からndbdって打つだけで
起動します。

 

おまけ
[ndb_mgm]
connect-string=server1
(ndb_mgmdが動いてるサーバのホスト名)

これを設定しておけば、ndb_mgmdが動いてる
サーバ以外からもndb_mgm(管理コンソール)
が実行できるよ。
(そんなのやらないよね・・・)

 

!!起動手順はこんなかんじ!!
想定構成
server1= ndb_mgmd、ndbd、mysqldが動いている場合
***server1で実行***
# ndb_mgmd
# ndbd
# mysqld_safe &

***server2で実行***
# ndbd
# mysqld_safe &

これだけで動きます。

o.t.a

 

22:45

[MySQL5.1系]MySQL Cluster(NDB Cluster)の設定memo Vol.2

STAFF BLOG Comments (0)

おーた

mysqlclusterの導入手順 PART2

FAQ編 1
Q.mysqld(APIノード)が立ち上がらないんだけど・・・?

A.ここはハマリどころなんだ!なぜかというと・・
ndb_mgmd(マネージメントノード)は、色んなところから
見られる目立ちたがり屋さんなんだ。

Q.それだけじゃわからないよ・・・

A.目立ちたがり屋さんだから、/etc/hostsをいじって
サーバ名とIPアドレスを対応付けなきゃダメなんだ。

Q.ふーん

A.つまりね・・127.0.0.1みたいなlocalipアドレスが
ndb_mgmdのホスト名に対応付けられてると動かないんだよ。

Q.うーん、ピンとこないなあ

A.ローカルアドレスでndb_mgmdが起動しても、他の
サーバから見たら当然見えないよね。
だから、他のサーバは当然どこにつないでいいか
わからなくなる。

Q.ndb_mgmdくんって、人に見られてないと仕事を
出来ないかわいそうな人だなあ・・・

A.そう。悲しい人なんだ。だから他人からわかる
アドレスとhost名を設定して、connectstringに
設定して繋いであげてね。
そうするとバリバリ働くよ!

Q.わかったよ、ありがとう!
(でもそれってハマリどころというか、設定
ミスっただけじゃん・・・)

A.それは言わないお約束です。

o.t.a

2007年4月26日15:55

[MySQL5.1系]MySQL Cluster(NDB Cluster)の設定memo

STAFF BLOG Comments (0)

おーた

※.便宜上、クラスタリングに使用する2台のサーバを
「test1、test2」と記載しています。
これらのサーバ内で、既にmysql5.1系のインストールが
行われていることを前提とします。


1. データを入れておくディレクトリを作成します。(ここでは適当な場所につくってみます。)

***test1サーバ上にて***
shell# mkdir /home/hoge/ndb_mgmd-file
shell# mkdir /home/hoge/cluster-file

***test2サーバ上にて***
shell# mkdir /home/hoge2/cluster-file

2.mysqlルートに移動(test1,test2)

shell# cd /usr/local/mysql

3. my.cnfを設定します(test1,test2)

shell# cp support-files/my-large.cng /etc/my.cnf

shell# vi /etc/my.cnf

[mysqld]
ndbcluster
ndb-connectstring=hoge1

4. config.iniを設定します(test1)

shell# cp /support-files/ndb-config2-node.ini /support-files/config.ini

shell# vi /support-files/config.ini

[ndbd default]※変更箇所
NoOfReplicas= 2 → NoOfReplicas= 1
→レプリカ数です。1にすると冗長性を失いますが、
複数のサーバを1つのDBとして使えます。

DataDir → コメントアウト
→特に必要ないので・・

[ndb_mgmd_default]
DataDir → コメントアウト
HostName= hoge1
→マネージメントノードを起動するサーバのhost名

[ndb_mgmd]
id=1
DataDir= /home/hoge/ndb_mgmd-file
→マネージメントノードファイル置き場

HostName= hoge1
→マネージメントノードを動かすサーバのホスト名

[ndbd]
id=2
DataDir= /home/hoge/cluster-file
→データの置き場所のパス
HostName= hoge1
→データノードを動かすサーバのホスト名

[ndbd]※データノードの数分だけ[ndbd]を書きます。
id=3
DataDir= /home/hoge2/cluster-file
HostName= hoge2

[mysqld]※sqlノードの設定。デフォルトのままでOKです。
こいつもノードの数だけ書きます。

5. host名とIPアドレスを対応付けます。(test1,test2)

shell# vi /etc/hosts
192.168.0.x test1
192.168.0.y test2

6. マネージメントサーバ[ndb_mgmd]を起動します(test1)

shell# ./bin/ndb_mgmd –daemon –config-file ./support-files/config.ini
※引数でconfig.iniを指定しています。

7. 環境に応じてファイアウォールのポートを空けます。(test1,test2)

1)マネージメントノードを動かすサーバのポートを空けます。(1186.※test1のみ)

2)クラスタリングで使用するtcpのポートを空けます。(defaultだと63132、test1とtest2で設定)
→config.iniの[tcp_default]で変更可能

3)mysqlノードのポートを空けます。(defaultだと3306、test1とtest2で設定)

8.ndbdを起動します(test1,test2)

***test1で実行***
shell# ./bin/ndbd –initial(初回のみ–initialをつけます。)

***test2で実行***
shell# ./bin/ndbd –ndb-connectstring=test1 –initial

9.mysqldをSQLノードとして起動します(test1, test2)

shell# ./bin/mysqld_safe &
(my.cnfの設定が行われていれば
自動的にsqlノードとして認識されます。)


10.ndb_mgmを起動して状態を確認します(test1)

shell# ./bin/ndb_mgm
ndb_mgm> show
※クラスタリングの停止はshutdownコマンドで。すべてのノードが停止します。

成功例)
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.x  (Version: 5.1.17, Nodegroup: 0, Master)
id=3    @192.168.0.x  (Version: 5.1.16, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.x  (Version: 5.1.17)

[mysqld(API)]   4 node(s)
id=4    @192.168.0.x  (Version: 5.1.17)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)

このように、5.1系であればバージョンが異なっても
動作自体はします。
(実運用上はバグフィックス等々ある為
バージョンをあわせたほうが良さそう)

11.早速クラスタリングしてみましょう!!

shell# ./bin/mysql -uxx -p
mysql> CREATE DATABASE hoge_development default char set=utf8
mysql> CREATE TABLE hoges (
id INT(10) NOT NULL AUTO_INCREMENT
, name VARCHAR(255)
, PRIMARY KEY (id)
)ENGINE=NDB;
※クラスタリングを行っているとcreate table,
create database等のddlは遅くなります

mysql> show table status where Name = “hoges” and Engine=”NDBCLUSTER”;
※レコードが取得されればNDBClusterの設定は完了です。

それでは良いクラスタリングライフを。

o.t.a

Newer Posts »