MySQL Galera叢集搭建流程(Percona XtraDB Cluster 5.7)

feelpurple發表於2017-07-18
避免建立偶數節點數量的叢集,因為這樣會導致腦裂。
Linux版本:CentOS 6.5
IP資訊:
Node     IP
Node 1     10.20.30.10
Node 2     10.20.30.20
Node 3     10.20.30.30

關掉selinux和防火牆,否則後面初始化叢集會失敗
[root@localhost mysql_log_57]# vim /etc/selinux/config
SELINUX=disabled

1. 在所有節點上安裝Percona XtraDB叢集軟體
安裝YUM源
[root@localhost ~]# yum install

 檢查包是否可用
[root@localhost install]# yum list | grep Percona-XtraDB-Cluster-57
Percona-XtraDB-Cluster-57.x86_64            5.7.18-29.20.1.el6          percona-release-x86_64
Percona-XtraDB-Cluster-57-debuginfo.x86_64  5.7.18-29.20.1.el6          percona-release-x86_64

 安裝Percona XtraDB叢集包
[root@localhost install]# yum install Percona-XtraDB-Cluster-57

 安裝時提示缺少下面的包
 Error: Package: Percona-XtraDB-Cluster-server-57-5.7.18-29.20.1.el6.x86_64 (percona-release-x86_64)
Requires: socat
Error: Package: percona-xtrabackup-24-2.4.7-2.el6.x86_64 (percona-release-x86_64)
Requires: libev.so.4()(64bit)
安裝缺少的socat和libev包
到fedora官網下載repository
在下面網頁中下載epel-release開頭的rpm包

 
上傳rpm包到伺服器上
 
安裝repository包
[root@localhost install]# yum localinstall epel-release-6-8.noarch.rpm
安裝socat、libev
[root@localhost install]# yum install socat libev
 
再次安裝Percona XtraDB叢集包
[root@localhost install]# yum install Percona-XtraDB-Cluster-57
 
注意,如果伺服器上安裝過資料庫,/etc/my.cnf配置檔案已經存在,需要將其改名,否則會對叢集啟動產生影響
[root@localhost ~]# mv /etc/my.cnf /etc/my_5.7_mha.cnf

檢視資料目錄下的內容
[root@localhost usr]# cd /var/lib/mysql
[root@localhost mysql]# ls -trl
total 126800
-rw-r-----. 1 mysql mysql 50331648 Jul  1 19:21 ib_logfile1
-rw-r-----. 1 mysql mysql       56 Jul  1 19:21 auto.cnf
-rw-------. 1 mysql mysql     1676 Jul  1 19:21 ca-key.pem
-rw-r--r--. 1 mysql mysql     1083 Jul  1 19:21 ca.pem
-rw-------. 1 mysql mysql     1676 Jul  1 19:21 server-key.pem
-rw-r--r--. 1 mysql mysql     1087 Jul  1 19:21 server-cert.pem
-rw-------. 1 mysql mysql     1680 Jul  1 19:21 client-key.pem
-rw-r--r--. 1 mysql mysql     1087 Jul  1 19:21 client-cert.pem
-rw-r--r--. 1 mysql mysql      452 Jul  1 19:21 public_key.pem
-rw-------. 1 mysql mysql     1680 Jul  1 19:21 private_key.pem
drwxr-x---. 2 mysql mysql     4096 Jul  1 19:21 performance_schema
drwxr-x---. 2 mysql mysql     4096 Jul  1 19:21 mysql
drwxr-x---. 2 mysql mysql    12288 Jul  1 19:21 sys
-rw-r-----. 1 mysql mysql      417 Jul  1 19:21 ib_buffer_pool
-rw-rw----. 1 root  root         5 Jul  1 19:21 mysqld_safe.pid
-rw-------. 1 mysql mysql        5 Jul  1 19:21 mysql.sock.lock
srwxrwxrwx. 1 mysql mysql        0 Jul  1 19:21 mysql.sock
-rw-r-----. 1 mysql mysql        5 Jul  1 19:21 localhost.localdomain.pid
-rw-r-----. 1 mysql mysql  3932160 Jul  1 19:21 xb_doublewrite
-rw-r-----. 1 mysql mysql 12582912 Jul  1 19:21 ibtmp1
-rw-r-----. 1 mysql mysql 12582912 Jul  1 19:21 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Jul  1 19:21 ib_logfile0
-rw-r-----. 1 mysql mysql     4653 Jul  1 19:22 localhost.localdomain.er

 預設安裝的軟體目錄
 檢視軟體目錄下的內容
[root@localhost ~]# cd /usr/
[root@localhost usr]# ls -trl
total 144
drwxr-xr-x.   2 root root  4096 Sep 23  2011 games
drwxr-xr-x.   2 root root  4096 Sep 23  2011 etc
drwxr-xr-x.   4 root root  4096 Mar 23 16:03 src
lrwxrwxrwx.   1 root root    10 Mar 23 16:03 tmp -> ../var/tmp
dr-xr-xr-x.  15 root root  4096 Mar 23 16:17 lib
drwxr-xr-x.  42 root root  4096 Apr  3 03:15 include
drwxr-xr-x.  22 root root 12288 Apr  3 03:41 libexec
drwxr-xr-x.  14 root root  4096 Apr  9 08:25 local
dr-xr-xr-x.   2 root root 36864 Jul  1 16:11 bin
dr-xr-xr-x.  92 root root 49152 Jul  1 16:11 lib64
dr-xr-xr-x.   2 root root 12288 Jul  1 16:11 sbin
drwxr-xr-x. 175 root root  4096 Jul  1 16:11 share
 
啟動Percona XtraDB叢集服務
service mysql start
 
檢視叢集狀態
[root@localhost mysql]# service mysql status
SUCCESS! MySQL (Percona XtraDB Cluster) running (2263)
 
實際上叢集的程式就是mysqld的程式
[root@localhost mysql]# service mysql status
SUCCESS! MySQL (Percona XtraDB Cluster) running (2928)
[root@localhost mysql]# ps -ef|grep mysql
root      2824     1  0 19:56 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/localhost.localdomain.pid
mysql  2928 2824  2 19:56 pts/1    00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/localhost.localdomain.err --pid-file=/var/lib/mysql/localhost.localdomain.pid --wsrep_start_position=00000000-0000-0000-0000-000000000000:-1
root      2982  2711  0 19:57 pts/1    00:00:00 grep mysql

重新設定root密碼
[root@localhost log]# mysqld_safe --skip-grant-tables --skip-networking&
[root@localhost log]# mysql -uroot
mysql> update mysql.user set authentication_string=password('root') where user='root';
mysql> commit;
[root@localhost log]# mysqladmin shutdown
[root@localhost log]# service mysql start
Starting MySQL (Percona XtraDB Cluster).. SUCCESS!
[root@localhost ~]# mysql -uroot -p
mysql> alter user root@localhost identified by 'root';
 
2. 在所有節點上配置寫集合複製相關的引數
這包括Glera庫的路徑和其他節點的位置

停掉叢集服務
[root@localhost ~]# service mysql stop
Shutting down MySQL (Percona XtraDB Cluster)... SUCCESS!
 
引數說明:
wsrep_provider        指定Galera庫的路徑
wsrep_cluster_name    指定叢集各個節點的IP地址
wsrep_node_name        指定每個節點的邏輯名。如果沒有指定這個引數,預設會使用主機名
wsrep_node_address    指定節點的IP地址
wsrep_sst_method    預設,Percona XtraDB叢集使用Percona XtraBackup來做狀態快照傳輸(SST)。強烈建議將這個引數設為wsrep_sst_method=xtrabackup-v2。使用這個方法需要配置一個資料庫使用者。在wsrep_sst_auth引數中指定SST認證使用者。
wsrep_sst_auth        指定SST認證使用者名稱和密碼,格式是:。
性和不支援的特性
binlog_format        Gelera只支援行級的複製,所以設定 binlog_format=ROW
default_storage_engine    Galera只支援InnoDB儲存引擎。不支援MyISAM或其他非事務性的儲存引擎。所以設定 default_storage_engine=InnoDB
innodb_autoinc_lock_mode    Gelara只支援適合InnoDB的interleaved (2)鎖模式。將這個引數設為traditional (0)或consecutive (1)鎖模式會引起死鎖,
進而將會導致複製失敗。所以設定 innodb_autoinc_lock_mode=2
 
節點1配置檔案
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address="gcomm://10.20.30.10,10.20.30.20,10.20.30.30"
wsrep_node_name=pxc1
wsrep_node_address=10.20.30.10
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
 
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
 
basedir = /usr
datadir = /var/lib/mysql
pid-file=/var/run/mysqld/mysqld_galera.pid
log-error=/var/log/mysqld_galera.log
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 1000
#log-bin = /mysql_log_57/galera-bin
#servier-id = 1000

節點2配置檔案
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://10.20.30.10,10.20.30.20,10.20.30.30
wsrep_node_name=pxc2
wsrep_node_address=10.20.30.20
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
 
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

basedir = /usr
datadir = /var/lib/mysql
pid-file=/var/run/mysqld/mysqld_galera.pid
log-error=/var/log/mysqld_galera.log
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 1000
#log-bin = /mysql_log_57/galera-bin
#servier-id = 1000

節點3配置檔案
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://10.20.30.10,10.20.30.20,10.20.30.30
wsrep_node_name=pxc3
wsrep_node_address=10.20.30.30
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
 
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

basedir = /usr
datadir = /var/lib/mysql
pid-file=/var/run/mysqld/mysqld_galera.pid
log-error=/var/log/mysqld_galera.log
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 1000
#log-bin = /mysql_log_57/galera-bin
#servier-id = 1000

檢視模組
[root@localhost ~]# ll /usr/lib64/galera3/libgalera_smm.so
-rwxr-xr-x. 1 root root 2404960 May 31 23:07 /usr/lib64/galera3/libgalera_smm.so

3. 在第一個節點上初始化叢集
這個節點必須包含全部的資料,作為叢集的資料來源。
 
在第一個節點上執行下面操作
[root@localhost mysql_log_57]# /etc/init.d/mysql bootstrap-pxc
Starting MySQL (Percona XtraDB Cluster)..... SUCCESS!
 
檢視叢集狀態
[root@localhost mysql_log_57]# mysql -uroot -p
mysql> show status like 'wsrep%';
| wsrep_local_state_comment        | Synced                               |    // 節點是同步狀態
| wsrep_cluster_size               | 1                                    |    // 叢集只有一個節點
| wsrep_cluster_status             | Primary                              |    // 主節點
| wsrep_connected                  | ON                                   |    // 已經連線到叢集
| wsrep_ready                      | ON                                   |        // 已經做好寫集合的複製準備
 
在增加其他節點到叢集中前,建立SST的資料庫使用者。這個賬戶必須和配置檔案中的資訊相符。
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
->   'sstuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

4. 增加其他節點到叢集中
當配置好wsrep_cluster_address等配置檔案後,啟動該節點,它會自動加入叢集並開始同步資料。
注意:不要在相同時間加入多個節點到叢集中,以避免巨大的網路流量壓力。
預設,Percona XtraDB叢集使用Percona XtraBackup來傳輸狀態快照 State Snapshot Transfer (SST)。
需要滿足下麵條件:
設定wsrep_sst_method引數為xtrabackup-v2,並使用wsrep_sst_auth變數提供SST使用者認證。
在初始化節點上面建立SST使用者。
 
啟動第2個節點
[root@localhost ~]# /etc/init.d/mysql start
在第2個節點上,檢視使用者和叢集狀態
可以看到SST使用者已經複製到第2節點,叢集已經有了兩個節點,size變為2
mysql> select user, host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| mysql.sys | localhost |
| root      | localhost |
| sstuser   | localhost |
+-----------+-----------+
3 rows in set (0.01 sec)
mysql> show status like 'wsrep%';
| wsrep_local_state_comment        | Synced                               |
| wsrep_cluster_size               | 2                                    |
 
增加第3個節點到叢集中
[root@localhost ~]# /etc/init.d/mysql start
 
在第3個節點檢查叢集的狀態
mysql> show status like 'wsrep%';
| wsrep_cluster_size               | 3                                                  |
可以看到叢集的wsrep_cluster_size引數變為3,叢集增加到第3個節點

5. 驗證複製效果
在第2個節點上建立一個資料庫
mysql> CREATE DATABASE percona;
Query OK, 1 row affected (0.07 sec)
 
在第3個節點上,在剛剛建立的庫裡面建立一張表
mysql> USE percona;
Database changed
mysql> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
Query OK, 0 rows affected (0.05 sec)
 
在第1個節點上,往這張表中插入一條資料
mysql> INSERT INTO percona.example VALUES (1, 'percona1');
Query OK, 1 row affected (0.23 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
 
在第2個節點檢視這張表中的資料
mysql> SELECT * FROM percona.example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
+---------+-----------+
1 row in set (0.00 sec)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26506993/viewspace-2142261/,如需轉載,請註明出處,否則將追究法律責任。

相關文章