PXC使用到的端口号
3306 数据库对外服务的端口号(视具体情况而定)
4444 请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump
4567 : 组成员之间进行沟通的一个端口号
4568 : 传输IST用的。相对于SST来说的一个增量。
9200:HA健康检查
安装PXC过程中
iptables 禁掉
selinux 也禁掉
PXC工作原理:
节点接收sql 请求后,对于ddl 操作,在commit之前,由wsrep API 调用galera 库进行集群内广播,所有其他节点验证成功后事务在集群所有节点进行提交,反之roll back。pxc 保证整个集群所有数据的强一致性,满足CAP理论中满足:Consistency 和 Availability。
特性如下:
1.同步复制,事务要么在所有节点提交或不提交。
2.多主复制,可以在任意节点进行写操作。
3.在从服务器上并行应用事件,真正意义上的并行复制。
4.节点自动配置。
5.数据一致性,不再是异步复制。
Percona XtraDB Cluster完全兼容MySQL和Percona Server,表现在:
1.数据的兼容性
2.应用程序的兼容性:无需更改应用程序
1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上。
2.每个节点都是普通的mysql/percona服务器,可以将现有的数据库服务器组成集群,反之,也可以将集群拆分成单独的服务器。
3.每个节点都包含完整的数据副本。
优点如下:
1.当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。
2.无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作,不受影响。
3.良好的读负载扩展,任意节点都可以查询。
缺点如下:
1.加入新节点,开销大。需要复制完整的数据。
2.不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。
3.有多少个节点就有多少重复的数据。
最小集群点数
建议的最小集群点数为3,虽然两个节点也能运行,但是无法保证数据的稳定,当两个节点时,任何一个节点处故障,将导致集群无法访问。
最大是小于等于8个。
故障恢复加入集群的过程分析
如果数据不大,用SST传输就行了。
如果数据很大,用rsync来传输。
脑裂
XtaDB Cluster需要使用3个或以上的节点来应对脑裂问题,否则当只有一个节点可用的情况下,将不能提供服务。
假设在系统初始化的时候,一个有三个node节点a,b,c。
假设a先启动(使用bootstrap-pxc方式启动),b然后启动,c再启动。这时候a就是整个系统的PC。并且这时候系统任何两个节点都是互相通信,保证数据的一致性。
假设1. b或者c挂了,这个就很容易理解,因为数据都是一致性的,并不影响其他节点。
假设2. PC挂了,就是a挂了,这个时候系统也能正常运行,虽然PC挂了,有会推荐算法在b,c中选出一个新的PC。
假设3.B和C都挂了,系统为了防止“脑裂”的发生(超过1/2 的节点不能通行则会触发这种情况),会对节点1 降级。这时候A节点将表现为不能进行任何操作(show 这样的操作也是可以的是)。会报“unkown command”的错误。所以官方对系统的配置建议为3个节点以上。
模拟脑裂
kill掉两个节点即可出现。
PCX的局限性
1.仅仅工作再InnoDB引擎上,因此对MySQL库下的系统表的修改不能被复制,但是DDL操作时可以被复制的,所以可以通过creata user、grant等方式操作系统表。
2.不支持在没有主键的表上DELETE操作,select ... limit也会在不同节点上返回不同的值(仅仅是在没有主键的情况下才会limit返回不同的结果集?)。
3.不支持的操作:LOCL/UNLOCL TABLES、lock functings(GET_LOCK()、RELEASE_LOCK()...)。
4.query log日志不能存放在表里面,必须存放在文件。
5.最大的事务大小由wsrep_max_ws_rows、wsrep_max_ws_size定义,LOAD DATA INFILE每10K行提交一次,这种事务将被分割成熟个小的事务(XtraDB cluster自动分割?还是操作时手动分割?)。
6.由于集群是基于乐观的并发控制(optimistic concurrency control),事务冲突的情况可能会在commit阶段发生,当多个节点修改同时同一行数据,只有其中一个节点能够成功,失败的节点将终止,并且返回死锁错误代码 Error:1213 SQLSTATE:40001。
7.不支持XA事务,因为XA事务有可能在commit的时候出现异常发生rollback(参考 http://www.infoq.com/cn/articles/xa-transactions-handle)。
8.整个集群的吞吐量/性能取决于最慢的那个节点,因为需要所有节点上做Certification,同时还取决于节点间的网络性能,因此需要所有节点都有相同的硬件配置,并且网络、磁盘等性能要尽可能的高,例如使用SSD。
9.最小建议的集群节点数为3,为解决脑裂,最多8个节点。
10.如果DDL语句有问题,很可能会破坏整个集群,需要非常特殊的对待DDL语句。