12-MySQL集群解決方案-PXC集群

Percona XtraDB Cluster(下文簡稱PXC集群)提供了MySQL高可用的一種實(shí)現(xiàn)方法。PXC集群以節(jié)點(diǎn)組成(推薦至少3節(jié)點(diǎn),便于故障恢復(fù),后面會(huì)討論兩節(jié)點(diǎn)的情況),每個(gè)節(jié)點(diǎn)都是基于常規(guī)的 MySQL/Percona Server,意味著你可以從集群中分離出某節(jié)點(diǎn)單獨(dú)使用。集群中每個(gè)節(jié)點(diǎn)都包含完整的數(shù)據(jù)。
PXC集群主要由兩部分組成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一個(gè)通用的用于事務(wù)型應(yīng)用的同步、多主復(fù)制插件)。

PXC的特性和優(yōu)點(diǎn):
1、同步復(fù)制
2、支持多主復(fù)制
3、支持并行復(fù)制
4、作為高可用方案,相比其他方案其結(jié)構(gòu)和實(shí)施相對(duì)簡單明了
PXC的局限和劣勢(shì):
1、 版本(5.6.20)的復(fù)制只支持InnoDB引擎,其他存儲(chǔ)引擎的更改不復(fù)制。然而,DDL(Data Definition Language) 語句在statement級(jí)別被復(fù)制,并且,對(duì)mysql.*表的更改會(huì)基于此被復(fù)制。例如CREATE USER...語句會(huì)被復(fù)制,但是 INSERT INTO mysql.user...語句則不會(huì)。(也可以通過wsrep_replicate_myisam參數(shù)開啟myisam引擎的 復(fù)制,但這是一個(gè)實(shí)驗(yàn)性的參數(shù))。
2、 由于PXC集群內(nèi)部一致性控制的機(jī)制,事務(wù)有可能被終止,原因如下:集群允許在兩個(gè)節(jié)點(diǎn)上通知執(zhí)行操作同一行的兩個(gè)事務(wù),但是只有一個(gè)能執(zhí)行成功,另一個(gè) 會(huì)被終止,同時(shí)集群會(huì)給被終止的客戶端返回死鎖錯(cuò)誤(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
3、寫入效率取決于節(jié)點(diǎn)中最弱的一臺(tái),因?yàn)镻XC集群采用的是強(qiáng)一致性原則,一個(gè)更改操作在所有節(jié)點(diǎn)都成功才算執(zhí)行成功。

部署環(huán)境: CentOS7.X

1、執(zhí)行 命令 vi /etc/selinux/config

    SELINUX=disabled   #修改該項(xiàng)為disabled

2、執(zhí)行命令 setenforce 0

3、查看防火墻是否開啟 systemctl status firewalld

   如果防火墻是開啟狀態(tài),則開放端口 3306 、4444、4567、4568

    firewall-cmd --add-port=3306/tcp --permanent     #開放了3306端口

    開放完4個(gè)端口后,重新加載防火墻規(guī)則

    firewall-cmd --reload

4、安裝Persona倉庫

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

5、安裝PXC(保證服務(wù)器沒有裝MySQL)卸載MySQL 參考鏈接:https://blog.csdn.net/tjcyjd/article/details/52189182

yum install Percona-XtraDB-Cluster-57

6、開啟PXC服務(wù)

service mysql start

7、查看安裝數(shù)據(jù)庫的臨時(shí)密碼并記住

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

8、登錄MySQL數(shù)據(jù)庫

mysql -u root -p

輸入臨時(shí)密碼

登錄成功后修改密碼

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密碼';

9、停止MySQL服務(wù)

service mysql stop (某些版本使用mysqld)

10、配置節(jié)點(diǎn)

vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

修改配置文件

Cluster connection URL contains IPs of nodes

If no IP is found, this implies that a new cluster needs to be created,

in order to do that you need to bootstrap this node

集群中節(jié)點(diǎn)的IP地址(本機(jī)填最后)

wsrep_cluster_address=gcomm://ip地址,IP地址,IP地址(用,號(hào)隔開)

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

Slave thread to use

wsrep_slave_threads= 8
wsrep_log_conflicts

This changes how InnoDB autoincrement locks are managed and is a requirement for Galera

innodb_autoinc_lock_mode=2

Node IP address

當(dāng)前節(jié)點(diǎn)IP

wsrep_node_address=IP地址

Cluster name

集群名稱

wsrep_cluster_name=pxc-cluster

If wsrep_node_name is not specified, then system hostname will be used

當(dāng)前節(jié)點(diǎn)名稱

wsrep_node_name=pxc-cluster-node-1

pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER

不使用實(shí)驗(yàn)功能

pxc_strict_mode=ENFORCING

SST method

狀態(tài)快照傳輸(sst)方法,官方建議

wsrep_sst_method=xtrabackup-v2

Authentication for SST method

用戶憑證(mysql的用戶名和密碼)

wsrep_sst_auth="用戶名:密碼"

剩下的節(jié)點(diǎn)修改當(dāng)前節(jié)點(diǎn)名、當(dāng)前節(jié)點(diǎn)IP、集群中的節(jié)點(diǎn)IP,其他相同

1---10步驟 每個(gè)節(jié)點(diǎn)都要配置一次

11、初始化集群節(jié)點(diǎn)

其中一個(gè)節(jié)點(diǎn)使用 systemctl start mysql@bootstrap.service 啟動(dòng)

登錄mysql

mysql -u root -p

開啟 wsrep_causal_reads

set wsrep_causal_reads =1;

12、創(chuàng)建配置文件中對(duì)應(yīng)的用戶 所有節(jié)點(diǎn)的IP都要?jiǎng)?chuàng)建

創(chuàng)建用戶: CREATE USER '用戶名'@'localhost' IDENTIFIED BY '密碼';

刷新權(quán)限: GRANT all privileges ON . TO '用戶名'@'localhost' ;

                    FLUSH PRIVILEGES;



創(chuàng)建用戶:    CREATE USER '用戶名'@'當(dāng)前需要訪問數(shù)據(jù)庫的IP地址' IDENTIFIED BY '密碼';  

刷新權(quán)限:   GRANT all privileges ON *.* TO '用戶名'@'當(dāng)前節(jié)點(diǎn)IP地址' ;

                    FLUSH PRIVILEGES;

13、其他節(jié)點(diǎn)使用 service mysql start 啟動(dòng) ,登錄mysql,配置wsrep_causal_reds,set wsrep_causal_reads =1;

14、其他節(jié)點(diǎn)啟動(dòng)成功后在引導(dǎo)節(jié)點(diǎn)(使用 systemctl start mysql@bootstrap.service 命令啟動(dòng)的節(jié)點(diǎn))

驗(yàn)證集群:show status like 'wsrep%';

15、節(jié)點(diǎn)數(shù)據(jù)同步驗(yàn)證

在當(dāng)前節(jié)點(diǎn)創(chuàng)建一個(gè)數(shù)據(jù)庫

CREATE DATABASE percona;

啟動(dòng)其他節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù),進(jìn)去后會(huì)發(fā)現(xiàn)新建的數(shù)據(jù)庫,同理 其他節(jié)點(diǎn)創(chuàng)建的數(shù)據(jù) 當(dāng)前節(jié)點(diǎn)也能看到

注意:服務(wù)的啟動(dòng)和停止要對(duì)應(yīng)

   service mysql stop   ------>  啟動(dòng)時(shí)用service mysql start

或者

    systemctl stop mysql@bootstrap.service   ----->  啟用是用 systemctl start mysql@bootstrap.service 

注意出現(xiàn)如下錯(cuò)誤
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

第一種是把這個(gè)key從這個(gè)源站copy過來,放到/etc/pki/rpm-gpg目錄下

第二種是修改repo文件

vim /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 – $basearch

baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

把gpgcheck=1改為gpgcheck=0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 《Docker環(huán)境下的前后端分離部署與運(yùn)維》課程腳本 [TOC] 一、Docker虛擬機(jī)常用命令 先更新軟件包yu...
    mingminy閱讀 613評(píng)論 0 0
  • 背景 MySQL本身是開源的,有些公司或社區(qū)基于MySQL發(fā)布了新的分支,如有名的MariaDB。在介紹 Perc...
    飛凡的陀螺閱讀 3,006評(píng)論 3 5
  • 我們家一共姊妹五個(gè),我是家中的老大,下面有三個(gè)妹妹,一個(gè)弟弟。二妹從小由外婆撫養(yǎng)長大;三妹一出生就被別...
    岳言言閱讀 557評(píng)論 0 2
  • 在北京學(xué)了兩天皮紋,濟(jì)南學(xué)了兩天閱讀指導(dǎo)師。遇到那么好的老師和同學(xué),毫不吝嗇的傳授知識(shí),分享經(jīng)驗(yàn),大家身上都有很...
    漫漫321閱讀 282評(píng)論 0 0
  • 曾經(jīng)的7班發(fā)生了許多故事。每一個(gè)故事里或許都有在7班生活、學(xué)習(xí)時(shí)的影子,一個(gè)叫葉清芷的女生卻一直令我牽腸掛肚。我將...
    青衫李布衣閱讀 234評(píng)論 0 0