Kubernetes一键部署一主一从,读写分离,自动切换的mycat+mysql架构,其中mycat配置文件、mysqsl数据文件的volume挂载未涉及,可根据实际情况进行修改。所有代码参照github k8smysqlcluster。后期进行双主双从、mycat高可用的扩展。
1. Mysql复制原理
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
1.1 mysql支持的复制类型:基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时, 会自动选着基于行的复制。
基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
1.2 复制解决的问题
MySQL复制技术有以下一些特点:数据分布 (Data distribution )
负载平衡(load balancing)
备份(Backups)
高可用性和容错行(High availability and failover)
1.3 复制如何工作
整体上来说,复制有3个步骤:master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事