Percona XtraDB Cluster简称:PXC, 是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server 。其包括了Write Set REPlication补丁,使用Galera 库,这是一个针对事务性应用程序的同步多主机复制插件。
优点: 1,同步复制,复制动作是同步的,实际上数据并不是完全同步的,数据的同步存在一个间隙,只能称为虚同步。
2,多master,每一个节点都可以作为master,并将改动发送到其他节点。
3,并行复制,复制可以指定多个线程,并且复制是以事务为单位的,多个事务同时并行推送到所有集群节点。
4,新节点自动部署,只需要修改合适的参数,启动新节点的mysqld进程并成功加入集群后,数据完全自动的部署到新节点。
5,数据一致性,严格的数据一致
6,高可用性,单点故障不影响可用性
7,与传统mysql几乎完全兼容,数据可以直接使用不需要任何转换,程序上也仅仅事务处理机制有变化,并且还可以完全规避
缺点:
1,默认工作在InnoDB引擎表上,因此对其他引擎的表支持的很差,甚至根本不支持,所以不要考虑在PXC上使用MyISAM或者其他的存储引擎
2,所有的表都必须要有主键
3,不支持的操作: LOCK/UNLOCK TABLES、 lock functions (GET_LOCK(), RELEASE_LOCK()... )
4,query log日志不能存放在表里面,必须存放在文件
6,由于集群是基于乐观的并发控制( optimistic concurrency control ),事务冲突的情况可能会在commit阶段发生
7,不支持XA事务,因为XA事务有可能在commit的时候出现异常发生rollback
8,整个集群的吞吐量/性能取决于最慢的那个节点(成本)
9,最小建议的集群节点数为3,否则很容易产生脑裂(成本)
10,加入新节点,开销大,有多少个节点就有多少重复的数据
11,不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上(写放大)
环境规划
服务器IP(CentOS-6.5-x86_64) | 节点名称(hostname) |
192.168.255.143 | node143 |
192.168.255.144 | node144 |
192.168.255.145 | node145 |
前提:
1.关闭防火墙:chkconfig --level 2345 iptables off
2.关闭下selinux: vim /etc/selinux/config 改SELINUX=0
3.改hostname: vim /etc/sysconfig/network 改 HOSTNAME=node143(对应的节点名称)
开始安装
1.下载PXC
wget www.percona.com/redir/downloads/Percona-XtraDB-Cluster/5.5.37-25.10/binary/linux/x86_64/Percona-XtraDB-Cluster-5.5.37-rel35.0-25.10.756.Linux.x86_64.tar.gz
2.安装epel源(socat.x86_64)
a.wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
b.rpm -ivh /path/epel-release-5-4.noarch.rpm
3安装需要用到
yum install –y perl-DBD-MySQL.x86_64 perl-IO-Socket-SSL.noarch socat.x86_64 nc
4.安装percona源
yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
5如果需要使用xtrabackup传送SST还需要安装xtrabackup
yum install -y percona-xtrabackup.x86_64
6.创建目录
mkdir -p /opt/mysql
7.解压PXC
tar -zxf /opt/mysql/Percona-XtraDB-Cluster-5.5.37-rel35.0-25.10.756.Linux.x86_64.tar.gz -C /opt/mysql/
8.软连
ln -s /opt/mysql/Percona-XtraDB-Cluster-5.5.37-rel35.0-25.10.756.Linux.x86_64 /usr/local/mysql
9.创建mysql用户以及组
groupadd mysql
useradd -g mysql -s /sbin/nologin -d /usr/local/mysql mysql
10.环境变量
/etc/profile
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
11.创建mysql需要的基本目录
mkdir -p /data/mysql/mysql_3306
mkdir -p /data/mysql/mysql_3306/data
mkdir -p /data/mysql/mysql_3306/logs
mkdir -p /data/mysql/mysql_3306/tmp
12.权限设置
chown -R mysql:mysql /data/mysql/mysql_3306/
chown -R mysql:mysql /usr/local/mysql/*
13.修改my.cnf
在my.cnf的最后加
#pxc
binlog_format = row #日志格式必须row
default_storage_engine=Innodb #当前节点使用的是innodb存储引擎
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2
wsrep_cluster_name=test #集群名称,所有节点可以配置一样
wsrep_cluster_address=gcomm://192.168.255.144,192.168.255.145,192.168.255.143 #集群内的节点IP地址
wsrep_node_address=192.168.255.143 #当前节点的IP地址
wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so # libgalera_smm.so的绝对路径
wsrep_sst_method=xtrabackup #以xtrabackup方式同步
wsrep_sst_auth=test:test #授权sst方式的用户名和密码
14.初始化
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql_3306/data/ --basedir=/usr/local/mysql/
15.启动文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
16.第一个节点启动
/etc/init.d/mysql bootstrap-pxc #第一个节点必须用bootstrap-pxc方式启动
17.账号管理
清除无效的用户
delete from mysql.user where user!='root' or host!='localhost';
mysql.db对test表做了所有授权,容易存在安全问题
truncate mysql.db;
创建一个独立管理账号
grant all privileges on *.* to 'test'@'%' identified by 'test';
创建一个供xtrabackup创建SST的帐号
grant reload, lock tables, replication client on *.* to 'sst'@'%' identified by 'test';
18.启动第二个节点(按照1-17的方式在另一台服务器上执行)
/etc/init.d/mysql start # 第二个开始的节点启动就不用bootstrap-pxc方式