DRBD实现文件存储高可用

       DRDB是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。由内核模块和相关应用层工具程序组成,主要被用于Linux平台下的高可用(HA)方案之中,实现不同机器上数据的同步,保持数据的一致性。当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。在高可用(HA)解决方案中使用DRBD,可以代替使用一个共享盘阵列存储设备。因为数据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了。

 

Drbd的配置(主从模式)

实验环境:

2个节点:

192.168.10.132 fjw132

192.168.10.135 fjw135


1、修改两台节点的hosts文件,使其可以互相访问

[root@fjw132 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.132 fjw132
192.168.10.135 fjw135


2、使用ssh让两台机可以互相连接

root@fjw132 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
03:9a:6b:18:10:22:06:fb:1e:81:e4:d0:ce:da:11:05 root@fjw132
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|B+Eo.            |
|B+o              |
|++..  .          |
| o+. o .         |
| o+.o   S        |
|...+ .   .       |
|  o o            |
|   .             |
|                 |
+-----------------+
[root@fjw132 ~]# ssh-copy-id 192.168.10.135

3、设置时钟同步:

[root@fjw132 ~]# crontab -l
*/5 * * * * ntpdate cn.pool.ntp.org

4、安装drbd

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install -y kmod-drbd84 drbd84-utils

5、修改drbd配置文件

vim /etc/drbd.d/global_common.conf
global {
    usage-count no;  #是否参加DRBD使用统计,默认为yes。
}
common {
    protocol C;      #使用DRBD的同步协议
    handlers {
        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";
    }
disk {
        on-io-error detach; #配置I/O错误处理策略为分离
}
 syncer {
        rate 1024M;    #设置主备节点同步时的网络速率
    }
}

6、创建配置文件

[root@fjw132 ~]# cat /etc/drbd.d/mysql.res
resource mysql {  #资源名称
protocol C;           #使用协议
meta-disk internal;
device /dev/drbd1;   #DRBD设备名称
syncer {
verify-alg sha1;          # 加密算法
}
net {
allow-two-primaries;
}
on fjw132 {
disk /dev/sdb1;
address 192.168.10.132:7789;  #设置DRBD监听地址与端口
}
on fjw135 {
disk /dev/sdb1;
address 192.168.10.135:7789;
}
}

7、装一个硬盘并分好区为/dev/sdb1

fdisk -l   #查看新磁盘
fdisk /dev/sdb  添加分区

以上步骤两台节点都做相同操作

8、在fjw132上启动

[root@fjw135 ~]# drbdadm create-md mysql
initializing activity log
initializing bitmap (160 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
[root@fjw135 ~]# modprobe drbd
[root@fjw135 ~]# drbdadm up mysql
[root@fjw135 ~]# drbdadm -- --force primary mysql

9、在对端节点192.168.10.135执行

drbdadm create-md mysql
modprobe drbd
drbdadm up mysql

10、在fjw132上格式化和挂载到创建的/data目录上

[root@fjw132 ~]# mkfs.ext4 /dev/drbd1
[root@fjw132 ~]# mount /dev/drbd1 /data
[root@fjw132 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
1:mysql/0  Connected Primary/Secondary UpToDate/UpToDate
[root@fjw135 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
1:mysql/0  Connected Secondary/Secondary UpToDate/UpToDate

11、测试,在/data目录上创建一个文件1.txt

[root@fjw132 ~]# echo "123" > /data/1.txt

12、先把主结点降为从结点(先卸载才能变为从)

[root@fjw132 ~]# umount /data
[root@fjw132 ~]# drbdadm secondary mysql
[root@fjw132 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
1:mysql/0  Connected Secondary/Secondary UpToDate/UpToDate

13、到fjw135上升级

[root@fjw135 ~]# drbdadm primary mysql
[root@fjw135 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
1:mysql/0  Connected Primary/Secondary UpToDate/UpToDate

14、挂载并查看

[root@fjw135 ~]# mount /dev/drbd1 /data
[root@fjw135 ~]# ls /data
1.txt  lost+found
[root@fjw135 ~]# cat /data/1.txt
123

完!