设为首页 收藏本站
查看: 974|回复: 0

[经验分享] MySQL+Heartbeat+DRBD构建高可用MySQL环境

[复制链接]

尚未签到

发表于 2018-9-27 09:24:04 | 显示全部楼层 |阅读模式
  Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
  DBRD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。
  DBRD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。
  ------《百度百科》
  实验环境:
  主 192.168.43.128 drbd-M   CentOS 5.4 64bit
  从 192.168.43.129 drbd-S    CentOS5.4 64bit
  准备工作:
  Vim /etc/hosts
  192.168.43.129 drbd-M
  192.168.43.130 drbd-S
  修改hostname名,
  主:hostname drbd-M
  从:hostname drbd-S
  确保与uname -n输出一致。PS:很重要,后面的drbd和heartbeat都要依赖于主机名来通信。
  搭建环境,采用yum安装:
  


  • # yum install -y drbd83 kmod-drbd83

  • # yum search heartbeat*

  • heartbeat所需的安装包主要有以下几个:

  • heartbeat-devel-2.1.3-3.el5.centos

  • heartbeat-stonith-2.1.3-3.el5.centos

  • heartbeat-gui-2.1.3-3.el5.centos

  • heartbeat-ldirectord-2.1.3-3.el5.centos

  • heartbeat-pils-2.1.3-3.el5.centos

  • heartbeat-2.1.3-3.el5.centos
  

  一 DRBD的安装使用
  加载安装drbd模块:
  


  • # modprobe drbd
  

  检查是否加载成功:
  


  • # modprobe drbd
  • drbd                  277272  2
  

  PS:一般使用yum安装的话系统会自动加载的,此步可以跳过,如果使用源码包编译就一定要记得这一步。
  添加一块硬盘,存放数据,主从服务器的硬盘大小可以不一致,但是如果数据超过小的硬盘,后果自己考虑吧!这里添加的是一块2G的硬盘,设备名称为/dev/sdb2,注意先别急着格式化。
  开始drbd的配置:
  drbd主配置文件,很重要:
  


  • global {
  • }
  • common {
  • syncer { rate 100M; }    //设置两个节点间的同步速率;
  • }

  • resource db {
  • protocol C;     //定义当数据被写入块设备时候的一致性级别(数据同步协议),A、B、C三个级别,C为数据被确认写到本地磁盘和远程磁盘后返回,确认成功
  • startup { wfc-timeout 0; degr-wfc-timeout 120; }
  • disk { on-io-error detach; }
  • syncer { rate 100M; }

  • on drbd-M {  //节点名称一定要与hostname保持一致;
  •   device /dev/drbd0;     //创建的虚拟磁盘
  •   disk   /dev/sdb2;      //物理分区
  •   address 192.168.43.129:7788;    //监听端口
  •   meta-disk internal;         //局域网类型

  • }

  • on drbd-S {
  •    device /dev/drbd0;
  •    disk   /dev/sdb2;
  •    address 192.168.43.130:7788;
  •    meta-disk internal;
  •    }
  • }
  

  检测配置文件:
  


  • #drbdadm ajust db
  

  至此drbd已经配置完毕,以上步骤在主从服务器上都要做,而且drbd的配置文件要保持一致。
  主服务器和从服务器上创建matadata:
  


  • # drbdadm create-md all
  

  主从服务器启动drbd:
  


  • # /etc/init.d/drbd start
  

  此时主从服务器之间开始同步数据,第一次的话时间会稍微长一些。
  将drbd-M 设为主节点
  第一次的话要使用:
  


  • # drbdsetup /dev/drbd0 primary -o
  

  以后可以使用drbdadm  primary all命令。
  将新创建的设备格式化并且挂载:
  


  • # mkfs.ext3 /dev/drbd0  //破坏文件系统:dd if=/dev/zero bs=1M of=/dev/sdb2;sync
  • # mount /dev/drbd0 /data/
  • # df –H
  

DSC0000.png

  在/data目录下创建文件进行测试:
  


  • # cd /data/
  • # mkdir linna
  • # touch database
  • # ls
  • database  linna  lost+found
  

  下面进行测试:
  drbd-M:
  将主服务器降为从:
  先卸载设备:
  


  • # umount /data/
  • # drbdadm secondary all
  

  PS:临时切断节点之间的连接可以使用:#drbdadm connect all
  查看系统日志/var/log/message:
DSC0001.png

  Drbd-S:
  我们再将从服务器提升为主服务器看下数据能否同步过来:
  


  • # drbdadm primary all
  

DSC0002.png

  


  • # mount /dev/drbd0 /data
  • # cd /data/
  

DSC0003.png

  看,数据已经同步过来了!
  我们可以通过查看/proc/drbd来监控主从节点间之间数据同步的过程:
  


  • #Watch  -n 10 ‘cat /proc/drbd’
  

  二 MySQL+Heartbeat+DRBD构建高可用环境
DSC0004.png

  图 MySQL+Heartbeat+DRBD构建高可用MySQL
  1 Heartbeat主配置文件/etc/ha.d/ha.cf:
  


  • # cat /etc/ha.d/ha.cf
  • logfacility local0       //定义日志,使用syslog;
  • keepalive 2           //定义心跳频率;
  • deadtime 15          //如果其他节点15S内没有回应,则确认其死     亡;
  • warntime 5           //确认一个节点连接不上5S之后将警告信息写入日志;
  • initdead 120          //在其他节点死掉之后,系统启动前需要等待的时间,一般为deadtime的两倍;
  • udpport 694          // 用来通信的端口;
  • bcast eth0            // 在eth0上进行心跳测试
  • watchdog /dev/watchdog  //可选项
  • auto_failback off        // 设置当死亡节点恢复正常之后是否重新启用;容易发生数据不一致的情况,必须项,不然后面hb_standby命令无法使用;
  • node drbd-M
  • node drbd-S
  • respawn hacluster /usr/lib64/heartbeat/ipfail
  

  2 设置两个节点之间的通信密钥:
  


  • #cat authkeys
  • auth 3
  • 3 md5 Hello!
  

  3 定义资源:
  


  • # cat haresources
  • drbd-M drbddisk Filesystem::/dev/drbd0::/data::ext3 mysqld 192.168.43.20
  

  drbd-M    //主节点;
  drbddisk  Filesystem::/dev/drbd0::/data::ext3 mysqld   //定义Heartbeat需要管理的资源,并且每一部分在/etc/ha.d/haresources.d下有对应的脚本;如果主节点失效,备节点将通过执行这些脚本来启用资源;如果脚本有参数可以使用“::”来进行分割;
  drbddisk  管理drbd资源的脚本;
  filesystem 管理文件系统资源的脚本,后面参数定义drbd设备,挂载点,文件系统类型
  mysqld  管理mysql的脚本,需要从/etc/init.d/mysqld 拷贝
  192.168.43.20  //VIP,用来连接MySQL的IP,当Heartbeat启用之后会自动分配;
DSC0005.png

  图 Resource.d 下的内容
  在主从节点上启动Heartbeat
  


  • # /etc/init.d/heartbeat start
  

  查看下资源启动情况:
  先看下主节点drbd-M的日志:
DSC0006.png

  再看下drbd-S的日志,已经处在监听等待状态:
DSC0007.png

  虚拟IP已经启动:
DSC0008.png

  Drbd和MySQL的端口已经在监听:
DSC0009.png

  主节点/data目录下:
DSC00010.png

  我们切换到drbd-S来试一下,看资源能不能切换过来:
  使用/usr/lib64/heartbeat/hb_standby命令可以来模拟主节点死掉的情况。
  


  • 2011/07/18_20:49:53 Going standby [all].
  

DSC00011.png

  从服务器drbd-S日志:
DSC00012.png

  再看下资源是否已经抢占过来:
DSC00013.png

  /data目录下的文件:
DSC00014.png

  PS:Heartbeat启动之前必须保证drbd服务已经启动,并且主服务器已经设置为primary并成功挂载/dev/drbd0.不然主服务器Heartbeat在启动的时候会提示找不到/dev/drbd0设备,并造成其他的资源也无法启动的情况。
DSC00015.png

  PS:心跳探测和数据复制不建议在同一个网卡上进行,本实验只是为了方便采取了这样的方式。
  dopd进程:当主从节点之间的失去连接,那么主从节点之间的数据就无法同步,就会发生从节点的数据过期的情况(数据不一致的情况)。如果此时主服务器发生宕机的情况,那么dopd进程会阻止从服务器提升为主服务器。具体实现:
  1 修改/etc/ha.d/ha.cf 文件:
  


  • respawn  hacluster /usr/lib64/heartbeat/dopd
  • apiauth  dopd gid=haclient uid=hacluster
  

  2 修改/etc/drbd.conf 文件:
  


  • common {
  • handlers {
  •          outdate-peer “/usr/lib64/heartbeat/drbd-peer-outdater”;
  •       }
  • }
  • resource db {
  • disk {
  • Fencing resource-only;
  •      }
  •    }
  

  3 重新加载配置文件:
  


  • # /etc/init.d/heartbeat reload
  • #/drbdadm adjust all
  

  MySQL+Heartbeat+DRBD方案可以单独使用,也可以在构建MySQL主从架构时实现主服务器的高可用,在此不再详细实现,有兴趣的朋友可以尝试一下(完)!
  参考文章:MySQL and DRBD Guide
  本文出自 “諸葛草廬” 博客,请务必保留此出处http://lyp0909.blog.51cto.com/508999/691435



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602616-1-1.html 上篇帖子: mysql面试题分享 下篇帖子: MySQL5.7 GTID与传统快速切换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表