Centos 7 MySQLのgaleraクラスタの構築


概要
原理1つのトランザクションが現在書き込まれているノードでコミットされた後、wsrep API(write set replication API)を介してこのトランザクションがライトセット(write set)になって同クラスタの他のノードにブロードキャストされ、他のノードがライトセットトランザクションを受信した後、このトランザクションの実行可能性チェックを行い、結果をwsrep APIに返す.ほとんどのノードがこのトランザクションを正常に実行できると推定している場合、wsrep APIは、トランザクションを正常に実行できるすべてのノードにトランザクションをコミットし、トランザクションが正常にコミットされたメッセージをクライアントに返し、必要に応じてトランザクションを実行していないノードを削除するように仲裁します.メリットとデメリット1.クラスタ内の各ノードに完全なデータコピーが保存されているため、データバックアップのセキュリティが高い.クラスタの拡張性が高く、新しいノードがオンラインになった場合、空のライブラリ状態からクラスタのデータを直接引き出して全量のデータ転送(SST)を取得したり、最新のバックアップ状態を復元してクラスタに追加したりして、差分データ転送(IST)を取得したりすることができます.一方、ノードの1つがオフラインになると、インスタンスを直接閉じると、クラスタは自動的にこのノードを蹴り出します.再起動時には,自身のデータとクラスタデータの遅れに応じてSSTまたはISTによるデータ転送が決定される.3.同期効率は効率的で、クラスタは高性能の読み書き状態を提供する(同期レプリケーションに対して)、同期機構の原因により、slaveスレッドを増加する方法によってノードの同期効率をさらに向上させることができる.より友好的なソフト・ハードウェア互換性5、DDL操作は同期スレッドを深刻にブロックし、オンライン上の大きな動作DDLはノードの渋滞に応答しない可能性があり、さらに一部のノードのオフラインを招く可能性がある.
クラスタの準備
仮想マシンを準備して3台のCentos 6仮想マシンを配置してインストールして、hostnameとIPアドレスを設定して、selinuxとファイアウォールを閉じて、hostnameとIPアドレスのマッピングを実現します
hostname
ip
galera1
192.168.29.135
galera2
192.168.29.136
galera3
192.168.29.137
インストールgalera-mysqlインストールepelソースgalera-cluster Webサイトで対応するバージョンのgalera-MySQLとReplication Libraryをダウンロードし、3つのノードにインストールしてリンクをダウンロードします.https://galeracluster.com/downloads/
galera-MySQLの構成
各ノードはクラスタ同期用のアカウントを作成します
mysql>grant all on *.* to 'sst'@'192.168.29.%' identified by 'your_password';
mysql>flush privileges;

プロファイルgalera 1ノードの変更
#   
server_id=1
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
#     
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
#    
wsrep_cluster_name='galera'
#      
wsrep_cluster_address='gcomm://'
#     
wsrep_node_name='galera1'
#   ip  
wsrep_node_address='192.168.29.135'
#         
wsrep_sst_auth=sst:your_password
#      
wsrep_sst_method=rsync

galera 1のmysqldサービスを再起動してポートを表示する3306のほか、4567番の通信ポートを傍受した.
[root@galera1 ~]# netstat -tnlp |grep mysqld
tcp        0      0 0.0.0.0:4567                0.0.0.0:*                   LISTEN      3824/mysqld         
tcp        0      0 :::3306                     :::*                        LISTEN      3824/mysqld         

galera 2プロファイル
server_id=2
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
#      
wsrep_cluster_address='gcomm://192.168.29.135'
wsrep_node_name='galera2'
wsrep_node_address='192.168.29.136'
wsrep_sst_auth=sst:your_password
wsrep_sst_method=rsync

galera 3プロファイル
server_id=3
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
#      
wsrep_cluster_address='gcomm://192.168.29.135'
wsrep_node_name='galera3'
wsrep_node_address='192.168.29.137'
wsrep_sst_auth=sst:your_password
wsrep_sst_method=rsync

プロファイルを構成したらgalera 2とgalera 3のmysqldサービスを起動し、クラスタ状態を観察します.
mysql> show status like 'wsrep%';
wsrep_incoming_addresses|192.168.29.135:3306,192.168.29.136:3306,192.168.29.137:3306

3つのノードがクラスタに追加されていることがわかります
テスト検証
任意のノードにmydbライブラリを作成し、testテーブルを作成し、データを出入りし、残りのノードがデータ同期を行うかどうかを確認します.
#galera2  SQL  
mysql> create database mydb charset utf8;
mysql> use mydb;
mysql> create table test(num int primary key,name char(12) not null);
mysql>insert into test values(2,'Jack');
#galera1     
mysql> select * from mydb.test;
+-----+------+
| num | name |
+-----+------+
|   2 | Jack |
+-----+------+

ここからMySQLのgaleraクラスタの構築が完了しました
再起動の問題
1、単独再起動
galera 2とgalera 3のノードを個別に再起動するmysqldサービスは、正常にクラスタに追加されます.galera 1のノードを再起動すると、galera 1は新しいクラスタに単独であり、galera 2とgalera 3は別のクラスタに存在します.これは、galera 1のプロファイルにwsrep_があるためです.cluster_address='gcomm://'はgalera 1にクラスタを新規作成するので、galera 1を再起動する前にプロファイルを変更する必要があります.
wsrep_cluster_address='gcomm://192.168.29.136,192.168.29.137'

galeraのmysqldサービスを再起動するとクラスタに再アクセスします
2、クラスタ再起動
すべてのノードのmysqldが停止すると、クラスタを再起動するには、/var/lib/mysqlのgaleraを先にcache ,grastate.dat,gvwstate.Data 3つのファイルを削除し、galera 1、galera 2、galera 3のmysqldサービスを順次起動するとクラスタが正常に戻ります