testing-04

semi-sync replication

  • 这又是一篇介绍Semi-sync的文章。

    Semi-sync主库在一定时间内(可配置的超时时间),如果没有收到备库的响应,则会超时从而降级为普通的replication复制。如果超时发生,有时需要查清什么原因导致备库没有及时响应,一方面可以从备库的日志着手,另一方面,如果需要更细致的信息则需要从备库端的网络包查找原因。这里介绍如何分析一个Semi-sync备库响应主库的数据包。

    概述:先使用tcpdump抓取正确(主要是src和dst都正确)的数据包;然后借助wireshark玻璃TCP/IP等层的头信息,仅保留发送的MySQL数据包;再分析MySQL Semi-sync Slave响应的协议。

    1. tcpdump原始数据包

    通过如下tcpdump抓取主机的网络包:

    nohup tcpdump -n -nn -tttt -i bond0 -s 65535 'port 3306 and ((dst host master.host and src host slave.host and len < 100) or (dst host slave.host and src host master.host))' -w tcpdump.ret -C 50 &

    参数简单说明:

    -n 表示ip不要转换为主机名 -nn表示端口号,不要转为为服务名(例如3306会被转换为mysql) -tttt 打印出完成的格式化的时间戳 -C 50 表示抓取的结果放到文件中,文件大小不超过50MB
    2. 使用wireshark找到对应的包

    (more…)

  • 上图先。

    Semi-sync-why

    如果还不了解Semi-sync可以阅读(Manual | 概述

    1. 优点

    当事务返回客户端成功后,则日志一定在至少两台主机上存在。

    MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。

    2. 缺点

    完成单条事务增加了额外的等待延迟,延迟的大小取决于网络的好坏。

    Semi-sync不是分布式事务,主库会在自己完成事务后,等待备库接收事务日志

    3. 主机Crash时的处理

    (more…)

  • 从09年12月份MySQL5.5的第一个Release,再到去年12月的第一个GA,MySQL5.5平均一月一个小版本号的速度在默默更新。该版本最重要的特性目前仍是Semi-sync Replication,之前做了一个概述,这里将继续介绍如何安装、配置Semi-sync,后续还将继续介绍其性能和一些基本的代码实现。

    1. Semi-sync Repication的历史

    Semi-sync最早是由Google实现的一个补丁,代码主要由Mark Callaghan、Wei Li(@Google)等人贡献。Google原本是将需求提给Hekki的,但是后来等不及就自己实现了……。(现在Mark Callaghan已跳到Facebook,除了Google,他曾经还在Informix、Oracle工作过)

    在5.5之后由MySQL Replication Team按照Plugin的方式将代码移植过来,并将Semi-sync独立成MySQL的一个插件,主要代码移植者是Zhenxing He(参考)。

    2. 安装、配置Semi-sync Replication

    在两台主机上安装好MySQL5.5,编译好的插件在目录CMAKE_INSTALL_PREFIX/lib/plugin下(默认是/usr/local/mysql/lib/plugin)。例如这里编译是指定CMAKE_INSTALL_PREFIX为/home/mysql/mysql,则有:

    $pwd
    /home/mysql/mysql/lib/plugin
    $ls -a semisync_*
    semisync_master.so semisync_slave.so

    在主库初次启动时,执行如下语句加载semisync_master插件:

    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;

    备库上则加载semisync_slave插件:

    mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;

    (more…)

  • Linux下MySQL 5.5编译安装

    ·

    之前写过一篇Linux下编译安装MySQL,但是在5.5版本之后MySQL自动化建构工具从GUN Autotools换成了跨平台的Cmake系统,编译和配置和原来有些不同,这里做一个简单的小结。

    1. 安装CMake

    Cmake是跨平台的工具,如果之前就尝试过在Windows上编译MySQL的同学,就应该还记得CMake。

    我的环境是不自带CMake(环境:RHEL5.4,YUM仓库里面没有CMake),所以需要自己安装。安装过程简单、顺利,没有遇到任何依赖问题……:)

    $tar zxf cmake-2.6.4.tar.gz
    $cd cmake-2.6.4
    $./bootstrap
    $make
    $sudo make install

    CMake下载安装参考

    2. CMake编译MySQL 5.5
    tar zxf mysql-5.5.11.tar.g
    cd mysql-5.5.11
    CFLAGS=”-O3″ CXX=gcc
    CXXFLAGS=”-O3 -felide-constructors -fno-exceptions -fno-rtti”
    cmake . -LH|more //CMake下查看MySQL的编译配置
    cmake . -DCMAKE_INSTALL_PREFIX=/home/mysql/mysql -DEXTRA_CHARSETS=all
    make -j 8 //8核并行编译
    make install

    其中”ccmake . -D……”也可直接使用”cmake .”,这样会进入一个简单文本GUI界面进行MySQL编译参数配置;

    另外,原来的AutoTools和现在CMake配置参数的变化,在MySQL Forge的Autotools to CMake Transition Guide中可以查阅详细的对比说明。
    (more…)

  • MySQL 5.5 Semi Sync Replication

    ·

    今天看到MySQL5.5放出了第一个版本MySQL 5.5 Community Edition – Milestone Release,最大的增强莫过于加入了Semi Sync Replication的支持(虽然仍不完善)。

    这里做一个科普,简单介绍一下Semisynchronous Replication: (more…)