ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由:
Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章


実稼働環境でリレーショナルデータベースシステムを扱う場合、ある種のレプリケーション手順を実行するのが最善の場合がよくあります。 レプリケーションを使用すると、データを別のノードに自動的に転送できます。

単純なマスタースレーブレプリケーションは、SQLの世界で最も一般的です。 これにより、1つの「マスター」サーバーを使用してすべてのアプリケーション書き込みを処理でき、複数の「スレーブ」サーバーを使用してデータを読み取ることができます。 フェイルオーバーやその他の手法を構成することが可能です。

マスタースレーブレプリケーションは便利ですが、マスターマスターレプリケーションほど柔軟ではありません。 マスターマスター構成では、各ノードは書き込みを受け入れ、クラスター全体に分散させることができます。 MariaDBにはデフォルトでこれの安定バージョンがありませんが、「Galera」と呼ばれる一連のパッチは同期マスターマスターレプリケーションを実装します。

このガイドでは、Ubuntu12.04VPSインスタンスを使用してGaleraクラスターを作成します。 デモンストレーションの目的で3台のサーバー(構成可能な最小のクラスター)を使用しますが、実稼働環境では5台のノードをお勧めします。

MariaDBリポジトリを追加する


MariaDBおよびGaleraパッケージは、デフォルトのUbuntuリポジトリでは使用できません。 ただし、MariaDBプロジェクトは、必要なすべてのパッケージを含むUbuntu用の独自のリポジトリを維持しています。

このクラスター用に構成する3つのサーバーのそれぞれに、最初にpython-software-propertiesパッケージをインストールする必要があります。 これにより、リポジトリを管理するために必要なコマンドが提供されます。

sudo apt-get update
sudo apt-get install python-software-properties

これで、MariaDBリポジトリのキーファイルを追加できます。 これにより、リポジトリのメンテナを信頼し、問題なくリポジトリ内にパッケージをインストールできることがサーバーに通知されます。

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

これにより、キーファイルが受け入れられます。 データベースに信頼できるキーがあるので、実際のリポジトリを追加できます。

sudo add-apt-repository 'deb http://mirror.jmu.edu/pub/mariadb/repo/5.5/ubuntu precise main'

Galeraパッチを使用してMariaDBをインストールする


これで、aptインターフェイスを介してGaleraパッチを使用してMariaDBを簡単にインストールできます。 最初にデータベースを更新することを忘れないでください。

sudo apt-get update
sudo apt-get install mariadb-galera-server galera

インストール中に、MariaDB管理ユーザーのパスワードを設定するように求められます。 すべてのサーバーインスタンスに同じパスワードを設定できます。

何らかの理由で、マシンにrsyncがまだインストールされていない場合は、次のように入力して今すぐインストールする必要があります。

sudo apt-get install rsync

これで、クラスターの構成を開始するために必要なすべての要素が揃いました。

MariaDBとGaleraを構成する


3台のサーバーのそれぞれにMariaDBとGaleraをインストールしたので、構成を開始できます。

クラスタは実際にその構成を共有する必要があります。 このため、最初のマシンですべての構成を行い、それを他のノードにコピーします。

最初のサーバーで、クラスターの設定を含む別のファイルを作成します。

デフォルトでは、MariaDBは、/etc/mysql/conf.dディレクトリで追加のファイルをチェックして、その動作を強化するように構成されています。 このディレクトリに、クラスタ固有のすべてのディレクティブを使用してファイルを作成できます。

sudo nano /etc/mysql/conf.d/cluster.cnf

次の構成をコピーしてファイルに貼り付けます。 変更する必要があるものと、各部分の意味について説明します。

[mysqld] query_cache_size = 0 binlog_format = ROW default-storage-engine = innodb innodb_autoinc_lock_mode = 2 query_cache_type = 0 bind-address = 0.0.0.0

ガレラプロバイダーの構成

wsrep_provider = / usr / lib / galera / libgalera_smm.so#wsrep_provider_options =“ gcache.size = 32G”

ガレラクラスター構成

wsrep_cluster_name =“ test_cluster” wsrep_cluster_address =“ gcomm:// first_ipsecond_ipthird_ip

ガレラ同期の組み合わせ

wsrep_sst_method = rsync#wsrep_sst_auth = user:pass

ガレラノード構成

wsrep_node_address =“ this_node_ip ” wsrep_node_name =“ this_node_name

最初のセクションでは、MySQLが正しく機能できるようにするいくつかのMariaDB/MySQL設定を変更または再アサートします。

「GaleraProviderConfiguration」というラベルの付いたセクションは、WriteSetレプリケーションAPIを提供するMariaDBコンポーネントを構成するために使用されます。 これは、Galeraがwsrep(WriteSet Replication)プロバイダーであるため、この場合はGaleraを意味します。

一般的なパラメーターを指定して、初期レプリケーション環境を構成できます。 Galera構成オプションの詳細については、こちらをご覧ください。 一般的に、ワーキングセットを取得するためにあまり多くのことをする必要はありません。

「Galeraクラスター構成」セクションでは、作成するクラスターを定義します。 IPアドレスまたは解決可能なドメイン名によってクラスターメンバーを定義し、メンバーが正しいグループに参加することを保証するためにクラスターの名前を作成します。

「Galera同期構成」セクションでは、クラスターがメンバー間でデータを通信および同期する方法を定義します。 これは、ノードがオンラインになったときに発生する状態転送にのみ使用されます。 初期設定では、エキゾチックなコンポーネントを使用しなくても必要な処理をほぼ実行できるため、単純にrsyncを使用しています。

「Galeraノードの構成」セクションは、単に現在のサーバーのIPアドレスと名前を明確にするために使用されます。 これは、ログの問題を診断し、各サーバーを複数の方法で参照できるようにする場合に役立ちます。 名前は任意の名前にすることができます。

クラスタ構成ファイルに問題がなければ、内容を個々のノードのそれぞれにコピーする必要があります。

個々のサーバーの「Galeraノード構成」セクションを変更することを忘れないでください。

「GaleraNodeConfiguration」セクションをカスタマイズして各サーバーでこの構成を行う場合は、ファイルを保存して閉じる必要があります。

Debianメンテナンス設定のコピー


現在、UbuntuおよびDebianのMariaDBサーバーは、特別なメンテナンスユーザーを使用して定期的なメンテナンスを行っています。 MySQLの停止などの重要な機能など、メンテナンスカテゴリに含まれない一部のタスクもこのユーザーとして実行されます。

クラスタ環境が個々のノード間で共有されているため、各ノードでランダムにログインクレデンシャルを生成したメンテナンスユーザーは、コマンドを正しく実行できなくなります。 他のサーバーはローカル設定を使用して共有クラスター環境にアクセスしようとするため、初期サーバーのみが正しいメンテナンスクレデンシャルを持ちます。

これは、メンテナンスファイルの内容を個々のノードにコピーするだけで修正できます。

サーバーの1つで、Debianメンテナンス設定ファイルを開きます。

sudo nano /etc/mysql/debian.cnf

次のようなファイルが表示されます。

[client]
host     = localhost
user     = debian-sys-maint
password = 03P8rdlknkXr1upf
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = 03P8rdlknkXr1upf
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

この情報をコピーして、各ノードの同じファイルに貼り付けるだけです。

2番目と3番目のノードで、同じファイルを開きます。

sudo nano /etc/mysql/debian.cnf

現在の情報を削除し、最初のノードの構成ファイルからこれらの他のサーバーのファイルにパラメーターを貼り付けます。

[client]
host     = localhost
user     = debian-sys-maint
password = 03P8rdlknkXr1upf
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = 03P8rdlknkXr1upf
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

それらは今ではまったく同じであるはずです。 ファイルを保存して閉じます。

クラスターを開始します


まず、クラスターをオンラインにできるように、実行中のMariaDBサービスを停止する必要があります。

これは、各ノードでこれを入力することで簡単に実行できます。

sudo service mysql stop

すべてのプロセスの実行が停止したら、特別なパラメーターを使用して最初のノードを再起動する必要があります。

sudo service mysql start --wsrep-new-cluster

クラスタ構成では、オンラインになる各ノードは、構成ファイルで指定された少なくとも1つの他のノードに接続して、初期状態を取得しようとします。 --wsrep-new-clusterパラメーターがないと、最初のノードが他のノードに接続できないため、このコマンドは失敗します。

これで、他の各ノードで、通常どおりにMariaDBを起動できます。 オンラインのクラスターリストのメンバーを検索します。 最初のノードが見つかると、クラスターに参加します。

sudo service mysql start

これで、クラスターがオンラインになり、通信できるようになります。

マスターマスターレプリケーションのテスト


これまでの手順を実行して、クラスターがマスターマスターレプリケーションを実行できるようにしました。 これをテストして、レプリケーションが期待どおりに機能しているかどうかを確認する必要があります。

ノードの1つで、次のようなデータベースとテーブルを作成できます。

 mysql -u root -p mariadb_admin_password -e'CREATE DATABASE playground;'  mysql -u root -p mariadb_admin_password -e'CREATE TABLE playground.equipment(id INT NOT NULL AUTO_INCREMENT、type VARCHAR(50)、quant INT、color VARCHAR(25)、PRIMARY KEY(id));'

これにより、playgroundというデータベースと、その中にequipmentというテーブルが作成されます。

次に、以下を実行して、最初のアイテムをこのテーブルに挿入できます。

mysql -u root -p mariadb_admin_password -e'INSERT INTO playground.equipment(type、quant、color)VALUES( "slide"、2、 "blue")'

これで、テーブルに1つの値があります。

別のノードから、次のように入力してこのデータを読み取ることができます。

mysql -u root -p mariadb_admin_password -e'SELECT * FROM playground.equipment;'

+----+-------+-------+-------+
| id | type  | quant | color |
+----+-------+-------+-------+
|  1 | slide |     2 | blue  |
+----+-------+-------+-------+

この同じノードから、クラスターにデータを書き込むことができます。

mysql -u root -p mariadb_admin_password -e'INSERT INTO playground.equipment(type、quant、color)VALUES( "swing"、10、 "yellow");'

3番目のノードから、もう一度クエリを実行することで、このすべてのデータを読み取ることができます。

mysql -u root -p mariadb_admin_password -e'SELECT * FROM playground.equipment;'

+----+-------+-------+--------+
| id | type  | quant | color  |
+----+-------+-------+--------+
|  1 | slide |     2 | blue   |
|  2 | swing |    10 | yellow |
+----+-------+-------+--------+

ここでも、このノードから別の値を追加できます。

mysql -u root -p mariadb_admin_password -e'INSERT INTO playground.equipment(type、quant、color)VALUES( "seesaw"、3、 "green");'

最初のノードに戻ると、データがどこでも利用可能であることがわかります。

mysql -u root -p mariadb_admin_password -e'SELECT * FROM playground.equipment;'

+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  1 | slide  |     2 | blue   |
|  2 | swing  |    10 | yellow |
|  3 | seesaw |     3 | green  |
+----+--------+-------+--------+

ご覧のとおり、すべてのサーバーに書き込むことができます。 これは、マスターマスターレプリケーションが正しく機能していることを意味します。

結論


この時点で、サーバーにGaleraクラスターを構成する必要があります。 これは、書き込みが集中するアプリケーション環境で負荷を分散するのに非常に役立ちます。

実稼働環境でGaleraクラスターを使用することを計画している場合は、「xtrabackup」などの他の状態スナップショット転送(sst)エージェントのいくつかを確認することをお勧めします。 これにより、アクティブノードを大幅に中断することなく、新しいノードを非常に迅速にセットアップできます。 これは実際のレプリケーションには影響しませんが、ノードが初期化されるときに問題になります。

ジャスティン・エリングウッド