• 在企业应用中,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及解析

    1.[root@drbd1 ~]# vim /etc/hosts
    2.192.168.253.129 drbd1
    3.192.168.253.140 drbd2

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

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

    DRBD的部署

    1.[root@drbd1 ~]# uname -a
    2.<a href="http://www.it165.net/os/oslin/" target="_blank" class="keylink">Linux</a> 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/<a href="http://www.it165.net/os/oslin/" target="_blank" class="keylink">Linux</a>

    通过yum安装drbd服务

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

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

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

    使用yum list查看,进行安装

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

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

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

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

    配置DRBD

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

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

    01.vim /etc/drbd.d/global_common.conf
    02.global {
    03.usage-count no;
    04.# minor-count dialog-refresh disable-ip-verification
    05.}
    06.common {
    07.protocol C;
    08.handlers {
    09.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";
    10.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";
    11.local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
    12.# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
    13.# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
    14.# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
    15.# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
    16.# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
    17.}
    18.startup {
    19.#wfc-timeout 120;
    20.#degr-wfc-timeout 120;
    21.}
    22.disk {
    23.on-io-error detach;
    24.#fencing resource-only;
    25.}
    26.net {
    27.cram-hmac-alg "sha1";
    28.shared-secret "mydrbdlab";
    29.}
    30.syncer {
    31.rate 1000M;
    32.}
    33.}

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

    01.[root@drbd2 etc]# vim /etc/drbd.d/web.res
    02.resource web {
    03.on drbd1 {
    04.device    /dev/drbd0;
    05.disk      /dev/sda;
    06.address   192.168.253.129:7789;
    07.meta-disk internal;
    08.}
    09.on drbd2 {
    10.device    /dev/drbd0;
    11.disk      /dev/sda;
    12.address   192.168.253.140:7789;
    13.meta-disk internal;
    14.}
    15.}

    启动DRBD

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

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

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

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

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

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

ysql+heartbeat+DRBD+LVS实现mysql高可用的更多相关文章

  1. Lvs+Keepalived实现MySQL高可用

    LVS+Keepalived+MySQL高可用配置 本文所有配置前提是已实现MySQL双主备份(MySQL双主) 安装前的准备: VIP:192.168.0.201 Keepalived: Keepa ...

  2. Heartbeat+DRBD+MySQL高可用方案

    1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证.默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自 ...

  3. Heartbeat+DRBD+MySQL高可用方案【转】

    转自Heartbeat+DRBD+MySQL高可用方案 - yayun - 博客园 http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用 ...

  4. (转)Heartbeat+DRBD+MySQL高可用方案

    原文:http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由D ...

  5. 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡

    preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...

  6. 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建

    preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...

  7. MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移

    系统信息: mysql主库 mysql从库 VIP 192.168.1.150 mysql 主主同步都设置 auto-increment-offset,auto-increment-increment ...

  8. [转]MYSQL高可用方案探究(总结)

    前言 http://blog.chinaunix.net/uid-20639775-id-3337432.htmlLvs+Keepalived+Mysql单点写入主主同步高可用方案 http://bl ...

  9. (转)MySQL高可用解决方案

    MySQL高可用解决方案 原文:http://www.ywnds.com/?p=5565 有这么两个概念,数据库的可靠性和数据库的可用性,可靠性指的是数据可靠,而可用性指的是服务可用.但是不管是可靠性 ...

随机推荐

  1. cmake编译(编译目标)x86或x64

    if(CMAKE_CL_64)    #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序 set(ADDRESS_MODEL 64) set(NODE_TAR ...

  2. Android得到控件在屏幕中的坐标

    getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标 getLocationInWi ...

  3. cocos2d-x特效之CCControlPotentiometer

    在test示例下面,有一个关于此功能的代码,实现的效果如下: 通过拉动可旋转的按钮,从而改变所代表的值,这个效果的确是很棒的,但,和我的需求有一些差别,先贴上我实现的效果吧               ...

  4. python之路-随笔 python处理excel文件

    小罗问我怎么从excel中读取数据,然后我百了一番,做下记录 以下代码来源于:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html ...

  5. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  6. linux TIME_WAIT过多的解决方法

      查看TCP状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'查看SOCKET状态:cat /proc/n ...

  7. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个 Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home ...

  8. 1. GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)

    一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...

  9. [HeadFist-HTMLCSS学习笔记][第四章Web镇之旅]

    重要 访问一个目录,即是访问他的index <a>链接到网站,必须加http:// <a>的title属性,能预先知道链接信息 id属性 使得<a> 能再本地跳转. ...

  10. Linq to Entities中无法构造实体或复杂类型

    EF中在使用linq就行查询select时不能直接使用自动映射生成的类,需要在单独声明一个类或者使用匿名类在查询完成后再转为对应的对象. public partial class WebForm1 : ...