mysql+heartbeat+DRBD+LVS实现mysql高可用

   在企业应用中,mysql+heartbeat+DRBD+LVS是一套成熟的集群解决方案,通过heart+DRBD实现mysql的主节点写操作的高可用性,而通过mysql+LVS实现数据库的主从复制和mysql的读操作的负载均衡。整个方案在读写方面进行了分离,融合了写操作的高可用和读操作的负载均衡,是一个完美又廉价的企业应用解决方案

   目前流行的高可用解决方案:

   mysql的复制功能是通过建立复制关系和两台和多台机器环境中,一台机器出现故障切换到另一台机器上保证一定程度的可用性

   mysql的复制功能加一些集群软件

   mysql+heartbeat+DRBD的复制功能

   共享存储+mysql的复制功能


DRBD:(分布式块设备复制)是linux内核的存储层中的一个分布式存储系统,可利用DRBD在两台linux服务器之间共享块设备、文件系统和数据。当地数据写入本地主节点的文件系统时,这些数据会通过网络发送到另一台主节点上,本地主节点和远程主节点数据通过TCP/IP协议保持同步,主节点故障时,远程节点保存着相同的数据,可以接替主节点继续提供数据。两个节点之间使用heartbeat来检测对方是否存活

   同步过程

   1:在node1上写操作被提交,通过内核传给DRBD模块

   2:DRBD发送写操作到node2

   3:在node2上的DRBD发送写操作给本地磁盘

   4:在node2上的DRBD向node1发确认信息,确认接收到写操作并发送给本地次哦按

   5:在node1上的DRBD发送写操作给本地磁盘

   6:node1内核回应写操作完成

配置之前的准备

1.设置hostname及解析

[root@drbd1 ~]# vim /etc/hosts
192.168.253.129 drbd1
192.168.253.140 drbd2


部署mysql的高可用高扩展集群


[root@drbd1 ~]# mke2fs -j /dev/sda
[root@drbd1 ~]# mkdir /database
[root@drbd1 ~]# mount /dev/sda /database/
[root@drbd1 ~]# mount -a
[root@drbd1 ~]# mount
[root@drbd1 ~]# df -h | grep /database
/dev/sda               20G  173M   19G   1% /database

DRBD的部署

[root@drbd1 ~]# uname -a
Linux drbd1 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux

通过yum安装drbd服务

默认centos6.x中并没有提供DRBD的源,这时要么采用源码编译方法,要么使用第三方的YUM源。这里使用了http://elrepo.org/tiki/tiki-index.php提供的源

rpm -Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
[root@drbd1 yum.repos.d]# rpm -qa | grep elrepo-release
elrepo-release-6-5.el6.elrepo.noarch

实际上就是往yum.repos.d里面添加一个源配置elrepo.repo

使用yum  list查看,进行安装

[root@drbd1 yum.repos.d]# yum list all | grep drbd
drbd83-utils.x86_64                    8.3.16-1.el6.elrepo              elrepo
drbd84-utils.x86_64                    8.4.4-2.el6.elrepo                elrepo
kmod-drbd83.x86_64                     8.3.16-1.el6.elrepo               elrepo
kmod-drbd84.x86_64                     8.4.4-1.el6.elrepo                elrepo
[root@drbd1 ]# yum --enablerepo=elrepo install drbd83-utils kmod-drbd83

检查DRBD是都安装成功,若安装完成,让内核加载DRBD模块

复制样例配置文件为即将使用的配置文件

vim /usr/share/doc/drbd83-utils-8.3.16/drbd.conf.example


配置DRBD

[root@drbd1 etc]#  vim /etc/drbd.conf
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";

配置 vim /etc/drbd.d/global_common.conf

vim /etc/drbd.d/global_common.conf
global {
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
}
common {
        protocol C;
        handlers {
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }
        startup {
                #wfc-timeout 120;
                #degr-wfc-timeout 120;
        }
        disk {
                on-io-error detach;
                #fencing resource-only;
        }
        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }
        syncer {
                rate 1000M;
        }
}

配置/etc/drbd.d/web.res

[root@drbd2 etc]# vim /etc/drbd.d/web.res
resource web {
  on drbd1 {
    device    /dev/drbd0;
    disk      /dev/sda;
    address   192.168.253.129:7789;
    meta-disk internal;
  }
  on drbd2 {
    device    /dev/drbd0;
    disk      /dev/sda;
    address   192.168.253.140:7789;
    meta-disk internal;
  }
}


启动DRBD

[root@drbd1 ~]# drbdadm create-md all
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.

启动DRBD时,可能出现以下错误

[root@drbd1 ~]# drbdadm create-md all
md_offset 21474832384
al_offset 21474799616
bm_offset 21474144256
Found ext3 filesystem
    20971520 kB data area apparently used
    20970844 kB left usable by current configuration
Device size would be truncated, which
would corrupt data and result in
‘access beyond end of device‘ errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.
Command ‘drbdmeta 0 v08 /dev/sda internal create-md‘ terminated with exit code 40
drbdadm create-md web: exited with code 40

这事需要如下命令覆盖文件系统中的设备块信息

[root@drbd1 ~]# dd if=/dev/zero of=/dev/sda bs=1M count=128
记录了128+0 的读入
记录了128+0 的写出
134217728字节(134 MB)已复制,0.448662 秒,299 MB/秒

再重新启动DRBD,可以通过dmesg命令查看DRBD的启动过程

   

本文出自 “linux” 博客,请务必保留此出处http://weihong.blog.51cto.com/6655355/1380394

mysql+heartbeat+DRBD+LVS实现mysql高可用,布布扣,bubuko.com

mysql+heartbeat+DRBD+LVS实现mysql高可用

上一篇:SCCM 2012 R2 LAB Part3.层次结构安装之SQL Server的准备


下一篇:MongoDB基础理念及操作初探