22、部署drdb


22.1、heartbeat部署规划:

本文的实验环境是虚拟机设备;


名称

接口

ip

用途

master-db(主)

eth0

10.0.0.16/24

用于服务器之间的数据同步(直连)

eth1

172.16.1.16/24

管理ip用于数据转发

vip

172.16.1.26/24

提供对外访问的ip

slave-db(从)

eth0

10.0.0.17/24

用于服务器之间的数据同步(直连)

eth1

172.16.1.17/24

管理ip用于数据转发

vip

172.16.1.26/24

提供对外的访问的ip





22.2、在关机状态下分别为master-db和slave-db添加20G的硬盘:

22.3、关闭selinux和防火墙:

master-db和slave-db的操作相同;

1、关闭selinux:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

grep "SELINUX=disabled" /etc/selinux/config

setenforce 0

2、关闭防火墙:

/etc/init.d/iptables stop

chkconfig iptables off

22.4、修改主机名:

1、master-db:

[root@master-db ~]#sed -i "s#HOSTNAME=.*#HOSTNAME=master-db#g" /etc/sysconfig/network

[root@master-db ~]#hostname master-db

[root@master-db ~]#hostname

master-db

2、slave-db:

[root@slave-db ~]#sed -i "s#HOSTNAME=.*#HOSTNAME=slave-db#g" /etc/sysconfig/network

[root@slave-db ~]#hostname slave-db

[root@slave-db ~]#hostname

slave-db

22.5、配置master-db和slave-db之间的直连心跳线路由:

主从之间的关系全靠心跳线进行联系;

1、master-db:

[root@master-db ~]#route add -host 10.0.0.17 dev eth0

[root@master-db ~]#route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.0.0.17 0.0.0.0 255.255.255.255 UH 0 0 0 eth0

[root@master-db ~]#echo '/sbin/route add -host 10.0.0.17 dev eth0' >>/etc/rc.local

2、slave-db:

[root@slave-db ~]#route add -host 10.0.0.16 dev eth0

[root@slave-db ~]#route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.0.0.16 0.0.0.0 255.255.255.255 UH 0 0 0 eth0

[root@slave-db ~]#echo '/sbin/route add -host 10.0.0.16 dev eth0' >>/etc/rc.local

22.6、修改域名解析文件:

master-db和slave-db的操作相同;

vim /etc/hosts

10.0.0.16 master-db

10.0.0.17 slave-db

ping域名看是否可以ping通;

22.7、磁盘分区:

master-db和slave-db的操作相同;

parted /dev/sdb mklabel gpt

parted /dev/sdb mkpart primary 0 5G

parted /dev/sdb mkpart primary 5 6G

parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 6442MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number Start End Size File system Name 标志

1 17.4kB 5000MB 5000MB primary

2 5000MB 6442MB 1442MB primary

22.8、drbd软件安装:

master-db和slave-db的操作相同;

1、下载rpm包:

mkdir -p /root/tools

cd /root/tools

wget http://mirror.rackspace.com/elrepo/elrepo/el6/x86_64/RPMS/drbd84-utils-8.9.8-1.el6.elrepo.x86_64.rpm

wget http://mirror.rackspace.com/elrepo/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.9-1.el6.elrepo.x86_64.rpm

2、安装:

rpm -ivh drbd84-utils-8.9.8-1.el6.elrepo.x86_64.rpm

rpm -ivh kmod-drbd84-8.4.9-1.el6.elrepo.x86_64.rpm

22.9、加载内核:

master-db和slave-db的操作相同;

ls -ld /usr/src/kernels/$(uname -r)

drwxr-xr-x 22 root root 4096 10月 8 23:29 /usr/src/kernels/2.6.32-754.3.5.el6.x86_64

#如果报错需要的包安装如下的软件包;

#yum install -y kernel kernel-devel kernel-headers gcc flex libxslt

modprobe drbd #临时生效;

lsmod | grep drbd

drbd 374888 0

libcrc32c 1246 1 drbd

加入到开机自启动中:

echo '/sbin/modprobe drbd' >>/etc/rc.local

tail -1 /etc/rc.local

22.10、配置drbd配置文件:

master-db和slave-db的操作相同;

1、文件说明:

ls /etc/drbd.d/ #包含文件;

global_common.conf

ls /etc/drbd.conf #配置文件用于包含/etc/drbd.d/中的配置文件;

/etc/drbd.conf

2、配置global_common.conf文件:

cp /etc/drbd.d/global_common.conf{,.bak}

egrep -v "^$|#" /etc/drbd.d/global_common.conf

global { #全局配置

usage-count no;

#不允许开源网站统计开源软件的数量,默认是yes;

}

common {

protocol C;

#使用实时同步数据的方法;

disk {

on-io-error detach;

#同步IO错误的做法是分离该磁盘;

}

net {

cram-hmac-alg "sha1";

#设置加密算法;

shared-secret "mydrbd";

#设置加密随机key;

}

syncer {

rate 100M; #同步的速度;

}

}

resource data {

on master-db { #主机器的主机名;

device /dev/drbd0; #drbd设备;

disk /dev/sdb1; #本地的存储分区;

address 10.0.0.16:7788;

#监听的直连网线,即数据端口,7788是默认端口;

meta-disk /dev/sdb2[0]; #drbd状态数据分区;

}

on slave-db { #从机器的主机名;

device /dev/drbd0;

disk /dev/sdb1;

address 10.0.0.17:7788;

meta-disk /dev/sdb2[0];

}

}

提示:如果需要加磁盘只需要拷贝resource配置即可,然后更改资源名称、数据传输的ip地址和

端口号、drbd状态数据分区、本地的存储分区、drbd设备的名称;

22.11、激活drbd:

master-db和slave-db的操作相同;

1、初始化meta分区:

drbdadm create-md data #data是/etc/drbd.d/global_common.conf配置文件的resource名称;

initializing activity log

NOT initializing bitmap

Writing meta data...

New drbd meta data block successfully created.

提示:drbdadm -V :查看当前drbd的安装版本;

2、启动drbd服务:

drbdadm up data =》/etc/init.d/drbd start

Device '0' is configured!

Command 'drbdmeta 0 v08 /dev/sdb2 0 apply-al' terminated with exit code 20

#######################################################################

#表示启动data资源,可以用"all"代表启动所有资源;

#drbdadm up all

#相当于以下三个命令的组合:

#drbdadm attach all

#drbdadm syncer all

#drbdadm connect all

########################################################################

cat /proc/drbd #查看drbd的启动进程,没有设置主从时默认两边都是从;

version: 8.4.9-1 (api:1/proto:86-101)

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:263152

22.12、确定drbd的主从关系:

1、设置master-db为主:

[root@master-db ~]#drbdadm -- --overwrite-data-of-peer primary data

#第一次操作时使用;

#此操作很危险会把这边的数据推到对端并覆盖,如果对端有数据需要进行备份;

2、查看master-db的状态:

[root@master-db ~]#cat /proc/drbd

version: 8.4.9-1 (api:1/proto:86-101)

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

ns:346500 nr:0 dw:0 dr:349848 al:8 bm:0 lo:0 pe:1 ua:3 ap:0 ep:1 wo:f oos:4536684

[>...................] sync'ed: 7.3% (4428/4768)M

finish: 0:01:57 speed: 38,456 (38,456) K/sec

3、查看slave-db的状态:

[root@slave-db ~]#cat /proc/drbd

version: 8.4.9-1 (api:1/proto:86-101)

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----

ns:0 nr:346112 dw:346112 dr:0 al:8 bm:0 lo:1 pe:3 ua:0 ap:0 ep:1 wo:f oos:4536684

[>...................] sync'ed: 7.3% (4428/4768)M

finish: 0:01:57 speed: 38,456 (38,456) want: 102,400 K/sec

22.13、格式化磁盘:

如果之前主从在分区后就格式化磁盘了,这里就不需要格式化磁盘了;

只需要操作主节点master-db即可,从节点会跟随主节点进行格式化;

[root@master-db ~]#mkfs -t ext4 -b 4096 /dev/drbd0

[root@master-db ~]#tune2fs -c -1 /dev/drbd0 #禁止定期检查磁盘

tune2fs 1.41.12 (17-May-2010)

Setting maximal mount count to -1

22.14、挂载master-db磁盘:

特别注意:挂载的不是/dev/sdb1系统分区,挂载的是drbd的drbd0逻辑分区,通过挂载点写到drbd0逻辑分区上然后写到/dev/sdb1

系统分区上;不挂载slave-db的/dev/sdb1磁盘,因为该系统分区已经被/dev/drbd0设备占用,且不可见;

[root@master-db ~]#mkdir -p /master-db

[root@master-db ~]#mount /dev/drbd0 /master-db/

#说明:只有置为主端的时才可以这样挂载,否则要停掉资源后挂载本地的系统资源,如/dev/sdb1;

[root@master-db ~]#df -hT

Filesystem Type Size Used Avail Use% Mounted on

/dev/drbd0 ext4 4.5G 9.4M 4.3G 1% /master-db

22.15、测试:

1、master-db:

[root@master-db ~]#cd /master-db/

[root@master-db ~]#touch /master-db/{1..6}.txt

[root@master-db ~]#ls /master-db/

1.txt 2.txt 3.txt 4.txt 5.txt 6.txt lost+found

2、slave-db:

[root@slave-db ~]#drbdadm down data #停掉drbd服务;

[root@slave-db ~]#mkdir -p /slave-db #创建/dev/sdb1的挂载点;

[root@slave-db ~]#mount /dev/sdb1 /master-db/ #挂载;

[root@slave-db ~]#ls /slave-db/ #数据已经同步过来了;

1.txt 2.txt 3.txt 4.txt 5.txt 6.txt lost+found

提示:因为slave-db上的/dev/sdb1系统分区被'/dev/drbd0'设备占用,不能够查看数据,所以需要停止后挂载查看,但是这种访问方法是不规范的;

[root@slave-db ~]#df -hT #查看磁盘

Filesystem Type Size Used Avail Use% Mounted on

/dev/drbd0 ext4 4.5G 9.4M 4.3G 1% /master-db

[root@slave-db ~]#umount /dev/sdb1 #卸载分区;

[root@slave-db ~]#drbdadm up data #启动drbd服务;

3、查看master-db和slave-db的磁盘使用状态参数说明:

(1)master-db:

[root@master-db ~]#cat /proc/drbd

version: 8.4.9-1 (api:1/proto:86-101)

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:48 nr:0 dw:48 dr:1357 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

(2)slave-db:

[root@slave-db ~]#cat /proc/drbd

cat /proc/drbd

version: 8.4.9-1 (api:1/proto:86-101)

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

ns:0 nr:48 dw:48 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

4、小结:

(1)通过测试可以发现主从连接状态(cs)、角色(ro)、磁盘状态(ds)正常,且主的数据发送(ns)量和

从的数据接收(nr)、写入(dw)量相同,说明数据同步是成功的;

(2)drbd状态码解释:

1)0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

0 #drbd的次设备号(minor),表示该行是/dev/drbd0资源的信息;

cs #connect state,即节点的连接状态wf未初始化状态;

ro #roles,即节点的角色状态;

ds #disk state,即磁盘的状态,也即drbd底层设备的状态,UpToDate表示正常、inconsistent初始化之前同步的状态;

C #drbd的复制协议,即A、B、C协议;

r-----#是IO标记,反应的是该资源的IO状态信息。共有6种IO状态标记符号;

2)ns:0 nr:48 dw:48 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

ns/send (network send) #通过网络连接发送给对端的数据量,单位为KB。

nr/receive (network receive) #通过网络连接接收到对端发送来的数据量,单位为KB。

dw/written (disk write) #写入本地磁盘的数据量,单位为KB。

dr/read (disk read) #从本地磁盘读取的数据量,单位为KB。

al/al-writes (activity log) #元数据区中al更新的次数。

bm/bm-writes (bit map) #元数据区中bitmap更新的次数。

lo/lower-pending (local count) #DRBD发起的打开本地IO子系统的请求次数。

pe/pending (pending) #本地发送给对端但却没有回复的次数。

ua/unacked (unacknowledged) #接收到对端发送的请求但却没有给予回复的请求数量。

ap/upper-pending (application pending) #转发给DRBD的IO块的请求,但DRBD还没给予回复的请求数量。

ep (epochs) #epoch对象的数量。通常为1。drbd9中没有该指标。

wo/write-ordering (write order) #当前正在使用的write order方法:b(barrier), f(flush), d(drain)或n(none)。

oos/out-of-sync (out of sync) #当前不同步的数据量,单位为KB。

22.16、总结:

1、drbd应用注意项:

(1)drbd开机默认是不自启动的;

chkconfig --list drbd

drbd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

(2)在生产环境中drbd设置的是开机不自启的,人工管理;

(3)drbd停止主服务器端需要卸载(umount /dev/drbd0)设备,然后(/etc/init.d/drbd stop)

停止服务即可,从服务端可以直接停掉;

(4)主从都停止再启动,两边都是从状态(/proc/drbd)也会被清空,说明drbd有自我保护的功能;如果停止的是从

端,从端再启动后,能够确定主从关系,从的状态数据会重新开始;如果停止的是主,主再起就会变成从;

drbd的C模式保证了两边数据的一致性;主端挂载,从端隐藏;

重新确定主端的命令是:drbdadm primary data;

重新确定从端的命令是:drbdadm secondary data;

(5)使用'drbdadm -- --overwrite-data-of-peer primary data'命令指定主端时会将主端的

数据推到主端,覆盖掉,所以需要谨慎操作,如果从端有数据需要进行备份(该参数只用一次,在

初始安装drbd的时候);

2、DRBD报错:0: Failure: (119) No valid meta-data signature found:

(1)原因:

使用fdisk分区时有问题;

(2)解决办法:

分区后'/dev/sdb2'分区不要格式化;如果执行'partprobe'命令报错,需要重启服务器,然后

重新初始化(drbdadm create-md data)数据后再启动(drbdadm up data);

3、查看drbd状态时出现secondary/Uknow的解决的方法:

(1)检查两台drbd服务器物理网络或者连接ip及主机直连路由是否正确;

route add -host '对端ip' dev eth0

(2)停止防火墙,或者放行drbd同步;

(3)还有可能发生裂脑了(官方推荐方法);

1)在从节点slave-db上做如下的操作:

drbdadm secondary data

drbdadm disconnect data

drbdadm -- --discard-my-data connect data

#是个断开连接的过程;

2)在主节点master-db上做如下的操:

通过cat /etc/proc/drbd查看状态,如果是WFConnection状态,需要手动进行连接;

drbdadm connect data

3)查看主从两端的状态:

cat /etc/proc/drbd

3、master-db的磁盘可见,slave-db的磁盘不可见;

实时的差异同步;
















你可能感兴趣的:(22、部署drdb)