Apacheのmod_ndbで直接NDB APIが叩けるんですよ!
とかよく言われるので試してみたメモ。
NDB memcached Engine の時と違ってNDBCLUSTER本体には同梱されていないので、Google Codeからダウンロード。
⇒ https://code.google.com/p/mod-ndb/downloads/list
最新版のアップロードが2009/11な時点でちょっと危なげな気配がする。
取り敢えずhttpd-develを突っ込んでconfigure。
$ ./configure --mysql=/usr/ndb/7.3.1/bin/mysql_config Server version: Apache/2.4.6 (Unix) Server built: Jul 24 2013 11:06:47 Using Apache 2.0 /usr/bin/apu-1-config Configuring with mysql_config = /usr/ndb/7.3.1/bin/mysql_config apxs = /usr/sbin/apxs apr-config = /usr/bin/apr-1-config apu-config = /usr/bin/apu-1-config Linking with -lmysys and -lmystrings Created Makefile. Removing out-of-date files. Hello! make : build mod_ndb make install : install mod_ndb.so make configtest : test configuration make start : start a test server on port 3080 (see test.conf) make stop : stop the test server make restart : restart the test server Thanks for trying mod_ndb!
configureで指定必須なのは--apxs=/path/to/apxsと--mysql=/path/to/mysql_configだけど、パスが通ってれば勝手に拾ってきてくれる。
テストサーバーなんて同梱されてるんだ。すてき。
$ make g++ -c -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/ndb/7.3.1/include -I/usr/ndb/7.3.1/include/storage/ndb -I/usr/ndb/7.3.1/include/storage/ndb/ndbapi -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -fPIC -Wall -O3 -o mod_ndb.o mod_ndb_ap20.cc mod_ndb_ap20.cc: In function ‘int mod_ndb_post_config(apr_pool_t*, apr_pool_t*, apr_pool_t*, server_rec*)’: mod_ndb_ap20.cc:53: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc:60: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc: In function ‘void mod_ndb_child_init(ap_pool*, server_rec*)’: mod_ndb_ap20.cc:110: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc:118: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc: In function ‘apr_status_t mod_ndb_child_exit(void*)’: mod_ndb_ap20.cc:156: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc: In function ‘void connect_to_cluster(ndb_connection*, server_rec*, config::srv*, ap_pool*, bool)’: mod_ndb_ap20.cc:190: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc:208: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc:215: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc: In function ‘Ndb* init_instance(ndb_connection*, ndb_instance*, server_rec*, config::srv*, ap_pool*)’: mod_ndb_ap20.cc:239: error: ‘aplog_module_index’ was not declared in this scope mod_ndb_ap20.cc: In function ‘ndb_instance* my_instance(request_rec*)’: mod_ndb_ap20.cc:283: error: ‘aplog_module_index’ was not declared in this scope make: *** [mod_ndb.o] エラー 1
いきなり1個目でこけてるすてきじゃなーいorz
aplog_module_indexというのを調べてみるとなんかよく判らないけれどApache 2.2と2.4の間でAPIの呼び出しが変わったあたりに原因がありそうな感じ。
試しにhttpdを一度消して2.2のhttpd, httpd-develを突っ込む。
$ make g++ -c -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/ndb/7.3.1/include -I/usr/ndb/7.3.1/include/storage/ndb -I/usr/ndb/7.3.1/include/storage/ndb/ndbapi -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -fPIC -Wall -O3 -o mod_ndb.o mod_ndb_ap20.cc g++ -c -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/ndb/7.3.1/include -I/usr/ndb/7.3.1/include/storage/ndb -I/usr/ndb/7.3.1/include/storage/ndb/ndbapi -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -fPIC -Wall -O3 -o Query.o Query.cc g++ -c -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/ndb/7.3.1/include -I/usr/ndb/7.3.1/include/storage/ndb -I/usr/ndb/7.3.1/include/storage/ndb/ndbapi -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -fPIC -Wall -O3 -o Execute.o Execute.cc g++ -c -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/ndb/7.3.1/include -I/usr/ndb/7.3.1/include/storage/ndb -I/usr/ndb/7.3.1/include/storage/ndb/ndbapi -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -fPIC -Wall -O3 -o MySQL_value.o MySQL_value.cc .. LD_RUN_PATH=/usr/ndb/7.3.1/lib g++ -shared -o mod_ndb.so mod_ndb.o Query.o Execute.o MySQL_value.o MySQL_result.o config.o request_body.o handlers.o result_buffer.o output_format.o format_compiler.o format_dumper.o query_source.o JSON_encoding.o NSQL_Parser.o NSQL_Scanner.o JSON_Parser.o JSON_Scanner.o -lndbclient -lmystrings -L/usr/ndb/7.3.1/lib -lmysqlclient -lpthread -lm -lrt -lssl -lcrypto -ldl -lmysys -lstdc++ -lrt /usr/bin/ld: cannot find -lmystrings collect2: ld はステータス 1 で終了しました make: *** [mod_ndb.so] エラー 1
取り敢えずいきなりダメぽだったところは乗り越えたヾ( ´∀`)ノ
が、今度はlibmystringsが無いって怒られてる。
NDB API関連のドキュメントを見てもLDFLAGSに設定しろと言っていて、ソースからコンパイルしているとはいえオプションは粗方有効にしてるんだけどなあ。。
ググってもよく判らないのでソースコードからlibmystringsを探す。
$ grep -r libmystrings * sql/share/charsets/README: (libmystrings), and when should it be placed in a charset_name.xml
( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚) ・・・
(つд⊂)ゴシゴシゴシ
_, ._
(;゚ Д゚) …!?
READMEしか引っかからない。
それに対してNDBCLUSTER 7.1のソースコードで同じことをやるとごっそり引っかかる。
(と、気付くまで7.3と7.2と7.1のバイナリーを順番に落としてconfigureのオプション変えながら何度もやった)
7.1.26のNDBCLUSTERをmakeして、mod_ndbをconfigureしなおして、もっかいmakeしたら通った。
$ make start /usr/sbin/httpd -f /home/yoku/mod_ndb-1.1-release-r652/httpd.conf make: *** [start] エラー 1 $ cat logs/ndb_error_log [Tue Aug 27 15:43:23 2013] [notice] Cannot connect to NDB Cluster (connectstring: "(null)") 1/5 [Tue Aug 27 15:43:26 2013] [notice] Cannot connect to NDB Cluster (connectstring: "(null)") 2/5 [Tue Aug 27 15:43:29 2013] [notice] Cannot connect to NDB Cluster (connectstring: "(null)") 3/5 [Tue Aug 27 15:43:32 2013] [notice] Cannot connect to NDB Cluster (connectstring: "(null)") 4/5 [Tue Aug 27 15:43:35 2013] [notice] Cannot connect to NDB Cluster (connectstring: "(null)") 5/5 [Tue Aug 27 15:43:35 2013] [notice] Connection test failed. Cannot connect to NDB Cluster. Apache will exit. Configuration Failed
ああ、そういえばndbdもndb_mgmdも上げてないや。。(;´д`)
続きはいつかやるかやらないかする。
0 件のコメント :
コメントを投稿