はじめに
私はMySQLやPercona Serverの検証環境を構築する際に、よくdbdeployerを利用します。これまでのブログ記事(①,②,③)でも度々登場しているように、とても便利なツールです。
しかし、同ツールの愛用者でも以下のような点に不足を感じていました。
- MariaDB Galera Clusterがサポートされていない(Perconaはサポート済み)
- Percona関連製品(PMM, PKOなど)がサポートされていない
- MySQL以外のオープンソースDB(PostgreSQL, MongoDB)がサポートされていない
そこで、上記のような製品をサポートしている検証環境デプロイツールを探していたところ、anydbverというツールを見つけました。
本記事では、このツールの概要と使い方について説明したいと思います。
概要
anydbverは LXD
と Ansible
を組み合わせたデータベース環境のデプロイツールです。特に、MySQL/MariaDB/MongoDB/PostgreSQLといったオープンソースDBをサポートしています。
このツールを開発したのはPercona社のNickolay Ihalainen氏で、Perconaブログでも紹介記事「Deploying Any Version of Leading Open Source Databases for Tests and Experiments」を公開しています。
anydbverは、LXC(Ubuntu に標準実装されているLinux Containers)を使用してテスト用インスタンスを立ち上げます。この点も、ローカル上に .tar.gz版パッケージを展開していくdbdeployerとは仕様(挙動)が異なります。
セットアップ
早速、anydbverを使ってみます。まずは、Githubから必要なファイルをダウンロードします。その中にある Vagrantfile を使って vagrant up
を実行します。
なお、このツールはVagrant + VirtualBox がインストールされている環境が前提となっています。これは Vagrant で立ち上げるインスタンスのOSが「Ubuntu 20.04」で、その元となるBOXが VirtualBox プロバイダしか用意されていないことが原因と考えられます。
https://app.vagrantup.com/ubuntu/boxes/focal64
1 provider for this version.
virtualbox Externally hosted (cloud-images.ubuntu.com)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ git clone https://github.com/ihanick/anydbver.git $ ls anydbver/ anydbver configs LICENSE podmanctl secret tools CACHING.md Docker lxdctl README.md test-all.sh Vagrantfile common gen_lxdock.sh playbook.yml roles test-partial.sh Vagrantfile.multi-instances $ cd anydbver/ $ vagrant up ... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. |
VMが立ち上がったら、sshログインします。ホームディレクトリに anydbver が配置されていればセットアップは完了です。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ vagrant ssh vagrant@ubuntu-focal:~$ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.2 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.2 LTS" VERSION_ID="20.04" ... vagrant@ubuntu-focal:~$ ls -ls anydbver |
もしここまでの手順で上手くいかない場合は、vagrant-vbguestを入れてから再度 vagrant up をしてみるといいかもしれません。
1 2 3 4 5 |
$ vagrant plugin install vagrant-vbguest $ vagrant halt $ vagrant destroy $ vagrant up |
セットアップ(手元のUbuntu18.04の場合)
通常の方法では、上記のようにVagrantで立ち上げた環境(Ubuntu 20.04)で使用しますが、Vagrantfile
内に記載されているスクリプトと同じようなコマンドを実行することで、シングル構成のUbuntu 18.04インスタンスでもセットアップできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$ sudo su - # apt-get update # apt-get install -y ansible git # gpasswd -a root lxd # git clone https://github.com/ihanick/anydbver.git # cat > /root/anydbver/.anydbver << EOF PROVIDER=lxd LXD_PROFILE=root K3S_FLANNEL_BACKEND=host-gw EOF # mkdir /root/lxc # lxc storage create root dir source=/root/lxc # lxc init ### ← Vagrantfileにはありませんが、このコマンドが必要でした # lxc profile create root # lxc profile device add root root disk type=disk pool=root path=/ # lxc network create lxdbr0 # lxc profile device add root eth0 nic nictype=bridged parent=lxdbr0 # echo 'export LXD_PROFILE=root' >> /root/.bashrc # echo 'export K3S_FLANNEL_BACKEND=host-gw' >> /root/.bashrc # sudo bash -c 'export HOME=/root;cd /root/anydbver;./anydbver update' # cat > /etc/sysctl.d/50-k3s.conf << EOF vm.overcommit_memory = 1 vm.overcommit_ratio = 10000 kernel.panic = 10 kernel.panic_on_oops = 1 EOF # sysctl -p /etc/sysctl.d/50-k3s.conf # cat > /etc/modules-load.d/k3s.conf << EOF br_netfilter overlay EOF # modprobe br_netfilter # modprobe overlay |
ただし、CnetOS環境では少しセットアップが難しいかもしれません。
Percona Serverをデプロイ
まずは試しに Percona Server のテスト環境をデプロイしてみます。
LXC、Ansibleのログが一気に流れていきますが、エラーが出ることなくコマンドが完了したらOKです。
1 2 3 4 5 6 7 |
$ cd anydbver $ ./anydbver deploy percona-server:8.0 ./lxdctl --destroy ./lxdctl --nodes 1 ... PLAY RECAP ************************************************************************ root.default : ok=20 changed=10 unreachable=0 failed=0 skipped=48 rescued=0 ignored=0 |
デプロイが完了したら早速SSHログインしてみます。Percona Server8.0の最新バージョンがインストールされています。
1 2 3 4 5 6 7 8 9 10 11 |
$ ./anydbver ssh [root@root-default ~]# mysql ... mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.22-13 | +-----------+ mysql> exit |
また、このインスタンス自体が独立したインスタンス(CentOS7.9)なので、sysbenchなどをインストールすることも可能です。
1 2 3 4 5 6 7 8 9 10 11 |
[root@root-default ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@root-default ~]# yum install -y sysbench ... Installed: sysbench.x86_64 0:1.0.20-6.el7 Dependency Installed: postgresql-libs.x86_64 0:9.2.24-4.el7_8 Complete! |
作成したコンテナはdestroyコマンドで削除できます。ただし、このdestroyコマンドはdeploy時にも最初に実行されるため、毎回実行する必要はありません。
1 2 3 |
[root@root-default ~]# exit $ ./anydbver destroy |
MariaDB Galera Clusterをデプロイ
次に、dbdeployerではサポートされていないMariaDB Galera Cluster環境をデプロイしてみます。
以下の条件の環境をデプロイします。MariaDB 10.4 → 10.5のバージョンアップを意識した構成です。
- MariaDB 10.4 の最新版(10.4.17)ではなく、少し古いバージョン(10.4.15)を使用します
- MariaDB Galera Clusterの3ノード構成にします
デプロイコマンドは以下のようになります。イメージとしては、レプリケーションの最上位層のインスタンスが「default」となり、その下に追加するインスタンスを並べていく形です。
1 2 |
### MariaDB Galera 3ノード構築 $ ./anydbver deploy mariadb-cluster:10.4.15 node1 mariadb-cluster:10.4.15 galera-master:default node2 mariadb-cluster:10.4.15 galera-master:default |
デプロイした各インスタンスへのログインは以下のようになります。
1 2 3 4 5 6 7 8 |
### Galera Node1 にログイン $ ./anydbver ssh default ### Galera Node2 にログイン $ ./anydbver ssh node1 ### Galera Node3 にログイン $ ./anydbver ssh node2 |
Galera Clusterが正常に動作していることを確認します
1 2 3 4 5 6 7 8 |
$ ./anydbver ssh node2 # mysql -e "show global status like 'wsrep_cluster_size'" +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ |
この通り、MariaDB Galera Cluster 10.4.15の環境を作ることができました。
ProxySQL をデプロイ
最後に、Perconaの関連ソフトウエアである ProxySQLをデプロイしてみます。
非同期レプリケーション(ソース1台、レプリカ2台)の環境をProxySQLで制御するような環境をデプロイします。
1 |
$ ./anydbver deploy ps:5.7 node1 ps:5.7 master:default node2 ps:5.7 master:default node3 proxysql master:default |
デプロイした各インスタンスへのログインは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
### ソースにログイン $ ./anydbver ssh default ### レプリカ1にログイン $ ./anydbver ssh node1 ### レプリカ2にログイン $ ./anydbver ssh node2 ### ProxySQLサーバにログイン $ ./anydbver ssh node3 |
ProxySQLが正常に動作していることを確認します。
1 2 3 4 5 6 7 |
$ ./anydbver ssh node3 [root@root-node3 ~]# systemctl status proxysql ● proxysql.service - High Performance Advanced Proxy for MySQL Loaded: loaded (/etc/systemd/system/proxysql.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2021-02-18 05:12:16 UTC; 3min 26s ago ... |
この状態から、/etc/proxysql.cnfを変更すればProxySQLが利用できます。
おわりに
上記では紹介しきれませんでしたが、anydbverを使えばPercona Kubernetes Operator(deploy k3s)やPostgreSQL(deploy pg:12.3)、Percona Monitoring and Management(deploy pmm)の環境をデプロイすることもできます。
もし、MySQLなどのテスト環境をデプロイするツールを探している方がいれば一考してみてください。