溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-08-11 05:38:33 來源:ITPUB博客 閱讀:297 作者:feelpurple 欄目:MySQL數(shù)據(jù)庫
避免創(chuàng)建偶數(shù)節(jié)點(diǎn)數(shù)量的集群,因?yàn)檫@樣會(huì)導(dǎo)致腦裂。
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

關(guān)掉selinux和防火墻,否則后面初始化集群會(huì)失敗
[root@localhost mysql_log_57]# vim /etc/selinux/config
SELINUX=disabled

1. 在所有節(jié)點(diǎn)上安裝Percona XtraDB集群軟件
安裝YUM源
[root@localhost ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

 檢查包是否可用
[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

 安裝時(shí)提示缺少下面的包
 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官網(wǎng)下載repository
在下面網(wǎng)頁中下載epel-release開頭的rpm包
http://dl.fedoraproject.org/pub/epel/6/x86_64/
 
上傳rpm包到服務(wù)器
 
安裝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
 
注意,如果服務(wù)器上安裝過數(shù)據(jù)庫,/etc/my.cnf配置文件已經(jīng)存在,需要將其改名,否則會(huì)對(duì)集群?jiǎn)?dòng)產(chǎn)生影響
[root@localhost ~]# mv /etc/my.cnf /etc/my_5.7_mha.cnf

查看數(shù)據(jù)目錄下的內(nèi)容
[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

 默認(rèn)安裝的軟件目錄
 查看軟件目錄下的內(nèi)容
[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
 
啟動(dòng)Percona XtraDB集群服務(wù)
service mysql start
 
查看集群狀態(tài)
[root@localhost mysql]# service mysql status
SUCCESS! MySQL (Percona XtraDB Cluster) running (2263)
 
實(shí)際上集群的進(jìn)程就是mysqld的進(jìn)程
[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

重新設(shè)置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. 在所有節(jié)點(diǎn)上配置寫集合復(fù)制相關(guān)的參數(shù)
這包括Glera庫的路徑和其他節(jié)點(diǎn)的位置

停掉集群服務(wù)
[root@localhost ~]# service mysql stop
Shutting down MySQL (Percona XtraDB Cluster)... SUCCESS!
 
參數(shù)說明:
wsrep_provider        指定Galera庫的路徑
wsrep_cluster_name    指定集群各個(gè)節(jié)點(diǎn)的IP地址
wsrep_node_name        指定每個(gè)節(jié)點(diǎn)的邏輯名。如果沒有指定這個(gè)參數(shù),默認(rèn)會(huì)使用主機(jī)名
wsrep_node_address    指定節(jié)點(diǎn)的IP地址
wsrep_sst_method    默認(rèn),Percona XtraDB集群使用Percona XtraBackup來做狀態(tài)快照傳輸(SST)。強(qiáng)烈建議將這個(gè)參數(shù)設(shè)為wsrep_sst_method=xtrabackup-v2。使用這個(gè)方法需要配置一個(gè)數(shù)據(jù)庫用戶。在wsrep_sst_auth參數(shù)中指定SST認(rèn)證用戶。
wsrep_sst_auth        指定SST認(rèn)證用戶名和密碼,格式是:。
性和不支持的特性
binlog_format        Gelera只支持行級(jí)的復(fù)制,所以設(shè)置 binlog_format=ROW
default_storage_engine    Galera只支持InnoDB存儲(chǔ)引擎。不支持MyISAM或其他非事務(wù)性的存儲(chǔ)引擎。所以設(shè)置 default_storage_engine=InnoDB
innodb_autoinc_lock_mode    Gelara只支持適合InnoDB的interleaved (2)鎖模式。將這個(gè)參數(shù)設(shè)為traditional (0)或consecutive (1)鎖模式會(huì)引起死鎖,
進(jìn)而將會(huì)導(dǎo)致復(fù)制失敗。所以設(shè)置 innodb_autoinc_lock_mode=2
 
節(jié)點(diǎn)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

節(jié)點(diǎn)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

節(jié)點(diǎn)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. 在第一個(gè)節(jié)點(diǎn)上初始化集群
這個(gè)節(jié)點(diǎn)必須包含全部的數(shù)據(jù),作為集群的數(shù)據(jù)源。
 
在第一個(gè)節(jié)點(diǎn)上執(zhí)行下面操作
[root@localhost mysql_log_57]# /etc/init.d/mysql bootstrap-pxc
Starting MySQL (Percona XtraDB Cluster)..... SUCCESS!
 
查看集群狀態(tài)
[root@localhost mysql_log_57]# mysql -uroot -p
mysql> show status like 'wsrep%';
| wsrep_local_state_comment        | Synced                               |    // 節(jié)點(diǎn)是同步狀態(tài)
| wsrep_cluster_size               | 1                                    |    // 集群只有一個(gè)節(jié)點(diǎn)
| wsrep_cluster_status             | Primary                              |    // 主節(jié)點(diǎn)
| wsrep_connected                  | ON                                   |    // 已經(jīng)連接到集群
| wsrep_ready                      | ON                                   |        // 已經(jīng)做好寫集合的復(fù)制準(zhǔn)備
 
在增加其他節(jié)點(diǎn)到集群中前,創(chuàng)建SST的數(shù)據(jù)庫用戶。這個(gè)賬戶必須和配置文件中的信息相符。
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. 增加其他節(jié)點(diǎn)到集群中
當(dāng)配置好wsrep_cluster_address等配置文件后,啟動(dòng)該節(jié)點(diǎn),它會(huì)自動(dòng)加入集群并開始同步數(shù)據(jù)。
注意:不要在相同時(shí)間加入多個(gè)節(jié)點(diǎn)到集群中,以避免巨大的網(wǎng)絡(luò)流量壓力。
默認(rèn),Percona XtraDB集群使用Percona XtraBackup來傳輸狀態(tài)快照 State Snapshot Transfer (SST)。
需要滿足下面條件:
設(shè)置wsrep_sst_method參數(shù)為xtrabackup-v2,并使用wsrep_sst_auth變量提供SST用戶認(rèn)證。
在初始化節(jié)點(diǎn)上面創(chuàng)建SST用戶。
 
啟動(dòng)第2個(gè)節(jié)點(diǎn)
[root@localhost ~]# /etc/init.d/mysql start
在第2個(gè)節(jié)點(diǎn)上,查看用戶和集群狀態(tài)
可以看到SST用戶已經(jīng)復(fù)制到第2節(jié)點(diǎn),集群已經(jīng)有了兩個(gè)節(jié)點(diǎn),size變?yōu)?
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個(gè)節(jié)點(diǎn)到集群中
[root@localhost ~]# /etc/init.d/mysql start
 
在第3個(gè)節(jié)點(diǎn)檢查集群的狀態(tài)
mysql> show status like 'wsrep%';
| wsrep_cluster_size               | 3                                                  |
可以看到集群的wsrep_cluster_size參數(shù)變?yōu)?,集群增加到第3個(gè)節(jié)點(diǎn)

5. 驗(yàn)證復(fù)制效果
在第2個(gè)節(jié)點(diǎn)上創(chuàng)建一個(gè)數(shù)據(jù)庫
mysql> CREATE DATABASE percona;
Query OK, 1 row affected (0.07 sec)
 
在第3個(gè)節(jié)點(diǎn)上,在剛剛創(chuàng)建的庫里面創(chuàng)建一張表
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個(gè)節(jié)點(diǎn)上,往這張表中插入一條數(shù)據(jù)
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個(gè)節(jié)點(diǎn)查看這張表中的數(shù)據(jù)
mysql> SELECT * FROM percona.example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
+---------+-----------+
1 row in set (0.00 sec)
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI