1. 程式人生 > >在CentOS上配置Percona XtraDB叢集(Percona XtraDB Cluster)

在CentOS上配置Percona XtraDB叢集(Percona XtraDB Cluster)

原作者:Percona官網 翻譯&轉載來源:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/centos_howto.html

 

在CentOS上配置Percona XtraDB叢集(Percona XtraDB Cluster)

 

本教程介紹如何使用Percona儲存庫中的軟體包在CentOS 6.8伺服器上安裝和配置三個Percona XtraDB Cluster節點。

  • 節點1
    • 主機名: percona1
    • IP地址: 192.168.70.71
  • 節點2
    • 主機名: percona2
    • IP地址: 192.168.70.72
  • 節點3
    • 主機名: percona3
    • IP地址: 192.168.70.73

 

先決條件

本教程中描述的過程需要以下內容:

  • 所有三個節點都安裝了CentOS 6.8 (使用CentOS7/Fedora/RedHat都應該沒有問題)。
  • 所有節點上的防火牆都配置為允許連線到埠3306,4444,4567和4568。
  • 所有節點上的SELinux都被禁用。

 

步驟1.安裝PXC

在所有三個節點上安裝Percona XtraDB叢集,如在Red Hat Enterprise Linux和CentOS上安裝Percona XtraDB叢集中所述。

強調:您需要在要安裝Percona XtraDB Cluster的節點上具有root訪問許可權(以具有root許可權的使用者身份登入或能夠執行命令sudo), 另外,如果您不想配置防火牆的許可權,直接systemctl stop firewalld關閉即可,selinux也直接關閉即可,然後跳到從Percona儲存庫安裝這裡開始閱讀

確保以下埠未被防火牆阻止或被其他軟體使用。Percona XtraDB Cluster需要它們進行通訊。

  • 3306
  • 4444
  • 4567
  • 4568

systemctl start firewalld

然後我們允許mysql服務。Pecona是mysql發行版,所以它使用與mysql相同的埠。

firewall-cmd --zone=public --add-service=mysql --permanent

接下來我們新增其他所需埠:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --zone=public --add-port=4567/tcp --permanent

firewall-cmd --zone=public --add-port=4568/tcp --permanent

firewall-cmd --zone=public --add-port=4444/tcp --permanent

firewall-cmd --zone=public --add-port=4567/udp --permanent

firewall-cmd --zone=public --add-port=9200/tcp --permanent

並重新載入防火牆

 firewall-cmd --reload

SELinux的安全模組可以限制訪問,為的Percona XtraDB Cluster資料。最好解決方案是從改變模式enforcing 以permissive通過執行下面的命令:

setenforce  0

這隻會在執行時更改模式。要在重新引導後以允許模式執行SELinux,請在/etc/selinux/config 配置檔案中進行設定:

SELINUX=permissive

從Percona儲存庫安裝

按照Percona Software Repositories Documentation中的說明配置Percona儲存 

# 安裝源,percona版本的儲存庫
$ yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

安裝Percona XtraDB Cluster軟體包:

$ sudo yum install Percona-XtraDB-Cluster-57

或者,您可以安裝Percona-XtraDB-Cluster-full-57元軟體包

$ sudo yum install Percona-XtraDB-Cluster-full-57.x86_64

Percona-XtraDB-Cluster-full-57.x86_64 其中包含以下附加軟體包: 

  • Percona-XtraDB-Cluster-devel-57
  • Percona-XtraDB-Cluster-test-57
  • Percona-XtraDB-Cluster-debuginfo-57
  • Percona-XtraDB-Cluster-galera-3-debuginfo
  • Percona-XtraDB-Cluster-shared-57

啟動Percona XtraDB群集伺服器:

$ sudo service mysql start

複製超級使用者帳戶的自動生成的臨時密碼:

$ sudo grep 'temporary password' /var/log/mysqld.log

使用此密碼登入為root

$ mysql -u root -p

更改超級使用者帳戶的密碼並登出。例如:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootPass';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

停止mysql服務:

$ sudo service mysql stop

 

步驟2.配置第一個節點

應將單個節點配置為能夠引導群集。有關引導群集的更多資訊,請參閱引導第一個節點

配置所有PXC節點後,通過自舉的第一個節點初始化叢集。初始節點應該是包含所有資料的節點,您希望將其複製到其他節點。

Bootstrapping意味著在沒有任何已知叢集地址的情況下啟動節點。如果wsrep_cluster_address變數為空,Percona XtraDB Cluster假定這是第一個節點並初始化叢集。

不使用更改配置,而是使用以下命令啟動第一個節點:

[[email protected] ~]# /etc/init.d/mysql bootstrap-pxc

注意:在RHEL或CentOS 7上,使用以下bootstrap命令

[[email protected] ~]# systemctl start [email protected]

使用上一個命令啟動節點時,它以bootstrap模式執行wsrep_cluster_address=gcomm://。這告訴節點初始化wsrep_cluster_conf_id集合設定為1。在您新增其他節點的叢集,可以再重新啟動該節點為正常,這將再次使用的標準配置。

要確保已初始化群集,請執行以下命令:

[email protected]> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
| ...                        | ...                                  |
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
| ...                        | ...                                  |
| wsrep_cluster_size         | 1                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
| ...                        | ...                                  |
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)

前面的輸出顯示群集大小為1個節點,它是主要元件,節點處於Synced狀態,它已完全連線並準備進行寫入集複製。

將其他節點新增到新群集之前,請為SST建立使用者併為其提供必要的許可權。憑據必須與配置寫入集複製節點時指定的憑據相匹配。

[email protected]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
[email protected]> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
  'sstuser'@'localhost';
[email protected]> FLUSH PRIVILEGES;

有關更多資訊,請參閱Percona XtraBackup的許可權

 

確保/etc/my.cnf 第一個節點(percona1)上的配置檔案包含以下內容:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library 
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node 1 address
wsrep_node_address=192.168.70.71

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=my_centos_cluster

# Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"
使用以下命令啟動第一個節點:
[[email protected] ~]# /etc/init.d/mysql bootstrap-pxc

如果您正在執行CentOS 7,則應使用引導服務:

[ [email protected] ~] #systemctl start [email protected]

上一個命令將啟動叢集,並將初始wsrep_cluster_address變數設定為gcomm://。如果稍後重新啟動節點或MySQL,則無需更改配置檔案。

啟動第一個節點後,可以使用以下命令檢查叢集狀態:

show status like 'wsrep%';
mysql >  show status like 'wsrep%';
+ ---------------------------- + -------------------- ------------------ + 
|  Variable_name               |  價值                                | 
+ ---------------------------- + -------------------- ------------------ + 
|  wsrep_local_state_uuid      |  c2883338 - 834 d - 11 e2 - 0800 - 03 c9c68e41ec  | 
...... 
|  wsrep_local_state           |  4                                     | 
|  wsrep_local_state_comment   |  Synced                              | 
...
|  wsrep_cluster_size          |  1                                     | 
|  wsrep_cluster_status        |  Primary                             | 
|  wsrep_connected             |  ON                                    | 
...... 
|  wsrep_ready                 |  ON                                    | 
+ ---------------------------- + -------------------- ------------------ + 
40  行 中 集合 (0 。01  秒)

此輸出顯示群集已成功引導。

 

建議不要為root帳戶留下空密碼。密碼可以更改如下:

[email protected]> UPDATE mysql.user SET password=PASSWORD("Passw0rd") where user='root';
[email protected]> FLUSH PRIVILEGES;

要使用XtraBackup執行狀態快照傳輸,請設定具有適當許可權的新使用者:

[email protected]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
[email protected]> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
[email protected]> FLUSH PRIVILEGES;

MySQL root帳戶也可以用於執行SST,但為此使用不同的(非root使用者)更安全。

 

步驟3.配置第二個節點

確保/etc/my.cnf 第二個節點(percona2)上的配置檔案包含以下內容:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node 2 address
wsrep_node_address=192.168.70.72

# Cluster name
wsrep_cluster_name=my_centos_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"

使用以下命令啟動第二個節點:

# 如果是RedHat6/CentOS6
[[email protected] ~]# /etc/init.d/mysql start
# 如果是CentOS7/RedHat7/Fedora29
$ sudo systemctl start mysql.service 

務器啟動後,它應自動接收SST。這意味著第二個節點將不再具有空的root密碼。為了連線到群集並檢查狀態,應使用第一個節點的root密碼。可以在兩個節點上檢查群集狀態。以下是第二個節點(percona2)的狀態示例:

mysql> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
...
| wsrep_local_state          | 4                                    |
| wsrep_local_state_comment  | Synced                               |
...
| wsrep_cluster_size         | 2                                    |
| wsrep_cluster_status       | Primary                              |
| wsrep_connected            | ON                                   |
...
| wsrep_ready                | ON                                   |
+----------------------------+--------------------------------------+
40 rows in set (0.01 sec)

此輸出顯示新節點已成功新增到群集。

 

步驟4.配置第三個節點

確保/etc/my.cnf 第三個節點(percona3)上的MySQL配置檔案包含以下內容:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.70.71,192.168.70.72,192.168.70.73

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #3 address
wsrep_node_address=192.168.70.73

# Cluster name
wsrep_cluster_name=my_centos_cluster

# SST method
wsrep_sst_method=xtrabackup-v2

#Authentication for SST method
wsrep_sst_auth="sstuser:s3cret"

使用以下命令啟動第三個節點:

# centos6 使用下面命令
[[email protected] ~]# /etc/init.d/mysql start

# RedHat/Fedora/CentOS7 使用下面命令:
[[email protected] ~]# systemctl start mysql.service

務器啟動後,它應自動接收SST。可以在所有三個節點上檢查群集狀態。以下是第三個節點(percona3)的狀態示例:

mysql >  show status like 'wsrep%' ; 
+ ---------------------------- + -------------------- ------------------ + 
|  Variable_name               |  價值                                | 
+ ---------------------------- + -------------------- ------------------ + 
|  wsrep_local_state_uuid      |  c2883338 - 834 d - 11 e2 - 0800 - 03 c9c68e41ec  | 
...... 
|  wsrep_local_state           |  4                                     | 
|  wsrep_local_state_comment   |  同步                               | 
...
|  wsrep_cluster_size          |  3                                     | 
|  wsrep_cluster_status        |  小學                              | 
|  wsrep_connected             |  ON                                    | 
...... 
|  wsrep_ready                 |  ON                                    | 
+ ---------------------------- + -------------------- ------------------ + 
40  行 中 集合 (0 。01  秒)

此輸出確認第三個節點已加入群集。

 

測試複製

要測試複製,我們在第二個節點上建立一個新資料庫,在第三個節點上為該資料庫建立一個表,並在第一個節點上向表中新增一些記錄。

  1. 在第二個節點上建立一個新資料庫:

    mysql @ percona2 >  CREATE  DATABASE  demopercona ; 
    查詢 行, 1  行 的影響 (0 。01  秒)
    
  2. 在第三個節點上建立一個表:

    [email protected] >  USE  demopercona ; 
    資料庫已 更改
    
    [email protected] >  CREATE  TABLE  demotable (node_id  INT  PRIMARY  KEY , node_name  VARCHAR (30 )); 
    查詢 OK , 0  行 影響 (0 。05  秒)
    
  3. 在第一個節點上插入記錄:

    [email protected] >  INSERT  INTO  demopercona.demotable VALUES  (1 , 'percona1' ); 
    查詢 行, 1  行 的影響 (0 。02  秒)
    
  4. 從第二個節點上的該表中檢索所有行:

    [email protected] >  SELECT  *  FROM  demopercona.demotable; 
    + --------- + ----------- + 
    |  node_id  |  node_name  | 
    + --------- + ----------- + 
    |        1  |  percona1   | 
    + --------- + ----------- + 
    1  行 中 集合 (0 。00  秒)
    

此簡單過程應確保群集中的所有節點都已同步並按預期工作,到此為止Percona的叢集配置完畢。下面部分是提高篇,如果您已經通過上述配置成功實現了叢集,也就是您測試,如果在一個數據庫中增刪改查會同步到其他伺服器,那麼叢集就部署成功,本圖文教程您已經成功完成,接下來可以再接再厲,完成Haproxy的負載均衡。下面是利用Haproxy配置則三臺叢集伺服器的負載均衡。

 

HAproxy設定

首先,我們需要在所有群集節點上安裝clustercheck,以便群集可以通過HAproxy進行維護。讓我們用wget獲取指令碼

wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

指令碼需要可執行並移動到您的$ PATH目錄之一。

chmod +x clustercheck

mv clustercheck /usr/bin/

現在我們還需要包含在xinetd包中的mysqlchk:

yum install xinetd

接下來,我們在資料庫上移動create clustercheck user。我們只能在第一個節點上輸入

mysql -u root -p

mysql> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';

exit;

接下來,我們可以測試clustercheck是否按預期工作:

[[email protected] ~]# clustercheck
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

Percona XtraDB Cluster Node is synced.

接下來我們轉到xinetd的配置,需要將xinetd新增到服務列表中。

nano /etc/services

我們使用CTRL-W查詢埠9200的部分,然後我們推薦使用該埠的服務,而不是新增新行。它需要看起來像這樣:

mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service

我們完成後,我們儲存。請注意,除HAproxy之外的所有群集節點都需要完成此操作。

現在是時候登入我們的HAporoxy伺服器了。首先,我們需要備份haproxy配置。

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk

然後我們將從乾淨的配置檔案上設定新的配置

nano /etc/haproxy/haproxy.cfg

我們可以從這裡複製HAproxy配置,除了這三行需要更改,請修改為對應的IP和埠:

server centos-percona01 10.132.84.186:3306 check port 9200 inter 12000 rise 3 fall 3
server centos-percona02 10.132.84.141:3306 check port 9200 inter 12000 rise 3 fall 3
server centos-percona03 10.132.84.67:3306 check port 9200 inter 12000 rise 3 fall 3

需要使用您的主機名和地址更改突出顯示的部分。接下來我們需要在haproxy伺服器上啟動firewalld並允許我們需要使用的埠

systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp

之後我們需要重新載入防火牆

firewall-cmd --reload

最後,開始haproxy

systemctl start haproxy

我們現在需要測試設定。

 

測試HAproxy

讓我們將瀏覽器指向埠9000上HAproxy伺服器的公共IP地址:

所有節點都線上。接下來讓我們在haproxy伺服器上安裝percona客戶端,這樣我們就可以嘗試從那裡查詢叢集。

yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

yum install Percona-XtraDB-Cluster-client-56

讓我們試著看看我們是否可以從這個haproxy伺服器獲得一個查詢:

mysql -u root -p -h 10.132.83.13 -P 3306 -e "select Host, User, Password from mysql.user"

 

 

結論

我們已經設定了由HAproxy負載均衡的Percona XtraDB 3節點叢集。