1. 程式人生 > >MySQL PXC 高可用叢集搭建

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 [email protected]:[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 沒有安裝到,之前源包沒有,可以進行如下安裝:

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

相關推薦

MySQL PXC 可用叢集搭建

一些名詞介紹:     WS:write set 寫資料集     IST: Incremental State Transfer 增量同步     SST:State Snapshot Transfer 全量同步  pxc環境所涉及的埠:     #mysql例項

基於keepalived搭建MySQL可用叢集

MySQL的高可用方案一般有如下幾種: keepalived+雙主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比較常用的是keepalived+雙主,MHA和PXC。 對於小公司,一般推薦使用keepalived+雙主,簡單。 下面來部署一下 配置環境:

MySql可用叢集搭建

前言 傳統mysql高可用叢集都是建立在mysql主從同步複製基礎上的,利用mysql原生的同步技術,搭配叢集管理元件,以及對外輸

Kubernetes實戰 可用叢集搭建,配置,運維與應用

1-1 K8S導學 1-2 搭建K8S叢集步驟和要點介紹 1-3 搭建三節點Ubuntu環境 1-4 安裝容器引擎 1-5 下載Kubeadm、node元件和命令列工具 1-6 向叢集中加入worker節點 1-7 安裝dashboard和heapste

Flume NG可用叢集搭建詳解(基於flume-1.7.0)

1、Flume NG簡述 Flume NG是一個分散式,高可用,可靠的系統,它能將不同的海量資料收集,移動並存儲到一個數據儲存系統中。輕量,配置簡單,適用於各種日誌收集,並支援 Failover和負載均衡。並且它擁有非常豐富的元件。Flume NG採用的是三層架構:Agent層,Collecto

三節點可用叢集搭建——Hadoop-HA+zookeeper

目錄 HDFS -HA模式的工作機制示意圖 叢集規劃——三節點高可用 Hadoop HA叢集搭建 前期準備 建立新的虛擬機器 配置虛擬機器 克隆虛擬機器 配置環境變數,重新整理(master、slave1、slave2都配置一下環境變數) 安裝zookeeper叢集 配置檔案 拷貝檔案 拷貝

MHA實現mysql可用叢集

前言:         在生產環境中,資料庫對於一個企業是至關重要的,因此我們應該做到生產中的mysql高可用,從而實現假如有一臺資料庫宕機,別的機器會自動代替宕機的伺服器的工作,從而實現資料庫的快速切換,避免單點故障,從而保證業務的正常執行。MHA就可以

MySQL+MMM 可用叢集部署(一)

一、MMM的功能特點 MMM 即(Master-Master replication manager for MySQL)的簡稱,它是一套支援雙主故障切換和雙主日常管理的指令碼程式,而MMM是用 Perl 語言所開發,其主要功能是: 第一、用來監控和管理 MySQL 資料庫 主主複製(Master-M

MySQL+MMM 可用叢集部署(二)

接上期,MySQL主從同步我們已經部署完成,接下來,我們開始部署本期的核心---MMM高可用叢集 四、MMM高可用叢集部署     1、安裝依賴包     由於mmm 是用perl語言寫的指令碼程式,因此需要在5臺伺

Redis5之前版本可用叢集搭建(偽分散式Ruby版)

一、簡介 Redis5以前安裝需要藉助ruby,Redis5版本以後不需要可參考Redis5.x版本快取搭建高可用叢集 二、Redis高可用叢集搭建 redis安裝 下載地址:http://redis.io/download 安裝步驟: # 把下載好的redis-3.0.0-rc2.tar.gz放在/u

centos7 hadoop HA可用叢集搭建( hadoop2.7 zookeeper3.4 )

目錄 七、總結 上篇文章寫了如何用ssh免密登入,當然這些操作都是在hadoop賬號上的操作,包括這篇文章也是一樣 三臺主機 一、伺服器環境 主機名 IP 使用者名稱 密碼 安裝目錄 node1 192.168.31.

RabbitMQ 高階指南:從配置、使用到可用叢集搭建

博主說:在專案中,通過 RabbitMQ,咱們可以將一些無需即時返回且耗時的操作提取出來,進行非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。 正文 1 RabbitMQ 簡介 1.1 介紹   RabbitMQ

Hadoop2.0可用叢集搭建

0、叢集節點分配 Hadoop01: Zookeeper NameNode(active) DataNode NodeManager JournalNode ResourceManager(active) Hadoop02: Zookeeper DataNod

redis一主多從可用叢集搭建

Redis 一主兩從高可用環境搭建 Redis 支援 Master-Slave(主從)模式,Redis Server 可以設定為另一個 Redis Server 的主機(從機),從機定期從主機拿資料。特殊的,一個從機同樣可以設定為一個 Redis Server

Redis Sentinel 可用叢集搭建(redis4.0)

前言 什麼是哨兵 Redis Sentinel出生於2012年,Redis 2.4穩定後首次釋出,它是一個旨在管理Redis叢集的系統。 哨兵的任務 監控(Monitoring):Sentinel會不斷地檢查你的主伺服器和從伺服器是否運作正常 提醒

大資料系列(hadoop) Hadoop+Zookeeper 3節點可用叢集搭建

原文地址:https://www.cnblogs.com/YellowstonePark/p/7750213.html一、叢集規劃主機名ipNameNodeDataNodeYarnZooKeeperJournalNodenode01192.168.1.201是是否是是node

CentOS7 haproxy+keepalived實現可用叢集搭建

一、搭建環境   CentOS7 64位         Keepalived  1.3.5         Haproxy 1.5.18   後端負載主機:192.168.166.21   192.168.166.22   兩臺節點上安裝rabbitmq服務      

RabbitMQ 可用叢集搭建及電商平臺使用經驗總結

面向EDA(事件驅動架構)的方式來設計你的訊息 AMQP routing key的設計 RabbitMQ cluster搭建 Mirror queue policy設定 兩個不錯的RabbitMQ plugin 大型應用外掛(Sharding、Rederation) Queue映象失敗手動同步

超詳細Hadoop HA可用叢集搭建及常見問題處理

       最近研究了下公司的hadoop叢集並模仿搭建了一個在本地測試使用的hadoop叢集。本文介紹下詳細的搭建過程以及各種常見問題的處理解決。  1 ,  前期準備     1.0  ,  準備Linux環境。         安裝vmware linux虛擬機

mongodb可用叢集搭建(分片+讀寫分離+負載均衡)

#分別在多臺機器上使用chiansun使用者登入 sudo yum install -y mongodb-org node-1 node-2 node-3 mongos mongos mongos 路由伺服器,定址 config config