PXC 高可用性クラスター (MySQL)

1. PXC クラスターの概要

1.1. PXC の紹介

  • Percona XtraDB クラスター (PXC と呼ばれる)
  • Galera ベースの MySQL 高可用性クラスター ソリューションです。
  • Galera Cluster は、Codership によって開発された無料のオープン ソースの高可用性ソリューションです。
  • PXC クラスタは、主に 2 つの部分で構成されています。Percona Server with XtraDB (データ ストレージ プラグイン) と Write Set Replication パッチ (同期、マルチマスター レプリケーション プラグイン)
  • 公式サイト:http://galeracluster.com

1.2. PXCの特徴

  • 強力なデータ整合性、同期遅延なし (マスター サーバーに書き込まれたデータ、すべてのスレーブ サーバーが直ちにデータを取得する必要があります)
  • マスタースレーブ切り替え操作不要、仮想IP不要(マスターマルチスレーブ構成不要、VIPアドレス不要)
  • InnoDB ストレージ エンジンをサポート
  • マルチスレッド レプリケーション (マルチスレッド同期作業)、展開と使用が簡単。
  • ノードの自動参加をサポートし、手動でデータをコピーする必要はありません (サーバーはダウンタイム中にデータを自動的に同期します。手動構成は必要ありません)。

1.3. 対応ポート

ポート 例証する
3306 データベース サービス ポート
4444 SST ポート
4567 クラスタ通信ポート
4568 ISTポート
SST 状態 Snapshot Transfer 完全同期
Incremental State Transfer 増分同期
  • クラスタ通信ポートとは、クラスタ内のサーバー間の通信ポートを指し、データベース サービス ポート 3306 とクラスタ通信ポート 4567 は常に開いています。

  • SST ポート 4444 と IST ポート 4568 は、データが同期されている場合にのみ開かれます。

1.4. ホストの役割

  • 3台のサーバー
CPU名 の IP アドレス 役割
pxcnode10 192.168.2.10 データベース サーバー
pxcnode20 192.168.2.20 データベース サーバー
pxcnode30 192.168.2.30 データベース サーバー
##在每台主机上都修改自己的主机名
[root@localhost ~]# hostname pxcnode10 ;su   --在192.168.2.10上执行
[root@localhost ~]# hostname pxcnode20 ;su   --在192.168.2.20上执行
[root@localhost ~]# hostname pxcnode30 ;su   --在192.168.2.30上执行
##在每台主机上执行修改hosts文件
vim /etc/hosts
#添加下面内容:
192.168.2.10   pxcnode10
192.168.2.20   pxcnode20
192.168.2.30   pxcnode30

2.PXC を導入する

2.1. パッケージのインストール

  • ソフトウェア紹介
ソフトウェア 効果
percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm オンラインホットスタンバイプログラム
qpress.1.1-14.11.x86_64.rpm 再帰圧縮
Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar クラスタ サービス プログラム
  • ソフトウェアのダウンロード
  • percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm ダウンロード リンク:
    https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

  • qpress.1.1-14.11.x86_64.rpm ダウンロードアドレス:
    http://rpm.pbone.net/results_limit_2_srodzaj_2_dl_40_search_qpress.html

  • Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar ダウンロード リンク:

    https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/

  • 次の操作は、3 つのサーバーすべてで実行する必要があります。

##下载软件包:
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.13/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm

wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home%3A/AndreasStieger%3A/branches%3A/Archiving/RedHat_RHEL-6/x86_64/qpress-1.1-14.11.x86_64.rpm

wget https://downloads.percona.com/downloads/Percona-XtraDB-Cluster-57/Percona-XtraDB-Cluster-5.7.25-31.35/binary/redhat/7/x86_64/Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar

##安装软件包
[root@pxcnode10 ~]# tar -xf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
[root@pxcnode10 ~]# yum -y install *.rpm

2.2. 設定サービス

  • 関連する構成ファイル
/etc/percona-xtradb-cluster.conf.d/   ---所有的配置文件
  • 構成ファイルの説明
  • mysqld.cnf ------ データベース サービス実行パラメータ設定ファイル
  • mysqld_safe.cnf ------ mysqld プロセス構成ファイル
  • wsrep.cnf-------PXC クラスター構成ファイル
  • 構成ファイル (mysqld.cnf) を変更します。

[mysqld]

server-id=1 #server-id、重複は許可されていません

datadir=/var/lib/mysql #データベースディレクトリのパス

socket=/var/lib/mysql/mysql.sock #socker ファイルのパス

log-error=/var/log/mysqld.log #ログファイルのパス

pid-file=/var/run/mysqld/mysqld.pid #pid ファイル パス

log-bin #Binlog ログはデフォルトで有効になっています

log_slave_updates #チェーン レプリケーションを有効にする

expire_logs_days=7 #ログ ファイルを保持する日数。デフォルトのログ ファイルは 7 日間保持されます

##pxcnode10操作
[root@pxcnode10 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@pxcnode10 percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
##修改如下:
server-id=10


##pxcnode20操作
[root@pxcnode20 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@pxcnode20 percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
##修改如下:
server-id=20


##pxcnode30操作
[root@pxcnode30 ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@pxcnode30 percona-xtradb-cluster.conf.d]# vim mysqld.cnf
[mysqld]
##修改如下:
server-id=30
  • クラスター構成ファイル (wsrep.cnf) を変更します。

wsrep_cluster_address=gcomm:// #クラスタ メンバー リスト、3 つが同じでなければなりません

wsrep_node_address=192.168.70.63 #ローカル IP アドレス

wsrep_cluster_name=pxc-cluster #クラスター名、カスタマイズ可能、3 つが同じでなければならない

wsrep_node_name=pxc-cluster-node #ローカルホスト名

wsrep_sst_auth="sstuser:s3cretPass" #SST データ同期ユーザー認証、3 つは同じでなければなりません

##在pxcnode10操作如下:
[root@pxcnode10 percona-xtradb-cluster.conf.d]# vim wsrep.cnf
修改如下:
wsrep_cluster_address=gcomm://192.168.2.20,192.168.2.30,192.168.2.10   ---集群成员列表
wsrep_node_address=192.168.2.10   ---本机IP地址
wsrep_node_name=pxcnode10        ---本机主机名
wsrep_sst_auth="sstuser:1234"     SST数据同步用户密码


##在pxcnode20操作如下:
[root@pxcnode20 percona-xtradb-cluster.conf.d]# vim wsrep.cnf
修改如下:
wsrep_cluster_address=gcomm://192.168.2.10,192.168.2.30,192.168.2.20   ---集群成员列表
wsrep_node_address=192.168.2.20   ---本机IP地址
wsrep_node_name=pxcnode20        ---本机主机名
wsrep_sst_auth="sstuser:1234"     SST数据同步用户密码


##在pxcnode30操作如下:
[root@pxcnode30 percona-xtradb-cluster.conf.d]# vim wsrep.cnf
修改如下:
wsrep_cluster_address=gcomm://192.168.2.10,192.168.2.20,192.168.2.30   ---集群成员列表
wsrep_node_address=192.168.2.30   ---本机IP地址
wsrep_node_name=pxcnode30        ---本机主机名
wsrep_sst_auth="sstuser:1234"     SST数据同步用户密码

2.3. サービスを開始する

  • 任意で実行
  • クラスタ サービスを開始する
  • 許可ユーザーを追加
[root@pxcnode10 ~]# systemctl start [email protected]     ---启动集群服务
##查看数据库初始密码
[root@pxcnode10 ~]# grep pass /var/log/mysqld.log
2023-02-27T10:23:13.040978Z 1 [Note] A temporary password is generated for root@localhost: qgCeYyfl3a*j

##使用初始密码登录mysql
[root@pxcnode10 ~]# mysql -uroot -p'qgCeYyfl3a*j'
##修改root密码
mysql> alter user 'root'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
##添加授权用户
mysql> grant reload ,lock tables,replication client,process on *.* to sstuser@'localhost' identified by '1234';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
--添加授权用户,数据会自动同步到主机20和30上。
reload装载数据的权限;lock tables锁表的权限;
replication client查看服务状态的权限;process管理服务的权限(查看进程信息);
授权用户和密码必须是集群的配置文件中指定的(wsrep_sst_auth="sstuser:1234")。

2.4. 他の 2 つのデータベース サービスを開始する

##pxcnode20和pxcnode30都需要执行
[root@pxcnode20 ~]# systemctl start mysql
---启动过程比较慢,因为第一次启动都会向pxcnode10做全量同步。

3. テスト構成

  • クラスター情報の表示
  • どちらでも操作可能

mysql> 「%wsrep%」のようなステータスを表示します。
ここに画像の説明を挿入

wsrep_incoming_addresses 192.168.233.72:3306,192.168.233.73:3306,192.168.233.71:3306 //メンバーリスト
wsrep_cluster_size 3 //クラスタサーバー数
wsrep_cluster_status Primary //クラスタステータスwsrep_connected ONp //
接続
ステータス ws

3.1. クラスタ同期機能のテスト

  • 許可されたユーザーを追加して、任意のサーバー上のデータにアクセスします
  • クライアント側で許可されたユーザーを使用して任意のデータベース サーバーに接続すると、データを保存し、同じデータを表示できます。
  • テーブルを作成するときは、主キー フィールドが必要です
##在任意一台服务器上创建授权用户
mysql> grant all on *.* to 'test'@'%' identified by '1234';
##测试test这个用户是否可以登录其他的服务器mysql。
[root@pxcnode10 ~]# mysql -h 192.168.2.30 -utest -p1234
[root@pxcnode10 ~]# mysql -h 192.168.2.20 -utest -p1234
[root@pxcnode10 ~]# mysql -h 192.168.2.10 -utest -p1234
--测试完成我这边都可以登录。


##创建数据并创建表
mysql> create database sxy default charset=utf8;
mysql> create table t1(id int primary key auto_increment,name char(10)not null,sex enum('boy','girl'),age int unsigned);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values(1,'bob','boy',29);
##在任意一台服务器查看t1表信息。
[root@pxcnode20 ~]# mysql -h192.168.2.10 -utest -p1234 -e " select * from sxy.t1;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | bob  | boy  |   29 |
+----+------+------+------+
-----其他的我这边就不展示了。                 

3.2.高可用性機能とデータベースサーバーの自動復旧をテストします。

  • テストの失敗からの自動回復
  • データベース サーバーのダウンタイムは、データへのユーザー アクセスには影響しません。
  • サーバーの稼働後のダウンタイム中にデータを自動的に同期する

3.2.1. pxcnode20 ダウンタイムのシミュレーション

##模拟pxcnode20服务停止
[root@pxcnode20 ~]# systemctl stop mysql
[root@pxcnode20 ~]# netstat -nltp |grep 3306

3.2.2. クライアントは pxcnode10 に接続してクラスターのステータスを表示します

[root@pxcnode10 ~]# mysql -h192.168.2.10 -utest -p1234
mysql> show status like "%wsrep%";

ここに画像の説明を挿入

  • 図に示すように、クラスター内のサーバーの数は 2 に変更され、192.168.2.10 と 192.168.2.30 のみが実行されています。

3.2.3. pxcnode10 の sxy.t1 テーブルにデータを挿入する

mysql> use sxy;

mysql> insert into t1(name,sex,age) values('andy','boy',24),('lucy','girl',29);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;

ここに画像の説明を挿入

  • 図に示すように、赤丸で囲まれたデータは、サーバー pxcnode20 がダウンしたときに新しく挿入されたデータです. サーバー pxcnode20 がダウンしているため、残りのサーバーは 2 つだけです. ステップ サイズはサーバーの数に関連するため、新しく挿入されたデータは自動的に増加します。ステップ サイズは 2 です。

3.2.4. pxcnode30 の sxy.t1 テーブルの内容を表示

[root@pxcnode10 ~]# mysql -h192.168.2.30 -utest -p1234 -e " select * from sxy.t1;"

+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | bob  | boy  |   29 |
|  3 | andy | boy  |   24 |
|  5 | lucy | girl |   29 |
+----+------+------+------+
##可以看的出来数据同步正常。

3.2.5. pxcnode20 を復元してクラスターのステータスを表示する

[root@pxcnode20 ~]# systemctl start mysql
[root@pxcnode20 ~]# netstat -ntlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      11409/mysqld
[root@pxcnode20 ~]# mysql -uroot -p1234 -e 'show status like "%wsrep%";'

ここに画像の説明を挿入

  • 図に示すように、pxcnode20 がクラスターに参加し、クラスター サービスの数が 3 になります。

3.2.6. クライアントは pxcnode20 にアクセスして、sxy.t1 テーブルの内容を表示します

[root@pxcnode20 ~]# mysql -uroot -p1234 -e "select * from sxy.t1";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | bob  | boy  |   29 |
|  3 | andy | boy  |   24 |
|  5 | lucy | girl |   29 |
+----+------+------+------+
---可以看的出来新插入的数据已经同步OK。

おすすめ

転載: blog.csdn.net/weixin_45625174/article/details/129244600