免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5997 | 回复: 2
打印 上一主题 下一主题

Heartbeat+MySQL+DRBD构建高可用MySQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-10 22:11 |只看该作者 |倒序浏览
Heartbeat+MySQL+DRBD构建高可用MySQL







   



一、DRBD原理及架构


1、原理简述


DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.


2、架构图









  
mysql2:
   
  
192.168.3.12
   

  
   



  
mysql3:
   
  
192.168.3.13
   

  
   



  
VIP:
   
  
192.168.3.7
   

  
   



  
DRBD资源目录:
   
  
/data
   

  
   



优点:安全性、稳定性高,出现故障系统将自动切换,从而保证服务的连续性,相对mysql+heartbeat+存储来说对大优点是节约了存储这个硬件设备。



缺点:mysql主机宕机,切换到备机,备机接管服务,待主机修复完配置failback机制的话会发生脑裂情况,需要手工执行命令进行主机接管。




二、Heartbeat+DRBD+MySQL安装


1、定义主机名

  1. # vi /etc/hosts



  2. 192.168.3.12 mysql2

  3. 192.168.3.13 mysql3
复制代码
2、利用yum安装drbd、heartbeat
(基于CentOSx86_64平台)
  1. yum install -y drbd83kmod-drbd83

  2. yum install -y heartbeatheartbeat-ldirectord heartbeat-pils heartbeat-stonith
复制代码
3、配置DRBD
  1. Master Node:

  2. # vi /etc/drbd.conf



  3. # please have a a look at theexample configuration file in

  4. #/usr/share/doc/drbd83/drbd.conf

  5. #

  6. global { usage-count yes; }

  7. common { syncer { rate 100M;} }

  8. resource r0 {


  9. protocol C;


  10. startup {



  11. }


  12. disk {


  13. on-io-error
  14. detach;


  15. #size 1G;


  16. }


  17. net {


  18. }


  19. on mysql12 {


  20. device
  21. /dev/drbd0;


  22. disk
  23. /dev/sda5;


  24. address
  25. 192.168.3.12:7898;


  26. meta-disk internal;


  27. }


  28. on mysql13 {


  29. device
  30. /dev/drbd0;


  31. disk
  32. /dev/sda5;


  33. address
  34. 192.168.3.13:7898;


  35. meta-disk internal;


  36. }

  37. }



  38. Slave Node:

  39. # vi /etc/drbd.conf



  40. #

  41. # please have a a look at theexample configuration file in

  42. #/usr/share/doc/drbd83/drbd.conf

  43. #

  44. global { usage-count yes; }

  45. common { syncer { rate 100M;} }

  46. resource r0 {


  47. protocol C;


  48. startup {



  49. }


  50. disk {


  51. on-io-error
  52. detach;


  53. #size 1G;


  54. }


  55. net {


  56. }


  57. on mysql12 {


  58. device
  59. /dev/drbd0;


  60. disk
  61. /dev/sda5;


  62. address
  63. 192.168.3.12:7898;


  64. meta-disk internal;


  65. }


  66. on mysql13 {


  67. device
  68. /dev/drbd0;


  69. disk
  70. /dev/sda5;


  71. address
  72. 192.168.3.13:7898;


  73. meta-disk internal;


  74. }

  75. }
复制代码
在两台主机上执行:

  1. # mkfs.ext3 /dev/sda5

  2. # dd if=/dev/zero of=/dev/sda5 bs=1M count=1;sync
复制代码
在两台主机上同时执行:


# /etc/init.d/drbd restart



查看是状态:


# watch -n 1 cat /proc/drbd



在主节点主机上执行:


设置当前节点为主节点并进行格式化:
  1. # drbdadm -- --overwrite-data-of-peer primary all

  2. # mkfs.ext3 /dev/drbd0

  3. # mount /dev/drbd0 /data
复制代码
继续查看状态:


# watch -n 1 cat /proc/drbd





4、节点切换


1)主节点切换:切换主从节点前,要注意umount

主从切换: drbdadm primary all;drbdadm secondary all


2)从节点切换:


drbdadmprimary all

再mount /dev/drbd0 /data

即可以切换过数据过来



5、配置heartbeat ldirectord

1)配置authkeys

  1. # vi /etc/ha.d/authkeys



  2. auth 3

  3. #1 crc

  4. #2 sha1 HI!

  5. 3 md5 Hellomysql



  6. # chmod 600 vi/etc/ha.d/authkeys
复制代码
2)配置ha.cf

  1. # vi /etc/ha.d/ha.cf



  2. debugfile /var/log/ha-debug

  3. logfile /var/log/ha-log

  4. logfacility
  5. local0

  6. keepalive 2

  7. deadtime 20

  8. warntime 10

  9. initdead 60

  10. udpport 693

  11. ucast eth1 192.168.3.13
  12. #slave节点配置ucasteth1 192.168.3.12

  13. ping_group group1192.168.3.12 192.168.3.13

  14. auto_failback off

  15. node
  16. mysql12

  17. node
  18. mysql13

  19. #respawn hacluster/usr/lib/heartbeat/ipfail

  20. #apiauth ipfail gid=haclientuid=hacluster

  21. hopfudge 1
复制代码
3)配置haresources

# vi /etc/ha.d/haresources



mysql12IPaddr::192.168.3.7/24/eth1:0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3mysql



4)Slave节点配置基本类似以上.


5)安装迁移MySQL

编译安装MySQL只将数据库目录存放在DRBD目录,我们要镜像的是MySQL数据库目录



6)设置自动启动服务


# chkconfigmysqld off
# chkconfig --add heartbeat
# chkconfig heartbeat on



三、常见问题处理


设置一个节点为主节点


通过cat /prod/drbd查看是否开始复制,以及两节点的状态。此时开始同步两个节点的磁盘,需要一定时间,在同步完成前,请不要重启,否则会重新同步。


同步完成后,如果两个节点都是Secondary/Secondary,并且已经UpToDate了,可以挑一个节点设置为主节点:


# drbdadm primary all



DRDB的一些常规操作:


切换主从节点前,要注意umount

主从切换: drbdadm primary all,drbdadm secondary all

节点间连接:drbdadmconnect|disconnect all






DRBD脑裂后的处理:


脑裂后,两个节点间数据不同步,主从关系失效,需要按下面的步骤修复:


a.在从节点如下操作:


# drbdadm secondary r0

# drbdadm ----discard-my-data connect r0


b.在主节点上,通过watch-n 1 cat /proc/drbd查看状态,如果不是WFConnection状态,需要再手动连接:


# drbdadm connect r0



1).DRBD协议(A B C)

协议说明


A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作.

B 收到接收确认就认为完成了写入操作.

C 收到写入确认就认为完成了写入操作.


2).drbd设备的三个进程


每个drbd设备会有三个进程:


drbd0_worker是drbd0的主要进城,


drbd0_asender是primary上drbd0的数据发送进程,


drbd0_receiver是secondary上drbd0的数据接收进程



3).几点注意的地方:


1.mount drbd设备以前必须把设备切换到primary状态。


2. 两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。


3. 处于secondary状态的服务器上不能加载drbd设备。


4. 主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,因为drbd磁盘镜像相当于网络raid 1


4).使用DRBD方案的时候建议用使用INNODB存储引擎


据说MyISAM在DRBD上容易造成数据丢失,或表文件损坏,所以此模式下最好用InnoDB,打开Binlog,同时,innodb_flush_log_at_trx_commit=1可以保证数据完整,但会严重影响性能。设置为2的话性能约有10倍提升,不过故障时可能会丢失1秒的数据。

论坛徽章:
0
2 [报告]
发表于 2011-12-20 14:04 |只看该作者
楼主 ,有没有试试CRM管理模式开启??

我开启后遇到一些问题了,希望找了解的CUer讨论下.

论坛徽章:
0
3 [报告]
发表于 2011-12-20 17:48 |只看该作者
最近也正在测试这个方案
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP