MySQL PXC 高可用集群搭建


一些名詞介紹:

    WS:write set 寫數據集
    IST: Incremental State Transfer 增量同步
    SST:State Snapshot Transfer 全量同步 

 

pxc環境所涉及的端口:

    #mysql實例端口

   1. Regular MySQL port, default 3306.   

 

   #pxc cluster相互通訊的端口
   2. Port for group communication, default 4567. It can be changed by the option:  
       wsrep_provider_options ="gmcast.listen_addr=tcp://0.0.0.0:4010; "

 

   #用於SST傳送的端口
   3. Port for State Transfer, default 4444. It can be changed by the option: 
       wsrep_sst_receive_address=10.11.12.205:5555

 

   #用於IST傳送的端口
   4. Port for Incremental State Transfer, default port for group communication + 1 (4568). It can be changed by the option: 
       wsrep_provider_options = "ist.recv_addr=10.11.12.206:7777; "

 

 

搭建步驟:

一、環境情況:

     node1:192.168.1.81:6000

     node2:192.168.1.240:6000

     node3:192.168.1.241:6000
 
二、防火牆設置:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #本實驗需要改為6000
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4444 -j ACCEPT #本實驗需要改為6020
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4567 -j ACCEPT #本實驗需要改為6030
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4568 -j ACCEPT #本實驗需要改為6031
setenforce 0
 
二、下載安裝,在node1,node2,node3分別進行如下安裝
yum install -y  http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install -y perl-DBD-MySQL.x86_64 perl-IO-Socket-SSL.noarch socat.x86_64 nc
yum install -y  openssl openssl-devel

#step 1 prepare :5.6.26 needs libssl.so.6 libcrypto.so.6 ()
cd /usr/lib64
ln -s libssl.so.1.0.1e libssl.so.6
ln -s  libcrypto.so.1.0.1e libcrypto.so.6

#step2:download pxc
cd /usr/local/src
wget https://www.percona.com/downloads/Percona-XtraDB-Cluster-56/Percona-XtraDB-Cluster-5.6.26-25.12/binary/tarball/Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64.tar.gz
cd /usr/local
mv Percona-XtraDB-Cluster-5.6.26-rel74.0-25.12.1.Linux.x86_64.tar.gz pxc_56

#step3:install pxc
cd /usr/local/pxc_56
 ./scripts/mysql_install_db --defaults-file=/home/mysql/my6000.cnf --basedir=/usr/local/pxc_56
  chown -R mysql. /home/mysql
  chown -R mysql. /usr/local/pxc_56
 
 配置文件:my6000.cnf
[client]
port            = 6000 socket = /home/mysql/I6000/mysql.sock default-character-set=utf8 [mysqld] basedir = /usr/local/pxc_56 datadir = /home/mysql/I6000 pid-file = /home/mysql/I6000/mysql.pid character-set-server=utf8 init_connect = 'SET NAMES utf8' log-bin=/home/mysql/I6000/log_bin server-id = 9816000 innodb_buffer_pool_size = 100M innodb_data_file_path = ibdata1:10M:autoextend innodb_data_home_dir = /home/mysql/I6000 innodb_file_per_table=1 skip-name-resolve port = 6000 socket = /home/mysql/I6000/mysql.sock user=mysql log_error=/home/mysql/I6000/mysql_error.log #pxc user=mysql log_error=error.log binlog_format=ROW #6000 for mysqld port, 6020 for sst port, 6031 for ist port, 6030 for cluster communication port 端口作用及說明見上面 wsrep_cluster_address='gcomm://192.168.1.81:6030,192.168.1.238:6030,192.168.1.240:6030' #三個節點都保持一樣 wsrep_provider=/usr/local/pxc_56/lib/libgalera_smm.so wsrep_sst_receive_address=192.168.1.238:6020 #根據不同的node ip進行修改 wsrep_node_incoming_address=192.168.1.238:6000  #根據不同的node ip進行修改 wsrep_node_address=192.168.1.238:6000  #根據不同的node ip進行修改 wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.1.238:6030;ist.recv_addr=192.168.1.238:6031;"  #根據不同的node ip進行修改 wsrep_slave_threads=2 wsrep_cluster_name=pxc_zejin #同一個cluster此值需要一致 wsrep_sst_method=xtrabackup-v2 wsrep_node_name=node6000_238 #不同節點修改為不同的名字 innodb_autoinc_lock_mode=2 wsrep_sst_auth="sstuser:123" log-slave-updates [mysql] no-auto-rehash default-character-set=utf8

 

 三、實例啟動:
#安裝實例
/usr/local/pxc_56/scripts/mysql_install_db --defaults-file=/home/mysql/my6000.cnf --basedir=/usr/local/pxc_56
#啟動第一個實例
/usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/my6000.cnf --ledir=/usr/local/pxc_56/bin/ --wsrep-new-cluster  & 
#修改密碼
/usr/local/pxc_56/bin/mysqladmin -u root -P6000 password '000000' -S /home/mysql/I6000/mysql.sock
#登陸並增加用戶
/usr/local/pxc_56/bin/mysql -uroot -p -P6000 -S /home/mysql/I6000/mysql.sock 
grant all on *.* to 'sstuser'@'localhost' identified by '123';
flush privielges;
mysql> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+
1 row in set (0.00 sec)

 

四、啟動第二、三個node
#不需要加--wsrep-new-cluster
/usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/I6000/my6000.cnf --ledir=/usr/local/pxc_56/bin/ & 

整個過程大約如下:
   1.決斷是否可以IST
   2.不可以的話Requesting state transfer
   3.Cleaning the existing datadir and innodb-data/log directories 會將之前實例的內容全部刪除。#所以不能將my6000.cnf文件放在與datadir目錄下,要不會被刪除,並且在重新啟動服務時出錯
   4.Waiting for SST streaming to complete
   5.啟動服務。
 
  官方說明:
    XtraBackup SST works in two stages:
      • Stage I on joiner checks if it is SST or IST based on presence of xtrabackup_ist file.
      • In Stage II it starts the data transfer, if it’s SST, it empties the data directory sans few files (galera.cache, sst_in_progress, grastate.dat) and then proceed with the SST or if it’s IST, proceeds as before.

 

加入成功:
07:49:13 root@127.0.0.1:[test] 6000>show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.00 sec)

 

五、操作過程中經常用到的命令:

安裝:/usr/local/pxc_56/scripts/mysql_install_db --defaults-file=/home/mysql/my6000.cnf --basedir=/usr/local/pxc_56
啟動:/usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/my6000.cnf --ledir=/usr/local/pxc_56/bin/ &  ( 第一個節點要加上--wsrep-new-cluster )
登陸:/usr/local/pxc_56/bin/mysql -uroot -p -P6000 -S /home/mysql/I6000/mysql.sock 
關閉:/usr/local/pxc_56/bin/mysqladmin -uroot -p -P6000 -S /home/mysql/I6000/mysql.sock  shutdown
 
 
六、安裝過程中可能遇到的問題:
 
A.
節點啟動時:
/usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/my3307.cnf --ledir=/usr/local/pxc_56/bin/ &
有可能啟動會提示:
WSREP_SST: [ERROR] socat not found in path: /usr/sbin:/sbin:/usr/local/pxc_56//bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/lamp/mysql/bin:/root/bi
n (20160509 10:58:04.404)
2016-05-09 10:58:04 54809 [ERROR] WSREP: Failed to read 'ready <addr>' from: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.1.238' --datadir '/home/mysql/I3307/
' --defaults-file '/home/mysql/I3307/my3307.cnf' --defaults-group-suffix '' --parent '54809'  '' 
        Read: '(null)'
2016-05-09 10:58:04 54809 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.1.238' --datadir '/home/mysql/I3307/' --de
faults-file '/home/mysql/I3307/my3307.cnf' --defaults-group-suffix '' --parent '54809'  '' : 2 (No such file or directory)
2016-05-09 10:58:04 54809 [ERROR] WSREP: Failed to prepare for 'xtrabackup-v2' SST. Unrecoverable.
2016-05-09 10:58:04 54809 [ERROR] Aborting

原因及解決方法:socat 沒有安裝到,之前源包沒有,可以進行如下安裝:

wget --no-cache  http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo
yum install socat
 
 
B.
第一個節點如果直接這樣啟動:
/usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/my6000.cnf & 在errorlog里面會出現: 2016-05-09 09:49:46 9932 [ERROR] WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 (Connection timed out) at gcomm/src/pc.cpp:connect():162 2016-05-09 09:49:46 9932 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():206: Failed to open backend connection: -110 (Connection timed out) 2016-05-09 09:49:46 9932 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1379: Failed to open channel 'pxc_zejin' at 'gcomm://192.168.1.240,192.168.1.238,192.168.1.81': -110 (Con nection timed out) 2016-05-09 09:49:46 9932 [ERROR] WSREP: gcs connect failed: Connection timed out 2016-05-09 09:49:46 9932 [ERROR] WSREP: wsrep::connect(gcomm://192.168.1.240,192.168.1.238,192.168.1.81) failed: 7 2016-05-09 09:49:46 9932 [ERROR] Aborting 2016-05-09 09:49:46 9932 [Note] WSREP: Service disconnected. 2016-05-09 09:49:47 9932 [Note] WSREP: Some threads may fail to exit. 2016-05-09 09:49:47 9932 [Note] Binlog end 2016-05-09 09:49:47 9932 [Note] /usr/local/pxc_56/bin/mysqld: Shutdown complete

解決方法:第一個節點啟動要加上:--wsrep-new-cluster

 /usr/local/pxc_56/bin/mysqld_safe --defaults-file=/home/mysql/my6000.cnf --ledir=/usr/local/pxc_56/bin --wsrep-new-cluster  &

 
 
 C.
#第二個節點或第三個節點啟動報錯:
WSREP_SST: [ERROR] Cleanup after exit with status:1 (20160509 19:25:50.483)
2016-05-09 19:25:50 44334 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.1.240:6020' --datadir '/home/mysql/I6000/'
 --defaults-file '/home/mysql/I6000/my6000.cnf' --defaults-group-suffix '' --parent '44334'  '' : 1 (Operation not permitted)
2016-05-09 19:25:50 44334 [ERROR] WSREP: Failed to read uuid:seqno from joiner script.
2016-05-09 19:25:50 44334 [ERROR] WSREP: SST script aborted with error 1 (Operation not permitted)
2016-05-09 19:25:50 44334 [ERROR] WSREP: SST failed: 1 (Operation not permitted)
2016-05-09 19:25:50 44334 [ERROR] Aborting

原因及解決方法:配置文件my6000.cnf放在與datadir目錄下,在Cleaning the existing datadir階段被刪除,在重啟服務時就會找不到配置文件,在重新啟動服務就會出錯,把配置文件放在非datadir目錄下即可。如/etc/my6000.cnf

 

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM