drbd安装和数据同步
一。软件安装
drbd原理:drbd是一个块同步工具 运行于系统内核 在系统文件写入磁盘前 drbd驱动拦截到数据块操作 将数据块通过网络发送给其他机器进行同步
1》heartbeat安装 参考http://blog.csdn.net/liaomin416100569/article/details/76087448
2》drbd安装过程:
drbd官网 http://www.drbd.org/
drbd下载 https://www.linbit.com/en/drbd-community/drbd-download/
》》模拟环境 为: (centos6.9)
drbd-utils-8.9.9.tar.gz (drbd的管理配置软件) wget http://www.linbit.com/downloads/drbd/utils/drbd-utils-8.9.9.tar.gz
drbd-8.4.6.tar.gz (drbd的内核驱动) wget http://www.linbit.com/downloads/drbd/8.4/drbd-8.4.6.tar.gz
》》 编译安装 drbd-utils
安装 drbd-utils
yum -y install gcc flex libxslt kernel-devel
安装完成kernel-devel 进入 /usr/src/kernels目录下 看是否存在一个内核编号的目录
./configure --with-heartbeat -prefix=/usr/local/drbd
make KDIR=/usr/src/kernels/2.6.32-696.6.3.el6.x86_64 这里表示编译时 带上内核源码的目录
make install
》》编译安装drbd
安装drbd
yum -y install perl
make KDIR=/usr/src/kernels/2.6.32-696.6.3.el6.x86_64
[root@bogon drbd-8.4.6]# make install
make -C drbd install
make[1]: Entering directory `/root/drbd/drbd-8.4.6/drbd'
install -d //lib/modules/2.6.32-696.6.3.el6.x86_64/updates
install -m 644 drbd.ko //lib/modules/2.6.32-696.6.3.el6.x86_64/updates
[ -e /System.map ] && \
/sbin/depmod -F /System.map -e ./drbd.ko 2>&1 >/dev/null || true
make[1]: Leaving directory `/root/drbd/drbd-8.4.6/drbd'
通过uname -r 可以看出 系统的内核编号为 2.6.32-696.el6.x86_64 编译的系统编号是2.6.32-696.6.3.el6.x86_64所以
加载内核模块 肯定是2.6.32-696.el6.x86_64下 而不是 2.6.32-696.6.3.el6.x86_64 所需要拷贝驱动文件ko到目录2.6.32-696.el6.x86_64下
install -d //lib/modules/2.6.32-696.6.3.el6.x86_64/updates 知道 drbd.ko安装在该目录下 拷贝到
cp /lib/modules/2.6.32-696.6.3.el6.x86_64/updates/drbd.ko /lib/modules/2.6.32-696.el6.x86_64/kernel/lib
使用命令depmod 重新加载该目录下的驱动文件
尝试手工加载
[root@bogon lib]# insmod drbd.ko
insmod: error inserting 'drbd.ko': -1 Unknown symbol in module
查看下 依赖 内核驱动是否存在
[root@bogon lib]# modinfo ./drbd.ko | grep depend
depends: libcrc32c
[root@bogon lib]# modprobe libcrc32c
[root@bogon lib]# insmod drbd.ko
[root@bogon lib]# modprobe drbd
开机自启动 /etc/rc.local最后一行添加 modprobe drbd 重启reboot
重启后 检查内核drbd是否成功 lsmod | grep drbd
3》drbd同步配置:
演示环境
主机 192.168.58.142 新磁盘 /dev/sdb 分区为 /dev/sdb1和/dev/sdb2 主机名 ha
从机 192.168.58.143 新磁盘 /dev/sdb 分区为 /dev/sdb1和/dev/sdb2 主机名ha1
主机配置:
配置主机名 hostname 主机名 添加host文件
vi /etc/hosts
192.168.58.142 ha
192.168.58.143 ha1
修改/usr/local/drbd/etc/drbd.d/ 下的配置文件
文件global_common.conf
global {
usage-count no; #表示是否上传drbd使用的用户信息到drbd官网 no表示不上传
}
common {
net {
#协议A:异步复制协议。本地写成功后立即返回,数据放在发送BUFFER中,可能丢失。
#协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失(mysql5.5以上支持)。
#协议C:同步复制协议。本地和对方服务器磁盘都写成功确认后返回成功。如果单机掉电后单机磁盘损坏,数据都不会丢失。
#工作中一般用协议C。选择协议将影响流量,从而影响网络延时。
protocol C; #表示使用协议 同步协议
}
}
添加文件 r0.res 内容为
resource r0 {
on ha { # on 后表示主机名
device /dev/drbd1; #表示drbd使用的逻辑设备名 不需要用户自己创建
disk /dev/sdb1; #表示需要同步的物理设备分区 这里不用先格式化
address 192.168.58.142:7789; #表示当前机器ip和监听的端口
meta-disk internal; #用于同步的一些元数据
}
on ha1 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.58.143:7789;
meta-disk internal;
}
}
主(ha)备(ha1) 分别配置主机名和配置资源文件 同时执行命令(执行之前关闭防火墙 service iptables stop & iptables --flush)
1 创建资源设备(主备执行)
drbdadm create-md r0
2 启动资源(主备执行)
drbdadm up r0 报错
/usr/local/drbd/var/run/drbd: No such file or directory/usr/local/drbd/var/run/drbd: No such file or directory
3 创建该不存在的目录(主备执行)
mkdir -p /usr/local/drbd/var/run/drbd
drbdadm up r0 (主备执行)
成功Command 'drbdmeta 1 v08 /dev/sdb1 internal apply-al' terminated with exit code 20
4 查看 drbd启动的状态cat /proc/drbd
5 在主机上设置为主机另一台就是从机(主机执行)
drbdadm primary --force r0
互相查看状态 cat /proc/drbd
6 主机上格式化逻辑设备 (主机执行)
mkfs.ext4 /dev/drbd1
mkdir /r0
mount /dev/drbd1 /r0
此时 在/r0上创建一个文件 a.txt 无法之间在 从机的/dev/sdb1上查看到 因为同步状态不允许查看文件 可以先停掉同步
drbdadm down r0
mount /dev/sdb1 /r0
ls /r0 就可以正常看到
这里/proc/drbd文件的内容解释 一般结果为:
[root@ha drbd.d]# more /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@bogon, 2017-08-01 12:48:25
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:2410760 nr:0 dw:104304 dr:2413653 al:3 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
cs(connection state)表示连接状态 Connected表示连接成功 Unconnected表示未连接 其他关于连接状态参考(http://docs.linbit.com/docs/users-guide-8.4/#s-connection-states)ro(role)表示角色 / 前面的部分表示当前主机的角色 后面部分表示其他机器的状态 Primary表示主机 Secondary表示从机 其他角色参考(http://docs.linbit.com/docs/users-guide-8.4/#s-roles)
ds(Disk states)磁盘状态 Diskless没有指定物理设备 Failed 连接失败 可以通过命令 drbdadm dstate r0 查看状态 /前面表示当前机器状态
/后面部分表示其他机器磁盘状态
C r 表示io表示 r表示 running运行 s表示suspended 状态
性能指标参数
dw (disk write)
磁盘写入多少kb到网络
dr (disk read)
从网络中读取多少kb数据到磁盘
al (activity log)
meta data.中更新的日志数量
bm (bit map)
meta data.中更新位图数量
lo (local count)
DRBD.打开本地io的请求次数
pe (pending)
发给另外一台机器的请求io的次数
ua (unacknowledged)
接受到网络数据请求(未回应也就是接收到但是还未写入)的个数
ap (application pending)
网络中接收到的数据块(未回应也就是接收到但是还未写入)的的个数
ep (epochs)
Number of epoch objects. Usually 1. Might increase under I/O load when using either the barrier or the none write ordering method.
wo (write order)
Currently used write ordering method: b(barrier), f(flush), d(drain) or n(none).
oos (out of sync)
Amount of storage currently out of sync; in Kibibytes.