Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345133
  • 博文数量: 306
  • 博客积分: 3975
  • 博客等级: 中校
  • 技术积分: 3265
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-27 13:14
文章分类

全部博文(306)

文章存档

2017年(1)

2016年(3)

2015年(11)

2014年(15)

2013年(178)

2012年(41)

2011年(38)

2010年(9)

2009年(9)

2008年(1)

分类: 系统运维

2008-01-02 13:43:43

   如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd在Linux下创建一个高可用(HA)的集群服务器。
   DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。本文就是用这种方式来搭建nfs高可用集群的。

2 服务器说明

 172.20.67.130 ----主机名drbdzhu------角色drbd的主服务器

 172.20.67.131 ----主机名drbdcong ---------角色 drbd的辅助服务期

 172.20.67.132 ----主机名 nfsclient ---角色 nfs的客户端

3 drbd的安装和配置

3.1 drbd主机上的操作

[root@drbdzhu local]#tar zxvf drbd-8.2.1.tar.tar

[root@drbdzhu local]#cd drbd-8.2.1

[root@drbdzhu drbd-8.2.1]#make

如果编译顺利可以看到Module build was successful.

[root@drbdzhu drbd-8.2.1]#make install

可以编辑配置文件了
[root@drbdzhu drbd-8.2.1]# vi /etc/drbd.conf  内容如下:

skip {

  As you can see, you can also comment chunks of text

  with a 'skip[optional nonsense]{ skipped text }' section.

  This comes in handy, if you just want to comment out

  some 'resource {...}' section:

  just precede it with 'skip'.

   

  The basic format of option assignment is

 

   

  It should be obvious from the examples below,

  but if you really care to know the details:

 

 

        valid options in the respective scope

    := |||...

              depending on the set of allowed values

              for the respective option.

      := [0-9]+, sometimes with an optional suffix of K,M,G

  := (|\"([^\"")+

     := [/_.A-Za-z0-9-]+

}

global {

usage-count yes;     (是否参加使用者统计,yes为参加)

}

common {

  syncer { rate 10M; }

}

resource r0 {         (可以有多个资源,如r1,r2等)

protocol C;   (数据同步协议,C为收到数据并写入后返回,确认成功)

 

  handlers {

 pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

 pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

 local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

 outdate-peer "/usr/sbin/drbd-peer-outdater";

}

startup {

degr-wfc-timeout 120;

}

disk {

on-io-error   detach;

#size 100G;    (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)

}

net {

after-sb-0pri disconnect;

after-sb-1pri disconnect;

after-sb-2pri disconnect;

rr-conflict disconnect;

}

syncer {

rate 10M;    (设置网络同步速率)

al-extents 257;

  }

on drbdzhu {           (drbdzhu是指服务器的主机名)

    device     /dev/drbd0;

    disk       /dev/sdb1;

    address    172.20.67.132:7788;

meta-disk  internal;

}

on drbd {                (drbd是指服务器的主机名)

    device    /dev/drbd0;

    disk      /dev/sdb1;

    address   172.20.67.159:7788;

    meta-disk internal;

  }

}

 

[root@drbdzhu drbd-8.2.1]#chkconfig --level 35 drbd on   #自动启动服务

[root@drbdzhu drbd-8.2.1]#fdisk /dev/sdb               #创建分区

[root@drbdzhu drbd-8.2.1]#drbdadm create-md r0       #创建drbd资源

[root@drbdzhu drbd-8.2.1]#drbdsetup /dev/drbd0 primary -o  #把drbd0设为主

[root@drbdzhu drbd-8.2.1]#service drbd start            #启动服务

[root@drbdzhu drbd-8.2.1]#mkfs.ext3 /dev/drbd0    (有时候下一步mount不上就需要做这一步)

[root@drbdzhu drbd-8.2.1]#mount /dev/drbd0 /mnt          #挂载

[root@ drbdzhu drbd-8.2.1]# cat /proc/drbd 

version: 8.2.1 (api:86/proto:86-87)

GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by , 2007-12-28 17:30:46

 0: cs:Connected st: Primary/Secondary ds:UpToDate/UpToDate C r---

    ns:104427 nr:42 dw:7946 dr:110895 al:15 bm:28 lo:0 pe:0 ua:0 ap:0

         resync: used:0/31 hits:6515 misses:7 starving:0 dirty:0 changed:7

         act_log: used:0/257 hits:2021 misses:15 starving:0 dirty:0 changed:15

 

3.2 drbd从机上的操作

[root@drbdzhu local]#tar zxvf drbd-8.2.1.tar.tar

[root@drbdzhu local]#cd drbd-8.2.1

[root@drbdzhu drbd-8.2.1]#make

如果编译顺利可以看到Module build was successful.

[root@drbdzhu drbd-8.2.1]#make install

可以编辑配置文件了
[root@drbdzhu drbd-8.2.1]# vi /etc/drbd.conf  内容如下:

skip {

  As you can see, you can also comment chunks of text

  with a 'skip[optional nonsense]{ skipped text }' section.

  This comes in handy, if you just want to comment out

  some 'resource {...}' section:

  just precede it with 'skip'.

   

  The basic format of option assignment is

 

   

  It should be obvious from the examples below,

  but if you really care to know the details:

 

 

        valid options in the respective scope

    := |||...

              depending on the set of allowed values

              for the respective option.

      := [0-9]+, sometimes with an optional suffix of K,M,G

  := (|\"([^\"")+

     := [/_.A-Za-z0-9-]+

}

global {

usage-count yes;     (是否参加使用者统计,yes为参加)

}

common {

  syncer { rate 10M; }

}

resource r0 {         (可以有多个资源,如r1,r2等)

protocol C;   (数据同步协议,C为收到数据并写入后返回,确认成功)

 

  handlers {

 pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

 pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

 local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

 outdate-peer "/usr/sbin/drbd-peer-outdater";

}

startup {

degr-wfc-timeout 120;

}

disk {

on-io-error   detach;

#size 100G;    (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)

}

net {

after-sb-0pri disconnect;

after-sb-1pri disconnect;

after-sb-2pri disconnect;

rr-conflict disconnect;

}

syncer {

rate 10M;    (设置网络同步速率)

al-extents 257;

  }

on drbdzhu {           (drbdzhu是指服务器的主机名)

    device     /dev/drbd0;

    disk       /dev/sdb1;

    address    172.20.67.130:7788;

meta-disk  internal;

}

on drbdcong {                (drbd是指服务器的主机名)

    device    /dev/drbd0;

    disk      /dev/sdb1;

    address   172.20.67.131:7788;

    meta-disk internal;

  }

}

[root@drbdcong drbd-8.2.1]#chkconfig --level 35 drbd on   #自动启动服务

[root@drbdcong drbd-8.2.1]#fdisk /dev/sdb               #创建分区

[root@drbdcong drbd-8.2.1]#drbdadm create-md r0         #创建drbd资源

[root@drbdcong drbd-8.2.1]#service drbd start             #启动服务

注意:drbd 从机不需要mount

[root@ drbdcong drbd-8.2.1]# cat /proc/drbd 

version: 8.2.1 (api:86/proto:86-87)

GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by , 2007-12-28 17:23:06

 0: cs:Connected st: Secondary/Primary ds:UpToDate/UpToDate C r---

    ns:42 nr:104427 dw:104469 dr:86 al:2 bm:9 lo:0 pe:0 ua:0 ap:0

         resync: used:0/31 hits:6515 misses:7 starving:0 dirty:0 changed:7

         act_log: used:0/257 hits:40 misses:2 starving:0 dirty:0 changed:2

 

4 heartbeat的安装和配置

[root@drbdzhu local]#rpm –ivh heartbeat-pils-2.0.4-1.el4.i386.rpm

[root@drbdzhu local]#rpm –ivh heartbeat-stonith-2.0.4-1.el4.i386.rpm

[root@drbdzhu local]#rpm –ivh heartbeat-2.0.4-1.el4.i386.rpm

[root@drbdzhu local]#cd /usr/share/doc/heartbeat-2.0.4

[root@drbdzhu heartbeat-2.0.4]# cp authkeys ha.cf haresources /etc/ha.d/

[root@drbdzhu heartbeat-2.0.4]#cd /etc/ha.d

[root@drbdzhu ha.d]#vi ha.cf

debugfile /var/log/ha-debug

logfile /var/log/ha-log

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport 694

ucast eth0 172.20.67.131 //ucast方式 心跳线网卡 ,对端ip

auto_failback on

node drbdzhu

node drbdcong  {//HA的两个节点,机器名要在hosts中定义(机器名可以自己指定只要在hosts中有定义就行)

 vi /etc/hosts添加如下两行:

172.20.67.130 drbdzhu

172.20.67.131 drbdcong

[root@drbdzhu ha.d]# vi authkeys

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

[root@drbdzhu ha.d]#vi haresources

drbdzhu 172.20.67.220 drbddisk::r0 Filesystem::/dev/drbd0::/mnt::ext3 nfs 

[root@drbdzhu ha.d]#service heartbeat start

 

5 drbd服务器上的nfs 服务的配置  (drbd的主机和从机上的操作都一样)

[root@drbdzhu ha.d]# vi /etc/exports

/mnt     172.20.67.132(rw, no_root_squash,async)

 

[root@drbdzhu ha.d]#chkconfig --del nfs

 

6 nfs 客户端的配置 ----172.20.67.132

 #service nfs start

 #mount -t nfs 172.20.67.220:/mnt /usr/local/src

 

7 整体的测试

在drbd的主机上

#cd /mnt

#touch test0

#ls

 Test0

在nfs 的客户端

# cd /usr/local/src

#ls

 Test0

在drbd的主机上

#service heartbeat stop

在drbd的从机上

#cd /mnt

#ls

 test

#touch test1

在nfs 的客户端

# cd /usr/local/src

#ls

 Test0 test1  (说明配置成功)

 

8 补充说明

在没有heartbeat 的情况下,要想看到drbd的效果,做法如下:

在drbd的主机上

#cd /mnt

#touch test0

#ls

 test0

在drbd的从机上

#cd /mnt

#ls

 空的

此时应该把drbd的主地位将为从#drbdsetup /dev/drbd0 secondary----主机上操作

在把从机的drbd 升为主地位 # drbdsetup /dev/drbd0 primary –o --------从机上操作

在drbd的从机上

#cd /mnt

#ls

test0

这样就说明drbd 主从备份成功!

阅读(5611) | 评论(0) | 转发(1) |
0

上一篇:没有了

下一篇:Linux如何在系统启动时自动加载模块

给主人留下些什么吧!~~