さてさて、Proxmoxで構築した筆者のプライベートな仮想環境上にUbuntuLinuxServer22.04を3台導入し、その3台でmariaDB10.8のGaleraクラスターをマルチマスター構成で構築しました。

今回はその手順について紹介します。

まずはUbuntuLinuxサーバをProxmox上に3台導入していきます。
以下は導入後の状態です。

物理的にも分散してmariaDBサーバを配置

prxmx0へdb0、prxmx1へdb1、prxmx2にdb2というように
物理マシンが故障しても良いように、3台の物理マシン上に
それぞれ仮想のdbサーバも分散して設置しました。


Ubuntu Linux サーバの設定

ここではLinuxサーバの導入手順は割愛します。


mariaDBサーバの設定

各サーバを設定していきます。
まずはインストールです。3台にそれぞれ導入します。

curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
sudo bash mariadb_repo_setup --mariadb-server-version=10.8
sudo apt install mariadb-server galera-4 -y
sudo apt autoremove -y

次に設定ファイルを編集します。
設定ファイルを以下コマンドで開き、3台の設定ファイルを編集します。

# sudo vi /etc/mysql/mariadb.conf.d/60-galera.cnf 

設定ファイル

#
# * Galera-related settings
#
# See the examples of server wsrep.cnf files in /usr/share/mysql
# and read more at https://mariadb.com/kb/en/galera-cluster/

[galera]
# Mandatory settings
wsrep_on                 = ON
wsrep_cluster_name       = "MariaDB Galera Cluster"
wsrep_cluster_address    = "gcomm://192.168.1.xxx,192.168.1.xxx,192.168.1.xxx"(※3台のIPアドレスをカンマ区切りで記載)
binlog_format            = row
default_storage_engine   = InnoDB
innodb_autoinc_lock_mode = 2

# Allow server to accept connections on all interfaces.
bind-address = 0.0.0.0  # これをコメントアウトしないと他サーバからアクセスできません

# Optional settings
wsrep_slave_threads = 2
#innodb_flush_log_at_trx_commit = 0
#
wsrep_node_address = "192.168.1.xxx[各サーバ自身のIPアドレス]"
wsrep_sst_method = rsync
wsrep_provider = '/usr/lib/galera/libgalera_smm.so'(※自身のサーバ上のlibgalera_smm.soライブラリのパス)

いざ起動

設定が完了したら、各サーバのmariadbサービスは落とします。
そして最初に起動するサーバだけを以下コマンドで起動します。

$ sudo galera_new_cluster

上記で起動後に、正しくクラスターとして起動しているか、確認します。

mariaDBにログインします。

$ mysql -u[user] -p[pass]

ログイン後、以下のコマンドを入力します。

MariaDB [(none)]>  show status like 'wsrep_%';

残りのサーバも起動する

残りの2台のサーバは普通にmariaDBサービスを起動します。

$ sudo systemctl start mariadb

全部のサーバで上記のコマンド「show status like ‘wsrep_%’;」で稼働を確認します。

あとは試しにテーブル作成したり、削除して同期されることを確認してみてください。

dbのimportも1台にインポートすると他サーバにも同期されます。
マルチマスターなのでdb0でなくとも、db1の更新でも反映されます。


停止する場合

mariaDBを停止する場合、各サーバを以下コマンドで停止です。

$ sudo systemctl stop mariadb

再開する場合

mariaDBの全台の停止後にサービス再開する場合は、今度は最後に停止したサーバから起動する必要があります。


仮に再開失敗した場合の復旧方法

失敗するケースもありますので、復旧方法について紹介しておきます。


まとめ

今回はmariaDBのgaleraクラスタサーバの構築にトライしてみました。
起動順、再開順など仕組みを理解しておくことは障害発生時の対応を事前に確認できるので大事ですね。

結構簡単に構築できましたが、DBのバージョンアップなどもこれで切り替えながら実施できますので、
運用するメリットも大きいですので使っていこうと思います。

何かの役に立てば幸いです。