CentOS5.6にSpider Storage Engine2.26をインストール
前にfc2ブログで書いていた記事の移植です。
5月にSpiderの新バージョンが出ていたので試してみました。
Spider for MySQL / launchpad
https://launchpad.net/spiderformysql
MySQLのパーティショニング機能を利用して、パーティションごとに異なるサーバーへデータを格納することが出来るストレージエンジンです。
Shardingをデータベース(MySQL)側でやってくれます。
データを行単位で別のMySQLサーバへ飛ばして保存することができるので、比較的簡単にテーブルをShardingできます。
一番のメリットとして下図の通り、呼び出し側からの処理は一切変わらないため、プログラムの修正なしに負荷分散を行えるということです。
Spiderのバージョン2.22からSpiderを含んだMySQLのビルド済みバイナリが配布されるようになったので、簡単に利用することができます。
今回は前と同じように3台のサーバを使って構築を進めていきます。
構成は以下の図の通りです。
「サーバA」SPIDERノード構築手順
MySQL同梱Spiderダウンロード
wget http://launchpad.net/spiderformysql/spider-2.x/2.25-for-5.5.8/+download/mysql-5.5.8-spider-2.25-vp-0.14-hs-1.0-linux-x86_64-glibc23.tgz
初期化用スクリプトダウンロード
wget http://launchpad.net/spiderformysql/spider-2.x/2.25-for-5.5.8/+download/spider-init-2.25-for-5.5.8.tgz
展開と配置
tar zxvf mysql-5.5.8-spider-2.25-vp-0.14-hs-1.0-linux-x86_64-glibc23.tgz tar zxvf spider-init-2.25-for-5.5.8.tgz mv mysql-5.5.8-spider-2.25-vp-0.14-hs-1.0-linux-x86_64-glibc23 /usr/local/mysql5.5.8-spider ln -s /usr/local/mysql5.5.8-spider /usr/local/mysql
MySQLの初期設定
groupadd -g 800 mysql useradd -u 800 -g 800 mysql chown -R mysql:mysql . ./scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql data mkdir -p /var/log/mysql chown -R mysql:mysql /var/log/mysql cp support-files/my-medium.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysqld chkconfig mysqld on chkconfig --list mysqld /etc/init.d/mysqld start
SPIDERの初期設定
mysql -uroot -p < install_spider.sql
SPIDER用ユーザの作成
mysql> GRANT ALL PRIVILEGES ON *.* TO 'spider'@'%' IDENTIFIED BY '*****'; mysql> flush privileges;
SPIDER用テーブルの作成
mysql> create database spider_test; mysql> use spider_test; mysql> Create table tbl_a( col_a int, col_b int, primary key(col_a) ) engine = Spider Connection ' table "tbl_a", user "spider", password "*****" ' partition by range( col_a ) ( partition pt1 values less than (100) comment 'host "192.168.*.*", port "3306"', partition pt2 values less than (MAXVALUE) comment 'host "192.168.*.*", port "3306"' );
パスワードとサーバB,サーバCのIPアドレスを指定してください。
この設定だと、col_aの値が100までならサーバBへデータを格納し、それ以降の値の場合サーバCへデータを格納するという指定になります。
「サーバB、C」データノードの構築手順
MySQLのダウンロード(Spiderが利用しているMySQLと同じバージョンが良いでしょう)
wget http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.8-linux2.6-x86_64.tar.gz
MySQLの初期設定
#MySQL初期設定 groupadd -g 800 mysql useradd -u 800 -g 800 mysql chown -R mysql:mysql . ./scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql data mkdir -p /var/log/mysql chown -R mysql:mysql /var/log/mysql cp support-files/my-medium.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysqld chkconfig mysqld on chkconfig --list mysqld /etc/init.d/mysqld start
SPIDER用ユーザの作成
mysql> GRANT ALL PRIVILEGES ON *.* TO 'spider'@'%' IDENTIFIED BY '*****'; mysql> flush privileges;
テーブル作成
mysql> create database spider_test; mysql> use spider_test; mysql> Create table tbl_a( col_a int, col_b int, primary key(col_a) );
動作確認
データを挿入する
XA START 'xatest'; insert into tbl_a values (1,1); insert into tbl_a values (2,2); insert into tbl_a values (101,101); insert into tbl_a values (201,201); XA END 'xatest'; XA PREPARE 'xatest'; XA COMMIT 'xatest';
サーバAで確認
mysql> select * from tbl_a; +-------+-------+ | col_a | col_b | +-------+-------+ | 1 | 1 | | 2 | 2 | | 101 | 101 | | 201 | 201 | +-------+-------+
サーバAは透過的にデータノードにあるデータを参照できます。
これによりアプリケーションはSPIDERノードのサーバだけを参照することで、データノードが何台になっていても意識せずにデータを参照することが可能になっています。
確認としてサーバBとCのデータもそれぞれ見てみましょう。
サーバB
mysql> select * from tbl_a; +-------+-------+ | col_a | col_b | +-------+-------+ | 1 | 1 | | 2 | 2 | +-------+-------+
サーバC
mysql> select * from tbl_a; +-------+-------+ | col_a | col_b | +-------+-------+ | 101 | 101 | | 201 | 201 | +-------+-------+