スマートスタイル TECH BLOG

Ansible / Vagrant で MariaDB Primary / Replica クラスタをプロビジョニング

本記事はMariaDB Corporationより寄稿された記事となります

はじめに

クラスタ構成の MariaDB Server の開発・テスト環境を構築するのは同じ作業を何度も行う必要があり,手作業で行う場合,単純な作業ミスも起こりやすく,非常に非効率です。
そこで今回は Ansible を用いて自動的に MariaDB クラスタを構築する手順を解説致します。

Ansible とは

Ansible は Red Hat が開発するオープンソースの構成管理ツールで,元々は Ansible, Inc. により開発されていましたが,2015年10月に Red Hat により買収されています。
Playbook と呼ばれる YAML 形式のファイルで構成を記述します。競合ソフトウェアとは異なりエージェントレスですので,SSHでログインできればリモートホストの構成を変更することが可能です。

Vagrant とは

Windows / macOS 上で Linux 仮想マシン(VM)を複数起動する場合は Vagrant を Ansible と併用するのが非常に便利です。Vagrant では box と呼ばれる仕組みがあり,主要なLinuxディストリビューションのイメージがありますので,各VMにOSをインストールする手間が省けます。なお,Vagrant は Hashicorp により開発されています。
例えば,以下の Vagrantfile を用意したディレクトリで vagrant up を実行すると,最小構成の CentOS 7 をインストールした VM を作成,起動することができます。

Vagrantfile:

また,複数のVMをデプロイするのも非常に簡単です。
Vagrant が対応する Hypervisor(providerと呼ばれます) は以下のものがあります。

  • VirtualBox
  • Hyper-V
  • Docker
  • VMware (有償オプション)

なお,今回の実行環境では VirtualBox が非常に不安定なため,VMware Workstation 15 Pro を利用します。

テスト環境

以下のテスト環境を用いました。

ホスト OS: Windows 10 Pro 1803
Ansible 2.5.2
Vagrant 2.2.2
Hypervisor: VMware Workstation 15 Pro
ゲストVM OS: CentOS 7.6.1810
MariaDB Server 10.3.13 x 2 (Primary/Replica)
MariaDB MaxScale 2.3.4 x 1

Vagrantfile

VM(仮想マシン)の構成(vCPU数,メモリサイズ),OS,IPアドレス等を記述する Vagrantfile は以下のものを用いました。

Hypervisor として VirtualBox を用いる場合は,コメントアウトされている箇所の # を削除,反対に config.vm.provider :vmware_workstation do |v| … end のセクションをコメントアウトします。
上記の Vagrantfile では,合計 3台の CentOS 7 VM (メモリ: 1GB, vCPU: 1)を起動します。

Ansible Playbook

Ansible では Role という概念があり,Ansible で構成管理されるホスト毎に Role を割り当て,Role 毎に構成を変えることができます。今回は以下のようになっています。

ホスト名 Role 役割
mxs1 maxscale MaxScale
server1 primary MariaDB Primary Server
server2 slave MariaDB Replica Server

メインの Playbook は以下のようになります。

Vagrantfile に以下の記述がありますので,Playbook は provisioning ディレクトリに provision-replica.yml というファイル名で保存されています。

Vagrant による Ansible Playbookの実行

Vagrantfile で Ansible Playbook が指定されていますので,プロビジョニングを開始するには,Vagrantfile, provisioning ディレクトリがある ディレクトリで以下のコマンドを実行するだけです。

Windows 上で Vagrant からプロビジョニングする場合,VM は一つずつシーケンシャルに実行されます。Linux 上で Ansible のみを用いる場合は並列実行されますので,以下のようなケースでは実行順に配慮する必要があります。

  • Primary/Replica レプリケーションにおいて,Primary の GTID を取得後,Replica でレプリケーションを開始
  • Galera Cluster において,最初のノードで galera_new_cluster を実行後,他ノードで mariadb service を開始

vagrant up 実行後,各 VM の構成の RECAP が以下のように,unreachable=0 failed=0 となっていれば,プロビジョニングは正常に完了しています。

各 VM への SSH ログイン

プロビジョニングされた各 VM へは,vagrant ssh コマンドを用いて SSH ログインできます。例えば mxs1 にログインするには vagrant ssh mxs1 を実行します。
これにより,パスワード入力なしに vagrant ユーザとして SSH ログインすることが可能で,vagrant ユーザは sudo で root にスイッチする権限を持っています。

maxctrl list servers の出力より,Vagrant / Ansible を用いて自動的に MaxScale + Primary/Replica クラスタをプロビジョニングできたことが確認できました。

まとめ

前回のブログ投稿にて,GKE(Google Kubernetes Engine)上に Helm Chart を用いて Primary/Replicaクラスタをデプロイする手順について解説いたしましたが,public cloud の使用料金が問題となる場合,/etc/maxscale.cnf や /etc/my.cnf.d/ 配下の設定ファイルを調整しながら開発・テストを行いたい場合には,ローカルVMを用いるメリットがあるかと存じます。
そうした要件がある場合は,Vagrant / Ansible を用い Primary/Replica クラスタを自動的に簡単にプロビジョニングすることで実行構築作業を効率化可能であることが確認できました。
なお,今回用いた Vagrantfile, Ansible Playbook 一式は以下の GitHub リポジトリにあります。

https://github.com/goto-satoru/ansible-provision-mariadb-primary-replica-cluster


執筆者情報

後藤 智(GOTO Satoru)
2017年6月よりMariaDB Corporation AbにてAPAC(Asia Pacific)地域におけるプリセールス業務を主に担当。現在は主に日本を担当。
この執筆者の他の記事をよむ
Return Top