GNU/Linux >> Linux の 問題 >  >> Linux

RHEL8とPerconaMySQLを使用してアクティブ-アクティブ-アクティブクラスターを構築する方法

以前は、フォールトトレラントで安全なマルチマスター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.pemca.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サーバーのデプロイが簡単なマルチマスター実装をパッケージ化するという素晴らしい仕事をしました。


Linux
  1. Percona XtraDB ClusterforMySQLをDebian8にインストールする方法

  2. openSUSE12.1にPHP-FPMとMySQLを使用してNginxをインストールする方法

  3. CentOS/RHEL で同じ名前の 2 つのボリューム グループをアクティブ化してマウントする方法

  1. MySQLWorkbenchを使用してMySQLでデータベースを作成する方法

  2. CentOS 6 /RHEL6にPHP5FastCGIとMySQLを使用してlighttpdをインストールする方法

  3. PHP5FastCGIとMySQLを使用してFedora16にlighttpdをインストールする方法

  1. PHP-FPMとMySQLを使用してFedora16「Verne」にNginxをインストールする方法

  2. openSUSE12.1にPHP5FastCGIとMySQLを使用してlighttpdをインストールする方法

  3. Ubuntu11.10にPHP5とMySQLを使用してNginxをインストールする方法