侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 192 篇文章
  • 累计创建 74 个标签
  • 累计收到 120 条评论

DRBD - 环境搭建

汪洋
2021-07-18 / 0 评论 / 0 点赞 / 361 阅读 / 2,863 字
基础环境配置
# 设置主机名并相互解析
hostname  node1.test.com

vi /etc/hosts
    192.168.66.11  node1.test.com
    192.168.66.12  node2.test.com
    
# 配置时间同步服务器
yum -y install ntp
ntpdate -u 192.168.66.11
配置 YUM 源,安装 DRBD
# 下载源码包
https://www.linbit.com/downloads/drbd/8.4/

# 安装依赖包
yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers

# 源码编译安装
tar zxvf drbd-8.4.3.tar.gz
cd drbd-8.4.3
./configure --prefix=/usr/local/drbd --with-km
make && 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
分区,无需格式化
# 虚拟机添加硬盘,后期数据同步使用

# 分区,分区名称大小最好一致
fdisk /dev/sdb
配置 DRBD
# 打开配置文件修改如下  vim /usr/local/drbd/etc/drbd.conf
resource r0 {
	# 指定复制协议
    protocol C;
	
	# wfc-timeout 单位是秒。在启用 DRBD 块时,初始化脚本 drbd 会阻塞启动进程的运行,直到对等节点的出现
	# 它作用于一个降级集群( 即那些只剩下一个节点的集群 )在重启时的等待时间
    startup { wfc-timeout 0; degr-wfc-timeout 120; }

	# 如果底层设备向上层设备报告发生 I/O 错误,将按照该策略进行处理。有效的策略包括
	# detach:发生 I/O 错误的节点将放弃底层设备,以 diskless mode 继续工作。在 diskless mode下,只要还有网络连接,drbd 将从 secondary node 读写数据,而不需要 failover(故障转移)。该策略会导致一定的损失,但好处也很明显,drbd 服务不会中断。官方推荐和默认策略
	# pass_on:把 I/O 错误报告给上层设备。如果错误发生在 primary 节点,把它报告给文件系统,由上层设备处理这些错误( 例如,它会导致文件系统以只读方式重新挂载 ),它可能会导致 drbd 停止提供服务;如果发生在 secondary 节点,则忽略该错误( 因为 secondary 节点没有上层设备可以报告 )。该策略曾经是默认策略,但现在已被 detach 所取代
	# call-local-io-error:调用预定义的本地 local-io-error 脚本进行处理。该策略需要在resource( 或 common )配置段的 handlers 部分,预定义一个相应的 local-io-error 命令调用。该策略完全由管理员通过 local-io-error 命令(或脚本)调用来控制如何处理 I/O 错误
    disk { on-io-error detach;}

    net{
    	  # 该选项设定一个时间值,单位为 0.1 秒。如果搭档节点没有在此时间内发来应答包,那么就认为搭档节点已经死亡,因此将断开这次 TCP/IP 连接。默认值为 60,即 60 秒。该选项的值必须小于 connect-int 和 ping-int 的值
          timeout 60;
          # 如果无法立即连接上远程 DRBD 设备,系统将断续尝试连接。该选项设定的就是两次尝试间隔时间。单位为秒,默认值为10秒
          connect-int 10;
          # 该选项设定一个时间值,单位是 0.1 秒。如果对端节点没有在此时间内应答 keep-alive 包,它将被认为已经死亡。默认值是 500ms
          ping-int 10;
          # 该选项设定一个由 drbd 分配的最大请求数,单位是页面大小( PAGE_SIZE ),大多数系统中,页面大小为 4KB。这些 buffer 用来存储那些即将写入磁盘的数据。最小值为 32(即 128KB )。这个值大一点好
          max-buffers 2048;
          # 该选项设定了两次 write barriers 之间最大的数据块数。如果选项的值小于 10,将影响系统性能。大一点好
          max-epoch-size 2048;
    }

	# 设置同步时的速率,默认为 250KB。默认的单位是 KB/sec,也允许使用 K、M 和 G,如 40M。注意:syncer 中的速率是以 bytes,而不是 bits 来设定的。配置文件中的这个选项设置的速率是永久性的,但可使用下列命令临时地改变 rate 的值:drbdsetup /dev/drbdN syncer -r 100M 。如果想重新恢复成drbd.conf 配置文件中设定的速率,执行如下命令:drbdadm adjust resource
    syncer { rate 30M;}

    on drbd1.example.com{
          # 定义 DRBD 虚拟块设备
          device /dev/drbd0;
          # 定义存储磁盘为 /dev/sdb1,该分区创建完成之后就行了,不要进行格式化操作
          disk   /dev/sdb1;
          # 定义 DRBD 监听的地址和端口,以便和对端进行通信
          address 192.168.7.88:7788;
          # 该参数有2个选项:internal 和 externally,其中 internal 表示将元数据和数据存储在同一个磁盘上;而 externally 表示将元数据和数据分开存储,元数据被放在另一个磁盘上
          meta-disk internal;
    }

    on drbd2.example.com{
          device /dev/drbd0;
          disk   /dev/sdb1;
          address 192.168.7.89:7788;
          meta-disk internal;
    }
}
创建 DRBD 设备并激活 r0 资源
# mknod 命令建立一个目录项和一个特殊文件的对应索引节点
mknod /dev/drbd0 b 147 0

# 创建 r0 资源
drbdadm create-md r0

# 启动 drbd 服务
service drbd start

# 查看 drbd 当前桩体
cat /proc/drbd

# 设置当前节点为主节点
drbdsetup /dev/drbd0 primary --force
挂载 DRBD
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /data
常用命令
# 设置为从属模式
drbdsetup /dev/drbd0 secondary

# 设置为主模式
drbdsetup /dev/drbd0 primary
脑裂解决方案
# 将 Node2 设置为从节点并丢弃资源数据:
drbdsetup /dev/drbd0 secondary
drbdadm -- --discard-my-data connect r0

# 在 Node1 主节点上手动连接资源:
drbdadm connect mydrbd
0

评论区