drbd+keepalived实现存储高可用

更新时间:2018-02-06 10:27:29点击:165442 运维笔记

系统:CentOS6.3

(Primary)IP:192.168.20.252

(Secondary)IP:192.168.20.240

虚拟IP:192.168.20.108

Primary笔记:

1.关闭防火墙,关闭selinux.


2.设置hosts(域随便改成自己喜欢的)

3.创建一个分区,不做挂载操作,此分区为独立硬盘

创建分区方法

1.fdisk /dev/sdb 2.n 3.p 4.1 5.1 6.+100G 7.w

再创建一个文件夹到时候挂载

mkdir /data

4.时间同步一下

ntpdate -u asia.pool.ntp.org

提示命令不存在请安装NTP

5.下载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

无法编译请安装 gcc gcc-c++ make glibc flex kernel-devel kernel-headers

make KDIR=/usr/src/kernels/2.6.32-504.16.2.el6.i686 (自己去路径下看看)

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

chkconfig --add drbd

chkconfig drbd on

加载DRBD模块:

modprobe drbd

查看DRBD模块是否加载到内核:

lsmod |grep drbd


6.编辑配置文件

vim /usr/local/drbd/etc/drbd.conf

resource r0{

protocol C;

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 30M;}

on drbd1.example.com{

device /dev/drbd0;

disk   /dev/sdb1;

address 192.168.20.241:7788;

meta-disk internal;

}

on drbd2.example.com{

device /dev/drbd0;

disk   /dev/sdb1;

address 192.168.20.240:7788;

meta-disk internal;

}

}


创建DRBD设备并激活ro资源

mknod /dev/drbd0 b 147 0

drbdadm create-md r0

等待片刻,显示success表示drbd块创建成功

在输入一次drbdadm create-md r0

提示:New drbd meta data block successfully created. 表示成功

查看drbd状态



我是配置好了  初次创建 RO均为Secondary/Secondary

将drbd1设置成主节点 drbdsetup /dev/drbd0 primary --force

再看drbd状态



ro在主从服务器上分别显示 Primary/Secondary和Secondary/Primary

ds显示UpToDate/UpToDate

表示主从配置成功。

然后挂载DRBD到系统目录

mkfs.ext4 /dev/drbd0

mount /dev/drbd0 /data

我们在data里创建几个文件夹模拟节点1故障


我们把备用节点设置成主节点

drbdadm primary r0

/bin/mount /dev/drbd0 /data/



可以看到数据是同步了的。

再来说keepalived

YUM直接安装

编辑配置文件

vim /etc/keepalived/keepalived.conf(主)


vim /etc/keepalived/keepalived.conf(从)


! Configuration File for keepalived

global_defs {

router_id drbd1.example.com

}

vrrp_instance VI_1 {

state MASTER

interface eth1

virtual_router_id 52

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.20.108

}

}

-------------------------------------------------

! Configuration File for keepalived

global_defs {

router_id drbd2.example.com

}

vrrp_sync_group VI{

group {

VI_1

}

notify_master /sh/master.sh

notify_backup /sh/backup.sh

}

vrrp_instance VI_1 {

state BACKUP

interface eth1

virtual_router_id 52

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.20.108

}

}

在路径下创建脚本,可以在监控到主节点故障时候执行脚本

backup.sh:

#!/bin/bash

/bin/umount /dev/drbd0

drbdadm secondary r0

master.sh:

#!/bin/bash

drbdadm primary r0

/bin/mount /dev/drbd0 /data

现在启动keepalived

service keepalived start

查看下虚拟IP是否启用

ip addr

现在我们来模拟主节点宕机,看从设备是否能接替主继续工作


看到备用机自动升级为主节点。之前的主节点我关机了,所以提示DUnknown.

到此 自动切换成功。

我们看看当恢复主节点的时候。


之前的主节点自动变成了从。


这时候 最好还是把之前的主变成主,现在的主还是降级到备用。

降级 直接执行backup脚本

升级 直接执行master脚本

脑裂情况:


怎么造成的呢

主突然断网,从自动变成了主。主突然网络恢复。就会出现脑列的情况。

当然 有了keepalived的2个脚本是不会出现这样的情况,但是了需要执行以下命令解决

(Secondary)

# drbdadm secondary r0

# drbdadm disconnect all

# drbdadm --discard-my-data connect r0

(Primary)

# drbdadm disconnect all

# drbdadm connect r0

# drbdsetup /dev/drbd0 primary

官方文档

http://drbd.linbit.com/users-guide/s-resolve-split-brain.html