您的位置:首页 > 运维架构 > 网站架构

drbd 高可用工具

2015-12-29 19:43 579 查看
DRBD的基本原理是基于已有的磁盘设备,再虚拟出一个DRBD存储设备,操作系统将使用这个虚拟设备(而不是直接使用磁盘设备)来创建文件系统及存储数据。同时,就像DRBD名字中所昭示的,它是一套分布式的系统,这就代表着它有多个节点,每个节点上都存在虚拟出的DRBD存储设备。

DRBD引入了资源组的概念,每个资源组可以理解成为一个DRBD集群,每个集群中的节点,分为主(Master)和从(Secondary)两种角色,注意此Master非MySQL中的Master哟。DRBD集群的Master节点写入的数据,由该节点的DRBD服务通过网络同步到其他节点的DRBD设备中(同步策略也有多种方式,以适用不同的场景),进而实现数据再多节点间同步,针对它的这一特点,江湖人松外号:网络RAID1。

只有主(Master)角色才能看到和操作DRBD设备,才能向其中写入数据,从(Secondary)角色的DRBD只被动接收主角色传输过来的数据以保持同步。同步效率和数据安全严重依赖于网络,主端或从端之间同步数据是直接基于块粒度进行写入和同步,因此我们才管它叫物理的同步方案。只需要两台服务器,两个节点是一主一备的形态,相互间就可以提供物理级别的冗余保护,最重要的是不需要独立的共享存储设备,省钱。

DRBD通过protocol参数来控制数据同步策略的选项,它支持三种协议:

A:数据写入本地磁盘,同时通过TCP向secondary节点发送数据,不过它支管发不管确认,因此不能确保数据是否能够成功发送给目标服务器,以及是否成功写到目标节点的物理磁盘。

B:数据写入本地磁盘的同时,也要写入其他节点的网络缓存。表示数据已经写入目标服务器,但目标服务器是否能够成功写入物理盘并不影响本地数据的提交。

C:数据写入本地磁盘的同时,也要写入其他节点的物理磁盘。推荐使用C选项,该选项能够确保本地与远端节点存储设备间的数据一致。

在一组DRBD集群中,多个节点之间DRBD设备中的数据一模一样(完全对等),但正如前面多次提到的,角色却分为两种:Master和Secondary。一组DRBD集群中,最多只能有一个Master角色,而对持有Secondary角色的数量则无限制,也就是说可以所有节点都是Secondary角色的节点。不过只有持有了Master角色的节点,才能够读写DRBD设备,而持有Secondary角色的节点,能够看到DRBD设备,但无法执行读写操作。

##添加新的硬盘
##首先在虚拟机上面添加一块新的硬盘sdb,大小1G,然后启动虚拟机。sdb磁盘分两个分区sdb1和sdb2。sdb1用来存放需要同步的data,sdb2存放DRBD的元数据。sdb1分配800M,剩下的空间全部分配给sdb2。在实际工作中,存放元数据的磁盘分配1~2G足以。还有需要注意的是,sdb2分区为meta data分区,不需要格式化操作。
# fdisk /dev/sdb  ##如果放数据的磁盘超过2T,就需要用parted命令来分区磁盘。
# partprobe
# mkfs.ext4 /dev/sdb1      ##sdb2分区为meta data分区,不需要格式化操作。
# tune2fs -c -1 /dev/sdb1

##环境规划
##添加一块新的网卡eth1
data-1-1:
eth0:192.168.1.109 (管理IP)
eth1:10.0.0.9    (心跳网卡,不需要配网关)
vip:192.168.1.119
drbd管理名称:data
drbd挂载目录:/data
drbd逻辑设备:/dev/drbd0
drbd对接IP:eth1:10.0.0.9/24
drbd存储设备:/dev/sdb1
drbd meta设备:/dev/sdb2[0]
--------------------------------------------
data-1-2:
eth0:192.168.1.110 (管理IP)
eth1:10.0.0.10   (心跳网卡,不需要配网关)
vip:192.168.1.120
drbd管理名称:data
drbd挂载目录:/data
drbd逻辑设备:/dev/drbd0
drbd对接IP:eth1:10.0.0.10/24
drbd存储设备:/dev/sdb1
drbd meta设备:/dev/sdb2[0]

##修改/etc/hosts
##hosts里面的ip地址,最好换成心跳IP。
10.0.0.9	data-1-1
10.0.0.10	data-1-2
##还有记得修改主机名,修改主机名的地方:/etc/sysconfig/network

##禁用selinux
修改/etc/selinux/config文件
将SELINUX=enforcing改为SELINUX=disabled重启机器即可。
查看selinux状态:
[root@CentOS ~]# getenforce
# service iptables stop
# chkconfig iptables off
# service ip6tables stop
# chkconfig ip6tables off

##配置服务器间心跳连接路由
[root@data-1-1 ~]# route add -host 10.0.0.10 dev eth1             ##到对端的心跳路由
[root@data-1-2 ~]# route add -host 10.0.0.9 dev eth1              ##到对端的心跳路由

##yum配置
(1)进入yum源配置目录:cd /etc/yum.repos.d
(2)备份系统自带的yum源:mv CentOS-Base.repo CentOS-Base.repo.bak
(3)下载163网易的yum源:wget http://mirrors.163.com/.help/CentOS6-Base-163.repo (4)更改文件名:mv CentOS6-Base-163.repo CentOS-Base.repo
(5)更新玩yum源后,执行下边命令更新yum配置,使操作立即生效:yum clean all yum makecache

##DRBD安装
(1)首先我们要升级内核,升级之后我们重启 yum -y update kernel 和 yum install kernel-devel 这里请注意要加载新的内核
(2)# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm (3)安装DRBD: yum -y install drbd83-utils kmod-drbd83
(4)加载DRBD模块到内核: modprobe drbd
(5)检测DRBD是否安装成功: lsmod | grep drbd 显示信息:drbd	311209  0
(6)modprobe -l | grep -i drbd 可以查看路径
##安装完成后会在/etc/init.d/drbd生成启动脚本。不要设置echo 'modprobe drbd' >>/etc/rc.loca开机自动加载drbd模块
# chkconfig drbd off

##配置DRBD
# vi /etc/drbd.conf
global { usage-count no; }
common { syncer { rate 10M; verify-alg  crc32c; } }
resource data {
protocol C;
disk { on-io-error detach; }
on data-1-1 {
device	/dev/drbd0;
disk	/dev/sdb1;
address	10.0.0.9:7888;
meta-disk	/dev/sdb2[0];
}
on data-1-2 {
device	/dev/drbd0;
disk	/dev/sdb1;
address	10.0.0.10:7888;
meta-disk	/dev/sdb2[0];
}
}
##至此,DRBD的配置算是做完了。我这里是用虚拟机,所以上面我都是在data-1-1里面做的,然后这里再复制data-1-1为data-1-2,并修改网卡配置。

##初始化meta分区(两边都要做)
# drbdadm create-md data
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.

##启动drbd(两边都要做)
# drbdadm up all
# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
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:827316
# service drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
m:res   cs         ro                   ds                         p  mounted  fstype
0:data  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

##初始化设备同步(覆盖备节点,保持数据一致)(注意,只在data-1-1上面操作)
[root@data-1-1 ~]# drbdadm -- --overwrite-data-of-peer primary all
[root@data-1-1 ~]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:253952 nr:0 dw:0 dr:254624 al:0 bm:15 lo:0 pe:6 ua:0 ap:0 ep:1 wo:f oos:574132
[=====>..............] sync'ed: 30.7% (574132/827316)K
finish: 0:00:53 speed: 10,700 (10,548) K/sec
[root@data-1-1 ~]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:827316 nr:0 dw:0 dr:827988 al:0 bm:51 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

##挂载drbd分区到data数据目录(注意,只在data-1-1上面操作)
[root@data-1-1 ~]# mkdir /data
[root@data-1-1 ~]# mount /dev/drbd0 /data
[root@data-1-1 ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root   27G  5.0G   20G  21% /
tmpfs                          504M     0  504M   0% /dev/shm
/dev/sda1                      477M   50M  402M  12% /boot
/dev/drbd0                     780M  824K  739M   1% /data
[root@data-1-1 ~]# cd /data/
[root@data-1-1 data]# ll
总用量 16
drwx------ 2 root root 16384 12月 26 07:31 lost+found
[root@data-1-1 data]# touch `seq 10`
[root@data-1-1 data]# ls
1  10  2  3  4  5  6  7  8  9  lost+found
[root@data-1-1 data]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:827388 nr:0 dw:72 dr:828345 al:2 bm:51 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

##测试DRBD
[root@data-1-1 ~]# umount /data
[root@data-1-1 ~]# drbdadm down all
[root@data-1-1 ~]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
0: cs:Unconfigured
[root@data-1-2 ~]# drbdadm primary all
[root@data-1-2 ~]# mount /dev/drbd0 /mnt
[root@data-1-2 ~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root   27G  5.0G   20G  21% /
tmpfs                          504M     0  504M   0% /dev/shm
/dev/sda1                      477M   50M  402M  12% /boot
/dev/drbd0                     780M  824K  739M   1% /mnt
[root@data-1-2 ~]# cd /mnt/
[root@data-1-2 mnt]# ls
1  10  2  3  4  5  6  7  8  9  lost+found
[root@data-1-2 mnt]# cat /proc/drbd
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build32R6, 2014-11-24 14:49:06
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
ns:0 nr:827408 dw:827412 dr:1029 al:1 bm:51 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: