多数のパッケージが存在するので記録
MySQL-Cluster-gpl-server | NDBCLUSTERエンジンを含むMySQL Server(mysqld) |
MySQL-Cluster-gpl-client | クライアントモジュール(mysqlなど) |
MySQL-Cluster-gpl-storage | Data node(ndbd) |
MySQL-Cluster-gpl-management | Management server(ndb_manage) |
MySQL-Cluster-gpl-tools | MySQL Clusterの為の幾つかの役に立つツール集、Management client(ndb_mgm)がある |
MySQL-Cluster-gpl-extra | 幾つかのテストやモニタするツール集 |
MySQL-Cluster-gpl-embedded | enbedded MySQL server library |
MySQL-Cluster-gpl-shared | 共有ライブラリ(libmysqlclient.so*) |
MySQL-Cluster-gpl-devel | libraries and include files |
mysql-<mysql_server_version>-ndb-<ndbcluster_engine_version> シェルでmysqlを実行した際のServer Version SELECT VERSION()\G ndb_mgmクライアントでSHOWを実行
上に記載しているRPMを全てインストール
必要なパッケージをインストール
embeddedはdevelがインストールされていないと入らない
managementとtoolsが最低必要。extraはあってもOK
storageのみ!
serverとclientが最低必要。sharedはライブラリなのであってもOK。develも同様。
インストール完了後、設定が完了するまではどのバイナリも起動させては駄目
設定の順番
Data NodeとSQL Nodeはmy.cnfが必要で、Management Nodeを見つけるconnectstringとNDBCLUSTERストレージエンジンを有効にする設定が必須
# cp /usr/share/mysql/my-huge.cnf /etc/my.cnf # vi /etc/my.cnf [mysqld] ndbcluster # NDBCLUSTERエンジンを起動させる ndb-connectstring=xxx.xxx.xxx.xxx # Management NodeのIPアドレス [mysql_cluster] ndb-connectstring=xxx.xxx.xxx.xxx # Management NodeのIPアドレス
Management Nodeにはconfig.iniが必要
/var/lib/mysql-cluster/config.iniを作成
# mkdir /var/lib/mysql-cluster # cd /var/lib/mysql-cluster # vi config.ini [ndbd default] NoOfReplicas=2 # レプリカの数 DataMemory=80M # データストレージに割り当てるメモリ量 IndexMemory=18M # インデックスストレージに割り当てるメモリ量 [ndb_mgmd] id=1 # Node ID hostname=xxx.xxx.xxx.xxx # Management Nodeのホスト名かIPアドレス datadir=/var/lib/mysql-cluster # Management Nodeのログファイルディレクトリ [ndbd] # Data Node全ての記述が必要 hostname=yyy.yyy.yyy.yyy # Data Node 1のホスト名かIPアドレス datadir=/usr/local/mysql/data # Data Nodeのデータディレクトリ id=11 [ndbd] hostname=zzz.zzz.zzz.zzz # Data Node 2のホスト名かIPアドレス datadir=/usr/local/mysql/data # Data Nodeのデータディレクトリ id=12 [mysqld] id=21 hostname=xxx.xxx.xxx.xxx # SQL Nodeのホスト名かIPアドレス [mysqld] id=22 hostname=www.www.www.www # SQL Nodeのホスト名かIPアドレス
それぞれのホストにNode IDが割り振られる
Management Node
# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster --configdirオプションを設定しないと/mysql-clusterディレクトリを検索し、存在していなければディレクトリが作成されてしまう。
Data Node
# ndbd --initial(初回起動時のみ)
SQL Node
# service mysqld start
起動したらManagement Node上で見てみる
# ndb_mgm ndb_mgm> SHOW
mysqldの設定がデフォルトのままであればSQL Node上でmysql_secure_installationを実行しセキュリティ設定を行う
# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): ←現在のrootパスワードを入力(通常は空) OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] y ←rootパスワードの設定 New password: ←パスワード入力 Re-enter new password: ←再度入力 Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ←匿名ユーザを削除 ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ←rootのリモート接続を許可 ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y ←testデータベースを削除 - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ←権限情報を再ロード ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
tableを作成する際にENGINE=NDBCLUSTERを指定するとNDB側に生成される create databaseは自動的にクラスタされる
RPMでインストールしているとする
Management Node、Data Node、SQL Nodeを停止
インストール済みRPMのリスト生成後、rpmで一括削除
作成されたディレクトリを削除
# rpm -qa | grep -i mysql-cluster > list.txt # for i in $(cat list.txt) ; do rpm -e $i; done # rpm -qa | grep -i mysql-cluster
MySQL 5.1.6以降ではディスクにクラスタテーブルを作成可能になった
Managementノード管理ツール
ManagementノードDaemon
起動時にconfig.iniかmy.cnfを読み込み設定ファイルのバイナリを作成する
次回起動時からは作成済み設定バイナリを読み込む
起動時に–reloadを付けると起動時にconfig.iniが変更されていたら再度読み込む。
起動時に–initialを付けると全ての設定バイナリファイルを削除してconfig.iniから設定を読み込む。
停止はpkill ndb_mgmd
CentOS5にphp-mysqlをインストールする方法
MySQL-Cluster-gplの7系ではCentOS5のリポジトリが保有しているphp-mysqlのクライアントライブラリとバージョンが異なるのでそのままyumでインストールしようとするとmysqlパッケージのインストールを促されてインストールが完了しない。これは困った…
# tar php-5.1.6.tar.gz # cd php-5.1.6/ext/mysql # phpize # ./configure --with-mysql=/usr/lib # make # make install # ls /usr/lib/php/modules/mysql.so ←ファイルが生成されている事を確認
# vi mysql.ini ; Enable mysql extension module extension=mysql.so
# vi /etc/yum.conf exclude = mysql mysql-server mysql-devel php-mysql ←追加(スペース区切り)
SQL(API)ノードとしてのmysqldだけど、特権情報はDATAノードには反映されない。 特権情報が保存されているmysqlデータベースはMyISAM形式でありNDBを利用しない形式だからだ。 なので、各SQLノードに特権を設定してあげる必要あり!