centos7部署nfs+keepalived+drbd

news2024/11/15 10:06:16

一、项目需求描述

     现在使用的架构是nfs+keepalived+rsync+sersync,目前这套架构存在主从nfs节点数据同步不一致问题,大概会有 120s左右的数据延长同步时间,需要提供优化的自动化方案。

二、现有方案缺点

1、切换不能保证主从节点数据一致。

2、客户端需要umount,在从新mount,客户端才能正常读写。

3、sersync+nfs主从节点进行切换时,如果主节点数据没有完全同步到从节点,从节点接管了主节点,sersync在去推送时会导致数据丢失。

4、目前只能单点运行。

三、方案目标

保证业务稳定性和数据的完整性。

四、资源选型

  • 三台centos7.6 4C8G200G规格的机器

  • 规划资源角色

类型

主节点

备节点

VIP地址

客户端

IP

10.241.212.3

10.241.212.4

10.241.212.249

10.241.212.1

角色

keepalived

keepalived

nfs-server

nfs-server

nfs-client

drbd-Primary

drbd-Secondary

  • DRBD90版

五、准备工作

  • 修改主机名称(主备节点两台机器执行)

vim /etc/hosts

10.241.212.3 nfs-master

10.241.212.4 nfs-backup

  • 设置ssh互信(主节点执行)

ssh-keygen -f ~/.ssh/id_rsa -P '' -q

ssh-copy-id nfs-backup

ssh-copy-id nfs-master

  • 关闭防火墙(主备节点两台机器执行)

systemctl stop firewalld && systemctl stop iptables

systemctl disable firewalld && systemctl disable iptables
  • 配置磁盘gpt分区(主备节点两台机器执行)

parted /dev/sdb

mklabel gpt

mkpart primary 0 -1

  • 配置yum源(主备节点两台机器执行)

​
rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum install -y glib2-devel libxml2-devel bzip2-devel flex-devel bison-devel OpenIPMI-devel net-snmp-devel ipmitool ipmiutil ipmiutil-devel asciidoc kernel-devel

​
  • 安装drbd、keepalived、nfs软件包(主备节点两台机器执行)

yum -y install drbd90-utils kmod-drbd90 keepalived rpcbind nfs-utils
  • 加载drbd模块(主备节点两台机器执行)

modprobe drbd

lsmod |grep drbd

六、DRBD配置(主备节点两台机器执行)

  • 编辑全局配置文件

cat /etc/drbd.d/global_common.conf |egrep -v "^.*#|^$"

global {

  usage-count yes;

}

common {

  protocol C;   //采用完全同步复制模式

  handlers {

  }

  startup {

       wfc-timeout    240;

    degr-wfc-timeout  240;

    outdated-wfc-timeout  240;

  }

  options {

  }

  disk {

    on-io-error  detach;

  }

  net {

    cram-hmac-alg  md5;

    shared-secret "testdrbd";

  }

}
  • 编辑资源配置文件

cat > /etc/drbd.d/data.res << EOF
resource data { #资源名称
        protocol C; #使用协议
        meta-disk internal;
        device /dev/drbd0; #DRBD设备名称

    on nfs-master {
        disk /dev/sdb1;
        address 10.241.212.3:7789; #设置DRBD监听地址与端口
    }
    on nfs-backup {
        disk /dev/sdb1;
        address 10.241.212.4:7789;
    }
}
EOF

拷贝到备节点

cd /etc/drbd.d
scp data.res global_common.conf root@nfs-bakcup:/etc/drbd.d/
  • 创建DRBD设备激活data资源

mknod /dev/drbd0 b 147 0
[root@nfs-master drbd.d]# ll /dev/drbd0
brw-rw---- 1 root disk 147, 0 Feb 20 14:37 /dev/drbd0
  • 创建drbd设备的元数据

drbdadm create-md data
  • #注:如出现

  • 执行

    dd if=/dev/zero of=/dev/sdb1 bs=1M count=100

    在执行drbdadm create-md data即可

  • 启动drbd服务,并设置开机自启动

systemctl start drbd
systemctl enable drbd
  • 初始化设备同步

#查询主备节点drbd状态
[root@nfs-master drbd.d]# drbdadm status
data role:Secondary

  disk:Inconsistent

  Secondary role:Secondary

    peer-disk:Inconsistent

#此步骤只能在一个节点上执行(主节点)
drbdadm primary --force data


#查看同步进度情况
drbdadm status

data role:Primary

  disk:UpToDate

  Secondary role:Secondary

    replication:SyncSource peer-disk:Inconsistent done:36.82  //这里有初始化全量同步过程


#同步完成情况
drbdadm status

data role:Primary

  disk:UpToDate

  Secondary role:Secondary

    peer-disk:UpToDate    //显示UpToDate/UpToDate 表示主从配置成功

七、挂载DRBD文件系统到目录,主节点操作


#格式化 /dev/drbd0(主备节点均执行)
mkfs.ext4 /dev/drbd0 


#创建挂载目录,然后执行DRBD挂载(主备节点均执行)

mkdir /data

#(主节点执行)
mount /dev/drbd0 /data

# 查询挂载情况
df -h 

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G   28M  3.8G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda3        15G  2.6G   12G  19% /
/dev/sda1      1008M  145M  813M  16% /boot
tmpfs           781M     0  781M   0% /run/user/0
/dev/drbd0      197G   61M  187G   1% /data


特别注意:

Secondary节点上不允许对DRBD设备进行任何操作,包括只读,所有的读写操作只能在Primary节点上进行。

只有当Primary节点挂掉时,Secondary节点才能提升为Primary节点

八、DRBD提升和降级资源测试(手动故障主备切换)

# DBRD的提升和降级资源测试

使用以下命令之一手动将aresource’s role从次要角色切换到主要角色(提升)或反之亦然(降级):


#创建测试文件

cd /data/

touch file{1..5}

ls

file1  file2  file3  file4  file5

#切换测试

umount /data

drbdadm secondary data   //切换资源到从节点,主节点降级

# 从节点检查

drbdadm primary data   //备用节点提权测试

#挂载drbd0磁盘

mount /dev/drbd0 /data/


cd /data/

ls

file1  file2  file3  file4  file5  //可以看到数据已经同步

#从节点测试是否能够写入数据

touch slave-{1..3}

ls

file1  file2  file3  file4  file5  slave-1  slave-2  slave-3  //可以写入,说明切换测试正常


九、NFS配置

#编辑nfs配置文件
vim /etc/exports
/data 10.241.212.249/16(rw,sync,no_root_squash)
#启动nfs服务和开机自启
systemctl start rpcbind.service && systemctl enable rpcbind.service       
systemctl start nfs-server.service && systemctl enable nfs-server.service

十、keepalived配置(主配置)

#修改keepalived配置文件
vim keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id nfs-master
   }

vrrp_script chk_nfs {
    script "/etc/keepalived/check_nfs.sh"
    interval 5
}


vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 60
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
   track_script {
       chk_nfs
   }

    notify_stop /etc/keepalived/notify_stop.sh  #当服务停止时执行的脚本   
    notify_master /etc/keepalived/notify_master.sh  #当切换成主时执行的脚本

   virtual_ipaddress {
        10.241.212.249
    }
}
##启动keepalived服务

systemctl start keepalived.service 

systemctl enable keepalived.service 
#备节点配置:
! Configuration File for keepalived

global_defs {
   router_id nfs-backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 60
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    notify_master /etc/keepalived/notify_master.sh  #当切换成主时执行的脚本
    notify_backup /etc/keepalived/notify_backup.sh  #当切换成备时执行的脚本

   virtual_ipaddress {
        10.241.212.249
    }
}


##启动keepalived服务

systemctl start keepalived.service 

systemctl enable keepalived.service 
#主节点配置

vim /etc/keepalived/check_nfs.sh

#!/bin/bash

##检查nfs服务可用性:进程和是否能挂载

systemctl status nfs-server &> /dev/null  

if [ $? -ne 0 ];then    //-ne测试两个整数是否不等,不等为真,相等为假。

        ##如果服务不正常,重启服务

        systemctl restart nfs-server

        systemctl status nfs-server &>/dev/null

        if [ $? -ne 0 ];then

                ##若重启后还不正常。卸载drbd0,并降级为备用节点

                umount /dev/drbd0

                drbdadm secondary r0

                ##关闭keepalived服务

                systemctl stop keepalived

        fi

fi

#添加权限
chmod 755 /etc/keepalived/check_nfs.sh

  

此脚本只在主节点机器上配置

#创建日志目录
mkdir /etc/keepalived/logs

# 创建stop脚本
cat notify_stop.sh 

#!/bin/bash

time=`date "+%F  %H:%M:%S"`

echo -e "$time  ------notify_stop------\n" >> /etc/keepalived/logs/notify_stop.log

systemctl stop nfs-server &>> /etc/keepalived/logs/notify_stop.log

umount /data &>> /etc/keepalived/logs/notify_stop.log

drbdadm secondary r0 &>> /etc/keepalived/logs/notify_stop.log

echo -e "\n" >> /etc/keepalived/logs/notify_stop.log


#添加stop脚本权限
chmod 755 /etc/keepalived/notify_stop.sh

  

此脚本在(主备两台机器上都要配置)
#配置master脚本

vim notify_master.sh 

#!/bin/bash

time=`date "+%F  %H:%M:%S"`

echo -e "$time  ------notify_master------\n" >> /etc/keepalived/logs/notify_master.log

drbdadm primary r0 &>> /etc/keepalived/logs/notify_master.log

mount /dev/drbd0 /data &>> /etc/keepalived/logs/notify_master.log

systemctl restart nfs-server &>> /etc/keepalived/logs/notify_master.log

echo -e "\n" >> /etc/keepalived/logs/notify_master.log

#配置master脚本权限
chmod 755 /etc/keepalived/notify_master.sh

  

此脚本(只在备节点机器上配置)

#创建logs目录
mkdir /etc/keepalived/logs

#创建backup脚本
vim notify_backup.sh 

#!/bin/bash

time=`date "+%F  %H:%M:%S"`

echo -e "$time  ------notify_stop------\n" >> /etc/keepalived/logs/notify_backup.log

systemctl stop nfs-server &>> /etc/keepalived/logs/notify_backup.log

umount /data &>> /etc/keepalived/logs/notify_backup.log

drbdadm secondary r0 &>> /etc/keepalived/logs/notify_backup.log

echo -e "\n" >> /etc/keepalived/logs/notify_backup.log

#配置backup权限
chmod 755 /etc/keepalived/notify_backup.sh

十一、NFS客户端挂载测试

#客户端只需要安装rpcbind程序,并确认服务正常
#安装nfs服务依赖和服务包

[root@nfsclient ~]# yum -y install rpcbind nfs-utils

#创建开机自启动和开启服务

[root@nfsclient ~]# systemctl start rpcbind && systemctl enable rpcbind
[root@nfsclient ~]# systemctl start nfs-server && systemctl enable nfs-server

#挂载NFS

mount -t nfs 10.241.212.249:/data /data

[root@localhost data]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              15G  2.4G   12G  18% /
devtmpfs              1.9G     0  1.9G   0% /dev
tmpfs                 1.9G     0  1.9G   0% /dev/shm
tmpfs                 1.9G  196M  1.7G  11% /run
tmpfs                 1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1            1008M  103M  854M  11% /boot
/dev/sdb1              40G   48M   38G   1% /mnt
tmpfs                 378M     0  378M   0% /run/user/0
10.241.212.249:/data  197G   60M  187G   1% /data

十二、高可用环境故障自动切换测试

先关闭主节点主机上的keepalived服务。就会发现VIP资源已经转移到备节点上了。同时,主节点的nfs也会主动关闭,同时备节点会升级为DRBD的主节点

## 停止主节点的keepalived服务

systemctl stop keepalived.service 


#在备节点查看ip情况,是否接管vip地址
[root@nfs-backup ~]# ip a |grep 10.241
    inet 10.241.212.4/16 brd 10.241.255.255 scope global eth1
    inet 10.241.212.249/16 scope global secondary eth1


#也可以通过var/log/messages 查看日志


#查看drbd节点资源状态
[root@nfs-backup ~]# drbdadm status
data role:Primary
  disk:UpToDate
  nfs-master role:Secondary
    peer-disk:UpToDate


#查询数据情况,确认是否一致
cd /data


#刚做了主从切换,现在在primary的节点测试删除数据,观察客户端是否同步

rm -rf test-*

#登录客户端,进入data目录查看
cd /data
ls


#当主节点机器的keepalived服务恢复启动后,VIP资源又会强制夺回来(可以查看/var/log/message系统日志)

#并且主节点机器还会再次变为DRBD的主节点






FAQ总结:

此套服务不能解决vip切换节点时,nfs服务client端挂载异常问题,还需要在client手动执行umount,重新mount恢复。

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——基础语法(1)

前言 一路磕磕绊绊&#xff0c;也算是走到了C的大门下。C从名字上就可以看出是C语言的“plusplus版本”&#xff0c;C在兼容C语言的基础上又加入了许多方便又高深的特性与机制&#xff0c;便于我们更容易处理C语言中的棘手问题。不得不提的一点是C为我们打开了面向对象思想的大…

【ACM出版】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 重要信息 大会官网&#xff1a;www.ic-cibda.org 大会时间&#xff1a;2024年3月22-24日 大会地点&#…

Java中哪些很容易出现的坑

文章目录 1空指针2小数的计算3包装类型4Java8 Stream5日期格式化 先来一个简单一点&#xff0c;就从空指针开始吧 1空指针 //多级调用空指针userService.getUser("张三").getUserInfo().getUserName(); //例如getUser("张三")、getUserInfo&#xff08;&a…

基于SpringBoot的景区旅游管理系统

项目介绍 本期给大家介绍一个 景区旅游管理 系统.。主要模块有首页&#xff0c;旅游路线&#xff0c;旅行攻略&#xff0c;在线预定。管理员可以登录管理后台对用户进行管理&#xff0c;可以添加酒店&#xff0c;景区&#xff0c;攻略&#xff0c;路线等信息。整体完成度比较高…

【Java面试系列】JDK 1.8 新特性之 Stream API

目录 一、Stream 简介二、Stream 特点&#xff1a;Stream 注意点&#xff1a;1、什么是聚合操作2、Stream 流1、什么是流2、流的构成3、stream 流的两种操作4、惰性求值和及早求值方法5、Stream 流的并行 三、Stream操作的三个步骤1、创建流第一种&#xff1a;通过集合第二种&a…

2024全球网络安全展望|构建协同生态,护航数字经济

2024年1月&#xff0c;世界经济论坛发布《2024全球网络安全展望》报告&#xff0c;指出在科技快速发展的背景下&#xff0c;网络安全不均衡问题加剧&#xff0c;需加强公共部门、企业组织和个人的合作。 报告强调&#xff0c;面对地缘政治动荡、技术不确定性和全球经济波动&am…

Vue知识学习

Vue 是什么&#xff1f; 概念&#xff1a;Vue 是一个用于构建用户界面的渐进式框架 Vue 的两种使用方式: ① Vue 核心包开发 场景:局部 模块改造 ② Vue 核心包& Vue插件工程化开发 场景:整站开发 创建Vue 实例&#xff0c;初始化渲染的核心步骤: 1.准备容器 2.引包(官…

哪些软件可以把试卷照片转换成电子版?试试这些软件

哪些软件可以把试卷照片转换成电子版&#xff1f;在数字化时代&#xff0c;纸质试卷的保存和传输都显得不太方便。为了解决这个问题&#xff0c;我们可以将试卷照片转换成电子版。下面&#xff0c;我将为大家介绍5款可以轻松实现这一功能的软件&#xff0c;让你轻松应对各种试卷…

吸虫塔的工作原理是什么?

吸虫塔虫情智能测报分析系统是一款专门用于长期动态监测蚜虫等小型迁飞性害虫的大型植保设备&#xff0c;由装置上方的空气动力装置、上下两层远红外虫体处理装置、高清图像采集装置、虫体收集装置等部分组成。昆虫在经由设备上方的吸风装置后会被吸入设备内部&#xff0c;上下…

【超实用!游戏主程必须掌握的必杀技!】

超实用&#xff01;游戏主程必须掌握的必杀技&#xff01; 大家有没有发现&#xff1f;以上问题都存在共性&#xff1a;那就是跨部门的沟通与协作&#xff0c;这是一个必须高度重视的问题。正是因为这些问题的存在&#xff0c;造成初入职场的焦虑和不适应。 那么产生这些问题的…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(1)搭建一个机器学习模型

今天学习的是&#xff0c;如何搭建一个机器学习模型。 主要有以上的步骤&#xff1a; 原始数据采集特征工程 数据预处理特征提取特征转换&#xff08;构造&#xff09;预测识别&#xff08;模型训练和测试&#xff09; 在实际工作中&#xff0c;特征比模型更重要。 数据和特征…

01_02_mysql06_(视图-存储过程-函数(变量、流程控制与游标)-触发器)

视图 使用 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c;而某些特殊的数据&#xff0c;比如采购的价格&#xff0…

flink 任务提交流程源码解析

flinkjob 提交流程 任务启动流程图1客户端的工作内容1.1解析命令1.2 执行用户代码 2集群工作内容2.2启动JobManager和 ResourceManager2.3 申请资源 启动 taskmanager 3分配任务3.1 资源计算3.2 分发任务 4 Task 任务调度执行图5 任务提交过程总结 任务启动流程图 可以先简单看…

【Vue3】toRefs和toRef在reactive中的一些应用

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

如何在debian上实现一键恢复操作系统?

在Debian或任何其他Linux发行版上实现一键恢复操作系统&#xff0c;需要创建一个系统镜像或快照&#xff0c;并设置一个简单的方法来从该镜像恢复。以下是创建和恢复系统的基本步骤&#xff1a; 1. 创建系统镜像&#xff1a; 使用像dd&#xff0c;rsync或专门的备份工具&#…

详细分析UML的10种图(全)

目录 前言1. 基本知识2. 结构图2.1 类图2.2 对象图2.3 组件图2.4 部署图2.5 包图 3. 行为图3.1 用例图3.2 活动图3.3 状态图 4. 行为图4.1 顺序图4.2 协作图 前言 在软考高级中常见的一种题型&#xff0c;对此补充这方面的知识&#xff0c;并将其归入软考的专栏 1. 基本知识 …

全网最最最详细DataEase源码Docker方式部署教程

1.源码获取 有条件的小伙伴可以使用GitHub方式获取&#xff0c;要是没有条件的小伙伴可以去码云上面获取也是一样的&#xff0c;或者可以联系博主&#xff0c;博主手把手教学~ GitHub地址 Gitee地址 2.配置源码信息 1.配置单机版的配置文件中的数据库信息 2.下载前端的依赖包…

顺序表经典算法及其相关思考

27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 思路一 利用顺序表中的SLDestroy函数的思想&#xff0c;遇到等于val值的就挪动 思路二 双指针法&#xff1a;不停的将和val不相等的数字往前放。此时的des更像一个空数组&#xff0c;里面存放的都是和val不相等、能够存…

java面试JVM虚拟机篇

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&a…

常见消息中间件

ActiveMQ 我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件&#xff0c;都是使用的这个MQ&#xff0c;但是现在用的确实不多了&#xff0c;说白了就是有些过时了。我们去它的官网看一看&#xff0c;你会发现官网已经不活跃了&#xff0c;好久才会更新一次。 它的单机吞…