MariaDB ColumnStore はシングルノードで動かすこともできますが、分散並列処理にも対応しているため、複数ノードが連動して処理を分散させることも可能です。
今回は、MariaDB ColumnStore を複数ノードで構築する方法をご紹介します。
MariaDB ColumnStore のコンポーネント
MariaDB ColumnStore は以下のコンポーネントで構成されています。
ユーザーモジュール(以下:UM)
UMはクライアントからのクエリーを受け付けて、パフォーマンスモジュールに処理を分散させ、結果を集約してクライアントに返します。
パフォーマンスモジュール(以下:PM)
PMはUMからリクエストを受け取って、データの検索、保存などを行うモジュールです。処理性能を上げる場合はPMのスペックアップや台数を増やすことで可能となります。
ストレージ
MariaDB ColumnStore では、冗長構成をとる場合、ストレージに関しては別の仕組みが必要になります。
PMのローカルストレージを使用することも可能ですが、PMのどれかのノードがダウンするとシステム全体がリクエストを受け付けなくなります。
そのため、MariaDB ColumnStore では、外部ストレージに対応しており、冗長化する場合は、SANのような共有ストレージや、AWSのEBSを使うことになります。
MariaDB ColumnStore のサーバー構成
MariaDB ColumnStore では、主に3つのサーバー構成があります。
シングルサーバー構成
データ量が少ない、パフォーマンスをそれほど必要としない場合の構成です。
UMとPMを同居させる構成
1台のサーバーで2つのモジュールを同居させるのでサーバーの台数を減らすことができます。
UMとPMをそれぞれのサーバーで動かす構成
データ量が多い、パフォーマンスを重視する場合の構成です。サーバー台数は増えますが、性能向上にはPMを増やすことが多いため、リソースの有効利用の観点からもPMだけ増加させることができるという利点もあります。
今回の構成
UMとPMを同居させてデータはローカルディスクに格納する2サーバー構成で構築します。
また、OSは CentOS 7.3 です。
事前準備
それぞれのサーバーで以下の設定が必要です。また以下の作業は全て root ユーザーで行います。
locale の設定
1 |
# localedef -i en_US -f UTF-8 en_US.UTF |
SELinux の無効化
1 2 |
# setenforce 0 # sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config |
ssh の設定
root ユーザーでそれぞれのサーバーにパスフレーズ無しでログインできるように設定する必要があります。
(公式ドキュメントでは上記のような記載がありますが、パスワード認証でもデプロイは可能なようです)
参考: Preparing for ColumnStore Installation
依存パッケージのインストール
MariaDB ColumnStore で必要な依存パッケージを事前にインストールしておきます。
1 |
# yum -y install boost expect perl perl-DBI openssl zlib file sudo libaio rsync snappy net-tools perl-DBD-MySQL |
最初のノードを作成する
MariaDB ColumnStore では、最初のノードはrpmによるインストールとインストーラーによる設定を行って構築しますが、2ノード以降はmcsadmin
という管理ツールからノード追加を行うことができます。
ファイルのダウンロード
1 2 |
# cd /root # curl -O https://downloads.mariadb.com/ColumnStore/1.0.10/centos/x86_64/7/mariadb-columnstore-1.0.10-1-centos7.x86_64.rpm.tar.gz |
注意: ダウンロードした tar.gz ファイルは ホームディレクトリに配置してください。管理ツールからノード追加を行い際に、このファイルをインストール先サーバーに転送してインストール処理が行われます。
ファイルの解凍
1 |
# tar zxvf mariadb-columnstore-1.0.10-1-centos7.x86_64.rpm.tar.gz |
インストール
1 |
# rpm -ivh mariadb-columnstore*.rpm |
設定
設定ファイルを起動します。以降は対話形式で設定を行うことになります。
1 |
# /usr/local/mariadb/columnstore/bin/postConfigure |
シングルサーバーか複数サーバーで実行するかを選択します。(2を選択)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
===== Setup System Server Type Configuration ===== There are 2 options when configuring the System Server Type: single and multi 'single' - Single-Server install is used when there will only be 1 server configured on the system. It can also be used for production systems, if the plan is to stay single-server. 'multi' - Multi-Server install is used when you want to configure multiple servers now or in the future. With Multi-Server install, you can still configure just 1 server now and add on addition servers/modules in the future. Select the type of System Server install [1=single, 2=multi] (2) > |
UMとPMを別々のサーバーか同じサーバーで動かすを選択します。
(今回は同じサーバーで動かすので2を選択)
1 2 3 4 5 6 7 8 9 |
===== Setup System Module Type Configuration ===== There are 2 options when configuring the System Module Type: separate and combined 'separate' - User and Performance functionality on separate servers. 'combined' - User and Performance functionality on the same server Select the type of System Module Install [1=separate, 2=combined] (2) > |
スキーマ同期機能を有効にするかどうかを選択(yを選択)
1 |
MariaDB ColumnStore Schema Sync feature, do you want to enable? [y,n] (y) > |
AWS CLI ツールを使って、インスタンスなどを作成するかどうかを選択します。(nを選択)
1 2 3 |
NOTE: Amazon AWS CLI Tools are installed and allow MariaDB ColumnStore to create Instances and ABS Volumes Do you want to have ColumnStore use the Amazon AWS CLI Tools [y,n] (y) > |
システム名(クラスタの名前)を入力します。(デフォルトのまま)
1 |
Enter System Name (columnstore-1) > |
ストレージをローカルディスクにするか外部ストレージにするかを選択します。
ローカルストレージの場合、フェイルオーバーがサポートされていないため、ノードの1台が停止した場合、システムが停止します。(1=internalを選択)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
===== Setup Storage Configuration ===== ----- Setup Performance Module DBRoot Data Storage Mount Configuration ----- There are 2 options when configuring the storage: internal or external 'internal' - This is specified when a local disk is used for the DBRoot storage. High Availability Server Failover is not Supported in this mode 'external' - This is specified when the DBRoot directories are mounted. High Availability Server Failover is Supported in this mode. Select the type of Data Storage [1=internal, 2=external] (1) > |
最初に構築するPMの台数を入力します。(1を入力)
1 2 3 4 5 6 |
===== Setup the Module Configuration ===== ----- Performance Module Configuration ----- Enter number of Performance Modules [1,1024] (1) > |
1つ目のネットワークインターフェースのホスト名を入力します。(デフォルト)
1 2 3 |
*** Parent OAM Module Performance Module #1 Configuration *** Enter Nic Interface #1 Host Name (server1) > |
1つ目のネットワークインターフェースのIPアドレスを入力します。(デフォルト)
1 |
Enter Nic Interface #1 IP Address of server1 (172.26.45.250) > |
2つ目のネットワークインターフェースのホスト名を入力します。(今回は不要なので、unassinedのまま)
1 |
Enter Nic Interface #2 Host Name (unassigned) > |
ストレージに格納されるデータは、ID数に応じてディレクトリが作られて、その下に格納されます。
(今回はデフォルトの1のままとします)
1 |
Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module 'server1' (1) > |
Linuxの起動時にMariaDB ColumnStoreを自動起動させるかどうかを選択します。(yを入力)
1 2 3 4 5 6 7 |
===== MariaDB ColumnStore System Startup ===== System Installation is complete. If an error occurred while running the MariaDB ColumnStore setup scripts, this will need to be corrected and postConfigure will need to be re-run. Would you like to startup the MariaDB ColumnStore System? [y,n] (y) > |
MariaDB ColumnStoreが起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
----- Starting MariaDB ColumnStore on local Server 'pm1' ----- MariaDB ColumnStore successfully started MariaDB ColumnStore Database Platform Starting, please wait ...... DONE MariaDB ColumnStore Install Successfully Completed, System is Active Enter the following command to define MariaDB ColumnStore Alias Commands . /usr/local/mariadb/columnstore/bin/columnstoreAlias Enter 'mcsmysql' to access the MariaDB ColumnStore SQL console Enter 'mcsadmin' to access the MariaDB ColumnStore Admin console |
mcsmysql は mysqlコマンドへのエリアスになっていて root ユーザーでログインできます。
mcsadmin は MariaDB ColumnStore の管理ツールとなります。
上記のコマンドへのPATHを通します。
1 |
# . /usr/local/mariadb/columnstore/bin/columnstoreAlias |
.bash_profile にも追加しておきます。
1 |
# echo ". /usr/local/mariadb/columnstore/bin/columnstoreAlias" >> ~/.bash_profile |
クラスタの状態を確認する
管理ツールを起動します。
1 2 3 4 5 6 7 8 9 10 11 |
# mcsadmin MariaDB ColumnStore Admin Console enter 'help' for list of commands enter 'exit' to exit the MariaDB ColumnStore Command Console use up/down arrows to recall commands Active Alarm Counts: Critical = 0, Major = 0, Minor = 0, Warning = 0, Info = 0 Critical Active Alarms: |
help コマンドでコマンド一覧が出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mcsadmin> help help Tue Aug 8 22:24:43 2017 List of commands: Note: the command must be the first entry entered on the command line Command Description ------------------------------ -------------------------------------------------------- ? Get help on the Console Commands addDbroot Add DBRoot Disk storage to the MariaDB Columnstore System addModule Add a Module within the MariaDB Columnstore System alterSystem-disableModule Disable a Module and Alter the MariaDB Columnstore System alterSystem-enableModule Enable a Module and Alter the MariaDB Columnstore System assignDbrootPmConfig Assign unassigned DBroots to Performance Module assignElasticIPAddress Assign Amazon Elastic IP Address to a module disableLog Disable the levels of process and debug logging ...(省略)... |
システムステータスを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mcsadmin> getsystemstatus getsystemstatus Tue Aug 8 22:25:22 2017 System columnstore-1 System and Module statuses Component Status Last Status Change ------------ -------------------------- ------------------------ System ACTIVE Tue Aug 8 22:16:44 2017 Module pm1 ACTIVE Tue Aug 8 22:16:41 2017 MariaDB ColumnStore Replication Feature is enabled |
1ノードだけですが、問題なく稼働していることがわかります。
参考:Installing and Configuring a Multi Server ColumnStore System
2つ目のノードを追加する
2つ目のノード追加では管理ツールから行います。
管理ツールを起動します。
1 |
# mcsadmin |
DBRootを追加する
dbrootを1つ追加します。
1 2 3 4 |
mcsadmin> addDBRoot 1 adddbroot Tue Aug 8 22:31:58 2017 New DBRoot IDs added = 2 |
新しく ID:2 が割り振られました。
ストレージ設定を確認します。
1 2 3 4 5 6 7 8 9 10 |
mcsadmin> getstorageconfig getstorageconfig Tue Aug 8 22:33:04 2017 System Storage Configuration Performance Module (DBRoot) Storage Type = internal System Assigned DBRoot Count = 1 DBRoot IDs assigned to 'pm1' = 1 DBRoot IDs unassigned = 2 |
どのPMにもDBRoot ID:2 は割り当てられていないことがわかります。
PMノードを追加する
ノードの追加は addModule コマンドで実行できます。
引数などは help addmodule で確認してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mcsadmin> help addModule help Tue Aug 8 22:34:24 2017 Command: addModule Description: Add a Module within the MariaDB Columnstore System This command is used to configure a Module to the Configuration Database within the MariaDB Columnstore System. It will also install the MariaDB Columnstore Packages and setup the module to make it ready to be restored Arguments: Required: Module-type or Module-name being added Required: Number-of-Modules being added when Module-type is specified Optional: Server-Hostnames/Amazon-Instance-Names seperated by commas Optional: Server-root-password |
1 |
addmodule [モジュールのタイプ] [追加個数] [ホスト名] [パスワード] |
PMを追加します。
sshを使ってserver2にログインするため、「ssh」を入力します。
1 2 3 4 5 |
mcsadmin> addmodule pm 1 server2 addmodule Tue Aug 8 22:37:20 2017 Enter the 'User' Password or 'ssh' if configured with ssh-keys Please enter: |
server2 に PMをインストールしています。
1 |
Adding Modules pm2, please wait... |
PMのインストールが完了しました。
1 2 |
Add Module(s) successfully completed addModule Command Successfully completed: Modules are Disabled, run alterSystem-enableModule command to enable them |
システムステータスを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mcsadmin> getsystemstatus getsystemstatus Tue Aug 8 22:41:23 2017 System columnstore-1 System and Module statuses Component Status Last Status Change ------------ -------------------------- ------------------------ System ACTIVE Tue Aug 8 22:16:44 2017 Module pm1 ACTIVE Tue Aug 8 22:16:41 2017 Module pm2 MAN_DISABLED Tue Aug 8 22:38:48 2017 Active Parent OAM Performance Module is 'pm1' Primary Front-End MariaDB ColumnStore Module is 'pm1' MariaDB ColumnStore Replication Feature is enabled |
新しく追加した pm2 は MAN_DISABLED の状態です。
新しく追加したPMを有効化します。
1 2 3 4 5 6 7 8 9 10 |
mcsadmin> alterSystem-enableModule pm2 altersystem-enablemodule Tue Aug 8 22:43:23 2017 This command starts the processing of applications on a Module within the MariaDB ColumnStore System Do you want to proceed: (y or n) [n]: y Enabling Modules Successful enable of Modules Performance Module(s) Enabled, run movePmDbrootConfig or assignDbrootPmConfig to assign dbroots, if needed |
もう一度、システムステータスを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mcsadmin> getsystemstatus getsystemstatus Tue Aug 8 22:43:49 2017 System columnstore-1 System and Module statuses Component Status Last Status Change ------------ -------------------------- ------------------------ System ACTIVE Tue Aug 8 22:16:44 2017 Module pm1 ACTIVE Tue Aug 8 22:16:41 2017 Module pm2 MAN_OFFLINE Tue Aug 8 22:43:25 2017 Active Parent OAM Performance Module is 'pm1' Primary Front-End MariaDB ColumnStore Module is 'pm1' MariaDB ColumnStore Replication Feature is enabled |
pm2のステータスが MAN_OFFLINEになりました。
新しい pm2 に未割り当てのDBRootを割り当てます。
1 2 3 4 5 6 7 8 9 10 |
mcsadmin> assignDbrootPmConfig 2 pm2 assigndbrootpmconfig Tue Aug 8 22:45:25 2017 DBRoot IDs assigned to 'pm2' = Changes being applied DBRoot IDs assigned to 'pm2' = 2 Successfully Assigned DBRoots |
pm2 にDBRoot ID: 2が割当たりました。
1 2 3 4 5 6 7 8 9 |
mcsadmin> getstorageconfig getstorageconfig Tue Aug 8 22:46:12 2017 System Storage Configuration Performance Module (DBRoot) Storage Type = internal System Assigned DBRoot Count = 2 DBRoot IDs assigned to 'pm1' = 1 DBRoot IDs assigned to 'pm2' = 2 |
pm2 をスタートさせます。
1 2 3 4 5 |
mcsadmin> startsystem startsystem Tue Aug 8 22:53:30 2017 System being started, please wait... Successful start of System |
システムステータスを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mcsadmin> getsystemstatus getsystemstatus Tue Aug 8 22:55:03 2017 System columnstore-1 System and Module statuses Component Status Last Status Change ------------ -------------------------- ------------------------ System ACTIVE Tue Aug 8 22:54:18 2017 Module pm1 ACTIVE Tue Aug 8 22:16:41 2017 Module pm2 ACTIVE Tue Aug 8 22:53:56 2017 Active Parent OAM Performance Module is 'pm1' Primary Front-End MariaDB ColumnStore Module is 'pm1' MariaDB ColumnStore Replication Feature is enabled |
pm2も ACTIVE になっています。
無事にノードの追加が完了しました。
参考: Managing ColumnStore Module Configurations – MariaDB Knowledge Base
まとめ
ノード間をSSHのパスワード無しでログインできるようにしておく必要があるなど、事前の準備は必要ですが、2つ目以降のノードは管理コンソールから簡単に追加することができました。
今回の検証では触れませんでしたが、AWS CLI を使用するとインスタンスの生成まで行ってくれるなど、ノードの増減に対して運用が容易になるように作られているようです。
また、クラスタを構築する前のテストツールとして以下のようなものもありますので、事前に実行して設定をチェックしてみてください。