1.实验环境
实验使用三个linux设备
a.abc.com ip 192.168.10.99
b.abc.com ip 192.168.10.100
test 192.168.10.200
拓扑图:
检查内核
[root@a ~]# uname -r
2.6.18-164.el5 #此版本内核默认未添加drbd内核模块
安装软件
在 a.abc.com 与b.abc.com 上同时执行安装操作
[root@love ~]# ll
总计 3088
-rw------- 1 root root 1192 10-05 18:43 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 10-05 19:56 Desktop
-rw-r--r-- 1 root root 221868 10-05 21:57 drbd83-8.3.8-1.el5.centos.i386.rpm
-rw-r--r-- 1 root root 1637238 10-05 21:58 heartbeat-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 293349 10-05 21:58 heartbeat-devel-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 230890 10-05 21:58 heartbeat-gui-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 111742 10-05 21:58 heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
-rw-r--r-- 1 root root 92070 10-05 21:58 heartbeat-pils-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root 179199 10-05 21:58 heartbeat-stonith-2.1.4-10.el5.i386.rpm
-rw-r--r-- 1 root root 35236 10-05 18:42 install.log
-rw-r--r-- 1 root root 3995 10-05 18:40 install.log.syslog
-rw-r--r-- 1 root root 125974 10-05 21:57 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
-rw-r--r-- 1 root root 56817 10-05 21:58 libnet-1.1.4-3.el5.i386.rpm
-rw-r--r-- 1 root root 92071 10-05 21:58 perl-MailTools-1.77-1.el5.noarch.rpm
[root@love ~]# yum localinstall *.rpm --nogpgcheck –y
设置在ssh通道中的无验证传输
在 a.abc.com 上创建密钥并将密钥转移到b.abc.com上
[root@a ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
49:6f:9d:0c:03:78:94:7c:52:b1:91:4e:35:34:51:f3 root@a.abc.com
[root@a .ssh]# ssh-copy-id -i id_rsa.pub b.abc.com
10
The authenticity of host 'a.abc.com (192.168.10.99)' can't be established.
RSA key fingerprint is 0a:78:89:da:1e:1d:97:95:0b:8b:03:22:e7:af:22:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'a.abc.com,192.168.10.99' (RSA) to the list of known hosts.
root@a.abc.com's password:
Now try logging into the machine, with "ssh 'b.abc.com'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
此时就可以在a.abc.com上将任意的文件使用 “scp 文件或目录 b.abc.com:/目录”进行移动
使用“ssh b.abc.com ‘命令’” #在“b.abc.com” 主机上执行命令
同步时钟频率
[root@a ~]# date
2012年 10月 06日 星期六 11:17:11 CST
[root@a ~]# hwclock -s
[root@a ~]# date
2012年 10月 06日 星期六 11:24:08 CST
[root@a ~]# ssh b.abc.com 'hwclock -s'
[root@a ~]# ssh b.abc.com 'hwclock'
2012年10月06日 星期六 11时24分33秒 -0.080474 seconds
[root@a ~]#modprobe drbd
[root@a ~]#ssh b.abc.com 'modprobe drbd'
新建磁盘分区。在b.abc.com 上进行相同的操作
[root@a ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Selected partition 4
First cylinder (1420-2610, default 1420):
Using default value 1420
Last cylinder or +size or +sizeM or +sizeK (1420-2610, default 2610):
Using default value 2610
Command (m for help): n
First cylinder (1420-2610, default 1420):
Using default value 1420
Last cylinder or +size or +sizeM or +sizeK (1420-2610, default 2610):
Using default value 2610
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@a ~]# partprobe /dev/sda
[root@a ~]# cd /usr/share/doc/drbd83-8.3.8/
[root@a drbd83-8.3.8]# ll
总计 64
-rw-r--r-- 1 root root 31183 2010-06-02 ChangeLog
-rw-r--r-- 1 root root 17990 2008-11-24 COPYING
-rw-r--r-- 1 root root 133 2010-06-02 drbd.conf
-rw-r--r-- 1 root root 22 2010-06-04 file.list
-rw-r--r-- 1 root root 425 2010-03-02 README
[root@a drbd83-8.3.8]# cp drbd.conf /etc/
cp:是否覆盖“/etc/drbd.conf”? y
[root@a drbd83-8.3.8]# scp drbd.conf b.abc.com:/etc/
drbd.conf 100% 133 0.1KB/s
[root@a drbd83-8.3.8]# cd
[root@a ~]# vim /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";
[root@a ~]# cd /etc/drbd.d
[root@a drbd.d]# ll
总计 4
-rwxr-xr-x 1 root root 1418 2010-06-04 global_common.conf
[root@a drbd.d]# cp global_common.conf global_common.conf.bak
[root@a drbd.d]# ll
总计 8
-rwxr-xr-x 1 root root 1418 2010-06-04 global_common.conf
-rwxr-xr-x 1 root root 1418 10-06 11:37 global_common.conf.bak
[root@a drbd.d]# vim global_common.conf
1 global {
2 usage-count no;
3 }
4 common {
5 protocol C;
6 startup {
7 wfc-timeout 120;
8 degr-wfc-timeout 120;
9 }
10 disk {
11 on-io-error detach;
12 fencing resource-only;
13 }
14 net {
15 cram-hmac-alg "sha1";
16 shared-secret "mydrbdlab";
17 }
18 syncer {
19 rate 100M;
20 }
21 }
[root@a drbd.d]# vim web.res
1 resource web {
2 on a.abc.com {
3 device /dev/drbd0;
4 disk /dev/sda5;
5 address 192.168.10.99:7789;
6 meta-disk internal;
7 }
8 on b.abc.com {
9 device /dev/drbd0;
10 disk /dev/sda5;
11 address 192.168.10.100:7789;
12 meta-disk internal;
13 }
14 }
[root@a drbd.d]# scp * b.abc.com:/etc/drbd.d/
global_common.conf 100% 425 0.4KB/s
global_common.conf.bak 100% 1418 1.4KB/s
web.res 100% 315 0.3KB/s
[root@a drbd.d]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
[root@a drbd.d]# ssh b.abc.com 'drbdadm create-md web'
NOT initialized bitmap
Writing meta data...
initializing activity log
New drbd meta data block successfully created.
[root@a drbd.d]# service drbd start
Starting DRBD resources: [
web
Found valid meta data in the expected location, 9796272128 bytes into /dev/sda5.
d(web) s(web) n(web) ]..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- In case this node was already a degraded cluster before the
reboot the timeout is 120 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot the timeout will
expire after 120 seconds. [wfc-timeout]
(These values are for resource 'web'; 0 sec -> wait forever)
To abort waiting enter 'yes' [ 28]:
.
[root@a drbd.d]# drbdadm -- --overwrite-data-of-peer primary web
[root@a drbd.d]# service drbd status
]drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10. 2010-06-04 08:04:16
m:res cs ro ds p mount
... sync'ed: 0.9% (9260/9340)M delay_probe:
0:web SyncSource Primary/Secondary UpToDate/Inconsistent C
[root@a drbd.d]# watch -n 1 'cat /proc/drbd'
[root@a drbd.d]# mkfs -t ext3 -L drbdweb /dev/drbd0
mke2fs 1.39 (29-May-2006)
Filesystem label=drbdweb
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1196032 inodes, 2391587 blocks
119579 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2449473536
73 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
nfs共享服务相关设置
[root@a drbd.d]# vim /etc/exports
[root@a drbd.d]# scp /etc/exports b.abc.com:/etc/
exports 100% 50 0.1KB/s
[root@a drbd.d]# exportfs -rv
exporting *:/web
[root@a drbd.d]# ssh b.abc.com 'exportfs -rv'
exporting *:/web
[root@a drbd.d]# service portmap start
启动 portmap: [确定]
[root@a drbd.d]# chkconfig portmap on
[root@a drbd.d]# ssh b.abc.com 'service portmap start'
启动 portmap:[确定]
[root@a drbd.d]# ssh b.abc.com 'chkconfig portmap on'
[root@a drbd.d]# service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS 守护进程: [确定]
启动 NFS mountd: [确定]
[root@a drbd.d]# chkconfig nfs on
[root@a drbd.d]# ssh b.abc.com 'service nfs start'
启动 NFS 服务: [确定]
关掉 NFS 配额:[确定]
启动 NFS 守护进程:[确定]
启动 NFS mountd:[确定]
[root@a drbd.d]# ssh b.abc.com 'chkconfig nfs on'
[root@a drbd.d]# vim /etc/init.d/nfs #在b.abc.com主机上执行同样的操作
122 killproc nfsd –9
配置heartbeat的配置文件
[root@a drbd.d]# cd /usr/share/doc/heartbeat-2.1.4/
[root@a heartbeat-2.1.4]# ls
apphbd.cf DirectoryMap.txt HardwareGuide.html heartbeat_api.txt rsync.
authkeys faqntips.html HardwareGuide.txt logd.cf starts
AUTHORS faqntips.txt haresources README
ChangeLog GettingStarted.html hb_report.html Requirements.html
COPYING GettingStarted.txt hb_report.txt Requirements.txt
COPYING.LGPL ha.cf heartbeat_api.html rsync.html
[root@a heartbeat-2.1.4]# cp authkeys ha.cf haresources /etc/ha.d/
[root@a heartbeat-2.1.4]# cd /etc/ha.d
[root@a ha.d]# ll
总计 48
-rw-r--r-- 1 root root 645 10-06 11:58 authkeys
-rw-r--r-- 1 root root 10539 10-06 11:58 ha.cf
-rwxr-xr-x 1 root root 745 2009-07-25 harc
-rw-r--r-- 1 root root 5905 10-06 11:58 haresources
drwxr-xr-x 2 root root 4096 10-06 11:34 rc.d
-rw-r--r-- 1 root root 692 2009-07-25 README.config
drwxr-xr-x 2 root root 4096 10-06 11:34 resource.d
-rw-r--r-- 1 root root 7862 2009-07-25 shellfuncs
[root@a ha.d]# vim ha.cf
24 debugfile /var/log/ha-debug
29 logfile /var/log/ha-log
34 logfacility local0
48 keepalive 2
56 deadtime 10
76 udpport 694
95 bcast eth0 #heartbeat的监控网卡
214 node a.abc.com
215 node b.abc.com
[root@a ha.d]# echo "a.abc.com IPaddr::192.168.10.101/24/eth0 drbddisk::web Filesydrbd0::/web::ext3 killnfsd" >> /etc/ha.d/haresources
[root@a ha.d]# vim authkeys
27 auth 3
28 3 md5 123456
[root@a ha.d]# vim haresources
[root@a resource.d]# echo "killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0" >> /etc/ha.d/resource.d/killnfsd
[root@a resource.d]# cd ../
[root@a ha.d]# chmod 600 /etc/ha.d/authkeys
[root@a ha.d]# chmod 755 /etc/ha.d/resource.d/killnfsd
[root@a ha.d]# ll
总计 48
-rw------- 1 root root 665 10-06 12:04 authkeys
-rw-r--r-- 1 root root 10576 10-06 12:01 ha.cf
-rwxr-xr-x 1 root root 745 2009-07-25 harc
-rw-r--r-- 1 root root 6003 10-06 12:05 haresources
drwxr-xr-x 2 root root 4096 10-06 11:34 rc.d
-rw-r--r-- 1 root root 692 2009-07-25 README.config
drwxr-xr-x 2 root root 4096 10-06 12:06 resource.d
-rw-r--r-- 1 root root 7862 2009-07-25 shellfuncs
[root@a ha.d]# scp ha.cf authkeys haresources b.abc.com:/etc/ha.d/
ha.cf 100% 10KB 10.3KB/s 00:00
authkeys 100% 665 0.7KB/s 00:00
haresources 100% 6003 5.9KB/s 00:00
[root@a ha.d]# scp resource.d/killnfsd b.abc.com:/etc/ha.d/resource.d/
killnfsd 100% 51 0.1KB/s 00:00
[root@a ha.d]# service heartbeat restart
Stopping High-Availability services:
[确定]
Waiting to allow resource takeover to complete:
[确定]
Starting High-Availability services:
2012/10/06_12:14:54 INFO: Resource is stopped
[确定]
[root@a ha.d]# ssh b.abc.com 'service heartbeat restart'
Stopping High-Availability services:
[确定]
Waiting to allow resource takeover to complete:
[确定]
Starting High-Availability services:
2012/10/06_12:15:31 INFO: Resource is stopped
[确定]
[root@a ha.d]# drbdadm -- --overwrite-data-of-peer primary web
[root@a ha.d]# service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
m:res cs ro ds p mounted fstype
0:web Connected Primary/Secondary UpToDate/UpToDate C
[root@a ha.d]# mount /dev/drbd0 /web
[root@a ha.d]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/hdc on /mnt/cdrom type iso9660 (ro)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/drbd0 on /web type ext3 (rw)
test测试机上进行的配置
[root@love ~]# mkdir /mnt/nfs
[root@love ~]#mount 192.168.10.101:/web /mnt/nfs
[root@love ~]# cd /mnt/nfs
[root@love nfs]# vim /mnt/test.sh
while true
do
echo ----\>trying touch x:`date`
touch x
echo \<-----done touch x:`date`
echo
sleep 2
done
[root@love nfs]# bash /mnt/test.sh #在当前目录下执行每隔两秒创建 文件“x” 的脚本
---->trying touch x:2012年 10月 06日 星期六 03:02:38 CST
<-----done touch x:2012年 10月 06日 星期六 03:02:39 CST
---->trying touch x:2012年 10月 06日 星期六 03:02:41 CST
touch: 无法触碰 “x”: Stale NFS file handle
<-----done touch x:2012年 10月 06日 星期六 03:02:41 CST
#关闭a.abc.com 主机上的heartbeat服务。终端一次,立刻恢复正常
---->trying touch x:2012年 10月 06日 星期六 03:02:52 CST
<-----done touch x:2012年 10月 06日 星期六 03:02:52 CST