CentOS8でPXCクラスターを構築する

PXCの概要##

PXCは、[Percona XtraDB Cluster](https://www.percona.com/doc/percona-xtradb-cluster/LATEST/index.html)の略語であり、Perconaによって作成された無料の[MySQL](https://cloud.tencent.com/product/cdb?from=10680)クラスター製品です。 PXCの機能は、mysqlに付属のGaleraクラスターテクノロジーを介してさまざまなmysqlインスタンスを接続し、マルチマスタークラスターを実現することです。 PXCクラスターでは、各mysqlノードは読み取りと書き込みが可能です。これはマスタースレーブの概念のマスターノードです。読み取り専用ノードはありません。

PXCは、実際にはGaleraに基づくOLTP用のマルチマスター同期レプリケーションプラグインです。PXCは主に、MySQLクラスターでの強力なデータ同期の問題を解決するために使用されます。 PXCは、[MariaDB](https://cloud.tencent.com/product/tdsql?from=10680)やPercona Serverなど、mysqlの派生バージョンをクラスター化できます。 Percona Serverのパフォーマンスはmysqlエンタープライズバージョンに最も近いため、そのパフォーマンスはmysqlの標準バージョンと比較して大幅に改善されており、基本的にmysqlと互換性があります。したがって、PXCクラスターを構築するときは、通常、Perconaサーバーに基づいて構築することをお勧めします。

データベースクラスターソリューションの選択については、以下を参照してください。

PXC ###の機能


PXCをインストールしてクラスターを形成します##

環境への準備###

環境バージョンの説明:

MySQLにはいくつかの一般的な派生バージョンがあり、PerconaServerはその1つです。 Percona Serverは、MySQLのエンタープライズバージョンに最も近いため、ここで選択されています。各派生バージョンの比較チャートは次のとおりです。

この記事のPXCクラスターの設計を次の図に示します。

図によると、3ノードのPXCクラスターを構築するには、3つの仮想マシンを作成する必要があります。

ノードの説明:

Node Host IP
Node1 PXC-Node1 192.168.190.132
Node2 PXC-Node2 192.168.190.133
Node3 PXC-Node3 192.168.190.134

各仮想マシンの構成は次のとおりです。

PXCクラスターに関しては、強力なデータ整合性を確保するためにパフォーマンスが犠牲になります。 PXCクラスター内のノードが多いほど、データの同期時間が長くなります。クラスターを実行するために使用するデータベースサーバーの数が最も適切であり、比較的言えば、パフォーマンスで最高の結果を達成できるでしょうか。

一般的に、PXCクラスターを形成するノードは15個以下であり、パフォーマンスは非常に優れています。次に、このPXCクラスターがシャードとして使用され、データのセグメンテーションと同時アクセスを処理するために、さらにいくつかのシャードがMyCatに設定されます。


システムの準備###

一部のCentOSバージョンはデフォルトで mariadb-libsにバンドルされており、PXCをインストールする前にアンインストールする必要があります。

[ root@PXC-Node1 ~]# yum -y remove mari*

PXCクラスターは4つのポートを使用します。

ポート 説明
3306 MySQLサービスポート
4444 完全同期(SST)ポートを要求する
4567 データベースノード間の通信ポート
4568 インクリメンタル同期(IST)ポートを要求する

したがって、システムでファイアウォールが有効になっている場合は、次のポートを開く必要があります。

[ root@PXC-Node1 ~]# firewall-cmd --zone=public--add-port=3306/tcp --permanent
[ root@PXC-Node1 ~]# firewall-cmd --zone=public--add-port=4444/tcp --permanent
[ root@PXC-Node1 ~]# firewall-cmd --zone=public--add-port=4567/tcp --permanent
[ root@PXC-Node1 ~]# firewall-cmd --zone=public--add-port=4568/tcp --permanent
[ root@PXC-Node1 ~]# firewall-cmd --reload

PXC ###をインストールします

まず、公式ドキュメントに移動します。

PXCの簡単なインストール方法は2つあります。1つは公式Webサイトから rpmパッケージをダウンロードしてシステムにローカルにインストールする方法、もう1つは公式の yumリポジトリを使用してオンラインインストールする方法です。この記事では、このローカルインストールの方法を示します。まず、次のURLを開きます。

適切なバージョンを選択したら、ダウンロードリンクをコピーします。

次に、次の例に示すように、 wgetコマンドを使用してCentOSにダウンロードします。

[ root@PXC-Node1 ~]# cd /usr/local/src
[ root@PXC-Node1 /usr/local/src]# wget https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/Percona-XtraDB-Cluster-5.7.28-31.41/binary/redhat/8/x86_64/Percona-XtraDB-Cluster-5.7.28-31.41-r514-el8-x86_64-bundle.tar

rpmファイルを保存するためのディレクトリを作成し、ダウンロードしたPXCインストールパッケージを新しく作成したディレクトリに解凍します。

[ root@PXC-Node1 /usr/local/src]# mkdir pxc-rpms
[ root@PXC-Node1 /usr/local/src]# tar -xvf Percona-XtraDB-Cluster-5.7.28-31.41-r514-el8-x86_64-bundle.tar -C pxc-rpms
[ root@PXC-Node1 /usr/local/src]# ls pxc-rpms
Percona-XtraDB-Cluster-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-57-debugsource-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-client-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-client-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-devel-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-full-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-garbd-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-garbd-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-server-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-server-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-shared-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-shared-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-test-57-5.7.28-31.41.1.el8.x86_64.rpm
Percona-XtraDB-Cluster-test-57-debuginfo-5.7.28-31.41.1.el8.x86_64.rpm

さらに、PXCのインストールは qpress percona-xtrabackup-24に依存する必要があり、[percona提供の倉庫](https://repo.percona.com/release/8/RPMS/x86_64/)で対応する rpmパッケージのダウンロードリンクを取得できます。次に、次のように、 pxc-rpmsディレクトリに入り、これら2つのコンポーネントの rpmパッケージをダウンロードします。

[ root@PXC-Node1 /usr/local/src]# cd pxc-rpms
[ root@PXC-Node1 /usr/local/src/pxc-rpms]# wget https://repo.percona.com/release/8/RPMS/x86_64/qpress-11-1.el8.x86_64.rpm
[ root@PXC-Node1 /usr/local/src/pxc-rpms]# wget https://repo.percona.com/release/8/RPMS/x86_64/percona-xtrabackup-24-2.4.18-1.el8.x86_64.rpm

上記の手順を完了すると、 yumコマンドを使用してPXCをローカルにインストールできるようになります。

[ root@PXC-Node1 /usr/local/src/pxc-rpms]# yum localinstall -y *.rpm

インストールが正常に完了すると、システムに mysqlの関連コマンドがあります。以下のように、バージョン情報を正常に表示できれば、インストールは成功です。

[ root@PXC-Node1 /usr/local/src/pxc-rpms]# mysql --version
mysql  Ver 14.14 Distrib 5.7.28-31,forLinux(x86_64) using  7.0[root@PXC-Node1 /usr/local/src/pxc-rpms]#

PXCクラスターを構成します###

インストール後、クラスターを起動するためにいくつかの構成が必要です。PXC構成ファイルはデフォルトで / etc / percona-xtradb-cluster.conf.d /ディレクトリにあり、 / etc / my.cnfファイルはそれへの単なる参照です。

[ root@PXC-Node1 ~]# cd /etc/percona-xtradb-cluster.conf.d/[root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# ll
合計金額12-rw-r--r--1ルートルート38112 1317:19 mysqld.cnf  #mysql関連の構成
- rw-r--r--1ルートルート44012 1317年12月:19 mysqld_safe.cnf  # mysqld_安全な関連構成
- rw-r--r--1ルートルート106612 1317年5月:19 wsrep.cnf  #PXCクラスター関連の構成

文字セットなどのいくつかの基本的な構成を mysqld.cnfファイルに追加します。

[ root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[ mysqld]...

# キャラクターセットを設定する
character_set_server=utf8
# リスニングIPを設定する
bind-address=0.0.0.0
# DNS解決をスキップする
skip-name-resolve

次に、PXCクラスターを構成し、 wsrep.cnfファイルの次の構成項目を変更します。

[ root@PXC-Node1 /etc/percona-xtradb-cluster.conf.d]# vim wsrep.cnf
[ mysqld]
# PXCクラスター内のMySQLインスタンスの一意のID。繰り返すことはできず、数字である必要があります。
server-id=1
# ガレラライブラリファイルへのパス
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# PXCクラスターの名前
wsrep_cluster_name=pxc-cluster
# クラスタ内のすべてのノードのIP
wsrep_cluster_address=gcomm://192.168.190.132,192.168.190.133,192.168.190.134
# 現在のノードの名前
wsrep_node_name=pxc-node-01
# 現在のノードのIP
wsrep_node_address=192.168.190.132
# 同期方法(mysqldump、 rsync、 xtrabackup)
wsrep_sst_method=xtrabackup-v2
# 同期中に使用されるアカウントパスワード
wsrep_sst_auth=admin:Abc_123456
# 厳密な同期モードを採用する
pxc_strict_mode=ENFORCING
# ROWに基づいてコピー(安全で信頼できる)
binlog_format=ROW
# デフォルトのエンジン
default_storage_engine=InnoDB
# 主キーの自己成長はテーブルをロックしません
innodb_autoinc_lock_mode=2

PXCクラスターを開始します###

これで、仮想マシン PXC-Node1へのPXCのインストールと構成が完了しました。次に、他の2つのノードで同じ手順を実行するため、ここでは繰り返しません。

すべてのノードの準備ができたら、次のコマンドを使用してPXCクラスターを開始します。このコマンドは最初のノードを開始するために使用されることに注意してください。最初のノードは、クラスターが最初に開始されたときの3つのノードのいずれかです。ここでは最初のノードとして PXC-Node1を使用します。したがって、仮想マシンで次のコマンドを実行します。

[ root@PXC-Node1 ~]# systemctl start [email protected]

他のノードは、MySQLサービスを正常に開始するだけでよく、起動後、 wsrep.cnfファイルの構成に従って自動的にクラスターに参加します。

[ root@PXC-Node2 ~]# systemctl start mysqld

Perconaサーバーの自動起動を無効にします:

[ root@localhost ~]# systemctl disable mysqld
Removed /etc/systemd/system/multi-user.target.wants/mysqld.service.
Removed /etc/systemd/system/mysql.service.[root@localhost ~]# 

データベースアカウントを作成します###

次に、rootアカウントのデフォルトのパスワードを変更します。初期のデフォルトパスワードはmysqlログファイルにあります。次の図の赤いボックスは、デフォルトのパスワードを示しています。

デフォルトのパスワードをコピーしてから、 mysql_secure_installationコマンドを使用してルートアカウントのパスワードを変更します。

[ root@localhost ~]# mysql_secure_installation 

セキュリティ上の理由から、ルートアカウントでは通常、リモートログインが許可されていないため、リモートアクセス用に別のデータベースアカウントを作成する必要があります。このアカウントは、PXCクラスター内のデータを同期するために使用されるアカウントでもあり、 wsrep.cnfファイルの wsrep_sst_auth構成アイテムに対応します。

[ root@localhost ~]# mysql -uroot -p
mysql> create user 'admin'@'%' identified by 'Abc_123456';
mysql> grant all privileges on *.* to 'admin'@'%';
mysql> flush privileges;

アカウントを作成したら、クライアントツールを使用してリモート接続テストを実行し、接続が成功したかどうかを確認します。

これまでに、PXCクラスターの構築が完了しました。上記のルートパスワードの変更と新しいアカウントの作成の操作は他の2つのノードに同期されるため、PXCクラスターの同期効果を確認できるはずです。つまり、この時点で、他の2つのノードのルートアカウントのパスワードはすでに変更されており、管理者アカウントも存在します。これは自分で確認できます。

さらに、次のステートメントを使用して、クラスターのステータスを確認することもできます。

show status like 'wsrep_cluster%';

結果:

変数の説明:


クラスターデータの同期を確認します##

1、 作成したデータベースを同期できることを確認します

ノード1に testライブラリを作成します。

作成が完了したら、他のノードをクリックすると、ライブラリ testも表示されます。

2、 作成したデータテーブルを同期できることを確認します

ノード1の testライブラリに studentテーブルを作成します。

作成後、他のノードでこの studentテーブルを見ることができるはずです。

3、 テーブルデータを同期できることを確認します

ノード1の studentテーブルにデータを挿入します。

この時点で、他のノードもこのデータを表示できるはずです。


クラスターステータスパラメーターの説明##

クラスタのステータスパラメータは、次のようにSQLステートメントを介してクエリできます。

show status like '%wsrep%';

照会できる状態パラメーター変数は非常に多いため、ここでは一般的に使用される変数について説明します。 PXCクラスターパラメーターは、次のカテゴリに分類できます。

PXCノードの状態図:

PXCクラスター状態図:

公式文書:


PXCノードのオンラインとオフラインについて##

1、 PXCノードの安全なオフラインポスチャ

ノードを起動する方法、対応するコマンドを使用してシャットダウンするだけです


2、 すべてのPXCノードが安全にオフラインになっている場合は、クラスターを開始するときに、最初に最後のオフラインノードを開始する必要があります

クラスターを初めて起動するときは、任意のノードを最初のノードとして起動できます。ただし、すでに開始されているクラスターの場合、クラスターがオフラインになってからオンラインになると、最後のオフラインノードを最初のノードとして開始する必要があります。実際、ノードを最初のノードとして開始できるかどうかについては、 grastate.datファイルを確認することで確認できます。

[ root@PXC-Node1 ~]# cat /var/lib/mysql/grastate.dat 
# GALERA saved state
version:2.1
uuid:    2c915504-39ac-11ea-bba7-a294386c4285
seqno:-1
safe_to_bootstrap:0[root@PXC-Node1 ~]#

3、 PXCノードがすべて誤って終了し、同時にではない場合

この記事の冒頭で述べたように、予期しないダウンタイムのためにPXCクラスター内のノードの半分以上にアクセスできない場合、PXCクラスターは実行を停止します。ただし、これらのPXCノードが安全なオフラインで終了する場合、クラスターの実行が自動的に停止することはなく、クラスターのサイズが縮小されるだけです。クラスターは、ノードの半分以上が予期せずオフラインになった場合にのみ自動的に停止します。予期しないオフライン状況には、次のものがあります。

PXCクラスター内のノードが同時に予期せず終了しない限り、クラスター内にノードが1つ残っていると、ノードは grastate.datファイルの safe_to_bootstrapの値を自動的に 1に変更します。したがって、クラスターを再起動すると、最後に終了したノードも最初に開始されます。


4、 すべてのPXCノードが同時に予期せず終了する場合は、 grastate.datファイルを変更する必要があります

予期しない状況が原因でクラスター内のすべてのノードが同時に終了した場合、 safe_to_bootstrapの値を変更する時間がないため、すべてのノードの safe_to_bootstrap0になります。すべてのノードの safe_to_bootstrap 0の場合、PXCクラスターを起動できません。

この場合、手動でノードを選択し、 safe_to_bootstrap 1に変更してから、このノードを最初のノードとして開始することしかできません。

[ root@PXC-Node1 ~]# vim /var/lib/mysql/grastate.dat 
...
safe_to_bootstrap:1[root@PXC-Node1 ~]# systemctl start [email protected]

次に、他のノードを順番に開始します。

[ root@PXC-Node2 ~]# systemctl start mysqld

5、 クラスター内に実行可能なノードがまだある場合、他のオフラインノードは通常のノードとしてオンラインにするだけで済みます

[ root@PXC-Node2 ~]# systemctl start mysqld

Recommended Posts

CentOS8でPXCクラスターを構築する
CentOS7でScaleIO分散ストレージクラスターを構築する
(1)クラスター環境を構築するためのCentos7のインストール
[PHP] CentOSでPHPオペレーティング環境を構築する
Centos7ビルドKubernetesクラスター
Centos6.5でドッカー環境を構築する
CentOS7でOpenV **サーバーを構築する
CentOS7でOpenLDAPサーバーを構築する
CentOSでのRedisクラスターのインストール
CentOs7.3ビルドSolrCloudクラスターサービス
Centos7でJava開発用の基本的な環境を構築する
まず、Centos7でCephストレージクラスターを構築してみてください
Centos6.9でのRabbitMQクラスター展開レコード
CentOS7でのElasticsearchクラスター展開レコード
centos7でFTPサーバーを構築する
Mycat for PXCクラスターを導入し、完全な高可用性クラスターアーキテクチャを構築します
Ubuntuでpython開発環境を構築する
CentOS7ビルドジェンキンス
Centosビルドlnmp
Centos7ビルドpython3.8.5 + scrapy + gerapy
CentOSでNginxサーバーをすばやく構築する方法
CentOS7のLNMP環境でDiscuzフォーラムを構築する
マスタースレーブDNSサーバーを構築するためのCentos7チュートリアル
CentOS 8.1でLEMP(Linux + Nginx + MySQL + PHP)環境を構築する(詳細なチュートリアル)
CentOS7のLNMP環境でDedecmsWebサイトを構築する
centos7.2でLAMP環境を構築する方法
CentOS7.3 64ビット、ビルドZabbix3.4
CentOSビルドプライベートgit
CentOS7でGitBookを展開する
Linux(centos7)ビルドgitlab
centos7でk8s1.9.9をビルドする
CentOS7.4でHadoop-2.7.6をコンパイルします
CentOS6.7ビルドLNMP環境
CentOS7.3.1611はk8s1.5.2クラスターを展開します
CentOS6インストールcouchdb2クラスター
Centos7の下にActiveMQをインストールします
Centos7.6ビルドLNMP環境
CentOS7の下にPostgreSQL12をインストールします
VMwareにCentOSをインストールする
CentOS6.8はzookeeperクラスターを展開します
CentOSはNginxを使用してダウンロード機能サーバーを構築します
Centos7mqttクラスターのインストール
ローカルWebサーバーを構築するためのCentos8の実装手順
ジェンキンスはセントスに基づいて構築されています
CentOSの下にJDK + Tomcat8をデプロイします
Centos7にmysqlをインストールします
centos6.8でランプを構成する
CentOSでHadoopを構築する
セントス初期化スクリプト
Centos7の下にJenkinsをインストールします
Centos7でのRedis3のインストール
CentOSクラスター関連の問題
Centos7はKubernetesクラスターを展開します
Centos7ビルドDNSサービス
MariaDBCentos7の下にMariaDBをインストールします
CentOS6.5の下にmysql5.1をインストールします
CentOS7はk8sクラスターを展開します
CentOS7ビルドLNMP環境
CentOS6.6でのXen仮想化の戦闘
[CentOS環境の展開] CentOSでのJava7 / Java8の展開
CentOs7.3ビルドSolrスタンドアロンサービス