一. 环境部署:
主机名 | 主机地址 | 角色 | 磁盘 |
node1 | 192.168.188.11 | 主服务器 | 系统盘sda:20G 存储盘sdb:20G |
node2 | 192.168.188.12 | 备服务器 | 系统盘sda:20G 存储盘sdb:20G |
二. 部署DRBD,主备节点同时操作:
1. 配置两个节点的域名解析:
两个节点都要配置
[root@node1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.188.11 node1
192.168.188.12 node2
2. 配置两个节点的ssh免密钥登录:
[root@node1 ~]# ssh-keygen -f ~/.ssh/id_rsa -P '' -q
[root@node1 ~]# ssh-copy-id node2
[root@node2 ~]# ssh-keygen -f ~/.ssh/id_rsa -P '' -q
[root@node2 ~]# ssh-copy-id node1
3. 导入源:
##两个节点同时配置
[root@node1 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@node1 ~]# yum localinstall -y https://mirrors.tuna.tsinghua.edu.cn/elrepo/elrepo/el7/x86_64/RPMS/
elrepo-release-7.0-6.el7.elrepo.noarch.rpm
[root@node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com
/repo/epel-7.repo
4. 安装DRBD软件包:
[root@node1 ~]# yum install -y drbd90-utils kmod-drbd90
5. 启动DRBD内核模块:
[root@node1 ~]# modprobe drbd
[root@node1 ~]# echo drbd > /etc/modules-load.d/drbd.conf
6. 查看DRBD内核是否启动:
[root@node1 ~]# lsmod | grep drbd
drbd 606840 0
libcrc32c 12644 2 xfs,drbd
三:在主备节点配置DRBD:
1. 配置DRBD主配置文件,主备配置文件一致:
##过滤出文件中不以"#"开头的行和空行
[root@node1 ~]# egrep -v "#|^$" /etc/drbd.d/global_common.conf
global {
usage-count no;
}
common {
protocol C; ##表示使用DRBD C协议。
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";
}
startup {
}
options {
}
disk {
on-io-error detach; ##表示发生I/O错误的节点将放弃底层设备
}
net {
}
}
配置解析:
1. global 部分:此部分在配置中只允许使用一次。它通常位于 /etc/drbd.d/global_common.conf
文件中。在单个文件配置中,它应该位于配置文件的最顶端。
2. usage-count:DRBD项目保存关于各种DRBD版本使用情况的统计信息。这是通过每次在系统上
安装新的DRBD版本时联系官方HTTP服务器来完成的。这可以通过设置 usage count no; 禁用。
默认值是 usage count ask;,每次升级DRBD时都会提示。
注意:DRBD复制模式: 1. Protocol A:异步复制协议。一旦本地磁盘写入完成,并且复制数据包已放置在本地TCP发送缓冲区中,则认为主节点上的本地写入操作已完成。在强制故障转移的情况下,可能会发生数据丢失。备用节点上的数据在故障转移后是一致的;但是,在崩溃之前执行的最新更新可能会丢失。
2. Protocol B:内存同步(半同步)复制协议。一旦本地磁盘写入发生,并且复制数据包已到达对等节点,则认为主节点上的本地写入操作已完成。通常,在强制故障转移的情况下不会丢失任何写操作。但是,如果同时在主备节点同时 发生了电源故障,则主节点的数据存储可能会丢失最新完成的写入操作。
3. Protocol C:同步复制协议。只有在确认本地和远程磁盘写入之后,主节点上的本地写入操作才被视为完成。因此,单个节点的丢失不会导致任何数据丢失。数据丢失当然是不可避免的,即使采用这个复制协议,如果所有节点 (例如:它们的存储子系统)同时遭到不可逆转的破坏, 数据也可能丢失。
2. 配置DRBD资源文件,主备配置文件一致:
注意:资源配置文件通常我们以" .res "结尾。
[root@node1 ~]# vim /etc/drbd.d/nfs.res
resource nfs { ##资源名字,必须与资源文件名一致
disk /dev/sdb; ##要存储的分区
device /dev/drbd0; ##一共有16个设备,编号为0-15
meta-disk internal;
on node1 { ##节点名称,地址
address 192.168.188.11:7789;
}
on node2 { ##节点名称,地址
address 192.168.188.12:7789;
}
}
3. 首次启用资源:
1>. 创建主备节点设备元数据:
[root@node1 ~]# drbdadm create-md nfs
initializing activity log
initializing bitmap (640 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
[root@node1 ~]# ssh node2 drbdadm create-md nfs
initializing bitmap (640 KB) to all zero
initializing activity log
Writing meta data...
New drbd meta data block successfully created.
2>. 启动主备节点资源:
[root@node1 ~]# drbdadm up nfs
[root@node1 ~]# ssh node2 drbdadm up nfs
3>. 初始设备同步,只在主节点操作:
[root@node1 ~]# drbdadm primary --force nfs
4>. 等到资源同步完成,查看资源状态:
[root@node1 ~]# drbdadm status nfs
nfs role:Primary
disk:UpToDate
node2 role:Secondary
replication:SyncSource peer-disk:Inconsistent done:64.52
[root@node1 ~]# drbdadm status nfs
nfs role:Primary
disk:UpToDate
node2 role:Secondary
peer-disk:UpToDate
##到达该种状态则表示同步完成
5>. drbdadm命令常见操作:
[root@node1 ~]# drbdadm status resourceName ##查看资源状态
[root@node1 ~]# drbdadm dstate resourceName ##查看资源磁盘状态
[root@node1 ~]# drbdadm cstate resourceName ##查看资源连接状态
[root@node1 ~]# drbdadm role resourceName ##查看资源角色
[root@node1 ~]# drbdadm primary resourceName ##升级资源角色
[root@node1 ~]# drbdadm secondary resourceName ##降级资源角色
四:验证DRBD是否配置成功:
1. 主备节点创建挂载点:
[root@node1 ~]# mkdir /data
2. 格式化设备:
[root@node1 ~]# mkfs.xfs /dev/drbd0
3. 将设备挂载到挂载点上:
[root@node1 ~]# mount /dev/drbd0 /data/
4. 向挂载的目录中放入文件:
[root@node1 ~]# cp /etc/c* /data/
[root@node1 ~]# ls /data
centos-release centos-release-upstream cron.deny crontab crypttab
csh.cshrc csh.login
5. 卸载文件系统并切换为备节点,先卸载,在降级:
[root@node1 ~]# umount /data
[root@node1 ~]# drbdadm secondary nfs
6. 从节点上切换为主节点,先升级,再挂载:
[root@node2 ~]# drbdadm primary nfs
[root@node2 ~]# mount /dev/drbd0 /data
注意:主节点先挂载,载写入数据;先卸载,在降级。
从节点先升级,再挂载。
7. 在从节点上查看数据是否同步:
[root@node2 ~]# ls /data/
centos-release centos-release-upstream cron.deny crontab crypttab
csh.cshrc csh.login
五:主备节点设置服务开机自启服务:
[root@node1 ~]# systemctl start drbd
[root@node1 ~]# systemctl enable drbd