基于DRBD的数据同步


          主机名                    IP地址
主机1  node1.wang.com   网卡0:192.168.1.10/24
          网卡1:172.16.1.1/24
主机2  node2.wang.com   网卡0:192.168.1.11/24
          网卡1:172.16.1.2/24
一、环境设置

1、使用SETUP命令配置IP
   [root@localhost ~]#setup                       #使用图形配置界面
   配置完成后使用如下命令重启服务
   [root@localhost ~]# service network restart    #重启网络服务
   [root@localhost ~]# ifconfig                   #查看设置是否正确

2、主机1上修改主机名
   [root@localhost ~]# sed -i 's@^\(HOSTNAME=\).*@          \1node1.wang.com@g' /etc/sysconfig/network     #使用sed命令修改
   [root@localhost ~]# cat !$                     #查看修改结果
   cat /etc/sysconfig/network
   NETWORKING=yes
   NETWORKING_IPV6=no
   HOSTNAME=node1.wang.com
   
   [root@localhost ~]# hostname node1.wang.com    #使用hostname命令修改
   [root@localhost ~]# uname -n                   #查看修改后的主机名
   node1.wang.com
 
主机2上修改主机名
    [root@localhost ~]# sed -i 's@^\(HOSTNAME=\).*@\1node2.wang.com@g'  

    /etc/sysconfig/network
    [root@localhost ~]# cat !$
     cat /etc/sysconfig/network
     NETWORKING=yes
     NETWORKING_IPV6=no
     HOSTNAME=node2.wang.com
    [root@localhost ~]# hostname node2.wang.com
    [root@localhost ~]# uname -n
    node2.wang.com

说明:主机名修改完成后退出重新登录

3、在主机1和主机2上的/etc/hosts文件中添加如下两行
   [root@node1 ~]# vim /etc/hosts
   #添加两行
   192.168.1.11 node2.wang.com     node2
   192.168.1.10 node1.wang.com     node1
   [root@node2 ~]# cat /etc/hosts         #查看修改的结果


4、在主机1和主机2上都要做的如下操作
   以实现在node1和node2两个主机不需要密码ssh连接
   
   #生成密钥
   [root@node1 ha.d]# ssh-keygen -t rsa
   [root@node1 ha.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
   
   #测试连接
   [root@node1 ha.d]# ssh node2
   #退回原节点
   [root@node2 ~]# exit
   
   [root@node1 ~]# hwclock -s #同步下系统时间同硬件时间
   [root@node2 ~]# hwclock -s


二、准备DRBD的安装包

drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经

整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,

你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包

,并且此两者的版本号一定要保持对应。
目前在用的drbd版本主要有8.0、8.2和8.3三个版本,其对应的rpm包的名字分别为

drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd, kmod-drbd82和

kmod-drbd83。各版本的功能和配置等略有差异;我们实验所用的平台为x86且系统为

rhel5.4,因此需要同时安装内核模块和管理工具。我们这里选用最新的8.3的版本
drbd83-8.3.8-1.el5.centos.i386.rpm
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

三、使用yum安装DRBD的RPM包

[root@node1 ~]# yum --nogpgcheck localinstall -y *.rpm
[root@node1 ~]# scp *.rpm node2:/root
[root@node1 ~]# ssh node2 'yum --nogpgcheck localinstall -y *.rpm'

四、配置DRBD文件

说明:
drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件

分成多个部分,且都保存至/etc/drbd.d目录中,主配置文件中仅使用"include"指令

将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为

global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定

义global段和common段,而每一个.res的文件用于定义一个资源。

在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置

文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。目前

global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-

verification和usage-count。

common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都

可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的

参数定义为common段中的参数以降低配置文件的复杂度。

resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d

目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的

ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关

联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义。

[root@node1 ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
说明:因为在/etc下有drbd的配置文件所以此处要覆盖

[root@node1 drbd.d]# cd /etc/drbd.d/
[root@node1 drbd.d]# vim global_common.conf
global {
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
}

common {
        protocol C;

        handlers {
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on- incon-degr.sh;
                /usr/lib/drbd/notify-emergency-reboot.sh;                          echo b > /proc/sysrq-trigger ; reboot -f";
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; 
                /usr/lib/drbd/notify-emergency-reboot.sh;                                echo b > /proc/sysrq-trigger ; reboot -f";
                local-io-error "/usr/lib/drbd/notify-io-error.sh; 
                /usr/lib/drbd/notify-emergency-shutdown.sh; 
                      echo o > /proc/sysrq-trigger ; halt -f";
                #fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                #split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                #out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                #before-resync-target "/usr/lib/drbd/snapshot-resync-
                target-lvm.sh -p 15 -- -c 16k";
                #after-resync-target /usr/lib/drbd/unsnapshot-resync-
                target-lvm.sh;
        }

        startup {
                wfc-timeout 120;   #等待多长时间
                degr-wfc-timeout 120;   #降级等待多长时间
        }

        disk {
                on-io-error detach;   #当磁盘出现错误卸掉磁盘
fencing resource-only;     #表示仅fencing资源
        }

        net {
cram-hmac-alg "sha1";   #网络传输加密方法
  shared-secret "mydrbdlab"; #使用的共享密码(随机的但必须

各节点一致
        }

        syncer {
                rate 100M;   #传输速度100M
        }
}


五、定义资源
1、先建分区
[root@node1 ~]# fdisk /dev/sdb
Command (m for help): p #查看分区

Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1217     9775521   83  Linux
/dev/sdb2            1218        2434     9775552+  83  Linux
/dev/sdb3            2435        3651     9775552+  83  Linux
/dev/sdb4            3652       15665    96502455    5  Extended

Command (m for help): n #新建分区
First cylinder (3652-15665, default 3652):        
Using default value 3652
Last cylinder or +size or +sizeM or +sizeK (3652-15665, default 15665):  +2G         #新建分区大小为2G

Command (m for help): P #查看分区   

Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1217     9775521   83  Linux
/dev/sdb2            1218        2434     9775552+  83  Linux
/dev/sdb3            2435        3651     9775552+  83  Linux
/dev/sdb4            3652       15665    96502455    5  Extended
/dev/sdb5            3652        3895     1959898+  83  Linux

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: Device or 

resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

[root@node1 ~]# partprobe /dev/sdb

说明:在节点1和节点2上做同样的操作。
注意:节点1和节点2上的分区大小和分区设备号要一致。


2、定义资源
[root@node1 drbd.d]# vim /etc/drbd.d/web.res
resource web {
        on node1.wang.com {
        device /dev/drbd0;
        disk /dev/sdb5;
        address 192.168.1.10:7789;
        meta-disk internal;
  }
        on node2.wang.com {
        device /dev/drbd0;
        disk /dev/sdb5;
        address 192.168.1.11:7789;
        meta-disk internal;
  }
}

[root@node1 ~]# scp /etc/drbd.conf node2:/etc
[root@node1 ~]# scp -r /etc/drbd.d/* node2:/etc/drbd.d/

六、在两个节点上初始化已定义的资源并启动服务

[root@node1 ~]# drbdadm create-md web
[root@node1 ~]# ssh node2 'drbdadm create-md web'

[root@node1 ~]# service drbd start
[root@node2 drbd.d]# service drbd start
说明:在节点1上启动服务后马上在节点2上启动服务这样服务才能启动成功

[root@node1 ~]# drbd-overview
  0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C 

r---- 

说明:我们会看到此时两个节点均为从节点

#下面设置一个节点为主节点才能同步

[root@node1 ~]# drbdadm -- --overwrite-data-of-peer primary web
说明:那个节点为主节点在那个节点操作。上面的 -- 前后都有空格比较特殊

#查看同步情况
[root@node1 ~]# drbd-overview

#动态查看同步情况(使用watch -n )每多少秒刷新一次
[root@node1 ~]# watch -n 1 'drbd-overview'

#同步完成的状态
[root@node1 ~]# drbd-overview
  0:web  Connected Primary/Secondary UpToDate/UpToDate C r----
说明:我们将会看到一主一从,前面的角色是本节点的角色

七、创建文件系统

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对

drbd设备进行格式化:

#格式化DRBD的文件系统
[root@node1 ~]# mke2fs -j /dev/drbd0
#创建挂载点
[root@node1 ~]# mkdir /web
#使用mount命令挂载
[root@node1 ~]# mount /dev/drbd0 /web
#验证是否挂载成功
[root@node1 ~]# cd /web
[root@node1 web]# ls
lost+found
[root@node1 web]# cd
#web目录里拷两个文件验证
[root@node1 ~]# cp drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-

8.3.8-1.el5.centos.i686.rpm /web
[root@node1 ~]# cd /web
[root@node1 web]# ls
#退出目录并卸载挂载
[root@node1 web]# cd
[root@node1 ~]# umount /web
#将此节点降级为次节点
[root@node1 ~]# drbdadm secondary web
#查看是否为次节点
[root@node1 ~]# drbd-overview
  0:web  Connected Secondary/Secondary UpToDate/UpToDate C r----

#在节点2上操作首先查看节点是否为次节点
[root@node2 drbd.d]# drbd-overview
  0:web  Connected Secondary/Secondary UpToDate/UpToDate C r---- 

#把此节点做为主节点
[root@node2 ~]# drbdadm primary web
[root@node2 drbd.d]# mkdir /web
[root@node2 ~]# mount /dev/drbd0 /web
#查看是否同在节点1的一样
[root@node2 ~]# ls /web

对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为

Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为

Secondary后,才能原来的Secondary节点设置为Primary

此时DRBD的简单数据同步完成



你可能感兴趣的:(数据,职场,同步,drbd,休闲)