FAT47の底辺インフラ議事録

学んだことのメモ帳です

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 |
+-------+-------+