Chinaunix首页 | 论坛 | 博客
  • 博客访问: 610961
  • 博文数量: 244
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-27 09:53
个人简介

记录学习,记录成长

文章分类

全部博文(244)

我的朋友

分类: LINUX

2015-11-11 14:07:34

DRBD配置:

1.查看内核版本号
[root@node1 ~]# uname -r
2.6.32-431.el6.i686

2.下载对应的rpm包
因为内核版本小于2.6.33,所以需要安装两个包。且与内核版本号一定要一致;
[root@node1 ~]# ll | grep drbd
-rw-r--r--  1 root root 203764 Nov  9 10:22 drbd-8.3.15-32.el6.i686.rpm
-rw-r--r--  1 root root 150824 Nov  9 11:12 drbd-kmdl-2.6.32-431.el6-8.3.15-32.el6.i686.rpm

下载地址:


3.两个节点上安装DRBD
[root@node1 ~]# yum install --nogpgcheck localinstall drbd-*.rpm

4.两个节点上创建分区(也可以做一个LVM)
[root@node1 ~]# fdisk /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +1G
Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
Command (m for help): w

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

5.将创建的分区做成DRBD设备
5.1  DRBD主配置文件不需配置(为了更好管理对配置文件实行分片,将每个配置文件放入/etc/drbd.d下即可)
[root@node1 ~]# cat /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";

5.2  global_common.conf文件
[root@node1 drbd.d]# cat global_common.conf 
global { #全局配置段
        usage-count no; #是否参加用户统计
        # minor-count dialog-refresh disable-ip-verification
}

common {    #DRBD资源的共通配置可写入这里,定义默认属性
        protocol C; #DRBD资源都使用协议C

        handlers { #定义一系列处理器,用来回应特定事件
                # These are EXAMPLE handlers only.
                # They may have severe implications,
                # like hard resetting the node under certain circumstances.
                # Be careful when chosing your poison.
                 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 degr-wfc-timeout outdated-wfc-timeout wait-after-sb
#wfc-timeout:该选项设定一个时间值,单位是秒。在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待。
#degr-wfc-timeout:该选项也设定一个时间值,单位为秒。也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。
        }
        disk {
 on-io-error detach;
                # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes
                # no-disk-drain no-md-flushes max-bio-bvecs
        }
        net {
 cram-hmac-alg "sha1"; #定义报文传输时的加密算法
                  shared-secret "centos"; #定义加密密钥
                # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers
                # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret
                # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork
        }
        syncer {
  rate 100M; #定义报文传输速率
                # rate after al-extents use-rle cpu-mask verify-alg csums-alg
        }
}
文件中个选项的具体用法可以man  drbd.conf

5.3定义资源/etc/drbd.d/*.res
DRBD设备的资源有资源名,设备名,磁盘配置和网络配置,所以,这里设定
资源名为:mydrbd
DRBD设备为:/dev/drdb0
磁盘配置为:/dev/sdb1
网络配置为:192.168.85.144(node1)  192.168.85.145(node2)
[root@node1 drbd.d]# cat mydrbd.res 
resource mydrbd {
        on node1.a.com {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.85.144:7789;
        meta-disk internal;
        }
        on node2.a.com {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.85.145:7789;
        meta-disk internal;
        }
}

5.4将上述配置过的两个文件拷贝到node2上
[root@node1 drbd.d]# scp -p global_common.conf mydrbd.res node2:/etc/drbd.d/
global_common.conf                                    100% 1693     1.7KB/s   00:00    
mydrbd.res                                            100%  320     0.3KB/s   00:00    

6.在两个节点上初始化以定义的资源并启动服务
6.1两个节点上初始化资源
[root@node1 ~]# drbdadm create-md mydrbd
Writing meta data...
initializing activity log
NOT initialized bitmap
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory(这个错误不影响后面的)
New drbd meta data block successfully created.
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory

[root@node2 ~]# drbdadm create-md mydrbd
Writing meta data...
initializing activity log
NOT initialized bitmap
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
New drbd meta data block successfully created.
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory

6.2两个节点上启动服务(一个节点启动后要去启动第二个,否则第一个节点的服务会一直处于开启状态)
[root@node1 ~]# /etc/init.d/drbd start
Starting DRBD resources: [ 
mydrbd
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
d(mydrbd) s(mydrbd) n(mydrbd) ]symlink(/etc/drbd.conf, /var/lib/drbd/drbd-minor-0.conf): No such file or directory
......symlink(/etc/drbd.conf, /var/lib/drbd/drbd-minor-0.conf): No such file or directory

[root@node2 ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by gardner@, 2013-11-29 12:26:09
m:res     cs         ro                   ds                         p  mounted  fstype
0:mydrbd  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

6.3查看启动状态
[root@node1 ~]# cat /proc/drbd
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by gardner@, 2013-11-29 12:26:09
 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:1060184

[root@node2 ~]# cat /proc/drbd
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by gardner@, 2013-11-29 12:26:09
 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:1060184

6.4此时两个节点都处于非移植状态,都是从节点,在要设置为主节点的主机上使用命令将该节点设置为主节点:
[root@node1 ~]# drbdadm -- --overwrite-data-of-peer primary mydrbd  #等待一段时间

6.5再次查看状态,可见节点间数据同步完成且有了主从节点之分:
[root@node1 ~]# drbd-overview 
  0:mydrbd  Connected Primary/Secondary UpToDate/UpToDate C r----- 
  
[root@node2 ~]# drbd-overview 
  0:mydrbd  Connected Secondary/Primary UpToDate/UpToDate C r----- 
  
7.数据同步完成后对主节点格式化分区并挂载(只能对primary节点进行)
[root@node1 ~]# mke2fs -j /dev/drbd0

[root@node1 ~]# mkdir /mysqldata
[root@node1 ~]# mount /dev/drbd0 /mysqldata
[root@node1 ~]# echo "Hello" > /mysqldata/a.txt
[root@node1 ~]# ll /mysqldata/
-rw-r--r-- 1 root root     6 Nov  9 19:40 a.txt
drwx------ 2 root root 16384 Nov  9 19:38 lost+found
此时以可以正常存储

8.将node1转换为从节点测试node2能否查看存储的文件
8.1  node1先卸载挂载目录
[root@node1 ~]# umount /mysqldata

8.2  node1上执行命令将node1变为从节点
[root@node1 ~]# drbdadm secondary mydrbd

[root@node1 ~]# drbd-overview
  0:mydrbd  Connected Secondary/Secondary UpToDate/UpToDate C r----- 
  
8.3  node2上执行命令将node2变为主节点
[root@node2 ~]# drbdadm primary mydrbd

[root@node2 ~]# drbd-overview
  0:mydrbd  Connected Primary/Secondary UpToDate/UpToDate C r----- 

8.4  node2节点挂载测试
[root@node2 ~]# mkdir /mysqldata
[root@node2 ~]# mount /dev/drbd0 /mysqldata
[root@node2 ~]# cat /mysqldata/a.txt
Hello

这里切换节点的主从关系都是手动执行的,如果将DRBD加入高可用集群作为资源,即可以实现DRBD的自动挂载/卸载,节点关系的自动切换

补充:
1.资源控制
手动启用资源:drbdadm  up  resource_name | all

手动禁用资源:drbdadm  down  resource_name | all

升级资源:drbdadm  primary  resource_name

降级资源:drbdadm  secondary  resource_name

2.查看资源连接状态
[root@nod1 ~]# drbdadm cstate drbd_name  
Connected

资源的连接状态:
一个资源可能有以下连接状态中的一种:

StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况

Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的

Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams

Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空

BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空

NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空

ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空

TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空

WFConnection:等待和对等节点建立网络连接

WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包

Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态

StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS

StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID

WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS

WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID

WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT

SyncSource:以本节点为同步源的同步正在进行

SyncTarget:以本节点为同步目标的同步正在进行

PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步

PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步

VerifyS:以本地节点为验证源的线上设备验证正在执行

VerifyT:以本地节点为验证目标的线上设备验证正在执行

3.查看硬盘状态命令
[root@nod1 ~]# drbdadm dstate drbd_name
Inconsistent/Inconsistent

本地和对等节点的硬盘有可能为下列状态之一:

Diskless无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离

Attaching:读取无数据时候的瞬间状态

Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘

Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态

Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态

Outdated:数据资源是一致的,但是已经过时

DUnknown:当对等节点网络连接不可用时出现这种状态

Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated

UpToDate:一致的最新的数据状态,这个状态为正常状态

4.对于drbd 8.4版本,第一次设置某节点成为主节点的命令
drbdadm primary --force resource

参考资料:





阅读(1347) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~