Percona XtraDB Cluster 构建

#Percona XtraDB Cluster 构建html

Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案.底层使用Galera插件提供多主支持。应对常见的多写能够是用haproxy直接作代理,减少单节点写压力;多读节点可使用常见的数据库中间件作读写分离。node

##简介 Percona XtraDB Cluster提供的特性有:mysql

  • 同步复制,事务要么在全部节点提交或不提交。由wsrep API调用galera 库进行集群内广播实现
  • 多主复制,能够在任意节点进行写操做
  • 在从服务器上并行应用事件,真正意义上的并行复制
  • 节点自动配置,使用SST、IST同步实现

缺点:linux

  • 因为DDL需全局验证经过,则集群性能由集群中最差性能节点决定。
  • 为保证一致性,galera老是优先保证数据一致性,在多点并发写时,锁冲突问题严重
  • 新节点加入或延后较大的节点从新加入需全量拷贝数据(sst),做为donor的节点在同步过程当中没法提供读写
  • 数据冗余度为节点数

##安装 系统为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

相关文章
相关标签/搜索