MemSQLを使ってみようVol.3 : 導入編

##インストール作業の前にまずは確認・・・
前回の後半で、MemSQL社から正式な試用ライセンスの発行手続きを行いましたので、試用ライセンスが正規に発行されたか確認してみる事にします。原則的にMemSQLの試用ライセンスは、正式に承認されると登録ユーザ向けにカスタマーポータルが提供され、その項目の一つとしてライセンスキーが1個付与される形になります。

**（１）再度MemSQL社のホームページへ移動します。**
![mem12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/e029ce55-7bdf-6f11-ba27-50bbf4e63c57.jpeg)
**（２）サインインのページが出てきますので、申請した際の電子メールアドレスとパスワードで入ります。**
![mem10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/977e1547-cf9f-b52b-3434-74c4d53cdc2c.jpeg)
**（３）カスタマーポータルに入ります。**
![mem13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/0b91e450-7318-1a05-38eb-70e4977f5380.jpeg)
ここで、左側のタブにある「Licenses」を選択すると前回申請を行った際に発行された構成限定の試用ライセンスが表示されると思います。
![mem14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/24f76cf6-aa77-f71e-871a-9913ed9e4df4.jpeg)
またこのポータル上から、本番環境等での大規模評価を希望される場合に対応出来る、期間限定で機能制限を取り払った「エンタープライズ試用ライセンス」の申請を行って頂く事も可能です。このライセンスの場合は、クラスター台数の上限や基本機能の制限が無くなりますので、本番想定の大きなテーブル空間での動作確認や最終的な性能評価、あるいはターゲットとなる実際のアプリケーションとの整合性等をリアル規模で確認して頂く事が可能になります。

**（４）ライセンスキーの右側に有る「Installation Guide」ボタンを選択します。**
![Screenshot from 2019-11-27 15-03-05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/7d2ba56d-b08e-df4b-cb80-96b6c95e46ba.jpeg)
MemSQL社の公式ドキュメントに誘導されますので、以降はそれに従って作業を進めて行きます。Google翻訳等が使える環境であれば、訳の質も悪くありませんのでぜひ活用して頂ければと思います。

**（５）「Self-Managed」を選択します。**
![Screenshot from 2019-11-27 15-03-22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/d740cf0f-515f-cfef-6c02-b34dea89e585.jpeg)
インストール形式として3種類が選択できますが、今回の試用では「MemSQL Tools」を選択してください。もちろん腕に自信があれば（それぞれのベース経験をお持ちであれば）他の方式でも問題ありませんが、今回の一連の解説では「殆ど全ての人にMemSQLを試して頂きたい」という前提で書かせて頂いておりますので、バージョンが上がる度に機能や使い勝手が向上してきた、Tools経由での導入を進めて行きます。
![Screenshot from 2019-11-27 15-04-05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/1a333e93-c05c-2e05-12c1-d853d88902fc.jpeg)
**（６）「Single Host」を選択します。**
![Screenshot from 2019-11-27 15-04-10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/bfcf071e-f92b-6bef-88fe-466f1a736b37.jpeg)
Docker環境と通常のOSからの環境が選択できますので、今回のターゲットである「Native(Linux)」を選択します。以前ご紹介した通り、最低要件が確保できるのであれば、Docker環境に意図的に小さく導入して、デモ等における小規模高速SQL環境として利用頂く事も可能ですが、今回は後半でノード増設等の実験も想定していますので、判り易くするためにクリーンに分離した環境を構築して行きます。

##実際のインストール作業
まず始めに・・・非常に重要な事をお伝えしておきます。（実は、自分も最初にこれでハマりましたので・・・）
Linux環境の準備の際に、**絶対に「memsql」というユーザ名を使わないように**お願い致します。このユーザは、インストールの際にMemSQL側で標準的に作成・利用する事になっていますので（MemSQL社のドキュメントにも書かれています）それ以外の名前でsudoが利用できる作業アカウントを作っておくようにしてください。環境を判り易く管理する・・という発想でいけば、ログインから”これはMemSQLだぞ！”的な意味合いで使いたくなるキーワードなのですが、これを行うと以降のステップでエラーが発生して上手くインストールする事が出来ない仕組みになっています。

今回はCentOS7上に導入しますので「Red Hat Distribution」を選択し、以降はその指示に従って作業を行って行きます。
![mem15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/3bd2fcdd-1298-8ab8-4572-e3cf7106d608.jpeg)
基本的には事前の準備として、

（１）MemSQL関連のリポジトリを登録

```shell
sudo yum-config-manager --add-repo https://release.memsql.com/production/rpm/x86_64/repodata/memsql.repo

sudo yum repolist
```

（２）Whichコマンドの有無の確認（無ければインストールする必要が有ります）

```shell
rpm -q which
```

ここで、whichが無い場合は、以降の処理を続行する為に導入作業を行います。

```shell
sudo yum install -y which
```

（３）memsql-toolbox memsql-client memsql-studioを順次インストール

```shell
sudo yum install -y memsql-toolbox memsql-client memsql-studio
```

の順に作業を行いますが、ネットワークが使えない所への導入をサポートする為に、rpmパッケージの提供も行っています。現実的には1回ネットに繋いで、所要のモジュールをダウンロードして取り出し、現場に持って行って（/tmp等にコピーする）rpmコマンドを使って作業をする形になります。（参考URLより、MemSQL社の公式サイトからダウンロードしてください）

参考URL:https://docs.memsql.com/v6.8/guides/deploy-memsql/self-managed/memsql-tools/single-host/native/step-2/

ここまで無事に到達できれば、後はMemSQL社より正式に付与された試用ライセンスを、それぞれのカスタマーポータルから取得して設定する事で、一連のMemSQL導入作業が無事にフィナーレを迎える事になります。

###ライセンス登録してMemSQL本体を導入
ここまで問題なく作業が進めば、後はいよいよMemSQL自体の導入になります・・・・とはいえ、作業自体は非常に呆気ないステップで、指示されたコマンド（このmemsql-xxというコマンド系は覚えておかれると便利だと思います）でMemSQL社より発行された正式なライセンスコードを登録すればOKです。


```shell
memsql-deploy cluster-in-a-box --license 付与されたライセンスコード
```

参考URL:https://docs.memsql.com/v6.8/guides/deploy-memsql/self-managed/memsql-tools/single-host/native/step-3/


正常にインストールが完了すると、最小構成のマスターアグリゲータ1個と実際にSQL作業等を受け持つリーフが1個の合計2個のプロセスが起動してきますので、念のために以下のコマンドで状況を確認してみてください。

```shell
memsql-admin list-nodes
```

正常に起動されていれば、以下のような出力がコンソールに表示されると思います。
![mem16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/1fc813d9-10ed-051a-b783-80906a9d2d95.jpeg)

無事に起動が確認出来れば、最新のインメモリ・分散型・ピュアSQLデータベースの、MemSQLが皆様の環境で稼働を始めた事になりますので、以後は高いMySQL互換のSQLを使って、メモリー上にBI/AI向けのテーブルを作成したり、IoTセンサー等の情報をKafkaと組合わせて、標準のパイプライン経由で取り込んで可視化や分析を行ったり（SASやR等のMySQL連携が応用出来ると思います）、各種のMySQL連携ツールを活用した利用等が可能になります。接続も通常のODBC,JDBC系で使われている記述がそのまま使えますし、BIで有名なTableau等では、MemSQL接続に関する公式なページを用意されているケースも増えてきていますので、それぞれの手順などを確認する事も出来ると思います。

##MemSQL Studioの起動
以降は、再びWebコンソールでの作業になります。

```shell
% sudo systemctl start memsql-studio
面倒くさい場合は・・・
% sudo systemctl enable memsql-studio
```

でMemSQL Studioを立ち上げ、必要な設定を続行します。MemSQL StudioはブラウザーでターゲットのIPアドレス＋ポート番号の8080をURLに入力すれば以下の最初の画面（何もクラスターが登録されていない状態）が出てくると思いますので、
![Screenshot from 2019-11-27 15-28-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/7753b50d-d894-426f-9fd6-30a5fcedbfa7.jpeg)
「Add New Cluster」を選択し、必要なパラメータを設定していきます。
![Screenshot from 2019-11-27 15-31-30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/97a4439b-6d8c-898b-6393-bb7fe2b1189f.jpeg)
（１）ホスト情報（IPアドレス：localhostでも動作しました）
（２）ポート番号　：　3306
（３）ユーザ名　　：　root　
（４）パスワード　：　空欄
（５）クラスター名：　英語で適宜
（６）説明　　　　：　同上

と設定すれば、以降で試用するMemSQLの一番シンプルなクラスターが準備できます。(マスターアグリゲータ1個とリーフ1個の最小構成版）
![Screenshot from 2019-11-27 15-31-46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/1ef90386-919e-55ae-5cd1-c35261671318.jpeg)

##MemSQLの起動と停止について
MemSQL自体は現在V7のベータ版まで進化しており、今回ローカルで試用する環境にはV6.8が提供されてくるかと思いますが、当然バージョンの更新毎に、エンタープライズ環境で有る意味普通に要求される、特に従来型から継承しなければならないような機能等については、機能・性能とも格段に向上してきています。MemSQL社の既存ユーザに多くの有名・巨大企業が名を連ねていますが、UBER社のシステムの数十台のクラスターで支えているという話も聞いていますので、分散インメモリという特性に依存する部分を除いて、ほぼ普通のDBとしても活用できると思って頂いても構わないかと思います。もちろん、ハードディスクの束を前提としたアーキテクチャではありませんので（実際にはストレージ側も独自に最適化したカラムストアとして活用できますが）性能や機能を引き出そうとした場合には、それなりの最適化を行う（主にテーブルデザインと、クエリの組み立てですが）必要がありますが、ロールバック等の機能も普通に動きますので、結構ラフに扱ってもデータを可能な限り戻せる仕組みでもあります。この辺はMemSQL社としてもメモリ・・という部分でかなり気を付けて開発を進めてきた部分でもあり、スナップショットや各種のログを効率良く組み合わせる（ストレージ空間に複製したり、倍のリソースが必用になりますがメモリ情報を複製してHAを構成する機能も持っています）事で、安心して各種の高速SQLトランザクションを受け持てるソリューションに進化してきていると言えます。
とはいえ、今回のような試用ケースでは通常のDBサーバの様に起動しっぱなし！という事も難しいケースがあると思いますので、今回構成したクラスターの通常停止コマンドをご紹介しておきます。

```shell
memsql-admin stop-node
```

![kkk.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/05b4acef-099c-5d71-85cb-8176ead01a85.jpeg)
次回以降の活用編では、逆に立ち上げのコマンド

```shell
memsql-admin start-node
```

が出てくると思いますので、とりあえずこの2つは覚えておいてください。また、その他のコマンドについては

```shell
memsql-admin help
```

で表示されるかと思いますので、お時間が有るようであれば眺めておいて頂けると良いかもしれません。

##今後の進め方
次回以降は、今回立ち上げた最小構成のMemSQLを使って、基本的な動作検証やそのた有益だと思われるノウハウや留意点（既存のSQLデータベースと異なる考え方の重要性等）を紹介していきたいと思います。（MemSQL活用編）
またこれらの発展形として、パイプライン、CDC等の特徴的な機能の紹介（可能であれば幾つかの動作検証）とそれらの応用について解説する予定です。（応用編）

##最後に
また、今回ご紹介しているフリー試用ライセンスに対するサポート等は有りませんので、自己責任・自己解決を前提にお使い頂くようにお願い致します。なお、コミュニティー的な情報交換の場がありますので、疑問点等があればそちらに問い合わせてみるのも良いかもしれません。

Zoomdataを使う場合は
[**RE:Zoomdataを使ってみよう！（その１)**](https://qiita.com/wadaken1961/items/afe776e88204c98289dc)に続く

MwmSQLだけで進めるの場合は
[**MemSQLを使ってみようVol.5 : 番外編**](https://qiita.com/wadaken1961/items/c522ba39c1e1c51c2219)に続く

##謝辞
本解説に転載させて頂いているスクリーンショットは、一部を除いて現在MemSQL社が公開されている公式ホームページの画像を使わせて頂いております。また、本内容とMemSQL社の公式ホームページで公開されている内容が異なる場合は、MemSQL社の情報が優先する事をご了解ください。