• ADADADADAD

    如何进行MySQL + Heartbeat + DRBD架构部署[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:09:58

    作者:文/会员上传

    简介:

    1、MySQL高可用生成业务需求: 在企业实际生产场景中,一主多从的MySQL数据库架构是最常用的DB架构方案,该架构方案部署简单,维护方便,并且通过配置简单的代理或者通过程序的方式就

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    1、MySQL高可用生成业务需求:

    在企业实际生产场景中,一主多从的MySQL数据库架构是最常用的DB架构方案,该架构方案部署简单,维护方便,并且通过配置简单的代理或者通过程序的方式就可以实现应用服务队主从库的读写分离,且多个从库还可以通过LVS或者Haproxy等代理实现多个从库的负载均衡,分担读的压力,同时排除单点问题。但是MYSQL数据库架构中,不难发现,虽然从库是多个,但是主库仅有一个,也就是说主库一旦宕机,所以写的业务都会终止,而从库宕机1个就没什么影响,那么如何解决这个主库单点的问题呢,其实最简单的方案就是做好监控,然后主库宕机后,由管理人为手工选择最快的从库改为主,然后让其它从库和新的主库同步,这个方案是简单易行的,但是需要人工处理,对有些高要求场合高度不够,那样就需要下面说的MySQL+Heartbeat+DRBD架构方案。

    MySQL+Heartbeat+DRBD架构方案说明:

    正常情况下:

    1、heartbeat通过串口线或者以太网网线直链网卡对对端的服务做监控检查,并负责执行drbd,mysql,vip等资源的自动切换

    2、MYSQL_S作为MYSQL_M的高可用热备,正常情况下MYSQL_M提供一个分区sdb1给MYSQL使用。

    3、物理磁盘做RAID10或者RAID0,根据性能和冗余需求来选择

    4、服务器之间,服务器和交换机直接都是千兆网卡做bongding

    5、应用服务(包括但不限于web)通过VIP访问MYSQL从库,通过不同的VIP访问负载均衡的从库池。

    故障情况下:

    1、MYSQL_S的heartbeat通过串口线或者以太网网线对MYSQL_M做健康检查,发现MYSQL_M挂掉后,自动在MYSQL_S上启动DRBD/MYSQL等服务及负载VIP的动态切换,确保主库业务被正常接管,自动通过对外提供服务

    2、MYSQL_M上的MYSQL在/dev/sdb1分区中,故障后在MYSQL_S上同时实现高可用切换

    3、故障后MYSQL客户端,从库等。通过VIP和MYSQL_S的MYSQL 服务相连,MYSQL对外正常提供服务

    4、当MYSQL_M故障修复后,可以设置自动把自己原来的业务,从MYSQL_S中取回来,但是一般不建议这样做。如果两台服务器之前存在性能的差异,最好也是人工进行切换


    2、MYSQL高可以生产需求描述

    本案例假设有3台MYSQL服务器,他们的IP分别是
    MYSQL_M 10.0.0.3
    MYSQL_S 10.0.0.4
    MYSQL_C 10.0.0.5

    MYSQL_M的MYSQL目录为/data,前端提供的访问VIP是10.0.0.103

    配置目标:一段主MYSQL服务器MYSQL_M宕机,该服务器上的MYSQL和虚拟IP会自动切换当热备服务器MYSQL_S上继续提供服务,从而达到MYSQL高可用宕机后无业务影响的目的

    这里会有一个特别的问题,就是以前的多个从库如何能和新的主库同步,经过实践,通过DRBD的方式同步的MYSQL数据库,以及做从库MYSQL时使用和主库VIP为同步VIP,当主MYSQL宕机后,VIP漂移到热备主MYSQL,默认情况在60秒内,从库就可以连接到新的VIP,从而自动和新的主库同步,这里需要强调的下,通过MYSQL同步做双主的方式,是难以做到主库单机从库和新的主库自动同步的。这也是这个架构的难点。

    提示:本文讲解的MYSQL数据库服务主备高可用模式,对于MYSQL数据库服务高可用,也可以是主主的双向高可用模式。


    3、系统环境
    ##MYSQL_M#主库,主服务器
    eth0:10.0.0.3#管理IP,用于LAN内数据转发
    eth2:172.16.1.3 #MYSQL服务器间心跳连接(直链)
    VIP:10.0.0.103#用于提供对外MYSQL存储系统服务VIP
    ##MYSQL_S#主库的备用服务器
    eth0:10.0.0.4
    eth2:172.16.1.4
    ##MYSQL_C#mysql从库
    eth0:10.0.0.5

    同时在MYSQL_M需要添加一个1G的磁盘,MYSQL_S需要添加一个1.5G的磁盘。测试用

    4、部署前准备

    #要配置主机名和hosts文件.

    主机名称要以uname -n为准
    [root@MYSQL_S ~]# uname -n
    MYSQL_S
    [root@MYSQL_S ~]# uname -m
    x86_64
    ================================
    MYSQL_M
    cp /etc/hosts /etc/hosts.bak
    cp /etc/sysconfig/network /etc/sysconfig/network.bak
    sed -i '$a 10.0.0.3 MYSQL_M' /etc/hosts
    sed -i '$a 10.0.0.4 MYSQL_S' /etc/hosts
    sed -i '/HOSTNAME=/d' /etc/sysconfig/network
    sed -i '/$/aHOSTNAME=MYSQL_M' /etc/sysconfig/network
    ===============================
    MYSQL_S
    sed -i '$a 10.0.0.3 MYSQL_M' /etc/hosts
    sed -i '$a 10.0.0.4 MYSQL_S' /etc/hosts
    sed -i '/HOSTNAME=/d' /etc/sysconfig/network
    sed -i '/$/aHOSTNAME=MYSQL_S' /etc/sysconfig/network
    ############################
    start测试:
    [root@MYSQL_S ~]# ping MYSQL_M
    PING MYSQL_M (10.0.0.3) 56(84) bytes of data.
    64 bytes from MYSQL_M (10.0.0.3): icmp_seq=1 ttl=64 time=0.347 ms
    64 bytes from MYSQL_M (10.0.0.3): icmp_seq=2 ttl=64 time=0.297 ms
    ^C
    --- MYSQL_M ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1424ms
    rtt min/avg/max/mdev = 0.297/0.322/0.347/0.025 ms
    [root@MYSQL_S ~]# ping MYSQL_S
    PING MYSQL_S (10.0.0.4) 56(84) bytes of data.
    64 bytes from MYSQL_S (10.0.0.4): icmp_seq=1 ttl=64 time=0.027 ms
    64 bytes from MYSQL_S (10.0.0.4): icmp_seq=2 ttl=64 time=0.043 ms
    ^C
    --- MYSQL_S ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1226ms
    rtt min/avg/max/mdev = 0.027/0.035/0.043/0.008 ms
    [root@MYSQL_S ~]#
    ===========================
    [root@MYSQL_M ~]# ping MYSQL_S
    PING MYSQL_S (10.0.0.4) 56(84) bytes of data.
    64 bytes from MYSQL_S (10.0.0.4): icmp_seq=1 ttl=64 time=0.720 ms
    64 bytes from MYSQL_S (10.0.0.4): icmp_seq=2 ttl=64 time=0.346 ms
    64 bytes from MYSQL_S (10.0.0.4): icmp_seq=3 ttl=64 time=0.329 ms
    ^C
    --- MYSQL_S ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2150ms
    rtt min/avg/max/mdev = 0.329/0.465/0.720/0.180 ms
    [root@MYSQL_M ~]# ping MYSQL_M
    PING MYSQL_M (10.0.0.3) 56(84) bytes of data.
    64 bytes from MYSQL_M (10.0.0.3): icmp_seq=1 ttl=64 time=0.022 ms
    64 bytes from MYSQL_M (10.0.0.3): icmp_seq=2 ttl=64 time=0.131 ms
    ^C
    --- MYSQL_M ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1388ms
    rtt min/avg/max/mdev = 0.022/0.076/0.131/0.055 ms
    [root@MYSQL_M ~]#
    ###########################end

    #两台服务器都添加下面的心跳路由 生产环境建议加route。现在不加也不影响搭建.
    /sbin/route add -host 172.16.1.4 dev eth2
    /sbin/route add -host 172.16.1.3 dev eth2
    echo '/sbin/route add -host 172.16.1.3 dev eth2' >> /etc/rc.local
    echo '/sbin/route add -host 172.16.1.4 dev eth2' >> /etc/rc.local
    #######################start
    [root@MYSQL_M ~]# ping 172.16.1.4
    PING 172.16.1.4 (172.16.1.4) 56(84) bytes of data.
    64 bytes from 172.16.1.4: icmp_seq=1 ttl=64 time=1.56 ms
    64 bytes from 172.16.1.4: icmp_seq=2 ttl=64 time=0.310 ms
    ^C
    --- 172.16.1.4 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1267ms
    rtt min/avg/max/mdev = 0.310/0.935/1.561/0.626 ms
    [root@MYSQL_M ~]#
    ============================
    [root@MYSQL_S ~]# /sbin/route add -host 172.16.1.3 dev eth2
    [root@MYSQL_S ~]# ping 172.16.1.3
    PING 172.16.1.3 (172.16.1.3) 56(84) bytes of data.
    64 bytes from 172.16.1.3: icmp_seq=1 ttl=64 time=0.391 ms
    ^C
    --- 172.16.1.3 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 897ms
    rtt min/avg/max/mdev = 0.391/0.391/0.391/0.000 ms
    [root@MYSQL_S ~]#

    3、安装heartbeat

    a、下载并安装epel包.两台服务器都要操作
    mkdir -p /home/lvnian/tools && cd /home/lvnian/tools
    wget http://mirrors.opencas.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm -qa |grep epel
    [ epel-release-6-8.noarch.rpm ]&& rpm -ivh epel-release-6-8.noarch.rpm
    rpm -qa |grep epel

    b、安装heartbeat,下面是在CentOS版本系统中部署,.两台服务器都要操作。所有用yum install heartbeat* -y

    yum install heartbeat -y

    c、拷贝ha的配置文件,资源文件以及授权文件到/etc/ha.d/下面
    ll /usr/share/doc/heartbeat-3.0.4/
    cd /usr/share/doc/heartbeat-3.0.4/
    cp ha.cf haresources authkeys /etc/ha.d/

    d、开始配置
    cd /etc/ha.d
    mv ha.cf ha.bak
    mv authkeys authkeys.bak
    mv haresources haresources.bak

    注意点:下面ha.cf、authkeys、haresources这三个文件在主备都是一样的

    ########配置ha.cf
    cat>/etc/ha.d/ha.cf<<eof
    #the start by lvnian 20150881
    debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    #logfacility local1
    keepalive 2
    deadtime 30
    warntime 10
    initdead 60
    #bcast eth2
    mcast eth2 225.0.0.181 694 1 0
    #ucast eth2 172.16.1.4
    auto_failback off #服务器正常后,不接管备用设备资源
    node MYSQL_M
    node MYSQL_S
    crm no
    #the end by lvnian 20150881
    eof
    ####配置authkeys
    cat >/etc/ha.d/authkeys<<eof
    auth 1
    1 sha1 b900cbbdfa0a850444fa3dae47a9d354 #这个字符串是随便写的,但是需要主备都是一样的
    eof
    chmod 600 /etc/ha.d/authkeys
    #####配置haresources
    cat > /etc/ha.d/haresources <<eof
    #lvnian services
    #10.0.0.103 www.etianetian.org
    MYSQL_M IPaddr::10.0.0.103/24/eth0
    #MYSQL_M IPaddr::10.0.0.103/24/eth0 httpd
    #10.0.0.104 bbs.etianetian.org
    MYSQL_S IPaddr::10.0.0.104/24/eth0
    #mysql MYSQL_M mysqlm.etianetian.org
    #MYSQL_M IPaddr::10.0.0.103/24/eth0
    #MYSQL_M IPaddr::10.0.0.103/24/eth0 mysqld
    #mysql slave mysqlm.etianetian.org
    #MYSQL_S IPaddr::10.0.0.104/24/eth0
    eof

    #########

    f、启动heartbeat 服务
    /etc/init.d/heartbeat start
    /etc/init.d/heartbeat stop
    /etc/init.d/heartbeat restart

    g、设置开机自启动heartbeat
    chkconfig heartbeat on

    用ip add 查看vip

    查看 cat /var/log/ha-log日志文件

    检查:出现虚拟VIP才算部署heartbeat成功
    [root@MYSQL_M ~]# ip addr |grep 10.0.0
    inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.103/24 brd 10.0.0.255 scope global secondary eth0
    [root@MYSQL_M ~]#
    ============================
    [root@MYSQL_S ha.d]# ip addr |grep 10.0.0
    inet 10.0.0.4/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.104/24 brd 10.0.0.255 scope global secondary eth0
    [root@MYSQL_S ha.d]#

    出现上面的VIP,代表Heartbeat部署没问题

    5、对磁盘进行分区,这里模拟大于2T硬盘进行分区
    ###MYSQL_M
    parted /dev/sdb mklabel gpt
    yes
    parted /dev/sdb mkpart primary 0 600
    Ignore
    parted /dev/sdb p
    parted /dev/sdb mkpart primary 600 1024
    Ignore
    parted /dev/sdb p
    ###MYSQL_S
    parted /dev/sdb mklabel gpt ##创建一个分区表
    yes
    parted /dev/sdb mkpart primary 0 1024 ##创建一个主分区
    Ignore
    parted /dev/sdb p
    parted /dev/sdb mkpart primary 1024 1500
    Ignore
    parted /dev/sdb p
    ===========================
    [root@MYSQL_M ~]# parted /dev/sdb p
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 1074MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Number Start EndSize File system NameFlags
    1 17.4kB 600MB 600MB primary
    2 600MB 1024MB 424MB primary
    [root@MYSQL_M ~]#
    ===============================
    [root@MYSQL_S ha.d]# parted /dev/sdb p
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 1611MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Number Start EndSizeFile system NameFlags
    1 17.4kB 1024MB 1024MB primary
    2 1024MB 1500MB 476MBprimary
    [root@MYSQL_S ha.d]#
    ================================

    6、正式开始部署DRBD。两台服务器都要部署。操作相同
    mkdir -p /home/lvnian/tools/
    cd /home/lvnian/tools/
    export LC_ALL=C
    echo $LC_ALL
    cd /home/lvnian/tools/
    wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
    ll drbd-8.4.4.tar.gz
    tar xf drbd-8.4.4.tar.gz
    cd drbd-8.4.4
    ./configure --prefix=/application/drbd-8.4.4 --with-km --with-heartbeat --sysconfdir=/etc/
    make KDIR=/usr/src/kernels/$(uname -r)
    make install

    ##加载drbd到内核
    lsmod |grep drbd
    modprobe drbd
    lsmod |grep drbd

    #这个加载,在重启之后失效,可以把它放在rc.local中。但也可以用heartbeat挂载

    ##设置开机自启动挂载drbd
    echo 'modprobe drbd' >>/etc/rc.local

    ##配置drbd.conf 两个服务去的配置文件时一样的
    cat>/etc/drbd.conf <<eof
    global {
    usage-count no;
    }
    common {
    syncer {
    rate 10M;
    verify-alg crc32c;
    }
    }
    resource data {
    protocol C;
    disk{
    on-io-error detach;
    }
    on MYSQL_M {
    device/dev/drbd0;
    disk /dev/sdb1;
    address 10.0.0.3:7788;
    meta-disk /dev/sdb2[0];
    }
    on MYSQL_S {
    device/dev/drbd0;
    disk /dev/sdb1;
    address 10.0.0.4:7788;
    meta-disk /dev/sdb2[0];
    }
    }
    eof
    cat /etc/drbd.conf
    #######初始化话meta data分区
    drbdadm create-md data
    ##drbd 启动
    mkdir -p /application/drbd-8.4.4/var/run/drbd
    drbdadm up data
    cat /proc/drbd
    ##################################################33
    报错:
    [root@DRBD2 ~]# drbdadm up data
    /application/drbd-8.4.4/var/run/drbd: No such file or directory
    /application/drbd-8.4.4/var/run/drbd: No such file or directory
    [root@DRBD2 ~]#
    解决:
    mkdir -p /application/drbd-8.4.4/var/run/drbd
    drbdadm up data

    #指定其中一台为主drbd(注意。选其中一台为主)

    drbdadm -- --overwrite-data-of-peer primary data

    #格式化分区:
    mkfs.ext4 -b 4096 /dev/drbd0
    tune2fs -c -1 /dev/drbd0

    #挂载分区:

    mkdir /data

    mount /dev/drbd0 /data ##用drbd0挂载,而不是用/dev/sdb2物理分区挂载。

    注意:仅仅是在主drbd中挂载,但是需要分别在进行主备切换,看能不能都成功进行挂载,只要能手工切换准备,并且能成功挂载,才算成功。才能继续下面的整合。

    #修改heartbeat,也就是仅仅修改这个文件就可以了,其他不用变
    cat >/etc/ha.d/haresources<<eof
    #lvnian services
    #10.0.0.103 www.etianetian.org
    MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4
    #MYSQL_M IPaddr::10.0.0.103/24/eth0 httpd
    #10.0.0.104 bbs.etianetian.org
    MYSQL_S IPaddr::10.0.0.104/24/eth0
    #mysql MYSQL_M mysqlm.etianetian.org
    #MYSQL_M IPaddr::10.0.0.103/24/eth0
    #MYSQL_M IPaddr::10.0.0.103/24/eth0 mysqld
    #mysql slave mysqlm.etianetian.org
    #MYSQL_S IPaddr::10.0.0.104/24/eth0
    eof
    ===================================================

    ##解析下面命令:

    MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

    上面命令相对于依次在主节点上执行下面命令,如果主节点宕机了,就依次在被节点上执行
    /etc/ha.d/resource.d/IPaddr 10.0.0.103/24/eth0 start/stop
    /etc/ha.d/resource.d/drbddisk data start/stop
    /etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start/stop

    依次在主备上单独在命令行上面执行上面的命令。如果都能成功,那就可以用heartbeat使用了。

    注意drbd需要在up状态在执行上面的命令。也就是先执行drbdadm up data 再执行上面的命令

    #在重启heartbeat之前,必须把drbd的给启动起来,可以都是从
    /etc/init.d/heartbeat stop
    /etc/init.d/heartbeat restart

    用下面命令,查看是否成功。之后左右重启服务器,切换主备。和用命令切换主备,让其能正常切换,才算成功
    df
    cat /proc/drbd
    /usr/share/heartbeat/hb_standby
    /usr/share/heartbeat/hb_takeover

    ##注意要drbd设置开启自启动,只有设置开启自启动,heartbeat才能管理他,不然他无法挂载/dev/drbd0/,因为开机的是否,如果drbd不启动,就不存在/dev/drbd0分区。

    所以heartbeat和drbd都要设置开机自启动。

    但是在生产环境中,最好还是不要设置drbd和heartbeat开启自启动,我们仅仅需要让主服务故障的时候能够切换到备用设备就好了。这时候主的修复,最好还是人工介入。

    但是这个实验为了能够体现主备可以相互接管等,在服务器出现故障重启,也能正常接管,所以设置了开启自启动

    对于heartbeat配合drbd联合调试小结

    1、主或备节点有heartbeat控制的资源的启动顺序是相同,资源启动顺序为

    a、vip的启动

    b、drbd启动和设置

    c、drbd分区的挂载

    2、发生切换时主或备节点释放资源的顺序是相同,但是和上面启动的顺序是相反的。

    a、drbd分区的卸载

    b、drbd服务角色等变为slave

    c、vip的停止

    所以/etc/ha.d/haresources里面的资源顺序是不可以表的,必须如下:

    MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

    故障解决思路:

    出现故障,就根据分别执行下面命令,看日志,看哪里出错,之后进行处理
    /etc/ha.d/resource.d/IPaddr 10.0.0.103/24/eth0 start/stop
    /etc/ha.d/resource.d/drbddisk data start/stop
    /etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start/stop

    ##########安装MySQL

    下面是一键安装mysql脚本,要一键安装成功的前提是,必须把

    在/home/lvnian/tools/目录下存在mysql-5.5.32-linux2.6-x86_64.tar.gz、data-mysql.cnf.tar.gz、这两个包。

    一个是mysql的软件包,一个是mysql的配置文件包。

    mysql的配置包内容如下
    [root@MYSQL_M tools]# vim mysql.simple.sh
    #!/bin/sh
    #一键安装单实例mysql
    #xiaogao 20190921
    #创建相关mysql用户
    groupadd mysql
    useradd -s /sbin/nologin -g mysql -M mysql
    tail -1 /etc/passwd
    #安装mysql依赖库
    yum -y install ncurses-devel
    #开启安装mysql,记得先上传安装包到/home/lvnian/tools/
    cd /home/lvnian/tools/
    tar zxf mysql-5.1.72.tar.gz
    cd mysql-5.1.72
    ./configure \
    --prefix=/application/mysql5.1.72 \
    --with-unix-socket-path=/application/mysql5.1.72/tmp/mysql.sock \
    --localstatedir=/application/mysql5.1.72/data \
    --enable-assembler \
    --enable-thread-safe-client \
    --with-mysqld-user=mysql \
    --with-big-tables \
    --without-debug \
    --with-pthread \
    --enable-assembler \
    --with-extra-charsets=complex \
    --with-readline \
    --with-ssl \
    --with-embedded-server \
    --enable-local-infile \
    --with-plugins=partition,innobase \
    --with-mysqld-ldflags=-all-static \
    --with-client-ldflags=-all-static
    #--with-plugin-PLUGIN \
    make && make install
    echo $?
    #制作软连接:
    ln -s /application/mysql5.1.72 /application/mysql
    #创建msyql数据库文件
    cd /home/lvnian/tools/mysql-5.1.72/support-files/
    ls my*.cnf -l
    /bin/cp my-small.cnf /etc/my.cnf
    mkdir /application/mysql/data -p
    chown -R mysql.mysql /application/mysql/data/
    #初始化数据库
    /application/mysql/bin/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql
    #启动mysql数据库
    #/application/mysql/bin/mysqld_safe &
    #启动方法2
    echo "-----------启动方法mysql 2---------------"
    cp /home/lvnian/tools/mysql-5.1.72/support-files/mysql.server /etc/init.d/mysqld
    chmod 700 /etc/init.d/mysqld
    /etc/init.d/mysqld restart
    sleep 5
    netstat -lnt|grep 3306
    lsof -i :3306
    #设置mysql命令全局使用路径
    echo 'PATH=$PATH:/application/mysql/bin' >> /etc/profile
    source /etc/profile
    which mysql
    mysql
    [root@MYSQL_M tools]#
    ########################################################################

    ###测试看是否安装成功
    [root@MYSQL_M tools]# netstat -lntup|grep 3306
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 47525/mysqld
    [root@MYSQL_M tools]# /etc/init.d/mysqld restart
    Shutting down MySQL.. SUCCESS!
    Starting MySQL. SUCCESS!
    [root@MYSQL_M tools]# netstat -lntup|grep 3306
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 47742/mysqld
    [root@MYSQL_M tools]#
    ######安装成功mysql

    修改MYSQL数据库的数据目录

    因为的drbd要挂载到/data目录上,所以我需要把上面的mysql数据目录移除。重新初始化数据库文件到/data目录,同时要确保/data目录现在已经挂载到drbd0上操作如下

    df
    [root@MYSQL_M ~]# df
    Filesystem1K-blocksUsed Available Use% Mounted on
    /dev/sda3 11150604 2498092 8086088 24% /
    tmpfs247112 0247112 0% /dev/shm
    /dev/sda1198337 29670158427 16% /boot
    /dev/drbd0576696 38308509092 3% /data

    《=====此时/dev/drbd0已经挂载到/data目录

    [root@MYSQL_M ~]#
    /etc/init.d/mysqld stop
    mv /application/mysql/data /tmp/
    /application/mysql/bin/mysql_install_db --basedir=/application/mysql --datadir=/data --user=mysql

    ##执行上面初始数据库目录脚本时,必须要把drbd的/dev/drbd0 挂载到/data 目录上

    初始化数据目录到/data目录后,直接用脚本启动数据库会出现下面错误
    /etc/init.d/mysqld start
    [root@MYSQL_M ~]# /etc/init.d/mysqld start
    Starting MySQL. ERROR! Manager of pid-file quit without updating file.
    [root@MYSQL_M ~]#

    上面的故障解决:
    修改/etc/init.d/mysqld 启动目录的47 行,修改为如下内容:
    47 datadir=/data
    或者用sed替换,命令如下:
    sed -i 's#^datadir=#datadir=/data#' /etc/init.d/mysqld
    =====================
    /etc/init.d/mysqld start
    netstat -lntup |grep 3306
    =====================
    [root@MYSQL_M ~]# sed -i 's#^datadir=#datadir=/data#' /etc/init.d/mysqld
    [root@MYSQL_M ~]# /etc/init.d/mysqld start
    Starting MySQL. SUCCESS!
    [root@MYSQL_M ~]# netstat -lntup|grep 3306
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 48830/mysqld
    [root@MYSQL_M ~]#
    [root@MYSQL_M ~]# df
    Filesystem1K-blocksUsed Available Use% Mounted on
    /dev/sda3 11150604 2498092 8086088 24% /
    tmpfs247112 0247112 0% /dev/shm
    /dev/sda1198337 29670158427 16% /boot
    /dev/drbd0576696 38308509092 7% /data
    [root@MYSQL_M ~]#
    [root@MYSQL_M ~]# ls /data/
    a1 a10 a2 a3 a4 a5 a6 a7 a8 a9 ibdata1 ib_logfile0 ib_logfile1 lost+found mysql MYSQL_M.err MYSQL_M.pid test

    注意 两台mysql的数据目录都要改为/data。确保此时的/data目录已经是挂载到drbd0上的应为我们通过heartbeat漂移到备用mysql服务器,也会挂载到/data目录下,所以我们必要要在这两台服务器上面测试把数据目录改到/data目录下,依旧可以正常启动mysql服务。

    其实我们可以也可以直接用mv 命令,把源数据文件/application/mysql/data 到 /data 里面,再修改mysql启动脚本即可。操作如下:


    netstat -lntup|grep 3306
    /etc/init.d/mysqld stop
    netstat -lntup|grep 3306
    mv /application/mysql/data /
    sed -i 's#^datadir=#datadir=/data#' /etc/init.d/mysqld
    /etc/init.d/mysqld start
    netstat -lntup|grep 3306
    ==========================================
    [root@MYSQL_S tools]# netstat -lntup|grep 3306
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 48234/mysqld
    [root@MYSQL_S tools]#
    [root@MYSQL_S tools]# /etc/init.d/mysqld stop
    Shutting down MySQL. SUCCESS!
    [root@MYSQL_S tools]# netstat -lntup|grep 3306
    [root@MYSQL_S tools]# mv /application/mysql/data /
    mv: overwrite `/data'? y
    [root@MYSQL_S tools]# sed -i 's#^datadir=#datadir=/data#' /etc/init.d/mysqld
    [root@MYSQL_S tools]# /etc/init.d/mysqld start
    Starting MySQL. SUCCESS!
    [root@MYSQL_S tools]# netstat -lntup|grep 3306
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 48396/mysqld
    [root@MYSQL_S tools]#

    因为我们需要实现的是高可用,所以只需要只要一台数据文件/data。

    所以现在我们需要做的是把备用服务器也就是10.0.0.4服务器的/data目录移走。

    以后通过drbd漂移挂载/data 目录(mount /dev/drbd0 /data )存储数据

    把备用服务器的/data 欲走后,备用服务器如果没有接管主服务器它将无法启动.在备服务器,也就是10.0.0.4上操作
    mkdir /tmp/data
    mv /data/* /tmp/data
    /etc/init.d/mysqld start
    =====================
    [root@MYSQL_S tools]# /etc/init.d/mysqld start
    Starting MySQL.. ERROR! Manager of pid-file quit without updating file.
    [root@MYSQL_S tools]#

    发送此时把/data目录的内容移走之后,mysql数据库无法正常启动

    ##测试,把备份服务器上的drbd停止,挂载/dev/drbd0到/data 目录,让其能正常启动。只有正常启动才能,让heartbeat管理主库mysql的高可用
    ##命令如下:
    pkill mysql
    pkill mysqld
    drbdadm create-md data
    drbdadm down data
    drbdadm create-md data
    drbdadm up data
    cat /proc/drbd
    drbdadm down data
    mkdir /data
    mount /dev/sdb1 /data
    df
    ll /data/
    pkill mysql
    pkill mysqld
    ps -ef|grep mysql
    netstat -lntup|grep 3306
    /etc/init.d/mysqld start
    netstat -lntup
    netstat -lntup|grep 330
    ==============================
    [root@MYSQL_S ~]# drbdadm down data
    [root@MYSQL_S ~]#
    [root@MYSQL_S ~]# mkdir /data
    [root@MYSQL_S ~]#
    [root@MYSQL_S ~]# mount /dev/sdb1 /data
    [root@MYSQL_S ~]# df
    Filesystem1K-blocksUsed Available Use% Mounted on
    /dev/sda3 11150604 2513892 8070288 24% /
    tmpfs247112 0247112 0% /dev/shm
    /dev/sda1198337 29670158427 16% /boot
    /dev/sdb1576696 38304509096 7% /data
    [root@MYSQL_S ~]# ll /data/
    total 20508
    -rw-rw---- 1 mysql mysql 10485760 Nov 5 09:48 ibdata1
    -rw-rw---- 1 mysql mysql 5242880 Nov 5 09:54 ib_logfile0
    -rw-rw---- 1 mysql mysql 5242880 Nov 4 23:55 ib_logfile1
    drwx------ 2 mysql mysql4096 Nov 4 23:55 mysql
    -rw-r----- 1 mysql mysql3683 Nov 5 09:54 MYSQL_M.err
    -rw-rw---- 1 mysql mysql5 Nov 5 09:54 MYSQL_M.pid
    -rw-r----- 1 mysql mysql6190 Nov 5 09:19 MYSQL_S.err
    -rw-rw---- 1 mysql mysql6 Nov 5 00:45 MYSQL_S.pid
    drwx------ 2 mysql mysql4096 Nov 4 23:55 test
    [root@MYSQL_S ~]#
    [root@MYSQL_S ~]# pkill mysql
    [root@MYSQL_S ~]# pkill mysqld
    [root@MYSQL_S ~]# ps -ef|grep mysql
    root61189 50623 0 09:56 pts/100:00:00 grep mysql
    [root@MYSQL_S ~]# netstat -lntup|grep 3306
    [root@MYSQL_S ~]# /etc/init.d/mysqld start
    Starting MySQL SUCCESS!
    [root@MYSQL_S ~]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign AddressState PID/Program name
    tcp0 0 0.0.0.0:1110.0.0.0:* LISTEN 1075/rpcbind
    tcp0 0 0.0.0.0:53845 0.0.0.0:* LISTEN 1093/rpc.statd
    tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1243/sshd
    tcp0 0 127.0.0.1:250.0.0.0:* LISTEN 1551/master
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 61313/mysqld
    tcp0 0 :::111 :::*LISTEN 1075/rpcbind
    tcp0 0 :::37716:::*LISTEN 1093/rpc.statd
    tcp0 0 :::22 :::*LISTEN 1243/sshd
    tcp0 0 ::1:25 :::*LISTEN 1551/master
    udp0 0 0.0.0.0:1110.0.0.0:* 1075/rpcbind
    udp0 0 225.0.0.181:6940.0.0.0:* 51656/heartbeat: wr
    udp0 0 0.0.0.0:8260.0.0.0:* 1075/rpcbind
    udp0 0 0.0.0.0:55103 0.0.0.0:* 51656/heartbeat: wr
    udp0 0 0.0.0.0:68 0.0.0.0:* 918/dhclient
    udp0 0 127.0.0.1:845 0.0.0.0:* 1093/rpc.statd
    udp0 0 0.0.0.0:53339 0.0.0.0:* 1093/rpc.statd
    udp0 0 :::111 :::*1075/rpcbind
    udp0 0 :::826 :::*1075/rpcbind
    udp0 0 :::56276:::*1093/rpc.statd
    [root@MYSQL_S ~]# netstat -lntup|grep 330
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 61313/mysqld
    [root@MYSQL_S ~]#

    注意:切换到备用服务器之后,无法挂载,注意/data/目录的属主问题,一定要把/data属主和UID设置相同

    根据上面的操作,可以知道备用mysql数据库用主mysql数据库的数据文件,能够正常启动。

    测试备库可以成功使用主mysql数据库的数据文件,下面把备库的drbd正常启动起来


    /etc/init.d/mysqld stop
    umount /data
    netstat -lntup|grep 330
    ps -ef|grep mysql
    drbdadm up data
    cat /proc/drbd
    ================================
    [root@MYSQL_S ~]# umount /data
    [root@MYSQL_S ~]# !net
    netstat -lntup|grep 330
    [root@MYSQL_S ~]# !ps
    ps -ef|grep mysql
    root61384 50623 0 10:01 pts/100:00:00 grep mysql
    [root@MYSQL_S ~]# drbdadm up data
    [root@MYSQL_S ~]# !cat
    cat /proc/drbd
    version: 8.4.4 (api:1/proto:86-101)
    GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@MYSQL_S, 2015-11-04 22:59:05
    0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:12 dw:12 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    [root@MYSQL_S ~]#
    ================================

    下面用heartbeat管理drbd和mysql数据库,

    #####实现mysql自动接管

    ##操作需要在两个服务器内进行
    cat >/etc/ha.d/haresources<<eof
    #gao services
    #10.0.0.103 www.etianetian.org
    MASTER IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysqld
    #MASTER IPaddr::10.0.0.103/24/eth0 httpd
    #10.0.0.104 bbs.etianetian.org
    MYSQL_S IPaddr::10.0.0.104/24/eth0
    #mysql master mysqlm.etianetian.org
    #MASTER IPaddr::10.0.0.103/24/eth0
    #MASTER IPaddr::10.0.0.103/24/eth0 mysqld
    #mysql slave mysqlm.etianetian.org
    #MYSQL_S IPaddr::10.0.0.104/24/eth0
    eof

    ##把启动mysql的文件放到/etc/ha.d/resource.d/,并且授予执行权限
    cp /mysql /etc/ha.d/resource.d/
    chmod +x /etc/ha.d/resource.d/mysql
    ll /etc/ha.d/resource.d/mysql

    #####查看备用服务器是否启动mysql
    [root@MYSQL_S ~]# lsof -i :3306
    [root@MYSQL_S ~]# netstat -lnt|grep 3306
    ###把heartbeat关闭
    /etc/init.d/heartbeat stop

    ##查看maste服务器现在的转态
    [root@MASTER tools]# netstat -lnt|grep 3306
    [root@MASTER tools]# df
    Filesystem1K-blocksUsed Available Use% Mounted on
    /dev/sda3 11150604 3886464 6697716 37% /
    tmpfs247112 0247112 0% /dev/shm
    /dev/sda1198337 29670158427 16% /boot
    [root@MASTER tools]# ip add |grep 10.0.0
    inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
    [root@MASTER tools]# df
    Filesystem1K-blocksUsed Available Use% Mounted on
    /dev/sda3 11150604 3886464 6697716 37% /
    tmpfs247112 0247112 0% /dev/shm
    /dev/sda1198337 29670158427 16% /boot
    [root@MASTER tools]#
    启动heartbeat
    /etc/init.d/heartbeat start

    用下面命令,查看是否成功。之后左右重启服务器,切换主备。和用命令切换主备,让其能正常切换,才算成功
    df
    cat /proc/drbd
    /usr/share/heartbeat/hb_standby
    /usr/share/heartbeat/hb_takeover

    这里就不列举具体的切换过程了,就用上面的命令在主备中切换。看能否切换成功。

    切换延迟大概在10秒左右

    #####配置mysql主从同步

    配置mysql主从同步,用mysql_c,ip为:10.0.0.5作为mysql数据库的从库。

    其中mysql的安装和上面的一样,也就是用上面的脚本一键安装即可。数据目录保留为原目录即可。

    主数据上面操作(也就是需要在两台主mysql服务器上操作)

    开启主数据的binlog参数,和设置server-id
    egrep "server-id|log-bin" /etc/my.cnf
    sed -i 's%#log-bin=mysql-bin%log-bin=mysql-bin%g' /etc/my.cnf
    egrep "server-id|log-bin" /etc/my.cnf
    =======================================
    [root@MYSQL_S ~]# egrep "server-id|log-bin" /etc/my.cnf
    server-id = 1
    #log-bin=mysql-bin
    [root@MYSQL_S ~]# sed -i 's%#log-bin=mysql-bin%log-bin=mysql-bin%g' /etc/my.cnf
    [root@MYSQL_S ~]# egrep "server-id|log-bin" /etc/my.cnf
    server-id = 1
    log-bin=mysql-bin
    [root@MYSQL_S ~]#
    =======================================

    重启数据库
    /etc/init.d/mysqld restart
    netstat -lntup|grep 3306
    ########################################
    [root@MYSQL_S ~]# /etc/init.d/mysqld restart
    Shutting down MySQL..... SUCCESS!
    Starting MySQL. SUCCESS!
    [root@MYSQL_S ~]# netstat -lntup|grep 3306
    tcp0 0 0.0.0.0:33060.0.0.0:* LISTEN 904/mysqld
    [root@MYSQL_S ~]#
    ########################################

    查看是否记录bin_log日志
    [root@MYSQL_S ~]# ll /data/
    total 20524
    -rw-rw---- 1 mysql mysql 10485760 Nov 5 10:48 ibdata1
    -rw-rw---- 1 mysql mysql 5242880 Nov 5 10:48 ib_logfile0
    -rw-rw---- 1 mysql mysql 5242880 Nov 4 23:55 ib_logfile1
    drwx------ 2 mysql mysql4096 Nov 4 23:55 mysql
    -rw-rw---- 1 mysql mysql 106 Nov 5 10:48 mysql-bin.000001##有这个,证明在记录主从同步
    -rw-rw---- 1 mysql mysql 19 Nov 5 10:48 mysql-bin.index
    -rw-r----- 1 mysql mysql8427 Nov 5 10:29 MYSQL_M.err
    -rw-r----- 1 mysql mysql9010 Nov 5 10:48 MYSQL_S.err
    -rw-rw---- 1 mysql mysql4 Nov 5 10:48 MYSQL_S.pid
    drwx------ 2 mysql mysql4096 Nov 4 23:55 test
    [root@MYSQL_S ~]#
    ##########################################
    在主数据中创建测试用的数据库和表。
    mysql
    create database lvnian;
    use lvnian;
    create table test(
    id int(4) not null auto_increment,
    name char(20) not null,
    primary key(id)
    );
    flush privileges;
    quit;
    mysql -uroot -e "use lvnian; select * from test;"
    for n in `seq 100`;do mysql -uroot -e "use lvnian;insert test values($n,'lvnian$n'); " ;done;
    mysql -uroot -e "use lvnian; select * from test;"
    ################################################

    查看是否开启binlog
    [root@MYSQL_S ~]# mysql -uroot -e "show variables like 'log_bin'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_bin | ON|
    +---------------+-------+
    [root@MYSQL_S ~]#

    #######

    创建用于同步数据的账号rep
    mysql> grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'lvnian123456';
    Query OK, 0 rows affected (0.00 sec)
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    =========
    或者用下面命令:
    mysql -uroot -e "grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'lvnian123456'; flush privileges;"
    mysql -uroot -e "select user,host from mysql.user;" |grep rep
    ------
    [root@MYSQL_S ~]# mysql -uroot -e "select user,host from mysql.user;" |grep rep
    rep10.0.0.%
    [root@MYSQL_S ~]#

    锁表
    mysql> flush tables with read lock;
    Query OK, 0 rows affected (0.00 sec)
    或者用下面命令:
    mysql -uroot -e "flush tables with read lock;"

    查看当前日志名称和位置
    mysql -uroot -e " show master status;"
    mysql -uroot -e "show master logs;"
    ########################################
    [root@MYSQL_S ~]# mysql -uroot -e " show master status;"
    +------------------+----------+--------------+------------------+
    | File| Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |10447 | | |
    +------------------+----------+--------------+------------------+
    [root@MYSQL_S ~]# mysql -uroot -e "show master logs;"
    +------------------+-----------+
    | Log_name| File_size |
    +------------------+-----------+
    | mysql-bin.000001 |10447 |
    +------------------+-----------+
    [root@MYSQL_S ~]#
    ######################################

    备份当前主数据库的数据

    另开一个窗口
    mysqldump -uroot -A -B -F --master-data=2 --events | gzip > /tmp/mysql_bak.$(date +%F).sql.gz

    ##################
    [root@MYSQL_S ~]# mysqldump -uroot -A -B -F --events --master-data=2 | gzip > /tmp/mysql_bak.$(date +%F).sql.gz
    [root@MYSQL_S ~]# ll /tmp/
    total 148
    drwxr-xr-x 4 mysql mysql 4096 Nov 5 09:43 data
    -rw-r--r-- 1 root root 145589 Nov 5 11:05 mysql_bak.2015-11-05.sql.gz
    [root@MYSQL_S ~]#

    给主数据解锁
    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)
    或者:
    mysql -uroot -e " unlock tables;"
    ###############################################

    继续往主数据写数据


    for n in `seq 100 150`;do mysql -uroot -e "use lvnian;insert test values($n,'lvnian$n'); " ;done;
    mysql -uroot -e "use lvnian; select * from test;"
    ###############################################

    启动备数据也就是从库(10.0.0.5)


    /etc/init.d/mysqld restart
    [root@MYSQL_C ~]# /etc/init.d/mysqld restart
    Shutting down MySQL.... SUCCESS!
    Starting MySQL. SUCCESS!
    [root@MYSQL_C ~]#
    ##########################################

    把备份数据备份到备数据
    scp root@10.0.0.4:/tmp/mysql_bak* .
    ls
    cp mysql_bak.2015-11-05.sql.gz /tmp/
    gzip -d mysql_bak.2015-11-05.sql.gz
    mysql -uroot < mysql_bak.2015-11-05.sql
    mysql -uroot -e "show databases;"
    mysql -uroot -e "use lvnian;select * from test;"
    =========================================
    [root@MYSQL_C ~]# scp root@10.0.0.4:/tmp/mysql_bak* .
    root@10.0.0.4's password:
    mysql_bak.2015-11-05.sql.gz100% 142KB 142.2KB/s 00:00
    [root@MYSQL_C ~]# ls
    anaconda-ks.cfg chu.sh gao.txt hosts install.log install.log.syslog mysql_bak.2015-11-05.sql.gz
    [root@MYSQL_C ~]#
    ##########
    [root@MYSQL_C ~]# gzip -d mysql_bak.2015-11-05.sql.gz
    [root@MYSQL_C ~]# mysql -uroot < mysql_bak.2015-11-05.sql
    [root@MYSQL_C ~]# mysql -uroot -e "show databases;"
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | lvnian|
    | mysql |
    | test |
    +--------------------+
    [root@MYSQL_C ~]# mysql -uroot -e "use lvnian;select * from test;"
    +-----+-----------+
    | id | name |
    +-----+-----------+
    | 1 | lvnian1 |
    | 2 | lvnian2 |
    | 3 | lvnian3 |
    | 4 | lvnian4 |
    ....
    ....
    ....
    | 95 | lvnian95 |
    | 96 | lvnian96 |
    | 97 | lvnian97 |
    | 98 | lvnian98 |
    | 99 | lvnian99 |
    | 100 | lvnian100 |
    +-----+-----------+
    [root@MYSQL_C ~]#
    全部恢复到备数据成功

    开始设置主从同步

    修改从库的server-id,修改和主库不一样,这里修改为20
    egrep "server-id" /etc/my.cnf
    sed -i 's/^server-id/#server-id/g' /etc/my.cnf
    egrep "server-id" /etc/my.cnf
    sed -i '/#server-id/aserver-id = 20' /etc/my.cnf
    egrep "server-id" /etc/my.cnf

    ###重启mysql

    更改主数据刚才的文件名称和位置点,等到下面的内容
    mysql
    ======
    CHANGE MASTER TO
    MASTER_HOST='10.0.0.103',
    MASTER_PORT=3306,
    MASTER_USER='rep',
    MASTER_PASSWORD='lvnian123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=10447;
    ######################
    start slave;
    show slave status\G;
    ######################
    mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.0.0.103', <===注意,必须要用VIP
    -> MASTER_PORT=3306,
    -> MASTER_USER='rep',
    -> MASTER_PASSWORD='lvnian123456',
    -> MASTER_LOG_FILE='mysql-bin.000003',
    -> MASTER_LOG_POS=302;
    Query OK, 0 rows affected (0.08 sec)

    mysql> start slave;
    Query OK, 0 rows affected (0.03 sec)

    mysql> show slave status\G;
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 10.0.0.4
    Master_User: rep
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000004
    Read_Master_Log_Pos: 9759
    Relay_Log_File: S_MYSQL-relay-bin.000005
    Relay_Log_Pos: 9905
    Relay_Master_Log_File: mysql-bin.000004
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Replicate_Do_DB:
    Replicate_Ignore_DB:
    Replicate_Do_Table:
    Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
    Replicate_Wild_Ignore_Table:
    Last_Errno: 0
    Last_Error:
    Skip_Counter: 0
    Exec_Master_Log_Pos: 9759
    Relay_Log_Space: 10106
    Until_Condition: None
    Until_Log_File:
    Until_Log_Pos: 0
    Master_SSL_Allowed: No
    Master_SSL_CA_File:
    Master_SSL_CA_Path:
    Master_SSL_Cert:
    Master_SSL_Cipher:
    Master_SSL_Key:
    Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error:
    Last_SQL_Errno: 0
    Last_SQL_Error:
    Replicate_Ignore_Server_Ids:
    Master_Server_Id: 1
    1 row in set (0.00 sec)
    ERROR:
    No query specified
    mysql>

    成功的表现:
    [root@S_MYSQL ~]# mysql -uroot -e "show slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running"
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    [root@S_MYSQL ~]#
    出现上面两个yes证明数据库主从同步成功了

    再次用heartbeat让mysql主库进行主备切换。看看mysql客户端,也就是从库的状态。

    用下面命令看在从库10.0.0.5看主备切换,从库数据同步的情况:
    mysql -uroot -e "show slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running"
    for i in `seq 100`;do mysql -uroot -e "show slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running";sleep 10;echo -e "========$i=======\n" ; done

    用下面命令进行主备切换

    /usr/share/heartbeat/hb_standby
    /usr/share/heartbeat/hb_takeover

    往主库写数据
    for n in `seq 2000 2300`;do mysql -uroot -e "use lvnian;insert test values($n,'lvnian$n');"; sleep 10 ;done;
    for n in `seq 100`;do mysql -uroot -e "use lvnian; select * from test;"|tail -5 ;sleep 10;echo -e "=========$i==========" ;done;
    mysql -uroot -e "use lvnian; select * from test;"
    ######################################################
    [root@MYSQL_C ~]# for i in `seq 100`;do mysql -uroot -e "show slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running";sleep 10;echo -e "========$i=======\n" ; done
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ========1=======
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ========2=======
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ========3=======
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ========4=======
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ========5=======
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ========6=======
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ========7=======
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ========8=======
    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ========9=======
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    通过上面的主备切换时,从库同步主库的情况,因为每次查看同步情况,是10秒,所以得出结论:在主备进行切换时,mysql可不得大概会有1分钟的延迟,导致无法正常进行使用mysql数据库

    如何进行MySQL + Heartbeat + DRBD架构部署.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: drbdmysqlheartbeat