Percona XtraDB Cluster 构建

原创
2016/08/01 16:27
阅读数 212

#Percona XtraDB Cluster 构建

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

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

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

缺点:

  • 由于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 搜索安装即可

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.cnf

Percona XtraDB Cluster原生支持mysql的配置,你可以复制当前mysql的配置到Percona XtraDB Cluster配置中,然后添加相应的集群配置文件即可。

# 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

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部