Percona XtraDB Cluster集羣

官網參考地址: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表中插入數據

相關文章
相關標籤/搜索