以前は、フォールトトレラントで安全なマルチマスターMySQLサービスを構築するのは面倒でした。いくつかの手順と依存パッケージが必要でした。レプリケーション構成、データ同期、および複数の構成ファイルが複雑さを増しています。 Red Hat Enterprise Linux(RHEL)8などの強化されたOSでソリューションを構築し、Perconaの専門的にパッケージ化されたマルチマスターMySQLディストリビューションを使用すると、簡単になります。このガイドでは、その方法を説明します。
アーキテクチャ図:
[次のこともお楽しみいただけます:Keepalivedと高可用性:高度なトピック]
クラスタソフトウェアをインストールします
3つのサーバーすべて( DB1 )で次のコマンドを実行します 、 DB2 、および DB3 ):
# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# percona-release enable-only pxc-80 release
# percona-release enable tools release
# yum repolist
Updating Subscription Management repositories.
repo id repo name
prel-release-noarch Percona Release release/noarch YUM repository
pxc-80-release-x86_64 Percona XtraDB Cluster 8.0 release/x86_64 YUM repository
rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
satellite-tools-6.8-for-rhel-8-x86_64-rpms Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs)
tools-release-x86_64 Percona Tools release/x86_64 YUM repository
RHEL 8リポジトリにはMySQLのバージョンが含まれているため、Perconaのインストールを正常に完了するには、それらへのアクセスを無効にする必要があります。
# yum -y module disable mysql
# yum -y install percona-xtradb-cluster
クラスターを構成する
DB1 サーバーでデータベースサービスを開始し、MySQLクライアント経由でアクセスして、デフォルトのパスワードを更新し、任意のホストが管理のためにリモート接続できるようにします。
# systemctl start mysql
# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p
ALTER
でデフォルトのルートパスワードを変更する コマンド:
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';
UPDATE
を使用して任意のホストからのログインを有効にする コマンド:
# mysql> UPDATE mysql.user SET host='%' WHERE user='root';
MySQL管理を終了します:
# mysql> exit
DB1 サーバー、データベースサービスを停止します:
# systemctl stop mysql
DB2 およびDB3 サーバーの場合、MySQLサービスを開始/停止して、初期ファイル構造を作成します。
# systemctl start mysql
# systemctl stop mysql
クラスタ内のすべてのデータベースサーバー( DB1 、 DB2 、および DB3 )構成ファイル/etc/my.cnf
を確認します 次の一意のフィールドが含まれています:
wsrep_cluster_address=gcomm://
wsrep_cluster_name=
wsrep_node_name=
各データベースサーバーのIPアドレスを追加します。これは、クラスターが通信する方法であり、誰と通信するかです。
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
一意のクラスター名を追加します。これは、クラスター内のすべてのサーバーで同じである必要があります。これにより、他のクラスターからクラスターが識別されます:
wsrep_cluster_name=pxc-cluster
一意のノード名とそのIPアドレスを追加します。クラスタには、各ノードを識別する方法が必要です。
wsrep_node_name=pxc-cluster-node-db1
wsrep_node_address=192.168.40.91
各データベースサーバーでこのコマンドを実行して、行った設定が正しいことを確認します。
[DB1]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.91
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db1
[DB2]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.92
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db2
[DB3]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.93
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db3
クラスターを開始します
構成が適切になったら、次のステップは DB1をブートストラップすることです。 サーバ。これは、 [email protected]と呼ばれる特別なサービスを使用して行われます。 :
# systemctl start [email protected]
ログインして、次のコマンドでステータスを確認します。
# mysql -u root -p
# mysql> show status like 'wsrep%';
wsrep_cluster_size、を探します 1である必要があります 、現在クラスタ内の唯一のサーバーは DB1であるため 。
ブートストラップサービスは、安全なクラスター通信に使用されるTLSセキュリティ証明書を生成します。これらのファイルを/var/lib/mysql
にコピーします 他の2つのデータベースサーバー:server-key.pem
、ca.pem
、およびserver-cert.pem
# cd /var/lib/mysql
# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/
# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/
安全なクラスター操作のためにファイアウォールを構成する
Perconaクラスターを正しく機能させるには、3306、4444、4567、および4568の4つのポートを開く必要があります。これらのファイアウォールコマンドを3つのサーバーすべて( DB1 )で実行します。 、 DB2 、および DB3 )それらを構成します。
firewalldであることを確認してください サービスが実行されています:
# systemctl enable firewalld
# systemctl start firewalld
デフォルトのゾーンはパブリックです したがって、変更しない限り、必要な4つのポートを次のように追加できます。
# firewall-cmd --add-port 3306/tcp --zone=public --permanent
# firewall-cmd --add-port 4444/tcp --zone=public --permanent
# firewall-cmd --add-port 4567/tcp --zone=public --permanent
# firewall-cmd --add-port 4568/tcp --zone=public --permanent
または、必要に応じて、1つのコマンドから一度に複数のポートを追加します。
# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent
firewalldをリロードします 次のコマンドを使用してサービスを実行し、ポートを一覧表示して、サービスが期待どおりに構成されていることを確認します。
# firewall-cmd --reload
# firewall-cmd --list-ports
3306/tcp 4444/tcp 4567/tcp 4568/tcp
RHEL 8ファイアウォールの詳細については、こちらをご覧ください。
クラスターを成長させる
次に、ブートストラップ後に現在実行されているサーバーの既存のクラスターにサーバーを追加します。目標は、両方の DB2を追加することです およびDB3 DB1で実行されているクラスターへ 。
一度に1つずつ、各サーバーでMySQLサービスを開始し、終了するのを待ってから次のサーバーに移動します。
DB2 、タイプ:
# systemctl start mysql
DB3でも同じようにします :
# systemctl start mysql
DB1 、tail
mysql.log
クラスタに参加する新しいサーバーを監視するファイル。これにより、正常に機能しているかどうか、またはクラスター参加フェーズ中にエラーが発生しているかどうかがわかります。
# tail -f /var/log/mysqld.log | grep db3
2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3)
0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3
2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.
2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete.
2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0
(pxc-cluster-node-db1) complete.
2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.
上記のログファイルの出力では、DB3がクラスターに参加し、状態転送をリクエストし、DB1からのデータを正常に同期したことがわかります。クラスタサイズを確認するもう1つの方法は、クラスタメンバーである任意のサーバーにログインして、次のコマンドを実行することです。
# mysql -u root -p
# mysql> show status like 'wsrep%';
wsrep_cluster_sizeを探します 、 3である必要があります 、3つのサーバーすべて( DB1 、 DB2 、および DB3 )クラスターに参加しました。
wsrep_incoming_addressesを探します 、3つのサーバーIPアドレスすべてが表示されます。繰り返しになりますが、これは、すべてのサーバーがクラスター内にあり、正しく通信していることを確認するもう1つの方法です。
クラスターのテスト
3ノードのクラスタが稼働しているので、アクティブ-アクティブ-アクティブ機能をテストする必要があります。
サーバー上DB1 、次のコマンドを使用して新しいデータベースを作成します。
# mysql -u root -p
# mysql> create database myACTIVEdb;
サーバー上DB2 またはDB3 、次のコマンドを実行して、新しく作成されたデータベースが表示されるかどうかを確認します。
# mysql -u root -p
# mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myACTIVEdb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
新しいデータベースはほぼすぐに表示されます。実行されるサーバーの書き込みに関係なく、データは他のデータベースサーバーに複製されます。おめでとうございます。これで、RHEL8で実行されている3ノードのアクティブ-アクティブ-アクティブMySQLPerconaサーバーができました!
クラスターのメンテナンス
時々、データベースサーバーの1つが再起動を必要とするメンテナンスを必要とするかもしれません。再起動する前に、MySQLサービスを常に適切にシャットダウンする必要があります:
# systemctl stop mysql
このコマンドは、クラスターを中断状態にする準備をするため、時間がかかる場合があります。適切にシャットダウンして、すべてのサーバーのクラスターステータスを同期および更新します。
メンテナンス中のサーバーを再起動してから、次のコマンドを使用してクラスターに再参加します。
# systemctl start mysql
クラスタの状態は、クォーラムを維持することに依存しています。 。クラスタの半分以上のサイズを常に稼働させておくようにしてください。 3つのクラスターの場合、クォーラムは2になります。 5つのクラスターの場合、クォーラムは3になります。クラスターを3から5に増やすのは簡単です。上記の手順を繰り返してください。クラスター内に奇数のサーバーを配置して、クォーラムの管理を容易にすることをお勧めします。
クラスタ全体がオフになっていて、再起動する必要がある場合は、クラスタを開始するサーバーを1つ選択することを忘れないでください。これは、ブートストラッププロセスで行われます。たとえば、 DB1 :
# systemctl start [email protected]
他の2つのサーバーでは、ブートストラッププロセスが完了したら、次のコマンドを使用してサーバーに参加します。
# systemctl start mysql
これで、クラスターが稼働します。
SELinux
RHEL 8は、SELinuxに強制で同梱されています モード。 Red Hat、Percona、およびMySQLは、SELinuxが強制ですぐに機能することで優れた成果を上げています。 モード。変更する必要はありません。特定のPercona構成パラメーターへの変更を変更する必要がある場合は、PerconaのWebサイトで詳細を確認できます。
[この無料の電子書籍を入手する:ダミーのKubernetesクラスターを管理する。 ]
まとめ
RHEL 8は、サポート可能で優れたパフォーマンスを提供するデータベースワークロード用のプラットフォームを提供します。 Perconaは、セキュリティの詳細を念頭に置いて、MySQLサーバーのデプロイが簡単なマルチマスター実装をパッケージ化するという素晴らしい仕事をしました。