废话不多说,现在开始:
1.2台虚拟机,Centos6.5系统,系统配置啥的都一样,能互相ping 通。把它们称为A和B。
2. A: server iptables stop
setenforce 1 //先把这2台服务器的防火墙和SELINUX关闭。
-------------------------------------------
B: server iptables stop
setenforce 1 //先把这2台服务器的防火墙和SELINUX关闭。
3. vim /etc/hosts
192.168.1.170 drbd1.com
192.168.1.171 drbd2.com //这一步挺重要,统一主机名字,后面就看出来了。
4.把2台虚拟机分别添加一块硬盘:
fdisk -l /dev/sdb --->n-----> p---->1----->回车-----> w 保存。到现在为止,就可以了,不要急着格式化。
5. A 和 B 时间要同步一下
# ntpdate -u asia.pool.ntp.org
目前为止,准备工作都准备好了,现在接下来迎接客人------DRBD。
a. 安装依赖包(A和B都安装)
#yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers
b. 安装drbd包
# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz
# tar -zxvf drbd-8.4.3.tar.gz
# cd drbd-8.4.3
#./configure --prefix=/usr/local/drbd --with-km 这步是安装路径
# make KDIR=/usr/src/kernels/`uname -r` 把你系统的内核安装好
# make install
# mkdir -p /usr/local/drbd/var/run/drbd
# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/ 把命令cp过去
加载DRBD模块是否加载到内核
#modprobe drbd
查看DRB模块是否加载到内核:
# lsmod|grep drbd 看一下是否有类似图片中的东西出现
到现在为止,完成一半了,接下来把配置文件配置一下就好了。
#vim /usr/local/drbd/etc/drbd.conf 打开这个文件以后,默认有红色的2行文字,不用管它,全部删除即可。我们重新配置它。这个文件里的内容,可以分成2个文件配置,也可以在一个文件里配置,我这里在一个文件里配置,功能相同,没有任何影响,完全可以。
resource r0{ #资源名字为r0
protocol C; #使用DRBD第3种协议,表示远程主机的写入确认后,认为写入完成。
startup { wfc-timeout 0; degr-wfc-timeout 120;}
disk { on-io-error detach;} #保证数据在不同步时不进行切换
net{
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer { rate 200M;} #主用节点和备用节点同步时的网络速率最大值
on drbd1.com{ # drbd1.com是主机名,前面改过了,on 这个字母必须加
device /dev/drbd0;
disk /dev/sdb1; # /dev/drbd0 使用的磁盘分区是/dev/sdb1.
address 192.168.1.170:7798; #设置DRBD的监听端口
meta-disk internal; #DRBD的元数据存放方式。
}
on drbd2.com{
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.171:7798;
meta-disk internal;
}
}
现在配置完毕。
1) 把drbd.conf 放到A 和B 的/usr/local/drbd/etc/底下,2台服务器的配置一模一样。
启动DRBD:
A:# drbdadm create-md r0 (我写的这个命令绝对可以,还有一些其他命令和这个命令作用一样,别管别的命令了)
# drbdadm create-md r0 你没看错,执行2遍这个命令,第一遍是创建DRBD记录信息的数据块,第2遍是激活r0.
B:# drbdadm create-md r0
# drbdadm create-md r0
2) A:service drbd start
B:service drbd start 在2台服务器上分别执行这个命令,最好同时进行,我觉的同时进行非常重要!
3) cat /proc/drbd 分别在A和B上执行这个命令,看是否和下面的一样,如果2台都是Secondary 就对了。红色代表是都是备用状态,紫色是数据不一致。
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C
4) 将A主机配置为主节点:
A: # drbdsetup /dev/drbd0 primary -- force
目前为止,分别在A和B上看一下状态。
A服务器:: # service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res cs ro ds p mounted fstype
0:r0 Connected Primary/Secondary Inconsistent/Inconsistent C
B服务器: # service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Primary Inconsistent/Inconsistent C
ro在主从服务器上分别显示 Primary/Secondary和Secondary/Primary
ds显示UpToDate/UpToDate
A服务器上挂载DRBD
# mkfs.ext4 /dev/drbd0
# mount /dev/drbd0 /mnt
现在为止,全部OK
注意:Secondary节点上不允许对DRBD设备进行任何操作,包括只读。
只有当Primary节点挂掉时,Secondary节点才能提升为Primary.
DRBD(Distributed Replicated Block Device),相当于一个RAID1.2台服务器一台用于写,读数据,另一台负责复制。
ro: 表示角色信息,第一次启动,两个drbd节点默认都是Secondary状态。
ds: 表示磁盘信息 , “Inconsistent/Inconsistent”表示 “不一致/不一致”状态。
ns: 表示网络发送的数据包信息。
dw: 表示磁盘写信息
dr: 表示磁盘读信息
模拟故障:
A服务器故障,手动切换到B服务器
A 服务器: # cd /mnt
# touch 111111
# cd ..
# umount /mnt
# drbdsetup /dev/drbd0 secondary 这里把drbd转换为secondary状态
在实际生产环境中,若A服务器宕机了,B服务器的状态是 Secondary/Unknown,此时,直接对
drbd进行提权操作即可。
B服务器: # drbdsetup /dev/drbd0 primary
# mount /dev/drbd0 /mnt
# cd /mnt
# touch 222222
#ls
111111 222222
# service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res cs ro ds p mounted fstype
0:r0 Connected Primary/Secondary UpToDate/UpToDate C /mnt ext4
这个时候手动切换就完成了。
如果想主从智能切换,实现高可用,就需要用到Heartbeat。
会在主端宕机的情况下,自动切换到从端,并把从端变为主端,并实现自动挂载。