死siua11 发表于 2019-1-7 12:48:50

DRBD+Heartbeat双机热备硬件故障自动切换

DRBD+Heartbeat

  测试环境:
  Node1 192.168.122.2(master)两块磁盘(vda系统,vdb数据盘)
  Node2 192.168.122.8(slave)两块磁盘
  服务器操作系统版本centos6.3 32bit
  vdb硬盘不要格式化
  一、DRBD安装
  准备工作
  安装下面依赖包
  #yum install make gcc gcc-c++ flex kernel-devel kernel-headers
  注意:安装的kernel-devel的内核源码(内核源码路径/usr/src/kernel/)和当前系统的kernel版本(uname -r)不一致的话需要把当前内核更新一下。#yum update kernel-版本号
  修改默认引导内核为最新版本内核,默认更新后最新的内核排在最上面,不用修改。如果不是就按照下面方法修改。
  修改/etc/grub.conf 查看最新的内核版本排在第几个,从0开始。title开头的行是内核。将default=设置为要启动的内核顺序数。
  重启服务器
  配置DRBD (master和slave服务器配置一样)
  下载drbd源码http://oss.linbit.com/drbd/
  解压tar zxvf drbd-8.4.3.tar.gz
  进入解压后的drbd-8.4.3
  建立drbd的安装目录/usr/local/drbd
  开始编译安装
  ./configure --prefix=/usr/local/drbd --with-km
  make KDIR=/usr/src/kernels/内核源码目录/
  make install
  mkdir -p /usr/local/drbd/var/run/drbd
  cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
  分析可加载模块的依赖性,生成modules.dep和映射文件
  depmod
  加载模块
  modprobe drbd
  查看是否已经加载了drbd模块
  lsmod |grep drbd
  建立配置文件
  vi /usr/local/drbd/etc/drbd.conf
  写入
  include "drbd.d/global_common.conf";
  include "drbd.d/*.res";
  修改/usr/local/drbd/etc/global_common.conf 文件
  net {

#DRBD复制有三种:
#协议A,本地写入完成,数据包已在发送队列中,则写被认为是完成。在一个节点故障时可能发送数据丢失,因为要被写入远程的数据可能仍然在发送队列。
#协议B,本地吸入完成且数据包到底对等节点则认为写在主节点完成,数据丢失可能发送在参加的两个节点同事故障情况下,因为在飞行的数据可能不会提交到磁盘
#协议C,只有本地和远程节点的磁盘已经确认写操作完成,写才认为完成。没有数据丢失情况。但网络带宽决定I/O吞吐量。
#应用最多的是协议C
#添加协议C(大写)
  protocol C;

  protocol C;
  }
  更正,之前r0.res的路径写错,今天看的时候才发现
  vi /usr/local/drbd/etc/drbd.d/r0.res
  #resource后面跟drbd资源
  resource r0 {
  #on 后面跟节点的主机名
  on node1 {
  #device设置drbd的设备名称
  device/dev/drbd1;
  #drbd设备同步的物理磁盘
  disk/dev/vdb;
  #节点drbd监听的端口
  address 192.168.122.2:7789;
  meta-diskinternal;
  }
  on node2 {
  device/dev/drbd1;
  disk/dev/vdb;
  address 192.168.122.8:7789;
  meta-diskinternal;
  }
  }
  修改主机名
  #hostname 新主机名
  修改文件/etc/sysconfig/network中主机名
  添加本地解析vi /etc/hosts
  创建drbd记录信息的数据块
  #drbdadm create-md r0
  分别在两个机器启动drbd
  #service drbd start
  启动后查看drbd状态,两台都是Secondary,Inconsistent表示不一致,刚配好的DRBD两个节点都认为自己是Secondary,手工指定一台为primary
  service drbd status或者cat /proc/drbd
  m:rescsrodspmountedfstype
  1:r0ConnectedSecondary/SecondaryInconsistent/InconsistentC
  在node1(master)上运行指定它primary
  #drbdadm primary r0 –force
  完成后再次查看drbd的状态
  service drbd status或者cat /proc/drbd
  会发现两个服务器正在同步
  
  drbd driver loaded OK; device status:
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@master-01, 2013-07-22 23:01:55
  m:rescsrodspmountedfstype
  0:r0SyncTargetSecondary/SecondaryInconsistent/UpToDateC
  ...sync'ed:74.1%(5316/20476)M
  
  
  
  等完成后会看到ds变成UpToDate/UpToDate (实时)
  下一步对drbd的设备进行格式化,此操作只在primary服务器上进行Secondary服务器起来后什么都不需要操作。
  
  即使没有同步完,也可以对drbd设备进行格式化
  #mkfs.ext3 /dev/drbd1
  挂载drbd分区
  #/mount /dev/drbd1 /data
  注意:集群中只有primary服务器可以挂载设备,secondary挂载会报错。
  同步测试
  在node1(primary)服务器上向/data写一些文件
  然后停止drbd服务
  #service drbd stop
  在node2(secondary)将其设置为primary
  #drbdadm primary all或者drbdadm primary r0
  在secondary服务器上就可以挂载/dev/drbd1 到自己的挂载点/data
  查看刚才在node1上写的文件是否同步到node2上。
  二、安装Heartbeat
  操作系统Centos6.3默认的yum源没有heartbeat,需要使用epel的源
  下载#wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
  安装#rpm –Uvh epel-release-6-8.noarch.rpm
  安装
  #yum install heartbeat
  配置master的heartbeat
  进入/etc/ha.d/创建ha.cf文件,写入下面内容
  debugfile /var/log/ha-debug
  logfile /var/log/ha-log
  keepalive 2
  deadtime 10
  warntime 6
  initdead 10
  udpport 694
  #slave服务器的IP
  ucast eth0 192.168.122.2
  #列出master和slave节点
  node node1
  node node2
  auto_failback off
  respawn hacluster /usr/lib/heartbeat/ipfail
  在同目录创建验证文件authkeys内容如下
  auth 1
  1 crc
  在同目录创建haresources文件内容如下
  #下面的IP是集群的VIP,drbddisk是切换时调用的脚本
  node1 192.168.122.9 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4
  从drbd的源码中的scripts目录中复制drbddisk脚本到/etc/ha.d/resource.d/
  启动master的heartbeat
  service heartbeat start
  配置slave
  文件ha.cf内容稍有不同
  debugfile /var/log/ha-debug
  logfile /var/log/ha-log
  keepalive 2
  deadtime 10
  warntime 6
  initdead 10
  udpport 694
  #master服务器的IP
  ucast eth0 192.168.122.8
  #列出master和slave节点
  node node1
  node node2
  auto_failback off
  respawn hacluster /usr/lib/heartbeat/ipfail
  文件haresources内容
  node2 192.168.122.9 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4
  同样需要drbd的源码中的scripts目录中复制drbddisk脚本到/etc/ha.d/resource.d/
  其他配置和master一样
  Drbd自动切换测试
  在master上停止heartbeat服务
  会发现slave服务器上会自动挂载/dev/drbd1到/data,查看/data中数据和master上一致。



页: [1]
查看完整版本: DRBD+Heartbeat双机热备硬件故障自动切换