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

[经验分享] heartbeat+drbd+mysql:实现最廉价的高可用组合

[复制链接]

尚未签到

发表于 2019-1-7 11:05:50 | 显示全部楼层 |阅读模式
  1.什么是DRBD
  DRBD(Distributed Replicated Block Device),DRBD 号称是 "网络 RAID",开源软件,由 LINBIT 公司开发。
  2.DRBD的主要功能
  DRBD实际上是一种块设备的实现啦,主要被用于Linux平台下的高可用(HA)方案之中。它是由内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当读者你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上啦,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
  3.DRBD的主要应用
  如果主服务器当掉啦,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案啦。我们通过heartbeat + drbd在Linux下创建一个高可用(HA)的集群服务器,在高可用(HA)解决方案中使用DRBD的功能,可以代替使用一个共享盘阵存储设备。因为数据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了。
  4.DRBD于mysql的关系
  MySQL 与 LINBIT 达成了合作关系,大张旗鼓的搞了这个 "12 天 Scale-Out" 活动,也是这个商业合作驱动的吧。DRBD 助力 MySQL, 号称可以得到四个 9 的可靠性,这不低于任何一款商业数据库软件了。
  DRBD 的出现的确对 MySQL 集群的可用性有很大提高。而且,有独到的特点,非常适合面向互联网的应用。因为是在存储层的数据块同步,很容易的做到应用层的 IO 负载均衡(备机承担一定的读压力),不但支持数据库失败接管,还能做到 IP 失败接管,接管时间小于 30 秒,真是穷人的绝佳集群解决方案。
  heartbeat的安装这里小编就不细讲了,读者可以看看的小编的博客http://wnqcmq.blog.运维网.com/5200614/1179525
  以下的配置两个节点都必须一致,为了减少工作量,小编这里在主节点上配置,然后使用scp传输到备份节点
  5.hosts文件以及主机名的配置
  [root@primary ~]# vim /etc/hosts
    192.168.110.6 primary.zzdx.com
  192.168.110.7 standby.zzdx.com

  [root@primary ~]# scp /etc/hosts 192.168.20.2:/etc
  修改主机名
  [root@primary ~]# vim /etc/sysconfig/network
    HOSTNAME=primary.zzdx.com //备份节点的主机名是standby.zzdx.com

  6.drbd的安装
  由于小编使用的是5.4的红帽啦,内核(2.6.18)中不包含drbd(2.6.33的内核中已经有了),小编这里安装相应的软件包和内核模块就是了
  kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
  drbd83-8.3.8-1.el5.centos.i386.rpm
  使用rpm -ivh 安装就是了
  drbd83安装后包含的文件
  [root@primary ~]# rpm -ql drbd83

  7.drbd配置
  [root@primary ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
  [root@primary ~]# cd /etc/drbd.d/
  [root@primary drbd.d]# cp global_common.conf global_common.conf.bak
  [root@primary drbd.d]# vim global_common.conf //修改成为下面的内容
    global {
  usage-count no;
  # minor-count dialog-refresh disable-ip-verification
  }
  common {
  protocol C;
  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 100M;
  }
  }

  8.定义资源
  小编这里有一块2G的磁盘(/dev/sdb),那就作为块设备吧
  [root@primary drbd.d]# vim mysql.res
    resource mysql{
  on primary.zzdx.com { # 每个主机的说明以”on”开头,后面是主机名在{}内的是配置
  device /dev/drbd1; # 今后生成使用的设备名;不用和实际分区号一样.不过最好规范
  disk /dev/sdb; # 该节点上用于存放数据的分区号
  address 192.168.20.1:7898; # 该节点的IP地址
  meta-disk internal; # meta data信息存放方式“网络”
  }
  on standby.zzdx.com { # 每个主机的说明以”on”开头,后面是主机名在{}内的是配置
  device /dev/drbd1; # 今后生成使用的设备名;不用和实际分区号一样.不过最好规范
  disk /dev/sdb; # 该节点上用于存放数据的分区号
  address 192.168.20.2:7898; # 该节点的IP地址
  meta-disk internal; # meta data信息存放方式“网络”
  }
  }

  将配置文件、全局配置文件以及资源文件传输到备份节点上
  [root@primary drbd.d]# scp global_common.conf mysql.res 192.168.20.2:/etc/drbd.d/
  9.创建drbd资源
  [root@primary drbd.d]# drbdadm create-md mysql //在备份节点上也要做
  Writing meta data...
  initializing activity log
  NOT initialized bitmap
  New drbd meta data block successfully created.
  [root@standby drbd.d]# drbdadm create-md mysql
  Writing meta data...
  initializing activity log
  NOT initialized bitmap
  New drbd meta data block successfully created.
  10.开启两个节点上的drbd服务
  主节点上的状态
  [root@primary ~]# service drbd start
  Starting DRBD resources: [
  mysql
  Found valid meta data in the expected location, 2147479552 bytes into /dev/sdb.
  d(mysql) s(mysql) n(mysql) ].
  备份节点上的状态
  [root@standby drbd.d]# service drbd start
  Starting DRBD resources: [
  mysql
  Found valid meta data in the expected location, 2147479552 bytes into /dev/sdb.
  d(mysql) s(mysql) n(mysql) ].
  查看drbd状态
  [root@primary drbd.d]# cat /proc/drbd
  version: 8.3.8 (api:88/proto:86-94)
  GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
  1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
  ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2097052
  /proc/drbd/中显示了DRBD当前的状态.
  ro显示两台主机的状态.都是“备机/备机”.ds是磁盘状态.都是“不一致/不一致”
  11.主节点抢占资源
  [root@primary drbd.d]# drbdsetup /dev/drbd1 primary -o //首次使用用这种方式
  [root@primary drbd.d]# drbdadm primary all
  [root@primary drbd.d]# cat /proc/drbd //这时候会同步更新数据的
  version: 8.3.8 (api:88/proto:86-94)
  GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
  1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
  ns:780040 nr:0 dw:0 dr:788224 al:0 bm:47 lo:1 pe:2 ua:256 ap:0 ep:1 wo:b oos:1317052
  [======>.............] sync'ed: 37.4% (1317052/2097052)K delay_probe: 47
  finish: 0:00:23 speed: 55,672 (55,712) K/sec
  ro:显示两台主机的状态.”主机/备机” ds:是磁盘状态.都是“upTodate/不一致”
  可以看出[>....................] sync'ed: 正在同步了已经进度37.4%
  12.格式化/dev/drbd1的文件系统,建立相应的挂载点,以便后续使用
  [root@primary drbd.d]# mkfs -t ext3 /dev/drbd1
  [root@primary ~]# mkdir /mnt/mysql/ //主节点上建立mysql的挂载点
  修改两个节点mysql的配置文件,将数据目录修改为/mnt/mysql(小编这里的mysql是使用linux 5.4自带的)
  [root@primary ~]# vim /etc/my.cnf
    datadir=/mnt/mysql

  13.heartbeat的配置
  如果读者你的heartbeat的安装都是按照小编博客的步骤来的话,那么接下来的修改配置就很简单啦
  首先修改ha.cf文件,将两个节点加进去(如果已经加过了就不用加了)
  [root@primary ~]# cd /etc/ha.d/
  [root@primary ha.d]# vim ha.cf
    node primary.zzdx.com
  node standby.zzdx.com

  创建新的资源脚本(这些资源脚本都放在/etc/ha.d/resource.d/目录下啦),当然同样的,两端都服务器得有,作为资源让heartbeat控制
  [root@primary ~]# cd /etc/ha.d/resource.d/
  [root@primary resource.d]# vim usemysql
    #!/bin/bash
  unset LC_ALL ; export LC_ALL
  unset LANGUAGE ; export LANGUAGE
  prefix=/usr
  exec_prefix=/usr
  . /etc/ha.d/shellfuncs
  function start(){
  /sbin/drbdadm primary all #提升为primary
  /bin/mount /dev/drbd1 /mnt/mysql #挂载
  service mysqld start
  }
  function stop(){
  service mysqld stop
  /bin/umount /mnt/mysql #注意释放权限的时候必须先卸载
  /sbin/drbdadm secondary all #降为secondary
  }
  case $1 in
  start)
  start
  ;;
  stop)
  stop
  ;;
  *)
  echo “Usage: $0 { start | stop }”
  ;;
  esac
  exit 0

  [root@primary resource.d]# chmod a+x usemysql
  [root@primary resource.d]# scp usemysql 192.168.20.2:/etc/ha.d/resource.d/
  添加资源控制到配置文件
  [root@primary resource.d]# cd ..
  [root@primary ha.d]# vim haresources
  primary.zzdx.com IPaddr::192.168.110.1/28/eth0/192.168.110.15 usemysql
  [root@primary ~]# scp /etc/ha.d/haresources 192.168.20.2:/etc/ha.d/
  启动heartbeat服务
  [root@primary ~]# service heartbeat start
  [root@standby ~]# service heartbeat start
  14.测试并查看状态
  在主节点上查看资源状态

  在主节点上使用mysql,创建数据库文件,看看在当资源切换的时候是否能看见
  [root@primary ~]# mysqladmin -u root password 123456 //初始化root密码

  主节点主动释放资源,备份节点接管资源
  [root@primary ~]# /usr/lib/heartbeat/hb_standby
  2013/06/15_08:32:51 Going standby [all].
  查看primary节点日志状态

  查看备份节点日志状态

  在备份节点上使用mysql试试能不能查看到在主节点创建的数据库

  看到了吧,成功了吧,呵呵
  好了,到这里小编算是吧要想实现的东西整完了,读者自己试试吧,正如前面所说的,目前使用drbd是为了最少的花钱,但是效率上可想而知啦,个人觉得IP-SAN是比较折中的方案啦




运维网声明 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-660287-1-1.html 上篇帖子: 搭建基于Heartbeat v2+NFS的高可用MySQL集群 下篇帖子: heartbeat+mysql+nfs 高可用mysql集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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