Shoken Startup Blog

KitchHike Founder/CTO

MongoDBをtarからインストールしてCentOS 7のsystemdで起動/停止する設定

CentOS 7では、これまでのSysVinitからsystemdが使われるようになりました。 MongoDBもyumrpmでインストールするとsystemdで管理できるようになるみたいです。 ただ、yumに上がっていないリリース直後のMongoDBをtarからインストールしたい場合、自分で設定する必要があります。ちょうどCentOS 7に最新のMongoDBを環境構築する機会があったので、作業メモとして残します。

一番手っ取り早いのは、yumなりrpmなりでMongoDBをインストールした後、インストールされた/usr/binディレクトリにあるバイナリを差し替えることです。ただし、そうするとyumで管理しているバージョンと差異が出るので注意しないといけません。

今回はyumでのインストールを行わずに、MongoDBのtar + Githubリポジトリにあるrpm用の設定ファイルを使ってsystemdでの起動設定を行います。作業はすべてrootユーザーで行いました。

環境

手順

1. MongoDB 3.1.5のインストール

Downloads - MongoDB から最新のMongoDBをtgz形式でダウンロードします。今回は、RHEL 7 Linux64-bitです。

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.1.5.tgz

設定ファイルはMongoDBのgithubにひな形があるので、ダウンロードして使います。

https://github.com/mongodb/mongo/blob/master/rpm/mongod.conf

他にもgithubrpmディレクトリにはsystemdで管理する際に必要となるファイルがありますので、後ほど使います。

まずは、rootユーザーでMongoDBが手動で起動するところまで進めます。

cd /opt
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.1.5.tgz
tar zxfv mongodb-linux-x86_64-rhel70-3.1.5.tgz  
ln -s /opt/mongodb-linux-x86_64-rhel70-3.1.5/ /opt/mongodb

wget https://raw.githubusercontent.com/mongodb/mongo/master/rpm/mongod.conf
mv mongod.conf /etc/mongod.conf

mkdir /var/log/mongodb
mkdir /var/lib/mongo
mkdir /var/run/mongodb

準備できました。起動の確認を行います。

[root@xxxx ~]# /opt/mongodb/bin/mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 6637
child process started successfully, parent exiting

起動しない場合は、/var/log/mongodb/mongod.logを確認しましょう。

mongoシェルから接続を確認します。

[root@xxxx ~]# /opt/mongodb/bin/mongo
MongoDB shell version: 3.1.5
connecting to: test
Server has startup warnings: 
2015-07-13T15:46:30.961+0900 I CONTROL  [initandlisten] 
2015-07-13T15:46:30.961+0900 I CONTROL  [initandlisten] ** NOTE: This is a development version (3.1.5) of MongoDB.
2015-07-13T15:46:30.961+0900 I CONTROL  [initandlisten] **       Not recommended for production.
2015-07-13T15:46:30.961+0900 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2015-07-13T15:46:30.961+0900 I CONTROL  [initandlisten] 
> 

WARNINGがいくつか出ると思いますが、今回の記事では気にしないこととします。 接続できたことが確認できたら成功です。

次の手順でsystemdによる起動を行うので、いま起動させたmongodプロセスは停止させましょう。 mongod.lockファイルの削除も忘れずに。

kill `cat /var/run/mongodb/mongod.pid`
rm /var/lib/mongo/mongod.lock

2. systemdによる起動設定

ここから本題のsystemdによる設定に入ります。まずはmongodグループとmongodユーザーを作成します。コマンドはgithubにあるrpm用のspecファイルを参考にしています。

https://github.com/mongodb/mongo/blob/master/rpm/mongodb-org.spec

/usr/sbin/groupadd -r mongod
/usr/sbin/useradd -M -r -g mongod -d /var/lib/mongo -s /bin/false -c mongod mongod 

関連するディレクトリの所有者をmongodに変更します。

chown -R mongod:mongod /opt/mongodb
chown -R mongod:mongod /var/log/mongodb
chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/run/mongodb

systemdのserviceファイルをgithubからダウンロードして配置します。

wget https://raw.githubusercontent.com/mongodb/mongo/master/rpm/mongod.service
mv mongod.service /usr/lib/systemd/system
ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/

daemon-reloadの後、起動させます。

systemctl daemon-reload
systemctl start mongod.service

systemctl statusで起動を確認しましょう。

[root@xxx ~]# systemctl status mongod.service
mongod.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled)
   Active: active (running) since Mon 2015-07-13 16:16:04 JST; 5s ago
 Main PID: 6774 (mongod)
   CGroup: /system.slice/mongod.service
           └─6774 /opt/mongodb/bin/mongod --quiet -f /etc/mongod.conf run

Jul 13 16:16:04 xxx systemd[1]: Starting High-performance, schema-free d.....
Jul 13 16:16:04 xxx systemd[1]: Started High-performance, schema-free do...e.
Jul 13 16:16:04 xxx mongod[6772]: about to fork child process, waiting u...s.
Jul 13 16:16:04 xxx mongod[6772]: forked process: 6774
Jul 13 16:16:04 xxx mongod[6772]: child process started successfully, pa...ng
Hint: Some lines were ellipsized, use -l to show in full.

Activeがactive (running) となっていたら成功です。お疲れさまでした!

停止コマンド

systemctl stop mongod.service

3. OS再起動時に/var/run/mongodbを作成する設定

CentOS 7は/var/run はtmpfsとなっているので、OS再起動時に削除されます。 /etc/tmpfiles.d/mongod.confを作成して再起動後もディレクトリが作成されるようにしましょう。

echo "D /var/run/mongodb 0755 mongod mongod -" > /etc/tmpfiles.d/mongod.conf

PipelineDBとContinuous Queryについて調べたこと

jp.techcrunch.com

TechCrunchの記事で、PipelineDBがオープンソースでリリースされたことを知ったので調べてみた。

記事には、

このオープンソースのデータベースはSQLのクェリを連続的にストリーミングで流し、結果のテーブルを次々と保存する。協同ファウンダのDerek Nelsonはこう説明する: “連続的な処理とリレーショナルのストレージを一体化しているので、ストリーム処理をしながら、別途、外付けのストレージシステムを管理しなくてもよい”。

とあるが、何のことかさっぱりわからないので、マニュアルを読んでみる。

Introduction — PipelineDB 0.8.0 documentation

Continuous query

読み始めたはいいが、マニュアルに頻出する単語、continuous queriesがさっぱりわからないので、検索してみる。

この資料 http://www.ieice.org/iss/de/DEWS/proc/2004/paper/doc/ms-1.pdf によると、

データストリームからの到着データへ繰り返し問合せを適用する処理方式。 到着データをタイムスタンプが付加された無限のタプル列とみなす。

なるほど。このデータストリームにSQLで問い合わせできるのが特徴なわけね。

PipelineDBとは

特徴を整理する。

  • PostgleSQLベースで開発されているオープンソースなDB
  • まだDBに保存していないデータストリームを扱うことができる
  • データストリームにSQLで繰り返し問い合わせでき、テーブルやビューのように扱うことができる

使い方のイメージ

実際にどんなシーンで使えるか。データストリームへの問い合わせとはどういうことかは、PipelineDBのトップページをみるとJavaScriptのアニメーションがあるのでわかりやすい。

www.pipelinedb.com

公式ページのExamples

www.pipelinedb.com

大量に流れてくるデータ、ログをモニタリングしてごにょごにょするのが使いどころか。 ポイントは、ごにょごにょの処理でSQLで書けるところ。まだDBにInsertする前なのに。 例えば、サーバーのログを監視しておいて、レイテンシがnミリ秒以上なレスポンスが1分以内に50回あったらアラートという処理がSQLで書ける。これまではDBにInsertする前のデータストリームの状態では、アプリケーションで使っているプログラミング言語、もしくはCQL(Continuous Query Language)で処理を書く必要があった。

PipelineDBを使えば、SQLで書けるね。これまでバッチ処理をしていたSQLをそのままリアルタイム処理にできるよってのがメリットかな。

ソースコード

Github

pipelinedb/pipelinedb · GitHub

CROSS 2015でデザイナーパネルディスカッションやってきました #cross2015

f:id:sfujisak:20150205175311j:plain

技術評論社のサイト gihyo.jp にレポートが掲載されました

gihyo.jp

企画したきっかけ

スタートアップを立ち上げて自分たちのWebサービスをスクラッチから作ってきたのですが、最近はデザイナーさんとのやり取りが多くなってきました。前職はSIerだったためデザイナーさんと仕事で関わることは無く、最初はどうやって進めていったら良いのか悩んでいました。幸いにも周りの人たちの協力で少しずつデザイナーさんとの共同作業に慣れてきましたが、ずっとエンジニアとデザイナーの関係についてのベストプラクティスについて考えていました。そこで、友人や紹介していただいたデザイナーさんに参加してもらって、デザイナーさんの視点からエンジニアとのコミュニケーションや仕事の進め方について語ってもらおうという俺得企画です。

パネリスト

  • 株式会社nanapi 木村 真理さん
  • 株式会社FULLER 櫻井 裕基さん
  • 株式会社サイバーエージェント 新妻 里夏さん
  • 株式会社LIG 堀口 誠人さん

概要

デザイナーの作業領域がコーディングよりになっていっている背景をもとに、エンジニアはデザインついてどこまで踏み込めば良いのか、そしてエンジニアとデザイナーの理想の関係を考えるというテーマでディスカッションを行いました。

パネリスト紹介

株式会社nanapi 木村 真理さん

株式会社FULLER 櫻井 裕基さん

株式会社サイバーエージェント 新妻 里夏さん

株式会社LIG 堀口 誠人さん

toggetter

CROSS 2015 デザイナーからのラブレター #cross2015 - Togetter

感想

ディスカッションの中での話題で、この2つが心に残りました。

  1. エンジニアもデザイナーもお互いの作業領域に踏み込んでいくことが大切
  2. コミュニケーション、共通認識が大事。(例: エンジニアとデザイナーで共用Pinterestアカウントを作り、良いと思ったデザインサイトをピンしていく)
  3. 仕様変更を前提とした修正しやすいデザインを作っている人がいる

特に3番目は、拡張しやすいコードが正義なエンジニアにとってとてもわかりやすいことでした。拡張しやすいデザイン、再利用しやすいデザインがデザイナーさんたちの間でも広がっていってるんだなと知りました。

最後になりましたが、参加者とCROSS2015運営スタッフの皆さんに感謝いたします!

エンジニアサポートCROSS 2015でデザイナーパネルディスカッションやります

f:id:sfujisak:20150127135452j:plain

エンジニアサポートCROSS 2015で、デザイナーパネルディスカッションやります。

  • 日時: 2015/01/29(木)
  • 場所: 横浜港大さん橋ホール
  • テーマ: デザイナーからのラブレター 〜デザイナーが本音で話すエンジニアとの新しいカンケイ〜
  • 概要: スタートアップベンチャーで活躍しているWebデザイナー/フロントエンジニアが集まりパネルディスカッションを行います。エンジニアはどこまでデザインを理解するべきかデザイナーがいっしょに仕事をしやすいエンジニアのポイント今後、デザイナーとエンジニアの作業領域の変化はどうなる?
  • 登録サイト: http://cross2015.peatix.com/

私自身はデザイナーではないのですが、最近デザイナーさんといっしょに仕事をする機会が多くなり、もっとデザイナーやデザイナーさんについて知りたいと思ってこのセッションを企画しました。

パネラーはスタートアップや有名Web企業の第一線で働いているデザイナーさんなので、現場のリアルなお話が聞けると思います。この企画のために打ち合わせを数回したのですが、そのときの話だけでもためになりました。

デザイナーさんといっしょに開発している方やこれからいっしょに開発をしたい方、ぜひお越し下さい。

CROSS 2015 | エンジニアサポート CROSS 2015

第二回もんご祭りの発表スライドまとめ

2014/10/11(土)に行われた第二回もんご祭りのスライドをまとめます。
第二回もんご祭りの概要はスタートアップCTO x MongoDBパネルディスカッションやります - Shokenをどうぞ。

Mongo db as_a_building_block

OpenStreetMap+MongoDBで地図情報を検索してみたい!

スタートアップCTO x MongoDB パネルディスカッション

MongoDB祭り 2014年

第二回もんご祭 パネルディスカッション by yujiosaka