#Percona XtraDB Cluster 构建html
Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案.底层使用Galera插件提供多主支持。应对常见的多写能够是用haproxy直接作代理,减少单节点写压力;多读节点可使用常见的数据库中间件作读写分离。node
##简介 Percona XtraDB Cluster提供的特性有:mysql
缺点:linux
##安装 系统为centos6系,其余安装方式能够参考官方文档。算法
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm yum install Percona-XtraDB-Cluster-56
可能会报socat、libev 搜索安装便可sql
yum install epel-release yum install socat libev 或 rpm -ivh ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm
安装后注意防火墙的配置,须要开启3306, 4444, 4567 ,4568,同时SELinux当前也是不支持的,因此须要关闭,避免节点通讯失败。数据库
yum安装后的数据文件在/var/lib/mysql 配置文件为/etc/my.cnfbootstrap
Percona XtraDB Cluster原生支持mysql的配置,你能够复制当前mysql的配置到Percona XtraDB Cluster配置中,而后添加相应的集群配置文件便可。centos
# percona-xtraDb-cluster setting wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.11.146,192.168.11.194,192.168.11.130,192.168.11.145 wsrep_node_address=192.168.11.145 wsrep_slave_threads=8 wsrep_sst_method=xtrabackup-v2 # Cluster name wsrep_cluster_name=percona-db binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 # Authentication for SST method wsrep_sst_auth="sstuser:7c5d69d8"
对应参数的含义:服务器
写集复制提供库:/usr/lib64/galera3/libgalera_smm.so 写集复制集群地址 当前节点地址(须要配置为当前节点的ip地址) 写集复制slave线程数 写集复制的方法 集群名 二进制日志的格式 默认存储引擎 innodb自动提交的锁模式 写集复制认证的user:password
在全部的集群节点上执行上面的安装步骤,并配置好配置文件。
##启动第一个节点
启动集群以前你须要肯定以哪个节点的数据为基准数据,其余节点将均复制该节点的数据。这个集群崩溃恢复的方式相同,第一次启动一个数据副本数据节点。
这里有个参数wsrep_cluster_address
须要注意,若是在第一启动以前已经设置好,就不要再次编辑wsrep_cluster_address
.
# 集群的第一个节点(拥有数据的父本) [root@percona1 ~]# /etc/init.d/mysql bootstrap-pxc
若是出错能够查看mysql的启动日志,按照日志来排查,启动完成后可登录mysql console查看wsrep_cluster_status
是否为Primary,wsrep_connected, wsrep_ready
是否为ON
mysql> show status like "wsrep_cluster_status"; +----------------------+---------+ | Variable_name | Value | +----------------------+---------+ | wsrep_cluster_status | Primary | +----------------------+---------+ 1 row in set (0.00 sec) mysql> show status like "wsrep_connected"; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | wsrep_connected | ON | +-----------------+-------+ 1 row in set (0.00 sec) mysql> show status like "wsrep_ready"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wsrep_ready | ON | +---------------+-------+ 1 row in set (0.00 sec)
第一个节点启动后须要配置sst同步的用户名密码:
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret'; mysql> GRANT RELOAD,LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql> FLUSH PRIVILEGES;
启动其余节点时,切记在同一时间只启动其中一个节点。在其余须要重启数据库的状况下也必须遵循 若是使用第一个节点的配置文件,只须要修改wsrep_node_address
便可。
# 启动其余节点 [root@percona2 ~]# /etc/init.d/mysql start # 检查状态 mysql> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec | ... | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | ... | wsrep_cluster_size | 3 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | ... | wsrep_ready | ON | +----------------------------+--------------------------------------+ 40 rows in set (0.01 sec)
其余节点启动同第二个节点启动同样。percona-xtraDb-cluster官方推荐的最小集群节点为3个,固然2个也是能够跑的,只不过在故障恢复时2个节点的集群若是使用了sst算法会致使在同步数据时集群不可用。
##新加节点
这里单独提下新加节点的状况。
集群配置好后,wsrep_cluster_address
在配置文件中便设置肯定了,若是新加节点可能会有疑惑,是否须要在集群的每一个节点的配置文件中加上新的节点ip,而后restart每一个节点。 关于这个疑问官方文档有明确的说明。
摘自官方文档:
虽然设置中没有定义全部的集群成员,可是在新加入集群节点的配置中经过wsrep_cluster_name配置适合的集群名. 所以wsrep_cluster_address变量不须要在全部的节点彻底一致,设置wsrep_cluster_name为全部集群节点是最佳实践,由于在重启节点时将尝试wsrep_cluster_name中节点的运行状态。
##测试
测试主要在多点写入的测试,能够在各个节点中作写入测试,而后每一个节点查询,而且观察wsrep_cluster_status,wsrep_connected,wsrep_ready