官網參考地址:html
https://www.percona.com/doc/percona-xtradb-cluster/LATEST/configure.htmlnode
前期準備:mysql
都用的root權限或使用sudo
確保330六、444四、456七、4568端口沒有被防火牆攔截
關閉selinuxlinux
$ cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
$ uname -r
3.10.0-693.el7.x86_64sql
IP 主機名數據庫
192.168.3.120 node1bootstrap
192.168.3.121 node2vim
192.168.3.122 node3centos
##########################################################################socket
安裝版塊:(全部節點上執行)
$ yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
$ yum -y install Percona-XtraDB-Cluster-57 #如是本地執行可能會提示要掛載光盤,如雲上則不會
$ service mysql start
複製超級用戶賬戶的自動生成的臨時密碼:
$ grep 'temporary password' /var/log/mysqld.log|awk -F '@' '{print $2}'|awk -F ' ' '{print $2}'
使用此密碼登陸爲root:
$ mysql -u root -p
更改超級用戶賬戶的密碼並註銷:
$ mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
##########################################################################
建立數據、日誌、臨時文件目錄(全部節點上執行)
mkdir -p /data/mysql/{data,logs,tmp}
chown -R mysql.mysql /data
mv /etc/my.cnf{,.bak}
cp /etc/percona-xtradb-cluster.conf.d/wsrep.cnf /etc/my.cnf
##########################################################################
在第一個節點上的/etc/my.cnf中添加如下配置變量:
cat /etc/my.cnf | grep -v ^#|grep -v ^$
[mysqld]
user=mysql
innodb_buffer_pool_size = 1024M
datadir = /data/mysql/data
port = 3306
server_id = 1 #每一個節點的server_id都不同
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/controller.pid
log-error = /data/mysql/logs/error.log
log_warnings = 2
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 0.1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.3.120,192.168.3.121,192.168.3.122
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.3.120 #IP爲本機IP
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-1
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:123456" 格式:用戶名:密碼
在上面的配置文件中,有個wsrep_sst_auth參數。該參數是用於其它節點加入到該集羣中,利用XtraBackup執行State Snapshot Transfer(相似於全量同步)的。
因此,接下來是受權
mysql> create user 'sstuser'@'localhost' identified by '123456';
mysql> grant reload,lock tables,process,replication client on *.* to 'sstuser'@'localhost';
mysql> flush privileges;
mysql> show grants for sstuser@localhost;
mysql> exit service mysql stop
##########################################################################
對於第二個節點:
server_id = 2
wsrep_node_name=pxc2
wsrep_node_address=192.168.3.121
對於第三個節點:
server_id = 3
wsrep_node_name=pxc3
wsrep_node_address=192.168.3.122
除以上3項和節點1上不同以外,第二個節點和第三個節點的其餘配置和節點1上的my.cnf配置同樣
########### 以上各參數解析 ##############
wsrep_provider
指定Galera庫的路徑。
紅帽或CentOS: /usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name
指定羣集的邏輯名稱。對於羣集中的全部節點它必須相同。
wsrep_cluster_address
指定羣集中節點的IP地址。節點加入羣集至少須要一個,但建議列出全部節點的地址。這樣,若是列表中的第一個節點不可用,則加入節點可使用其餘地址。
wsrep_node_name
指定每一個節點的邏輯名稱。若是未指定此變量則將使用主機名。
wsrep_node_address
指定此特定節點的IP地址。
wsrep_sst_method
默認狀況下,Percona XtraDB羣集使用Percona XtraBackup進行狀態快照傳輸(SST)。
wsrep_sst_method=xtrabackup-v2強烈建議設置。此方法須要在初始節點上設置用戶SST。
使用wsrep_sst_auth變量提供SST用戶憑據。
wsrep_sst_auth
指定認證憑證SST 做爲<sst_user>:<sst_pass>
pxc_strict_mode
PXC嚴格模式默認啓用並設置爲ENFORCING,這會阻止在Percona XtraDB Cluster中使用實驗和不支持的功能。
binlog_format
Galera僅支持行級複製所以設置成binlog_format=ROW。
default_storage_engine
Galera徹底支持InnoDB存儲引擎。它沒法與MyISAM或任何其餘非事務性存儲引擎一塊兒正常工做。將此變量設置爲default_storage_engine=InnoDB
innodb_autoinc_lock_mode
Galera僅支持2InnoDB的interleaved()鎖定模式。設置傳統(0)或連續(1)鎖定模式可能會致使複製因未解決的死鎖而失敗。將此變量設置爲innodb_autoinc_lock_mode=2
########### 各參數解析結束 ##############
##########################################################################
啓動第一個節點:
$ systemctl start mysql@bootstrap.service
##注意!第一個節點啓動方式和其餘節點方式啓動不一樣
##若是是CentOS 6,則啓動方式爲 # /etc/init.d/mysql bootstrap-pxc,之因此採用bootstrap啓動,實際上是告訴數據庫,這是第一個節點,不用進行數據的同步。
更改mysql的root密碼:
vim /etc/my.cnf
在[mysqld]中添加
skip-grant-tables
$ systemctl restart mysql@bootstrap.service
$ mysql -uroot -p (直接點擊回車,密碼爲空)
use mysql;
update user set authentication_string=password('123456') where user='root';
flush privileges;
exit
刪除skip-grant-tables
$ systemctl restart mysql@bootstrap.service
確保已初始化羣集運行如下命令:(全部節點上執行,下圖是節點一上還未啓動其餘節點時的)
$ mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> show status like 'wsrep%';
注:如今上面的wsrep_cluster_size 是爲1的
驗證sstuser登陸:(全部節點上執行)
$ mysql -usstuser -p123456 -S /var/lib/mysql/mysql.sock -e 'show databases'
注意:若有報錯自行修改,也就是權限和用戶有沒添加的問題
啓動其餘全部節點:(全部節點上執行)
$ systemctl start mysql
附:啓動時有一個節點報了個錯,以下:
根據報錯信息,最後解決:
再到節點有上去看下:
簡單測試:
在節點2上建立一個數據庫,並在節點1上在節點2上建立的庫中建立一張test100表
而後再在節點3上的節點2上建立的test100表中插入數據