ITPub博客

首页 > 数据库 > MySQL > PXC(Percona XtraDB Cluster)集群安装

PXC(Percona XtraDB Cluster)集群安装

原创 MySQL 作者:svoid 时间:2016-04-03 23:00:58 0 删除 编辑

Percona XtraDB Cluster简介

Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster完全兼容MySQL和Percona Server。
Percona XtraDB Cluster提供的特性有:

  • 同步复制,事务要么在所有节点提交或不提交。
  • 多主复制,可以在任意节点进行写操作。
  • 在从服务器上并行应用事件,真正意义上的并行复制。
  • 节点自动配置。
  • 数据一致性,不再是异步复制。
pxc优点:
  • 当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。
  • 无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作。
  • 良好的读负载扩展,任意节点都可以查询。
pxc缺点:
  • 加入新节点,开销大。需要复制完整的数据。
  • 不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。
  • 有多少个节点就有多少重复的数据。

Percona XtraDB Cluster局限性

  • 目前的复制仅仅支持InnoDB存储引擎。任何写入其他引擎的表,包括mysql.*表将不会复制。但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的。
  • DELETE操作不支持没有主键的表。没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集。
  • 在多主环境下LOCK/UNLOCK TABLES不支持。以及锁函数GET_LOCK(), RELEASE_LOCK()…
  • 查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
  • 允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
  • 由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
  • XA事务不支持,由于在提交上可能回滚。
  • 整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
  • 集群节点建议最少3个。
  • 如果DDL语句有问题将破坏集群。

安装Percona XtraDB 集群

  1. shell> tar zxvf Percona-XtraDB-Cluster-5.6.22-72.0.tar.gz
  2. shell> cd Percona-XtraDB-Cluster-5.6.22-72.0
  3. 安装依赖包
  4. shell> yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel
  5. shell> BUILD/compile-pentium64
  6. 默认安装路径/usr/local/mysql/
  7. shell> make && make install
  8. shell> rpm -ivh Percona-XtraDB-Cluster-galera-3-3.14-1.rhel6.x86_64.rpm
  9. 创建数据文件目录
  10. shell> mkdir -p /data/pxc
  11. shell> mv /usr/local/mysql/ /opt/pxc
  12. shell> chown -R mysql.mysql /opt/pxc
  13. shell> chown -R mysql.mysql /data/pxc

配置节点node1:

  1. shell> more /opt/pxc/my.cnf
  2. [mysqld]
  3. socket=/tmp/mysql-node1.sock
  4. port=3307
  5. datadir=/data/pxc
  6. user=mysql
  7. binlog_format=ROW
  8. default-storage-engine=innodb
  9. innodb_autoinc_lock_mode=2
  10. innodb_locks_unsafe_for_binlog=1
  11. query_cache_size=0
  12. query_cache_type=0
  13. bind-address=0.0.0.0
  14. wsrep_provider=/usr/lib64/libgalera_smm.so
  15. wsrep_cluster_address=gcomm://10.106.58.211,10.106.58.212,10.106.58.213
  16. wsrep_cluster_name=my_wsrep_cluster
  17. wsrep_slave_threads=1
  18. wsrep_certify_nonPK=1
  19. wsrep_max_ws_rows=131072
  20. wsrep_max_ws_size=1073741824
  21. wsrep_debug=1
  22. wsrep_convert_LOCK_to_trx=0
  23. wsrep_retry_autocommit=1
  24. wsrep_auto_increment_control=1
  25. wsrep_causal_reads=0
  26. #wsrep_notify_cmd=
  27. # SST method
  28. #wsrep_sst_method=xtrabackup-v2
  29. wsrep_sst_method=rsync
  30. # Authentication for SST method
  31. #wsrep_sst_auth="sstuser:s3cret"
  32. # Node #1 address
  33. wsrep_node_address=10.106.58.211
  34. server-id = 1

启动node1:

  1. shell> /opt/pxc/scripts/mysql_install_db --basedir=/opt/pxc/ --datadir=/data/pxc/ \
  2. --user=mysql --defaults-file=/opt/pxc/my.cnf
  3. shell> /opt/pxc/bin/mysqld_safe --defaults-file=/opt/pxc/my.cnf --wsrep-new-cluster &
  4. shell> /opt/pxc/bin/mysql -u root -S /tmp/mysql-node1.sock
  5. mysql> delete from mysql.user where user = '';
  6. mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO sstuser@'localhost' identified by 's3cret';
  7. mysql> flush privileges;

配置启动节点node2、node3:

node2、node3配置启动同理。

  1. [mysqld]
  2. socket=/tmp/mysql-node1.sock
  3. wsrep_node_address=10.106.58.212
  4. server-id = 2
  5. shell> /opt/pxc/bin/mysqld_safe --defaults-file=/opt/pxc/my.cnf &

检查pxc状态

  1. mysql> show status like 'wsrep%';
  2. +------------------------------+----------------------------------------------------------+
  3. | Variable_name | Value |
  4. +------------------------------+----------------------------------------------------------+
  5. | wsrep_local_state_uuid | 17b9d472-5ace-11e5-b22f-ab14cb9dcc7b |
  6. | wsrep_protocol_version | 7 |
  7. | wsrep_last_committed | 7 |
  8. | wsrep_replicated | 0 |
  9. | wsrep_replicated_bytes | 0 |
  10. | wsrep_repl_keys | 0 |
  11. | wsrep_repl_keys_bytes | 0 |
  12. | wsrep_repl_data_bytes | 0 |
  13. | wsrep_repl_other_bytes | 0 |
  14. | wsrep_received | 3 |
  15. | wsrep_received_bytes | 311 |
  16. | wsrep_local_commits | 0 |
  17. | wsrep_local_cert_failures | 0 |
  18. .
  19. | wsrep_incoming_addresses | 10.106.58.213:3307,10.106.58.212:3307,10.106.58.211:3307 |
  20. | wsrep_evs_delayed | |
  21. | wsrep_evs_evict_list | |
  22. | wsrep_evs_repl_latency | 0/0/0/0/0 |
  23. | wsrep_evs_state | OPERATIONAL |
  24. | wsrep_gcomm_uuid | c21183b0-5acf-11e5-930d-9bfcbb0bb24c |
  25. | wsrep_cluster_conf_id | 5 |
  26. | wsrep_cluster_size | 3 |
  27. | wsrep_cluster_state_uuid | 17b9d472-5ace-11e5-b22f-ab14cb9dcc7b |
  28. | wsrep_cluster_status | Primary |
  29. | wsrep_connected | ON |
  30. | wsrep_local_bf_aborts | 0 |
  31. | wsrep_local_index | 2 |
  32. | wsrep_provider_name | Galera |
  33. | wsrep_provider_vendor | Codership Oy <info@codership.com> |
  34. | wsrep_provider_version | 3.11(r93aca2d) |
  35. | wsrep_ready | ON |
  36. +------------------------------+----------------------------------------------------------+
  37. 58 rows in set (0.01 sec)

简单测试pxc

  1. mysql@node1> create database svoid;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql@node2> use svoid
  4. Database changed
  5. mysql@node2> create table test(id int);
  6. Query OK, 0 rows affected (0.01 sec)
  7. mysql@node3> use svoid
  8. Database changed
  9. mysql@node3> show tables;
  10. +-----------------+
  11. | Tables_in_svoid |
  12. +-----------------+
  13. | test |
  14. +-----------------+
  15. 1 row in set (0.00 sec)
  16. mysql@node3> insert into test select 1;
  17. Query OK, 1 row affected (0.01 sec)
  18. Records: 1 Duplicates: 0 Warnings: 0
  19. mysqlnode2> update test set id = 2 where id = 1;
  20. Query OK, 1 row affected (0.01 sec)
  21. Rows matched: 1 Changed: 1 Warnings: 0
  22. mysqlnode1> alter table test add primary key(id);
  23. Query OK, 1 row affected (0.02 sec)
  24. Records: 1 Duplicates: 0 Warnings: 0
  25. mysqlnode1> select * from test;
  26. +----+
  27. | id |
  28. +----+
  29. | 2 |
  30. +----+
  31. 1 row in set (0.00 sec)
  32. 模拟故障node1宕机
  33. shell> /opt/pxc/bin/mysqladmin -S /tmp/mysql-node1.sock -u root shutdown
  34. mysqlnode2> insert into test select 1;
  35. Query OK, 1 row affected (0.00 sec)
  36. Records: 1 Duplicates: 0 Warnings: 0
  37. mysqlnode2> insert into test select 3;
  38. Query OK, 1 row affected (0.00 sec)
  39. Records: 1 Duplicates: 0 Warnings: 0
  40. 启动node1
  41. shell> /opt/pxc/bin/mysqld_safe --defaults-file=/opt/pxc/my.cnf &
  42. mysqlnode1> select * from test;
  43. +----+
  44. | id |
  45. +----+
  46. | 1 |
  47. | 2 |
  48. | 3 |
  49. +----+
  50. 3 rows in set (0.00 sec)
  51. 可以看出其中一个节点故障不影响其他节点正常使用,启动节点后会自动同步数据

参考:
http://www.ttlsa.com/mysql/mysql-high-availability-with-nginx-and-galera/
http://www.ttlsa.com/mysql/mysqlgalera-multi-master/



来自为知笔记(Wiz)


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29733787/viewspace-2074784/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-07-02

  • 博文量
    60
  • 访问量
    433361