とうとう最終日まで来ましたTIS Engineer Advent Calendar!
あらためて見てみると、Excelの話から言語系の話、インフラ系の話、とてもバラエティに富んだ内容ではなかったでしょうか?
TISはいわゆるSIerで、様々な業種の顧客向けに多種多様なものを扱っています。
中にはとてもレガシーなシステムもあり、保守的なシーンもありますが、根底としてはやはりよりよいものを提供したいという思いがあるのが事実です。
そのために新しい技術に対しても非常にポジティブにとらえてチャレンジしています。初日のこちらの記事でも紹介されているTech-Circleはまさにその姿を表した形となっています。
ということで、興味をもった方はぜひ私達と一緒に何かやりましょう!!
それでは今日の本題に入ります。
最終日も新しい技術との接触のお話。
***NodeFabric***ってご存知ですか?
NodeFabricって何?
概要
おそらく日本では知っている人が非常に少ないのではないでしょうか?
日本からは遠く離れた地エストニアのOpenNodeという会社で開発されているツールです。ラトビアで開催されたZabbix Conferenceに参加した時に知り合った方がこのOpenNodeのFounderで、その方からご紹介いただいたことをきっかけに今回試してみました。
NodeFabricはDockerの技術を根底とし、高可用なDBシステムおよび分散ファイルストレージをソリューション提供する仕組みです。
複数サーバに跨った構成を作るのって結構大変だったりするので、そこをうまい具合にオーケストレーションして自動化してくれるようなツールです。
メリット
具体的にはMariaDBのGalera Clusterを使った複数ノード間でのDBレプリケーション構成や、Cephを使った分散ファイルストレージをワンオペレーションで構築できます。
仕組みはこんな形になっていて、中ではHAProxyやConsulを使って自動化を実現しています。
※引用: http://nodefabric.readthedocs.org/en/latest/guide/intro.html
HAProxyやConsul、GaleraCluster、CephそれらすべてのプロセスはDockerのコンテナとしてそれぞれ稼働し、最下層の環境がAWSやOpenStack、KVM、VMwareもしくは物理マシンなんでも関係なく適用可能な仕組みで提供されています。
動かしたいアプリケーションをDockerコンテナ上で稼働させるだけでDBとストレージは高可用な仕組みのものが簡単に利用可能になるというものです。
使い方
使い方は非常に簡単。Dockerがインストールされていて・全て設定済みのイメージが公開されているのでそれを使えばすぐに利用可能です。
今回は試しにAWS上に環境を作ってみました。
詳しくは公式のドキュメントをご覧ください。
手順は以下。
1. HashicorpのATLASアカウント登録
まずATLASでアカウント登録し、パーソナルページにてTokenを発行します。このTokenを使ってATLAS上にEnvironmentを自動作成してここで稼働状態を管理できるようにします。
こちらのEnvironmentsのページにてGitHubのアカウントとリンク付けが必要なので事前に設定しておいてください。
2. AWS上でNodeFabricのAMIを使ってベースのインスタンス起動
AWS MarketplaceにNodeFabricのAMIが公開されています。
これを使ってインスタンスを作ります。
HA構成を組む想定なのでインスタンス数は最低でも3台必要です。
台数指定しておけば勝手にネットワーク設定等は行ってくれます。
必要な設定としては、「高度な詳細」を開いてユーザデータを記入することだけです。
インスタンス起動時に最初に登録したATLASとの自動連携を実現するため、このユーザデータ欄に、ATLASのToken情報と、Environments指定を行います。
以下の図のように、ATLAS_TOKEN=にToken情報を、ATLAS_ENVNAME=にATLAS上で管理したいEnvironmentの名前を適当につけて設定します。
ストレージはCeph用に少し追加で設定しておきます。
セキュリティグループは以下のデフォルト設定でOKです。
アプリケーションで何か必要なポートがある場合には追加で設定すればOK。
これでインスタンス起動すると、3台のEC2インスタンスが稼働し、各インスタンス内でDockerやその上のコンテナ等すべて自動構築されます。
環境情報はATLASにも自動連携され、以下のように情報を見ることが可能です。
3. サービスの有効化
インスタンスを起動しただけだと、NodeFabricのコアのサービスだけが稼働している状態なので、MariaDBのGalera ClusterやCephの分散ストレージのサービスが動いていません。
利用したいサービスを有効化して使える状態にする必要があります。
作成したインスタンスにログインしてnodefabric-statusというコマンドを打つとNodeFabricでの管理状況が見れます。
$ sudo nodefabric-status
Galera Clusterを有効化してみます。
$ sudo nf-galera-ctl enable
enable化すると、まずは使える準備ができます。使えるようにするにはこの状態に対してbootstrapコマンドを実行する必要があります。
実行後しばらくすると各インスタンス上のMariaDB Galera Cluster用のコンテナが起動し、クラスタ構成が完了します。
$ sudo nf-galera-ctl bootstrap
RUNNING状態になればOKです。
各インスタンスの中では以下のようにNodeFabricの機能のベースとなるコンテナと、今回有効にしたGalera Cluster用のコンテナの全4コンテナが稼働した状態となります。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1777dc5ef8e opennode/nf-consul "/bin/start -server About an hour ago Up About an hour nf-consul
3cc3baa4c183 opennode/nf-galera "/start.sh" About an hour ago Up About an hour nf-galera
532e850d9d62 opennode/nf-haproxy "/startup.sh" About an hour ago Up About an hour nf-haproxy
2f05e9e79cdc opennode/nf-registrator "/bin/registrator co About an hour ago Up About an hour nf-registrator
4. サービスを使う
MariaDBのGaleraClusterが動いている状態なので、インスタンス内で以下のようにコマンドを実行してDBにアクセスし、試しにDBを作ってみます。
# mysql -uroot -hlocalhost
MariaDB [(none)]> create database sample;
Query OK, 1 row affected (0.00 sec)
もちろんレプリケーション構成になっているので別インスタンス内のDBコンテナのDBでも同じDBが作られているのがわかります。
# mysql -uroot -hlocalhost
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sample |
+--------------------+
4 rows in set (0.00 sec)
非常に簡単にクラスタ構成のDB環境が手に入りました!!
まとめ
今回、ほんのちょっと触った程度なので、まだまだこのツールのメリット感が体験できていないですが、Dockerの特性をうまく活用して高可用なデータベースやファイルストレージをソリューション型で展開するという面白いアプローチかと思います。
私達は、要件にマッチした環境をいかにコストをかけることなく、安心できるものを提供するのかを常に考えています。
最近の流れとしてはサービス化というところが大きなところかと思いますが、すべてをパブリックなサービスでカバーできなくて、自前で提供するというシーンも少なからずあると思います。こういったシーンでNodeFabricのような、コンテナ技術をうまく活用したソリューション化というのが効果的かもしれませんね。
ちょっと長い記事になってしまいましたが、いかがでしたでしょうか?
TISはこんないろんなことやっている会社です。また来年もどうぞよろしくお願いします!
来年早い段階でTech-Circleも開催します。
次はおそらくTerraformをテーマにしたハンズオンになる予定です。