1) 安装第三方yum源 包含drbd(下面命令在两个节点之间都执行)
[root@localhost drbd-8.4.1]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm [root@localhost yum.repos.d]# yum -y --enablerepo=elrepo(指定yum源) install drbd83-utils kmod-drbd83 [root@localhost yum.repos.d]# modprobe drbd 加载安装drbd模块
2)如果两台服务器上还有未用的磁盘 或未用完的磁盘(下面命令在两个节点之间都执行)
[root@localhost ~]# fdisk /dev/sdb (我这里有未用的磁盘 分配为两个节点分配一个2G的分区/dev/sdb1) [root@localhost ~]# partx /dev/sdb (扫描加载新的分区) [root@localhost ~]# mkdir /data/wwwroot/web/uploadimg (建立需要同步的共享的文件夹)
3) 修改配置文件 (两个节点的配置是一模一样)
[root@localhost ~]# cp /etc/drbd.conf /etc/drbd.conf.bak (备份drbd配置文件) [root@localhost ~]# 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"; (包含自定义配置文件) [root@localhost drbd.d]# vi global_common.conf # 以下是去除注释后的配置 global { usage-count yes; # 是否参加DRBD使用者统计.默认是yes } common { protocol C; # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成. } [root@localhost drbd.d]# vi /etc/drbd.d/r0.res (配置资源) resource r0 { net { cram-hmac-alg sha1; # 设置主备机之间通信使用的信息算法. shared-secret "yumao123456"; # 共享密码 } on node1 { # 每个主机的说明以“on”开头,后面是主机名.在后面的{}中为这个主机的配置. device /dev/drbd0; # 一个DRBD设备(即:/dev/drbdX),叫做“资源“.里面包含一个DRBD设备的主备节点的相关信息. disk /dev/sdb1; # /dev/drbd0使用的磁盘分区是/dev/sdb1 address 192.168.4.1:7789; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdb1; address 192.168.4.3:7789; meta-disk internal; } }
4)设置hostname (两个节点上都要执行)
[root@localhost drbd.d]# vi /etc/sysconfig/network 修改HOSTNAME 为node1 [root@localhost drbd.d]# hostname node1 (临时生效) 根据上面的resource配置文件,编辑/etc/hosts [root@localhost drbd.d]# vi /etc/hosts 192.168.4.1 node1 192.168.4.3 node2
5) 设置resource (以下操作需要在node1和node2操作)
[root@localhost drbd.d]# lsmod | grep drbd # 确认drbd模块是否载入 drbd 332493 0 如果没有载入则执行 modprobe drbd 载入模块 #dd if=/dev/zero of=/dev/sdb1 bs=1M count=100 //把一些资料塞到sdb1�� (否则 create-md 时有可能会出现错误)(我在create-md没有出现错误具体视情况而定) [root@localhost drbd.d]# drbdadm create-md r0 (建立drbd resource,这里的r0对应上面配置的r0) [root@localhost drbd.d]# drbdadm up r0 // 启动resource r0 (如果是要启用所有的资源可以使用 service drbd start)
6) 查看node1 和 node2 的状态信息类似于下面信息则表明现在已经启动服务,但还没有设置同步(即需要设置主节点)
[root@localhost drbd.d]# cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37 0: 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:f oos:2104376
7)设置Primary Node 以下操作仅在node1执行。
设置node1为primary node: [root@localhost drbd.d]# drbdadm -- --overwrite-data-of-peer primary all(这里也可以指定某一资源如r0) (如果是第一次设置主节点则要执行这条命令 以后就没有必要执行了) [root@localhost drbd.d]# drbdadm primary --force r0 # 如果是第一次设置主节点 出现0: State change failed: (-2) Need access to UpToDate data Command 'drbdsetup 0 primary' terminated with exit code 17 则是要执行:drbdadm -- --overwrite-data-of-peer primary all [root@localhost drbd.d]# cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37 0: cs:SyncSource ro:Primary/Secondary(说明主节点设置成功) ds:UpToDate/Inconsistent C r----- ns:40104 nr:0 dw:0 dr:40768 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2064272 [>....................] sync'ed: 2.2% (2064272/2104376)K finish: 2:02:52 speed: 272 (272) K/sec
8) 创建drbd文件系统(下面的操作仅在node1执行)
[root@node1 ~]# mkfs.ext4 /dev/drbd0 #上面已经完成了/dev/drbd0的初始化,现在来把/dev/drbd0格式化成ext4格式的文件系统。 [root@node1 ~]# mount /dev/drbd0 /data/wwwroot/web/uploadimg (挂载到指定的目录) (如果出现下面的错误,就是因为没有指定node1为主(从节点在开启drbd的情况下,它的磁盘分区是不可以挂载的)。不能进行挂载也不能进行写入操作。 则要把它置为主:drbdadm primary --force r0) mount: block device /dev/drbd0 is write-protected, mounting read-only mount: Wrong medium type
9) drbd 同步测试
在node2(备用机上的drbd处于启动状态时,它是无法挂载/dev/sdb1分区的。因为这时候/dev/sdb1 正处于使用状态) 我们在node1 上创建一些文件 [root@node1 uploadimg]# touch 1.txt 2.txt 然后等待1到2分钟(主要是为了等待数据从node1服务器上同步到node2服务器上) [root@node2 ~]# service drbd stop (关闭从服务器上也就是node2上的drbd 如果只是关闭其中一个资源可以使用 drbdadm down r0) [root@node2 ~]# mount /dev/sdb1 /data/wwwroot/web/uploadimg/ (把从节点上的/dev/sdb1 分区挂载到 /data/wwwroot/web/uploadimg/目录下 ) [root@node2 uploadimg]# ls 可以查看到上面有从node1 上同步过来的数据 ## 注意默认在从节点中写入的数据,在从节点上开启drbd后。他会被主节点的数据覆盖
10) drbd 主从切换
[root@node1 ~]# umount /dev/drbd0 [root@node1 ~]# drbdadm secondary r0 [root@node2 ~]# drbdadm primary r0 [root@node2 ~]# drbdadm role r0 Primary/Secondary [root@node1 ~]# drbdadm role r0 Secondary/Primary 此时主节点和从节点已经交换角色 [root@node2 uploadimg]# mount /dev/drbd0 /data/wwwroot/web/uploadimg/ 重新挂载 此时我们在node2 的/data/wwwroot/web/uploadimg/下创建文件就可以在node1的/dev/sdb1中找到了
11) 出现脑裂问题解决
脑裂问题症状:新的从节点启动不了一直处于To abort waiting enter 'yes' [ -- ]:[ 13]:[ 15]: [ 16]:[ 18]:[ 19]:[ 20]:[ 22] 等待状态 新的主上执行: drbdadm disconnect r0 drbdadm primary r0 新的从上执行 drbdadm disconnect r0 drbdadm secondary r0 drbdadm -- --discard-my-data r0 drbdadm connect r0 新的主上执行 drbdadm connect r0
12) drbd 需要注意的问题
1:尽量不要设置开机启动,因为drbd会因为启动的顺序问题导致启动报错
2:每次服务重启后要检查一下主从,有可能要手动重新设置