ちょっと触ってみた。
使ったのはMySQL Cluster 7.3.1-m1(開発版)
( ´-`).oO(って書いてる間に、7.3.2がGAってリリースノートを見た。まだDownloadには来てない。
取り敢えずconfig.iniを最小限で作ってみる。
ディレクトリは自動で作ってくれないので自分で作ってから、ndb_mgmd起動。
起動すればそれだけでバックグラウンドに回ってくれる。
続いてndbd。2つ。
おなじみmysqld。
ここまではOK。。(このあとかなりハマった。。)
NDB memcached EngineはInnoDB Memcached Pluginと同じく、
予めそれ用のテーブルを作っておく必要があるので、さっくり食わせる。
InnoDB Memcached Pluginと同じように、メタデータを放り込むテーブルに色々定義してやる感じ。
InnoDBのアレはINSTALL PLUGINして再起動だけど、こっちはmemcachedが別プロセスになるのでひょっこり起動してやる。
なぜか-dオプションでバックグラウンド起動させると上手くいかない(´・ω・`)
コネクションプールが作れないとか行ってたのは、APIノードの定義を2つしか作ってないから、
mysqldで1個、memcachedで1個しか使えなくてこうなってるのかな。
ともあれこれで
イェーイ。
使ったのはMySQL Cluster 7.3.1-m1(開発版)
( ´-`).oO(って書いてる間に、7.3.2がGAってリリースノートを見た。まだDownloadには来てない。
取り敢えずconfig.iniを最小限で作ってみる。
$ vim config.ini
[NDB_MGMD]
NodeId=49
HostName=localhost
DataDir=/home/yoku/mysql/ndb_7.3.1/mgmd
Portnumber=1186
[NDBD]
NodeId=1
HostName=localhost
DataDir=/home/yoku/mysql/ndb_7.3.1/ndbd/1
[NDBD]
NodeId=2
HostName=localhost
DataDir=/home/yoku/mysql/ndb_7.3.1/ndbd/2
[MYSQLD]
NodeId=51
HostName=localhost
[API]
NodeId=52
HostName=localhost
ディレクトリは自動で作ってくれないので自分で作ってから、ndb_mgmd起動。
$ mkdir -p mgmd ndbd/1 ndbd/2
$ bin/ndb_mgmd --initial --ndb-nodeid=49 --config-file=./config.ini
起動すればそれだけでバックグラウンドに回ってくれる。
続いてndbd。2つ。
$ bin/ndbd --initial --ndb-nodeid=1 --ndb-connectstring=localhost
$ bin/ndbd --initial --ndb-nodeid=2 --ndb-connectstring=localhost
おなじみmysqld。
$ vim my.cnf
[mysqld]
loose-ndbcluster
loose-ndb-connectstring= localhost:1186
log-error= error.log
log-bin= bin
$ scripts/mysql_install_db --datadir=./data
$ bin/mysqld_safe --defaults-file=./my.cnf --datadir=./data &
$ bin/ndb_mgm
ndb_mgm> SHOW
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1, Nodegroup: 0, Master)
id=2 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=49 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1)
[mysqld(API)] 2 node(s)
id=51 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1)
id=52 (not connected, accepting connect from localhost)
ここまではOK。。(このあとかなりハマった。。)
NDB memcached EngineはInnoDB Memcached Pluginと同じく、
予めそれ用のテーブルを作っておく必要があるので、さっくり食わせる。
$ bin/mysql -uroot < share/memcache-api/ndb_memcache_metadata.sql
$ bin/mysql -uroot -e "SELECT * FROM ndbmemcache.containers"
+------------+-------------+------------------+-------------+----------------+-------+------------------+------------+--------------------+-----------------------------+
| name | db_schema | db_table | key_columns | value_columns | flags | increment_column | cas_column | expire_time_column | large_values_table |
+------------+-------------+------------------+-------------+----------------+-------+------------------+------------+--------------------+-----------------------------+
| demo_table | ndbmemcache | demo_table | mkey | string_value | flags | math_value | cas_value | NULL | NULL |
| demo_tabs | ndbmemcache | demo_table_tabs | mkey | val1,val2,val3 | flags | NULL | NULL | expire_time | NULL |
| demo_ext | ndbmemcache | demo_table_large | mkey | string_value | flags | NULL | cas_value | NULL | ndbmemcache.external_values |
+------------+-------------+------------------+-------------+----------------+-------+------------------+------------+--------------------+-----------------------------+
InnoDB Memcached Pluginと同じように、メタデータを放り込むテーブルに色々定義してやる感じ。
InnoDBのアレはINSTALL PLUGINして再起動だけど、こっちはmemcachedが別プロセスになるのでひょっこり起動してやる。
$ bin/memcached -E lib/ndb_engine.so -e "connectstring=localhost:1186" &
18-Jun-2013 14:41:41 JST NDB Memcache 5.6.10-ndb-7.3.1 started [NDB 7.3.1; MySQL 5.6.10]
Contacting primary management server (localhost:1186) ...
Connected to "localhost:1186" as node id 52.
Retrieved 4 key prefixes for server role "default_role".
The default behavior is that:
GET uses NDB only
SET uses NDB only
DELETE uses NDB only.
The 3 explicitly defined key prefixes are "b:" (demo_table_large), "mc:" () and "t:" (demo_table_tabs)
Server started with 4 threads.
Priming the pump ...
Failed to grow connection pool.
Scheduler: using 1 connection to cluster 0
Scheduler: starting for 1 cluster; c0,f0,g1,t1
done [14.838 sec].
なぜか-dオプションでバックグラウンド起動させると上手くいかない(´・ω・`)
$ bin/ndb_mgm -e "SHOW"
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1, Nodegroup: 0, Master)
id=2 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=49 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1)
[mysqld(API)] 2 node(s)
id=51 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1)
id=52 @127.0.0.1 (mysql-5.6.10 ndb-7.3.1)
$ less/mgmd/ndb_49_cluster.log
..
2013-06-18 14:41:40 [MgmtSrvr] INFO -- Node 1: Communication to Node 52 opened
2013-06-18 14:41:41 [MgmtSrvr] INFO -- Node 2: Communication to Node 52 opened
2013-06-18 14:41:42 [MgmtSrvr] INFO -- Nodeid 52 allocated for API at 127.0.0.1
2013-06-18 14:41:42 [MgmtSrvr] INFO -- Node 52: memcached
2013-06-18 14:41:42 [MgmtSrvr] INFO -- Node 1: Node 52 Connected
2013-06-18 14:41:42 [MgmtSrvr] INFO -- Node 2: Node 52 Connected
2013-06-18 14:41:42 [MgmtSrvr] INFO -- Node 2: Node 52: API mysql-5.6.10 ndb-7.3.1
2013-06-18 14:41:42 [MgmtSrvr] INFO -- Node 1: Node 52: API mysql-5.6.10 ndb-7.3.1
2013-06-18 14:41:45 [MgmtSrvr] WARNING -- Failed to allocate nodeid for API at 127.0.0.1. Returned eror: 'No free node id found for mysqld(API).'
2013-06-18 14:41:48 [MgmtSrvr] WARNING -- Failed to allocate nodeid for API at 127.0.0.1. Returned eror: 'No free node id found for mysqld(API).'
2013-06-18 14:41:51 [MgmtSrvr] WARNING -- Failed to allocate nodeid for API at 127.0.0.1. Returned eror: 'No free node id found for mysqld(API).'
2013-06-18 14:41:54 [MgmtSrvr] WARNING -- Failed to allocate nodeid for API at 127.0.0.1. Returned eror: 'No free node id found for mysqld(API).'
2013-06-18 14:41:57 [MgmtSrvr] WARNING -- Failed to allocate nodeid for API at 127.0.0.1. Returned eror: 'No free node id found for mysqld(API).'
コネクションプールが作れないとか行ってたのは、APIノードの定義を2つしか作ってないから、
mysqldで1個、memcachedで1個しか使えなくてこうなってるのかな。
ともあれこれで
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set name 0 0 8
yoku0825
Pipeline 0 attached to S scheduler.
STORED
get name
VALUE name 0 8
yoku0825
END
^]
telnet> quit
Connection closed.
$ bin/mysql -uroot -e "SELECT * FROM ndbmemcache.demo_table"
+------+------------+-------+---------------+--------------+
| mkey | math_value | flags | cas_value | string_value |
+------+------------+-------+---------------+--------------+
| name | NULL | 0 | 6129992073216 | yoku0825 |
+------+------------+-------+---------------+--------------+
イェーイ。