Percona XtraDB Cluster 初探

Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法。PXC集群以节点组成(推荐至少3节点,后面会讨论两节点的情况),每个节点都是基于常规的MySQL/Percona Server,意味着你可以从集群中分离出某节点单独使用。集群中每个节点都包含完整的数据。

PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(使用了Galera library,一个通用的用于事务型应用的同步、多主复制插件)。

PXC的特性和优点:

同步复制

支持多主复制

支持并行复制

相比其他高可用方案更像真正意义上的高可用

PXC的局限和劣势:

当前版本(5.6.20)的复制只支持InnoDB引擎,其他存储引擎的更改不复制。然而,DDL(Data Definition Language)语句在statement级别被复制,并且,对mysql.*表的更改会基于此被复制。例如CREATE USER…语句会被复制,但是INSERT INTO mysql.user…语句则不会。(也可以通过wsrep_replicate_myisam参数开启myisam引擎的复制,但这是一个实验性的参数)

由于PXC集群内部一致性控制的机制,事务有可能被终止,原因如下:集群允许在两个节点上通知执行操作同一行的两个事务,但是只有一个能执行成功,另一个会被终止,同时集群会给被终止的客户端返回死锁错误(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK))

写入效率取决于节点中最弱的一台,因为PXC集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功

下面从安装部署和功能和性能测试三个方面开始PXC之旅。

安装部署

实验环境:三台server(硬件配置相同),信息如下:

node #1 hostname: percona1 IP: 192.168.1.35 node #2 hostname: percona2 IP: 192.168.1.36 node #3 hostname: percona3 IP: 192.168.1.37

注意:Firewall has been set up to allow connecting to ports 3306, 4444,4567 and 4568
SELinux isdisabled如果不关闭SELinux,启动其他(node1之外)节点时,错误日志里会记录“[ERROR] WSREP:Permission denied”

在三台server安装Percona-XtraDB-Cluster-56

安装epel源
yum install Fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
(包含比较全比较新的软件源。最关键的是包含PreconaXtraDB Cluster所依赖的socat软件)
vi /etc/yum.repos.d/epel.repo (修改epel原配置以可用epel源)

将其中baseurl行的注释去掉,同时将mirror行注释

安装Precona XtraDB Cluster所需要的扩展包,以防在后期配置时候报错
yum install -y cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bisonlibtool ncurses5-devel boost

安装配置Precona 官方yum源
yum install

安装socat
socat is a relay for bidirectional data transfer between two independentdata channels. (Socat是一个在两个独立数据的双向传输之间起到中继作用的软件)

配置好epel源之后,可直接执行 yum install socat*
若无法yum安装socat,则按照以下步骤编译安装

wget .dest-unreach.org/socat/download/socat-1.7.2.4.tar.gz tar zxvf socat-1.7.2.4.tar.gz ./configure Make && make install

安装perl组件(xtrabackup需要的组件)
yum install perl-DBD-MySQL perl-DBI perl-Time-HiRes

安装Percona-XtraDB-Cluster及其相关组件
yum install Percona-XtraDB-Cluster-56 (如下图)

image

初始化Percona-XtraDB-Cluster集群

在任意节点(一般为node1)上执行集群的初始化操作
创建/etc/my.cnf,内容如下

[mysqld] datadir=/var/lib/mysql user=mysql # Path to Galeralibrary wsrep_provider=/usr/lib64/libgalera_smm.so # Cluster connectionURL contains the IPs of node#1, node#2 and node#3----所有节点的ip #第一次启动node1节点时,此处不写各节点IP,需写成下面一行配置 wsrep_cluster_address=gcomm:// #第一次启动node1(初始化集群)完成后,此处需要改成下面一行配置 #wsrep_cluster_address=gcomm://192.168.1.35,192.168.1.36,192.168.1.37 # In order for Galerato work correctly binlog format should be ROW binlog_format=ROW # MyISAM storageengine has only experimental support default_storage_engine=InnoDB # This changes howInnoDB autoincrement locks are managed and is a requirement for Galera innodb_autoinc_lock_mode=2 # Node #1 address----本机ip wsrep_node_address=192.168.1.35 # SST method----节点间同步的方式 wsrep_sst_method=xtrabackup-v2 # Cluster name wsrep_cluster_name=my_CentOS_cluster # Authentication forSST method----来做节点间数据同步的账号密码 wsrep_sst_auth="sstuser:s3cret"

(其他mysql相关参数绝大多数也可以直接在配置文件里添加)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/db5fcbc9a470b4d40aeadf7df23324ce.html