August 22, 2010
by reciente
0 comments
The Apache Cassandra Project
openSUSE 11.3 に Cassandra 0.6.4 をセットアップしてみたのでメモ。
Debian は既にパッケージングされていて、apt-get で入れる事ができるみたい。
自分はまだ、sun の java を使う人なので、sun に入れ替えて環境構築。
openSUSE 11.3 だと、デフォルトでは、OpenJDK にPATHが通っているので、/usr/lib64/jvm 以下のシンボリックリンクを自分で調節するか、アンインストールして、sun の jdk を入れればいいかな。
もっとスマートな設定ファイルがどっかにありそうだけれど・・・su -
yast --remove java-1_6_0-openjdk
yast -i java-1_6_0-sun
最初に、binary を公式からダウンロード。
wget ftp://ftp.kddilabs.jp/infosystems/apache/cassandra/0.6.4/apache-cassandra-0.6.4-bin.tar.gz
tar zxf apache-cassandra-0.6.4-bin.tar.gz
su -
mv apache-cassandra-0.6.4-bin.tar.gz /usr/local/
ln -s /usr/local/apache-cassandra-0.6.4-bin.tar.gz /usr/local/cassandra
# 起動
/usr/local/cassandra/bin/cassandra -p /var/run/cassandra.pid
# 停止
kill -KILL `cat /var/run/cassandra.pid`
デフォルトでは、bin/cassandra.in.sh を読み込む設定になっているので、独自の設定を読み込ませたい場合には、このファイルをコピーして、そちらを読むように指定するのも可能。
cp bin/cassandra.in.sh /tmp/new.in.sh
vim /tmp/new.in.sh
$CASSANDRA_INCLUDE=/tmp/new.in.sh bin/cassandra -p [pid_file]
終了するとき、killコマンドを使うしか無いようだ。まあ、いいんだけれど。pidファイルがあると、cat
でプロセスIDを表示して、kill コマンドを発行できるので、そこは楽だね。
デフォルトでは 8080 port で起動するようになっているので、これが嫌な人は、bin/cassandra.in.sh を編集すればいい。
-Dcom.sun.management.jmxremote.port=8080
が、portを指定している部分。
JVM_OPTS=" \
-ea \
-Xms256M \
-Xmx1G \
-XX:+UseParNewGC \
-XX:+UseConcMarkSweepGC \
-XX:+CMSParallelRemarkEnabled \
-XX:SurvivorRatio=8 \
-XX:MaxTenuringThreshold=1 \
-XX:+HeapDumpOnOutOfMemoryError \
-Dcom.sun.management.jmxremote.port=8080 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
Java なだけあって、単純に起動するだけなら簡単。
log : /var/log/cassandra
data : /var/lib/cassandra/data
起動時にログを吐き出すので、それで構成を確認すればいいかな。
後は、ちょっと接続テスト。
/usr/local/cassandra/bin/cassandra-cli
# サーバに接続
cassandra> connect localhost/9160
# Keyspaceを確認
cassandra> show keyspaces
# Keyspaceの構成を確認
cassandra> describe keyspace Keyspace1
# データセット
cassandra> set Keyspace1.Standard2['jsmith']['first'] = 'John'
Value inserted.
cassandra> set Keyspace1.Standard2['jsmith']['last'] = 'Smith'
Value inserted.
cassandra> set Keyspace1.Standard2['jsmith']['age'] = '42'
Value inserted.
# データ取得
cassandra> get Keyspace1.Standard2['jsmith']
=> (column=last, value=Smith, timestamp=1271921526614000)
=> (column=first, value=John, timestamp=1271921521923000)
=> (column=age, value=42, timestamp=1271921532713000)
Returned 3 results.
1つの Key に対して、複数の Column を関連付けていくので、RDBMS に慣れていると最初戸惑いが・・・まあ、カラムを動的に追加していく。ってことだね。住所が必要なら、 set keyspace1.Standard2['jsmith']['address'] = ‘New York City’ とでも入れればいいし。
Cassandra
August 22, 2010
by reciente
0 comments
Cassandra へのアクセスでベースになっているプロトコルが Thrift のようだ。
Cassandra用のPythonライブラリが、python-cassandra の模様。これが、Thrift に依存している。
Python 開発環境を作るのも久しぶりだったので、こちらのサイトを参考に構築。
2009年版Python開発環境を整えよう
環境は OpenSUSE 11.3 Cassandra 0.6.4
su -
yast -i python python-devel gcc python-setuptools
easy_install virtualenv
easy_install virtualenvwrapper
exit
vim ~/.bashrc
# 以下を .bashrc に追加
# Import virtualenvwrapper
if [ -f /usr/local/binvirtualenvwrapper.sh ]; then
source /usr/local/bin/virtualenvwrapper.sh
fi
mkdir ~/.virtualenvs
source ~/.bashrc
mkvirtualenv --python=/usr/bin/python2.6 cassandra
# bashの表示が変わる。
(cassandra)user@domain:>
pip install thrift
pip install python-cassandra
これで完了。特につまるところはないかなぁ C言語で書かれているモジュールっぽいので、gcc は必要みたいだね。で、その為に、Python.h が必要だから、python-devel を入れておく必要性がある。
ちなみに、virtualenv はローカル環境構築用なので、pipでインストールしたライブラリは ~/.virtualenvs/cassandra/lib/python2.6/site-packages 以下に入る。
サンプルはこちら拝借。
ThriftExamples – Cassandra Wiki
#!/usr/bin/env python # encoding: utf-8
"""Sample Cassandra Client
Created by Chris Goffinet on 2009-08-26."""
from thrift import Thrift
from thrift.transport import TTransport
from thrift.transport import TSocket
from thrift.protocol.TBinaryProtocol import TBinaryProtocolAccelerated
from cassandra import Cassandra
from cassandra.ttypes import *
import time
import pprint
def main():
socket = TSocket.TSocket("localhost", 9160)
transport = TTransport.TBufferedTransport(socket)
protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)
client = Cassandra.Client(protocol)
pp = pprint.PrettyPrinter(indent=2)
keyspace = "Keyspace1"
column_path = ColumnPath(column_family="Standard1", column="email")
key = "1"
value = "foobar@example.com "
timestamp = time.time()
try:
transport.open()
#Insert the data into Keyspace 1
client.insert(keyspace,
key,
column_path,
value,
timestamp,
ConsistencyLevel.ZERO)
#Query for data
column_parent = ColumnParent(column_family="Standard1")
slice_range = SliceRange(start="", finish="")
predicate = SlicePredicate(slice_range=slice_range)
result = client.get_slice(keyspace,
key,
column_parent,
predicate,
ConsistencyLevel.ONE)
pp.pprint(result)
except Thrift.TException, tx:
print 'Thrift: %s' % tx.message
finally:
transport.close()
if __name__ == '__main__':
main()
pycassa というのもあるみたいだけれど、これ以上ラッピングしても意味あるのかなぁ~ DjangoみたいなWebフレームワークに組み込まれるくらいかな?
Python
August 22, 2010
by reciente
0 comments
Apache の VirtualHost とかの設定をして、ついつい忘れてしまうのがログの圧縮設定。
Linux の場合 logrotate を使ってログを圧縮しているので、こちらの設定を変更しよう。
/etc/logrotate.conf
上記ファイルを見ると、以下のディレクトリのファイルを include しているのが分かる。
/etc/logrotate.d
という訳で、独自の設定をする場合には新しくファイルを作成して、Apache の場合には、apache とか apache2 で既にファイルがあると思うので、そちらを編集。
/var/log/apache2/blog.redhawk.jp-access.log {
compress
dateext
maxage 365
rotate 99
size+=4096k
notifempty
missingok
create 644 root root
postrotate
/etc/init.d/apache2 reload
endscript
}
ログファイルに対して、コマンドを設定していく。
compress : ログを圧縮する
nocompress : ログを圧縮しない
compresscmd : 圧縮コマンドを指定
uncompresscmd : 解凍コマンドを指定
daily : 毎日
weakly : 毎週
dateext : 日付を拡張子にする
missingok : ファイルが無い場合でもエラーを出力しない
nomissingok : ファイルが無い場合エラーを出力する
rotate : ログファイルのローテート回数。指定ファイル数に達すると古いものから削除される
size : 指定したサイズ以上の場合は、ログをローテートする
prerotate : endscript までのコマンドをローテート実行前に実行する
postrotate : endscript までのコマンドをローテート実行後に実行する
こんなところかな。
圧縮さえしておけば、HDDがパンクする可能性が低くなるし。ログ消えて困るんだったら、HDDパンクしない程度にsizeとかrotate調節して、後はバックアップを取りつづけることかな。ログファイルがいつまでも可動サーバー上に安全な状態で残るとは限らないからね。
Linux
August 11, 2010
by reciente
0 comments
リリースされて、一ヶ月が経った訳だけれど、やっとこインストールしてみようかな。という状況になったので、開発環境の一つを11.2から11.3に再インストールすることに。
この作業に手間が掛かるから、まとまった時間がないと厳しいんだよね。
GNOMEを選択してインストール。
起動してびっくりしたのが、いきなりX over OpenGL(xgl)が動いている。
これから、Eclipse IDE for C/C++ Developers を入れたりと、開発環境を整えていこうかな。
後は、Cassandraもいい加減テストしてみるかな。
CassandraはJavaだから、正直ディストリビューションは関係ないけれどね・・・w
実際のサーバ運営の時なんかは、データベースだけ単一サーバ上に構築するだろうし、慣れているやつでいいだろうねぇ。
プログラマーからすると、開発環境をいかに楽して構築できるかがポイントだなぁ
Pythonのバージョンが・・・とか、そういうので躓くCentOSは厳しい。
まあ、近頃はubuntuユーザーが圧倒的に多い気がする。
あくまでも主観的意見だけれど。
Google Trends: openSUSE, ubuntu, debian, centos, fedora
Google Trendsでもubuntuの盛り上がりっぷりが凄いなw
大勢のユーザーに使われているということは、圧倒的に情報量がWeb上に存在するということで、トラブルに見舞われたときに、ぐぐれば解決策が出てくる可能性が高いと思っている。
そんな訳で、サーバ運営にubuntuが使われるのは自然な流れだよなぁと。
これからは、仕事で使うならubuntuかな。
趣味なら、openSUSEでいいけれど・・・ってか、ubuntu一度も触ったことないなぁ~
openSUSE
August 2, 2010
by reciente
0 comments
まあ、言い訳としては仕事が忙しかった!!って事にして、とりあえず、viewvcも設定されていなくて、リンク切れが激しかったので、設定しました。
またサンプルとかは、viewvc経由で拾えるようにしようかな。
とりあえず、設定メモ。
OpenSUSEなので、他の環境の人は余りあてにならないかもね・・・
viewvc と enscript のインストール。enscriptはシンタックスハイライト用。
yast -i viewvc enscript
apache の設定ファイルを開いて編集。
vim /etc/sysconfig/apache2
CGI
APACHE_SERVER_FLAGS=”SVN_VIEWCVS”
mod_python
APACHE_SERVER_FLAGS=”SVN_VIEWCVS_MODPYTHON”
viewvc の設定ファイルを開いて編集。
vim /srv/viewvc/viewvc.conf
svn_roots:
my_project : /srv/svn/repos/my_project
default_root : my_project
use_enscript = 1
といった感じで設定後、Apache再起動。
URLとか変更したいのであれば、apacheの設定ファイルを編集かな。
/etc/apache2/conf.d/viewvc.conf
で、復活した、viewvc.
http://redhawk.jp/viewvc/
openSUSE
February 9, 2010
by reciente
0 comments
Oracle をLinux にインストールして、あれ、オプション間違った。ってことで、アンインストールしようとしたんだけれど
日本語マニュアル探しても、インストーラーでアンインストール項目をぽちっとね。
ってしか書いてない。
見つからないし・・・
って事で、最新バージョンの英語マニュアルを見たら、deinstall を使うらしい
/home/user/app/home/production/deinstall/deinstall
を実行するみたい。
後は、デフォルト設定のままだったので、削除する時に y を選択して終わり。
うーん、やっぱり、英語マニュアルを最初に見るのが一番いいね。
でも、uninstallで探しても出てこなくて、deinstallって・・・w
Oracle
September 30, 2009
by reciente
0 comments
Linuxサーバで、sshの秘密鍵を設定していた時に、始めて見るエラーログが出た。
Authentication refused: bad ownership or modes for file
/home/username/.ssh/authorized_keys
なんじゃこりゃ?
って思って調べてみたら、
chmod 600 .ssh/authorized_kes
を実行していなかったのが原因らしい。
確かに!!
設定し忘れていたよー
エラー内容としては、このファイルは、本人以外読めちゃいけないという事で、適切なパーミッションをしていない場合に起きるのだとか。
Linux
May 7, 2009
by reciente
0 comments
CentOS5.2 でPHPなフレームワークsymfonyを使う機会があったのでメモ。
必要なパッケージをインストール
yum install php php-xml
php-xml を入れないと、後で「symfony/symfony requires PHP extension “dom”」というエラーが出る。
次に、PEARにsymfonyして、PEARからインストール。
pear channel-discover pear.symfony-project.com
pear install symfony/symfony-1.1.7
# CentOS5.2だとPHPのバージョンが古くて1.7系しか入れられない。
ちなみに、Debian/Ubuntuでは、 apt-getで入れられるらしい。
deb http://www.symfony-project.org/get debian/
apt-get update
apt-get install php5-symfony
後は、プロジェクトを作って、アプリケーションを組み込んでいく感じ。
Djangoに微妙に似ているんだよねぇ
まあ、似ているから選んだんだけれどw
PHP
March 8, 2009
by reciente
0 comments
yastでインストールしようと思ったんだけれど、見つからない。
あれれ?
って事で調べてみたら、なんと・・・最初から入っているっぽw
って事で
/etc/sysconfig/apache2
を編集。
APACHE_MODULES=”rewrite”
という感じ。実際は、もっと沢山の Apache module を使っているだろうから、大量にある中に追加してやる感じ。
openSUSE
March 8, 2009
by reciente
0 comments
自宅のサーバマシンでここ運用してるんだけれど、どうにもこうにも、MovableTypeはコメント投稿した時に重過ぎる!!
何でかっていうと、一々毎回静的なページを生成しているからだ。生成後はアクセスが早いんだけれど、いまどきPHPで動的に生成していてもそれ程遅くはないだろう。
ってか、一度 WordPress に移行したんだけれど、リンクが全部消えちゃうから、諦めたんだよね。
mod_rewriteで条件で飛ばせるほど、URLパターンがはまるわけじゃないし・・・う~ん、リンク切れ覚悟で移行するか、サーバマシンのスペックを上げるかだね。
Athron64の1.8GHzくらいしかなかった気がする。一応、デュアルコアだったかもしれないけれど。
タグ検索とかも凄い重いから、使いづらいんだよねー
サーバマシンのスペックを上げても、それ程期待は出来なさそうな気がするし、またどうせ直ぐに限界点が見えてくると思う。
CGIで動かしているのも原因の一つなんだろうなぁ
PHPはApache Moduleで動かすし、WordPressが早いのもそこにある。
mod_perlで動かす手もあるのかもしれないが、mod_perlは余り使いたくないな。
分かっているんだよ!! WordPressの方が良いっていうのは!!
っち、休日中にやるか。まだ土曜日だ。がんばれば、一時間以内に作業は終わる。
タグとかカテゴリの整理とか、リダイレクト処理とかは・・・もう、後でやるよ!!
そして、そう・・・日曜朝は首都高をバイクで走りたいんだ!!
だから、徹夜でサーバのメンテしていて、そのまま首都高走るとか避けたいんだよ!!
ちなみに、なんか、WordPressはコメントとトラックバックの区別が初期状態ではなかった気がする。
なんか、色々入れないといけなかったような。
っけ めんどくせー だるいよー 誰かやってよー
# 追記
結局 WordPress に移行。
前のページへのリンクはとりあえず残してあるけれど、落ち着いたら消そうかな。
しかし、MovableTypeに比べて、格段に軽いお!!
Web