首页 > 代码库 > 通过Keepalived搭建MYSQL双主模式的高可用集群系统

通过Keepalived搭建MYSQL双主模式的高可用集群系统

通过Keepalived搭建MYSQL双主模式的高可用集群系统

一.MYSQL replication介绍:

     MYSQL replication是MYSQL自身提供的一个主从复制功能,就是一台MYSQL服务器(slave)从另外一台MYSQL服务器(master)上复制日志,然后解析日志应用到自身的过程。MYSQL replication是单向、异步复制。

      MYSQL replication支持链式复制,也就是说slave服务器下还可以再链接slave服务器,同时slave服务器也可以充当master的角色。在MYSQL主从复制中,所有表的更新必须在master服务器上运行,slave服务器仅能提供查询操作。

     优点:

     1,增加了MYSQL应用的健壮性,如果master服务器出现问题,可以随时切换到slave服务器,继续提供服务

     2,可以将MYSQL读写分离,写操作只在master服务器完成,读操作可在多个slave服务器上完成,由于master服务器和slave服务器是保持数据同步的,因此不会对前端业务系统产生影响。同时,通过读写分离,可以大大降低MYSQL的运行负荷。

     3,在网络环境良好,业务量不大的环境中,slave服务器同步数据很快,基本可以实现实时同步,并且,slave服务器在同步过程中不会干扰master服务器。

      MYSQL replication支持多种类型的复制方式,常见的有基于语句的复制,基于行的复制和混合类型的复制。

      1,基于语句的复制:

       MYSQL默认采用基于语句的复制,效率很高。基本方式是:在master服务器上执行的SQL语句,在slave服务器上再次执行同样的语句。而一旦发现没法精确复制时,会自动选择基于行的复制

      2,基于行的复制:

       基本方式为:把master服务器上改变的内容复制过去,而不是把SQL语句在从服务器执行一遍

      3,混合类型的复制:

        是基于以上两种类型发组合,默认采用基于语句的复制,如果发现基于语句的复制无法精确完成,就会采用基于行的复制

二.MYSQL replication实现原理:

    MYSQL replication是一个从master复制到一台或多台slave的异步过程,在master与slave之间实现整个复制过程主要由三个线程来完成,其中一个IO线程在master端,另两个线程(sql线程和io线程)在slave端

      要实现MYSQL replication,首先在master服务器上打开MYSQL的Binary log(产生二进制日志文件)功能,因为整个复制过程实际上就是slave从master端获取该日志,然后在自身上将二进制文件解析为SQL语句并完全顺序地执行SQL语句所记录的各种操作。

     详解:

     1,首先slave上的IO线程连接上master,然后请求从指定日志文件的指定位置或者从最开始的日志位置之后的日志内容

     2,master在接收到来自slave的IO线程请求后,通过自身的IO线程,根据请求信息读取指定日志位置之后的日志信息,并返回给slave端的IO线程,返回信息中除了日志所包含的信息之外,还包括此次返回的信息在master端对应的binary log文件的名称和binary log中的位置

     3,slave的IO线程接收到信息后,将获取到的日志内容一次写入slave端的relay log文件(类似mysql-relay-bin.xxxxx)的最后,并且将读取到的master端的binary log的文件名和位置记录到一个名为master-info的文件中,以便在下一次读取的时候能够迅速定位开始往后读取日志信息的位置

     4,slave的SQL线程在检测到relay log文件中新增加了内容后,会马上解析该relay log文件中的内容,将日志内容解析为sql语句,然后在自身执行这些sql,由于是在master和slave端执行了同样的sql操作,所以两端的数据是完全一样的,至此,整个复制过程结束。

     

   

本文出自 “高好亮” 博客,转载请与作者联系!

通过Keepalived搭建MYSQL双主模式的高可用集群系统