gggggds 发表于 2018-12-31 10:21:01

双机热备+负载均衡(Heartbeat+DRBD+NFS+Keepalived+Lnmp)线上方案

本帖最后由 gotop 于 2011-10-12 15:03 编辑   双机热备+负载均衡 线上方案
  (Heartbeat+DRBD+NFS+Keepalived+Lnmp)
  gotop
  对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里最主要是就是数据同步用的共享磁盘了,磁盘柜+磁盘一共下来是20多万,这对于追求最高性价比的双机负载热备方案来说是极其不靠谱的,尤其是中小型企业,私有企业,一般经理是不会考虑这么高的成本的。我们通常做都是四台服务器+一个磁盘柜子+千兆交换机,那么这个成本下来将近30万了,而且这个方案有个弊端就是 存储依然存在单点故障,除非使用双控制+双电源+双主板设计的磁盘柜,但这种成本实在太高。那是否有更为廉价的双机方案呢,很明显开源软件帮我们解决了成本问题!!!
  用Heartbeat+DRBD+NFS+Keepalived+Lnmp等开源软件实现双机负载热备架构只需要两台服务器+一台全千兆交换机,这个成本是极其低廉的,我们做运维了就是要用技术来压榨硬件性能,用最低的成本实现最高的效能,不然天天谈论的性能优化有何用?堆叠硬件不是更好?那不是我们的目的,下面我们来看看这两台服务器的双机热备+负载均衡是如何实现并且稳定运行的。
  这个方案是我给一个论坛做的,论坛15分钟在线8000人,以前放在IIS里面,并发连接6000-7000左右,我给设计的双机热备方案如下图:
  图一
http://bbs.nanjimao.com/data/attachment/forum/201110/12/114332g16z00ulfk4uh1mf.png
  集群拓扑图.png (62.41 KB, 下载次数: 630)
  下载附件
  2011-10-12 11:43 上传
  注意:第三台服务器可要可不要,我这里他由于成本问题,并没有采用第三台服务器,而是一共只有两台
  系统环境配置
  一,硬件配置:
  节点一(centosa):做主负载点,和主数据库压力负载点,必须高性能高稳定高I/O
  配置如下:
  CPU:双CPU( 4核+4核) 5405级别
  内存:8G 组三通道 DDR3 ECC内存
  硬盘:1块1TB普通硬盘+2块 300G SAS15K(15000转)硬盘
  网卡:2块千兆网卡
  节点二(centosb):做分担负载和备服务器,稳定第一
  CPU:双CPU( 4核+4核) 5405
  内存:8G 组三通道 DDR3 ECC内存
  硬盘:1块1TB普通硬盘+3块 300G SAS15K(15000转)硬盘
  网卡:2块千兆网卡
  注意:网卡极力建议用四块,这个架构对网络I/O要求极高,我这里只有两块,没办法,机房做不到,如果你是百兆交换机,拜托,你一定要用四块网卡
  二,操作系统配置
  1),所有服务器的操作系统版本:
  操作系统版本:CentOS5.7 64位
  操作系统官方下载地址:http://isoredirect.centos.org/centos/5/isos/x86_64/
  2),每台服务器的安装要求:
  节点一:
  分区:一共三块硬盘,不用组RAID
  第一块硬盘:
  系统占用一块,分区情况如下:
  /boot                     200MB
  /                           40GB
  swap交换分区      8GB
  /data                      第一块硬盘的所有剩余空间
  第二块硬盘:
  不要分区,留给我自己分区
  第三块硬盘:
  不要分区,留给我自己分区
  系统安装安装规范
  最小化安装,字符界面安装
  去掉所有组件,只需要一个内核
  节点二:
  分区:一共三块硬盘,不用组RAID
  第一块硬盘:
  系统占用一块,分区情况如下:
  /boot      500MB
  /               40GB
  swap交换分区      16GB
  /data      第一块硬盘的所有剩余空间
  第二块硬盘:
  不要分区,留给我自己分区
  第三块硬盘:
  不要分区,留给我自己分区
  系统安装要求
  最小化安装,字符界面安装
  去掉所有组件,只需要一个内核
  三,交换机配置:
  注意:有条件最好用两台交换机,内网一台,外网一台
  如果只有一台交换机,划分两个VLAN,一个外网使用,一个内网使用
  四,目录规划用途
  /usr/local/src/lnmp:用来存放源码工具等等
  /data:用来存放所有数据和NFS以及DRBD的挂载
  /data/shell:用来存放所有管理脚本
  /data/mysql:用来挂载DRBD的mysql资源,以供mysql存放数据库
  /data/wwwnfs:用来挂载DRBD生成的www资源,以供两个节点挂载到各个节点的/data/www目录,以供论坛等程序数据使用
  /data/www:用来挂载NFS资源,用来存放论坛(网站)等程序数据
  双机热备+负载均衡具体配置
  一,先建立用户和目录吧:
  useradd -s /sbin/nologin www
  useradd -s /sbin/nologin mysql
  mkdir -p /data/mysql
  mkdir -p /data/www
  mkdir -p /data/wwwnfs
  mkdir -p /data/shell
  二,架构详解
  如果用LVS做均衡器拓扑图如下:
  图二
http://bbs.nanjimao.com/data/attachment/forum/201110/12/121852zy0t8enx8xaaz84l.jpg.thumb.jpg
  集群拓扑图2.jpg (158.59 KB, 下载次数: 613)
  下载附件
  2011-10-12 12:18 上传
  如果用Nginx做均衡器拓扑图如下:
  图三
http://bbs.nanjimao.com/data/attachment/forum/201110/12/122747q78qg8et7h8q44kg.jpg.thumb.jpg
  集群拓扑图3.jpg (184.31 KB, 下载次数: 624)
  下载附件
  2011-10-12 12:27 上传
  我们这里用NGINX做均衡器,因此我用图三来拓扑,来讲讲这个拓扑的工作原理
  内网:
  1,DRBD网络存储创建出两个资源,一个mysql给mysql数据库同步用,一个www给web(论坛)数据NFS共享挂载用,虚拟出两个虚拟IP,一个是 192.168.1.100,用来连接数据库,一个是192.168.1.200,用来给节点挂载NFS
  注意:NFS底下挂载了三次:DRBD挂载一次,文件系统挂载一次,客户端挂载一次
  2,Heartbeat来实现DRBD的HA,同时虚拟出两个内网IP,并管理NFS,MySQL的启动和关闭
  外网:
  1,两个节点都用Nginx做均衡器,通过内网调度负载两个节点,实现内部均衡
  2,DNS配置双IP对应一个域名的方式来实现DNS轮询,实现外网均衡
  3,Keepalived使用双主(master)配置虚拟出两个虚拟IP:节点一 12.12.12.100和节点二 12.12.12.200,同时共外网访问,两个节点互为主从关系,当某个节点挂掉的时候,另外一个节点将同时是两个资源的master,同时拥有两个虚拟IP,实现资源转移
  我们知道DNS的缺点就是生效慢,分配资源不合理,理论上有可能把所有的请求都发送给同一节点,导致均衡不合理导致所有资源不可用,这里我们由于有了NGINX内部负载,就不怕DNS轮询不均衡了,因为NGINX内部有严谨的调度方式,不管那台请求有多少,在内部都能实现理想的调度,这样就能把DNS负载均衡和NGINX完美结合,是硬件资源得到合理的利用,然后利用keepalive保证了每个节点的可靠性,几乎完美!
三,LNMP架构配置  两台服务器的一样配置这个我请看我发的这个帖子:http://bbs.ywlm.net/thread-2-1-1.html
  注意一:这里MYSQL都不要初始化,不要启动!后面有专门的配置的
  注意二:nginx所有端口都改成 8080,因为一会还要安装nginx来做均衡器并对外提供服务,所以不要用默认的80
  四,
安装配置NFS  兵马未动粮草先行,NFS是网站存放数据实现数据同步的基础,我们先安装上吧
  1,安装:
服务器端要安装:  nfs-utils:NFS主程序
  portmap:RPC主程序
  客户端要安装:
  nfs-utils:NFS主程序
  portmap:RPC主程序
  由于我们这里一共只用了两台服务器,所以,这里客户端和服务器段是同一台机器,这点要注意了
  两个节点同时安装:

[*]  yum -y install portmap nfs-utils
  复制代码
  2,配置:
  生存共享目录
vi /etc/exports  输入:

[*]  /data/wwwnfs 192.168.1.0/24(rw,sync,anonuid=501,anongid=501)
  复制代码
  注意:
  /data/wwwnfs:就是给两个节点挂载的目录,所有网站程序都放在这里,实现论坛程序等数据的共享(同步)
  anonuid=501,anongid=501:这个表示客户端上任何用户进入到挂载目录都以uid=501和gid=501身份,我这里这个代表的是www用户
  3,启动:
  service portmap start
  service nfs start
  切忌,必须先启动portmap
  chkconfig --level 0123456 nfs off
  chkconfig --level 0123456 portmap on
  注意:portmap服务器必须常驻,且不收heartbeat管理;而nfs这必须要用heartbeat来管理他的启动和关闭,所以这里要关闭nfs开机自动启动
  同时要启动锁机制,因为同时有两个节点要使用同一份数据,所以需要有总裁,这个尤其是在NFS给mysql用的时候是必须要用的,对于论坛或网站,要看情况,如果存在对同一文件同时修改的时候必须要启动NFS锁机制,如果没有这种情况,那么建议不要启动,启动了会降低NFS的性能:
  /sbin/rpc.lockd
  echo "/sbin/rpc.lockd" /etc/rc.local
  4,建立NFS的管理脚本
  有人奇怪了,nfs用RPM安装的,应该直接用service nfs start/stop即可啊,维护还要建立脚本呢,这里由于NFS的启动关闭权要交给heartbeat处理,而默认/etc/init.d/nfs这个启动脚本在heartbeat处理的时候有问题,所以这里自己建立了一个
  vi nfs
  输入:

[*]  #!/bin/bash
[*]
[*]  NFSD=/etc/rc.d/init.d/nfs
[*]  NFSDPID=`/sbin/pidof nfsd`
[*]  case $1 in
[*]  start)
[*]  $NFSD start;
[*]  ;;
[*]  stop)
[*]  $NFSD stop;
[*]  if [ "$NFSDPID" != " " ];then
[*]  for NFSPID in $NFSDPID
[*]  do /bin/kill -9 $NFSPID;
[*]  done
[*]  fi
[*]  ;;
[*]  *)
[*]  echo "Syntax incorrect. You need one of {start|stop }"
[*]  ;;
[*]  esac
[*]
  复制代码
wq保存退出  chmod +x nfs
  OK,NFS服务器端配置完毕。
  注意如果你用的是四台服务器或者更多,把均衡器和节点分开的,那么还需要在节点也就是NFS的客户端安装:

[*]  yum -y install portmap nfs-utils
  复制代码
并且启动portmap  service portmap start
  chkconfig --level 35 portmap on
  注意,客户端必须要启动portmap,且要安装nfs-utils,但不需要启动NFS
  我们这里均衡器和节点都在同一台服务器上,所以就免去了这些过程了,不过他同时是客户端,所以要建立挂载脚本
  vi /data/shell/mountnfs.sh
  输入:

[*]  /bin/mount -t nfs -o nosuid,noexec,nodev,rw,nouser,noauto,bg,hard,nointr,rsize=32k,wsize=32k,tcp 192.168.10.200:/data/wwwnfs /data/www
  复制代码
  chmod +x /data/shell/mountnfs.sh
  echo "/data/shell/mountnfs.sh" /etc/rc.local
  在另外一台节点centosb上也这样安装
  五,安装配置DRBD
  1,分区
  DRBD可用设备有如下:
  (1)一个磁盘,或者是磁盘的某一个分区
  (2)一个soft raid 设备
  (3)一个LVM的逻辑卷
  (4)一个EVMS(Enterprise Volume Management System,企业卷管理系统)的卷
  (5)其他任何的块设备
  这里我是建立在一个分区上的
  查看磁盘信息:

[*]  fdisk -l
  复制代码
  Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
  255 heads, 63 sectors/track, 121601 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   IdSystem
  /dev/sda1   *         1          64      514048+83Linux
  /dev/sda2            65      5163    40957717+83Linux
  /dev/sda3            5164      7203    16386300   82Linux swap / Solaris
  /dev/sda4            7204      121601   918901935    5Extended
  /dev/sda5            7204      121601   918901903+83Linux
  Disk /dev/sdb: 300.0 GB, 300069052416 bytes
  255 heads, 63 sectors/track, 36481 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   IdSystem
  Disk /dev/sdc: 300.0 GB, 300069052416 bytes
  255 heads, 63 sectors/track, 36481 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   IdSystem
  三块磁盘:
  一块1TB已经分区,安装了操作系统和存放数据
  另外两块没有分区,特用来给DRBD用
  下面分区:
  fdisk /dev/sdb
  ......
  fdisk /dev/sdc
  ......
  分区好后我们得到两个未挂载的分区
  /dev/sdb1               1       36481   293033601   83Linux
  /dev/sdc1               1       36481   293033601   83Linux
  /dev/sdb1用于数据库
  /dev/sdc1用于NFS
  注意:先不要挂载
  2,安装DRBD
  1),下载
  DRBD官方网站:http://www.linux-ha.org/DRBD
  源码下载地址: http://oss.linbit.com/drbd
  2),安装
  DRBD有三种安装模式:
  RPM包安装,直接编译进内核 或 作为一个可加载的内核模块编译。
  RPM包安装内核版本必须是2.6.33或高于2.6.33,否则要先升级内核,2.6.33或高于2.6.33内核里面已经集成的有DRBD模块
  uname -r可以看到内核版本,我的是
  这里我用的是源码编译安装
  如果内核版本低于2.6.33那么需要编译模块到内核,且先要安装kernel-devel
  yum install gcc gcc-c++ make glibc flex wget kernel-devel
  cd /src/local/src
  wget http://oss.linbit.com/drbd/8.3/drbd-8.3.10.tar.gz
  tar -zxvf drbd-8.3.10.tar.gz
  cd drbd-8.3.10
  ./configure --prefix=/ --with-km --with-heartbeat
  安装完成后会在/etc/ha.d/resource.d目录下生成
  drbddiskdrbdupper这两个文件
  make KDIR=/usr/src/kernels/2.6.18-194.el5-i686/
  make install
  注意:make KDIR=/usr/src/kernels/2.6.18-194.el5-i686/这个一定要是你当前加载的内核,如果你内核升级了,一定要去报这个的路径是当前加载的内核版本的路径哦
  查看当前加载的内核版本方法是:
  uname -r
  或着
  vi /boot/grub/menu.lst
  检查是否安装妥当:

[*]  ls /lib/modules/`uname -r`/kernel/drivers/block/drbd.ko
  复制代码
  drbd.ko
  看到这个,就说明已经安装完好
  加载到内核

[*]  insmod /lib/modules/`uname -r`/kernel/drivers/block/drbd.ko
  复制代码
  检查内核是否已经加载了drbd模块
  lsmod | grep drbd
  drbd    2263522
  //有的话表示加载模块成功.
  检查安装文件
  find / -name drbd*
  3,配置DRBD
  DRBD有三种配置文件:
  /etc/drbd.conf
  /etc/drbd.d/global_common.conf
  /etc/drbd.d/*.res
  第一个配置文件:/etc/drbd.conf
  vi /etc/drbd.conf

[*]  # You can find an example in/usr/share/doc/drbd.../drbd.conf.example
[*]
[*]  include "drbd.d/global_common.conf";
[*]  include "drbd.d/*.res";
[*]
  复制代码
默认就是这个,我们不用管他,默认即可  第二个配置文件:/etc/drbd.d/global_common.conf
  这个是全局配置文件,包括监听,同步速率等等极为重要的参数
  vi /etc/drbd.d/global_common.conf
  输入:

[*]  global {
[*]  #是否参加DRBD使用者统计,默认是yes
[*]  usage-count no;
[*]  }
[*]
[*]  common {
[*]  #使用协议C复制模式
[*]  protocol C;
[*]
[*]  handlers {
[*]  #在系统出现什么故障时主服务器采取什么操作,例如挂起
[*]  #local-io-error"/usr/lib/drbd/notify-io-error.sh;/usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"
[*]  }
[*]
[*]  startup {
[*]  wfc-timeout 0;
[*]  #启动时连接其他节点的超时时间
[*]  degr-wfc-timeout 120;
[*]  }
[*]
[*]  disk {
[*]  #当磁盘有错误时,不连接
[*]  on-io-error   detach;
[*]  }
[*]
[*]  net {
[*]
[*]  timeout 60;
[*]  connect-int 10;
[*]  ping-int 10;
[*]  max-buffers 2048;
[*]  max-epoch-size 2048;
[*]  #下面三行一定程度能防止脑裂问题
[*]  #       after-sb-0pri discard-older-primary;
[*]  #       after-sb-1pri call-pri-lost-after-sb;
[*]  #       after-sb-2pri call-pri-lost-after-sb;
[*]  #或下面三行也可以
[*]  after-sb-0pri discard-zero-changes;
[*]  after-sb-1pri discard-secondary;
[*]  after-sb-2pri disconnect;
[*]  }
[*]
[*]  syncer {
[*]  #复制时的网络速度限制
[*]  rate 20M;
[*]  }
[*]  }
[*]
  复制代码
上面是完整的配置文件,你如果理解了,就可以直接复制过去用,不会有问题  注意:rate表示同步的速率,这里的20M就是20MB,不是20Mb,所以如果你是100M交换机,那么请不要设置这么大,否则,你的交换机会被拖累的无响应的,你可以设置成8M即可,即80Mb,如果你是千M交换机,且是千兆网线和网卡,你可以设置成80M一下,但考虑到数据库,NFS共享等需要大量网络I/O的的应用,这里还是设置20M即可
  第三个配置文件:/etc/drbd.d/mysql.res和/etc/drbd.d/www.res
  这里面的文件在第一个配置文件里面定义了
  因为我这里要建立两个资源,所以有两个,注意,两个可以写在同一个配置文件里面,我习惯用两个配置文件,我一一来看
  vi /etc/drbd.d/mysql.res
  定义给mysql用的资源组(注意,名字你可以自己随便取,只要在应用的时候对应上即可,不必苛求)

[*]  #资源组的名称
[*]  resource mysql{
[*]
[*]  #定义主服务器资源
[*]  on centosa{
[*]  #建立块设备文件
[*]  device /dev/drbd1;
[*]  #要用于复制的分区
[*]  disk /dev/sdb1;
[*]  #定义侦听IP和端口
[*]  address 192.168.1.10:7788;
[*]  #meta data信息存放的方式,这里为内部存储,即和真实数据放在一起存储
[*]  meta-disk internal;
[*]  }
[*]
[*]  #定义备服务器资源
[*]  on centosb{
[*]  device /dev/drbd1;
[*]  disk /dev/sdb1;
[*]  address 192.168.1.20:7788;
[*]  meta-disk internal;
[*]  }
[*]
[*]  }
[*]
  复制代码
vi /etc/drbd.d/www.res  定义给web用的资源组(注意,名字你可以自己随便取,只要在应用的时候对应上即可,不必苛求)

[*]  #资源组的名称
[*]  resource www{
[*]
[*]  #定义主服务器资源
[*]  on centosb{
[*]  #建立块设备文件
[*]  device /dev/drbd2;
[*]  #要用于复制的分区
[*]  disk /dev/sdc1;
[*]  #定义侦听IP和端口
[*]  address 192.168.1.20:7789;
[*]  #meta data信息存放的方式,这里为内部存储,即和真实数据放在一起存储
[*]  meta-disk internal;
[*]  }
[*]
[*]  #定义备服务器资源
[*]  on centosa{
[*]  device /dev/drbd2;
[*]  disk /dev/sdc1;
[*]  address 192.168.1.10:7789;
[*]  meta-disk internal;
[*]  }
[*]
[*]  }
[*]
  复制代码
注意:  1,centosa和centosb这个必须要用计算机名(不是域名),且要在内网能ping通,为此要修改下Linux下的hosts文件
  vi /etc/hosts
  输入:
  192.168.1.10    centosa
  192.168.1.20    centosb
  在另外一个节点centosb上也同样这样安装
  4,初始化DRBD资源
  1),提升各个节点上的主
  在centosa上:
  drbdadm primary mysql
  在centosb上:
  drbdadm primary www
  2),初始化DRBD分区
  service drbd start
  启动的时候会初始化
  ps -ef | grep drbd
  root      3724   10 20:02 ?      00:00:00
  root      3731   10 20:02 ?      00:00:00
  root      3743   10 20:02 ?      00:00:00
  我们能看到三个进程:
  drbd1_worker:主进程程
  drbd1_receiver:数据发送
  drbd1_asender:数据接收
  手动初始化命令:

[*]  drbdadm create-md all
  复制代码
这个命令是有极大风险的,当有数据的时候不要在使用这个命令  注意:如果无法启动的并提示无法加载DRBD,这说明在启动的时候drbd.ko无法加载,我们可以重新执行一下:

[*]  insmod /lib/modules/`uname -r`/kernel/drivers/block/drbd.ko
  复制代码
同时修改启动脚本:  vi /etc/init.d/drbd
  在### END INIT INFO下面添加如下内容:

[*]  MYLSMOD=`/sbin/lsmod | grep drbd | grep drbd | cut -d ' ' -f 1`
[*]
[*]  if [ "$MYLSMOD" != "drbd" ];then
[*]  /sbin/insmod /lib/modules/2.6.18-274.el5/kernel/drivers/block/drbd.ko
[*]  fi
[*]
  复制代码
保存在启动试试,应该就没有问题了  添加为系统自动启动:

[*]  chkconfig --level 35 drbd on
  复制代码
  OK,第一个节点配置完成了
  
  在另外个节点centosb上一样安装,并且配置文件一样
  注意:启动会等待第二个节点起来,最好是在两个节点都配置完成的时候 两个节点一起启动!!!
  5,安装后状态检查和使用
  在主节点上
  cat /proc/drbd
  或
  service drbd status
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@centosa,
  2011-03-12 19:00:23
  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:524265204
  cs:Connected:为连接状态
  在备节点上
  cat /proc/drbd
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@centosb,
  2011-03-12 19:01:23
  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:524265204
  cs:Connected:为连接状态
  ds:表示两台节点的磁盘状态都是不一致(不符)
  如果没有在各个节点上提升为主节点,那么DRBD机会法判断哪个是主节点,需要我们手动执行一下
  我们在确认作为主节点的centosa上执行一下:

[*]  drbdadm -- --overwrite-data-of-peer primary all
  复制代码
  这时,我们再看他们的状态

[*]  cat /proc/drbd
  复制代码
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@centosa, 2011-03-12 19:00:23
  1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r--
  ---
  ns:2988560 nr:0 dw:0 dr:2996736 al:0 bm:182 lo:1 pe:8 ua:64 ap:0
  ep:1 wo:b oos:521277556
  [>....................] sync'ed:0.6% (509060/511976)M
  finish: 4:38:27 speed: 31,180 (30,176) K/sec
  主从状态,磁盘正在同步,这是第一次同步,同步的是底层信息,就像RAID1第
  一次同步一样,例如确定RAID的容量(和小的硬盘的容量一样)
  由此可知,必须确定了哪边是主孩子后才会开始同步
  cs:SyncSource:为同步状态
  单单纯查看各个节点的角色可以用下面命令
  drbdadm rol mysql
  drbdadm rol www

[*]  cat /proc/drbd
  复制代码
  version: 8.3.10 (api:88/proto:86-96)
  GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@centosb, 2011-03-12 19:01:23
  1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r--
  ---
  ns:0 nr:3354496 dw:3354240 dr:0 al:0 bm:204 lo:3 pe:6777 ua:2 ap:0
  ep:1 wo:b
  oos:520910964
  [>....................] sync'ed:0.7% (508700/511976)M
  finish: 1:45:08 speed: 82,564 (78,004) want: 102,400 K/sec
  从主状态,磁盘正在同步
  cs:SyncSource:为同步状态
  第一次同步过程很慢,在同步完成以前不要重启,否则要重新同步了!
  格式化分区
  与软RAID、LVM等类似,要使用DRBD创建的镜像分区,不是直接使用/dev/sdb1设备,而是在配置文件中指定的/dev/drbd1等。同样的,不必等待初始化完成后才使用drbd1设备。
  格式化设备:      mkfs -t ext3 -b 4096 /dev/drbd1
  #这里要注意,格式化只需要在主服务器上格式一次就可以了,因为格式化也会被同步过去,尤其在有数据的时候千万不要格式化了
  这里注意,我们需要在两个街道上各格式化一次,因为有两个资源组,且每个节点都有一个主节点:
  centosa:mkfs -t ext3 -b 4096 /dev/drbd1
  centosb:mkfs -t ext3 -b 4096 /dev/drbd2
  挂载分区:
  节点一centosa上:mount /dev/drbd1 /data/mysql
  节点二centosb上:mount /dev/drbd2 /data/www
  #需要注意,drbd1和drbd2设备只能在Primary一端被使用,下面的操作都是会报错的:
  在从节点上
  节点二centosb上:mount /dev/drbd1 /data/www
  mount: block device /dev/drbd1 is write-protected, mounting read-only
  mount: 错误的介质类型
  另外,为避免误操作,当机器重启后,默认都处于Secondary状态,如要使用drbd设备,需手动把其设置为Primary。
  当然,我们这里不需要操心,因为我们用heartbeat来自动设置primary和secondary
  到此,DRBD部分就安装完成了。
  下面的安装,二楼继续

页: [1]
查看完整版本: 双机热备+负载均衡(Heartbeat+DRBD+NFS+Keepalived+Lnmp)线上方案