DRBD(Distributed Replicated Block Device),分布式复制块设备,是一种通过TCP/IP网络实现块设备数据实时镜像的方案。利用这种方案,单一主节点模式(single primary mode)双机系统能够实时地将业务数据保存在主备节点的磁盘中,正常情况下两个节点的数据是一模一样的。 HeartBeat在此是用来做热备切换的,两节点间通过心跳线连接,如果主节点死机的话,可以通过HA将DRBD快速切换到另外一个节点,同时抢占虚拟IP,并启动MySQL,对MySQL客户端来说,只有很短时间的中断。此模式能有效提高MySQL的可用性。 一.环境 -------------------------------- OS: CentOS 5.5 32位 DRBD: 8.3.9编译安装 (http://www.drbd.org/) ====Node1==== Hostname: centos1 Ip: 192.168.0.201 ====Node2==== Hostname: centos2 Ip: 192.168.0.202 二. 编译安装DRBD -------------------------------- 从www.drbd.org下载drbd-8.3.9.tar.gz,分别在两个节点上编译安装: 注意,DRBD需要内核模块支持,2.6.33后的Linux内核已内置DRBD的支持,在此版本前,安装时需要kernel-devel包,同时编译drbd时要带上--with-km。 #./configure --prefix=/ --with-km #make #make install #chkconfig --add drbd #chkconfig drbd on 检查安装是否成功: #drbdadm 看是否以执行成功 #cat /proc/drbd 是否可以看到版本信息 重启后再次检查cat /proc/drbd 三 配置服务器的hostname hosts 在两个服务器中编辑hosts文件 #vi /etc/hosts 添加 192.168.0.201 centos1 192.168.0.202 centos2 四. 在两个服务器中分出一个空分区或者添加一个空的硬盘 /dev/sdb1 不要带有分区信息 如果格式化分区的话,则 # mkfs.ext3 /dev/sdb1或者dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync 这个命令破坏原有文件系统,否则底下第一次执行主备同步会感觉到很慢 四. 配置DRBD -------------------------------- 注意,新版本的DRBD的配置文件已拆分成多个,全部放在/etc/drbd.d/目录,具体可参考/etc/drbd.conf中的配置. 如果开了iptables防火墙,需要打开对应的7789端口。 在主节点配置/etc/drbd.d/dbdata.res: =========dbdata.res begin=========== resource dbdata { on centos1{ device /dev/drbd1; disk /dev/sdb1; address 192.168.0.201:7789; meta-disk internal; } on centos2{ device /dev/drbd1; disk /dev/sdb1; address 192.168.0.202:7789; meta-disk internal; } } =========dbdata.res end=========== 创建drbd设备 #drbdadm create-md all #/etc/init.d/drbd restart 查看是否有相应的块设备: #ls -l /dev/drbd1 #cat /proc/drbd 现在可以查看DRBD的状态,然后在centos1主机上执行: # cat /proc/drbd version: 8.3.9 (api:88/proto:86-95) GIT-hash: 1c3b2f71137171c1236b497969734da43b5bec90 build by root@centos1, 2011-04-18 17:28:21 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:4706832 ”/proc/drbd”中显示了drbd当前的状态.第一行的cs表示两台主机的状态,都是”备机”状态.ds是磁盘状态,都是”不一致”状态. 这是由于,DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化 一个主机.在centos1上执行: #drbdsetup /dev/drbd1 primary -o 或:/sbin/drbdadm primary dbdata /sbin/drbdadm secondary r0 (此命令为降级) # cat /proc/drbd version: 8.3.9 (api:88/proto:86-95) GIT-hash: 1c3b2f71137171c1236b497969734da43b5bec90 build by root@centos1, 2011-04-18 17:28:21 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:1383040 nr:0 dw:0 dr:1383040 al:0 bm:84 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:3323792 [====>...............] sync'ed: 29.5% (3244/4596)M finish: 0:43:08 speed: 1,280 (1,268) K/sec 主备机状态分别是”主/备”,主机磁盘状态是”实时”,备机状态是”不一致”. 在第3行,可以看到数据正在同步中,即主机正在将磁盘上的数据,传递到备机上.现在的进度是29.5%. 稍等一会,在数据同步完后,再查看一下centos1的DRBD状态: 在同步完成前,请不要重启,否则会重新同步。 # cat /proc/drbd version: 8.3.9 (api:88/proto:86-95) GIT-hash: 1c3b2f71137171c1236b497969734da43b5bec90 build by root@centos1, 2011-04-18 17:28:21 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r--- ns:497928 nr:0 dw:0 dr:497928 al:0 bm:31 lo:0 pe:0 ua:0 ap:0 resync: used:0/31 hits:31091 misses:31 starving:0 dirty:0 changed:31 act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0 磁盘状态都是”实时”,表示数据同步完成了. 五 使用DRBD 你现在可以把主机上的DRBD设备挂载到一个目录上进行使用.备机的DRBD设备无法被挂载,因为它是 用来接收主机数据的,由DRBD负责操作. 在centos1上执行: [root@centos1 /]# mount /dev/drbd1 /data1 六. 测试drbd同步 先在primary节点centos1上写入数据: # cp mysql-6.0.3.tar.gz /data1/ ls –l /data/ -rw-r--r-- 1 root root 56857784 Mar 13 16:41 mysql-6.0.3-alpha-linux-x86_64-glibc23.tar.gz 然后,我们把primary降级成secondary,把secondary提升成primary: [root@centos1 /]# umount /data1 [root@centos1 /]# drbdadm secondary dbdata 把primary降级前,一定要先umount设备才行。 然后提升secondary: [root@centos2 /]# drbdadm primary dbdata [root@centos2 /]# mount /dev/drbd1 /data1 [root@centos2 /]# ls –l /data -rw-r--r-- 1 root root 56857784 Mar 13 16:41 mysql-6.0.3-alpha-linux-x86_64-glibc23.tar.gz 可以看到,数据已经完全同步过去了。 DRDB的一些常规操作: 切换主从节点前,要注意umount 主从切换: drbdadm primary all, drbdadm secondary all 节点间连接:drbdadm connect|disconnect all DRBD脑裂后的处理: 脑裂后,两个节点间数据不同步,主从关系失效,需要按下面的步骤修复: a.在从节点如下操作: #drbdadm secondary dbdata #drbdadm -- --discard-my-data connect dbdata b.在主节点上,通过cat /proc/drbd查看状态,如果不是WFConnection状态,需要再手动连接: #drbdadm connect dbdadta (责任编辑:IT) |