Keepalived+Drbd+nfs实现高可用共享存储

news2024/11/25 20:53:37

环境准备:

类型·IP主机名·操作系统内存磁盘
主服务器192.168.134.170node1Centos7.92G系统盘40G,存储盘20G
备服务器192.168.134.172node3Centos7.92G系统盘40G,存储盘20G

一、两台主机设置hosts文件,打通通道。

vim /etc/hosts
内容如下:
192.168.134.170 node1
192.168.134.172 node3

二、设置主备节点之间可以免密登录

备节点
ssh-keygen -f ~/.ssh/id_rsa -P '' -q
ssh-copy-id node1
主节点
ssh-keygen -f ~/.ssh/id_rsa -P '' -q
ssh-copy-id node3

三、安装部署DRBD

1、导入elrepo源

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo

2、安装扩展源

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

3、安装软件包、

yum install -y drbd90-utils kmod-drbd90

4、启动drbd的内核模块

modprobe drbd
echo drbd > /etc/modules-load.d/drbd.conf
lsmod | grep drbd  # 显示已经载入系统的模块 ,做检查使用

5、修改全局配置文件(两台机器都执行)

vim /etc/drbd.d/global_common.conf 

global {
	usage-count no; # 版本控制
}
common {
	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;
	}
	net {
		protocol C;  # 指定使用协议C,在common中配置也可以
	}
}

6、修改资源文件(两台机器都执行)

vim /etc/drbd.d/nfs.res

resource nfs {
  disk /dev/sdb;
  device /dev/drbd0;
  meta-disk internal;

  on node1 {
    address 192.168.134.170:8822;
  }


  on node3 {
    address 192.168.134.172:8822;
  }
}

7、首次启用资源

(1)创建元数据(两台都要配)

drbdadm create-md nfs
内容如下:
initializing activity log
initializing bitmap (640 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

(2)启用资源(两台都要配)

drbdadm up nfs

(3)启动初始化全量同步(在主节点上启动)

 drbdadm primary --force nfs  # 启动全量同步
 drbdadm status  # 可以查看同步状态(一段时间后状态才会变化)

nfs role:Primary
  disk:UpToDate
  node1 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:3.58


nfs role:Primary
  disk:UpToDate
  node1 role:Secondary
    peer-disk:UpToDate

补充:一些常用的命令:(都需要在命令后加上资源名)

drbdadm cstate查看资源的连接状态
drbdadm dstate查看资源磁盘状态
drbdadm role查看资源角色
drbdadm primary提升资源
drbdadm secondary降低资源

四、测试drbd是否成功启动

1、在主节点上

mkdir /data
ls /dev/drbd
mkfs.xfs /dev/drbd0  # 初始化
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=1310678 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242711, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
mount /dev/drbd0 /data  # 将磁盘挂载到data目录下
cp /etc/hos* /data/  #  将文件copy入data目录下
umount /data  # 卸载data目录
drbdadm secondary nfs  # 资源降级

2、在备节点上

mkdir /data  # 创建data目录
ls /dev/drbd
drbdadm primary nfs  # 资源升级
drbdadm status  # 查看资源状态
nfs role:Primary
  disk:UpToDate
  node3 role:Secondary
    peer-disk:UpToDate

mount /dev/drbd0 /data  # 将磁盘重新挂入data目录
[root@node1 ~]# ls /data  # 查看data目录下内容,观察是否同步成功,出现以下情况即同步成功
host.conf  hostname  hosts  hosts.allow  hosts.deny

五、启动服务

yum install keepalived -y
vim /etc/keepalived/keepalived.conf
systemctl start drbd
systemctl enable drbd

六·、安装nfs

yum -y install rpcbind nfs-utils  # 安装nfs
vim /etc/exports  # 编辑文件
cat /etc/exports
/data    192.168.0.0/16(rw,sync,no_root_squash,no_all_squash)

systemctl restart rpcbind nfs-server  # 重启应用
systemctl enable nfs-server
showmount -e localhost

七、安装并且修改keepalived的配置文件

yum install -y keepalived


vim /etc/keepalived/keepalived.conf
内容如下:
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_NFS1
}
vrrp_script check_nfs {
  script "killall -0 nfsd"  # 使用killall命令
  #script "/etc/keepalived/check_nfs.sh"
  interval 2
  weight -30
}
vrrp_instance VI_1 {
    state MASTER
    # nopreempt
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

   track_script {
        check_nfs
   }
    virtual_ipaddress {
        192.168.134.100/24
    }
    notify_stop /etc/keepalived/notify_stop.sh  # 写脚本控制故障切换等                  
    notify_master /etc/keepalived/notify_master.sh
    notify_backup /etc/keepalived/notify_backup.sh
}



脚本内容如下:
cat notify_stop.sh

#!/bin/bash

time=$(date +"%F %T")  # 指定时间
log_dir=/etc/keepalived/logs  # 日志位置
logname=notify_stop
res_name=nfs

[ -d ${log_dir} ] || mkdir -p ${log_dir}  # 测试目录是否存在,不存在那么创建目录

echo -e "$time ---------${logname}--------\n" >> ${log_dir}/${logname}.log   
systemctl stop nfs-server >> ${log_dir}/${logname}.log  #  停止nfs服务
umount /data >> ${log_dir}/${logname}.log  #  卸载挂载点
drbdadm secondary ${res_name} >> ${log_dir}/${logname}.log  # 资源降级
echo -e "\n" >> ${log_dir}/${logname}.log


cat notify_master.sh

#!/bin/bash

time=$(date +"%F %T")
log_dir=/etc/keepalived/logs
logname=notify_master
res_name=nfs

[ -d ${log_dir} ] || mkdir -p ${log_dir}

echo -e "$time ---------${logname}--------\n" >> ${log_dir}/${logname}.log
drbdadm primary ${res_name} >> ${log_dir}/${logname}.log
mount /dev/drbd0 /data >> ${log_dir}/${logname}.log
systemctl start nfs-server >> ${log_dir}/${logname}.log
echo -e "\n" >> ${log_dir}/${logname}.log


cat notify_backup.sh

#!/bin/bash

time=$(date +"%F %T")
log_dir=/etc/keepalived/logs
logname=notify_backup
res_name=nfs

[ -d ${log_dir} ] || mkdir -p ${log_dir}

echo -e "$time ---------${logname}--------\n" >> ${log_dir}/${logname}.log
systemctl stop nfs-server >> ${log_dir}/${logname}.log
umount /data >> ${log_dir}/${logname}.log
drbdadm secondary ${res_name} >> ${log_dir}/${logname}.log
echo -e "\n" >> ${log_dir}/${logname}.log

最后重启keepalived,进行最终结果测试。
systemctl restart keepalived.service

八、测试结果

1、查看vip(是否可以漂移)

master

 backup:

当master出现故障,

 2、查看资源的角色(一主一从)

3、查看挂载(只会在一端过滤)

 

4、nfs测试:关闭主节点,查看备节点此时情况(ip实现漂移,资源重新挂载,资源角色切换)

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

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

相关文章

辨析:热功率 轴功率

热功率 反应堆热工里提供的裂变反应堆的释放热 堆芯裂变 反应堆能通过高压蒸汽对外输出的总功率值。 反应堆热功率 轴功率 反应堆输出的蒸汽热能,通过机电系统,能转换成推进轴系,加载到推进螺旋桨上的最大实用功率值。 轴功率是输出的机械…

Redis、Memcache和MongoDB的区别

>>Memcached Memcached的优点: Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度…

HDFS原理剖析

一、概述 HDFS是Hadoop的分布式文件系统(Hadoop Distributed File System),实现大规模数据可靠的分布式读写。HDFS针对的使用场景是数据读写具有“一次写,多次读”的特征,而数据“写”操作是顺序写,也就是…

途乐证券-新手炒股快速入门教程?

随着互联网和金融商场的不断发展,越来越多的人开端重视股票商场。但是对于股市新手来说,怎么快速入门炒股成为了一个困扰他们的难题。以下从多个角度分析,提供一份新手炒股快速入门教程。 1. 了解根本概念 首要,股市新手需求了解…

家教务处管理系统SSM+Bootstrap学生教师课程java jsp源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 家教务处管理系统SSMBootstrap 系统有1权限&#xff…

对应分析介绍及SPSS案例分析

在开展统计分析的过程中,分类变量(定序和定类变量)是我们研究的一个重点。通常我们分析分类变量间关系时,最常用的分析方法是卡方检验,其次是逻辑回归和对数线性模型等。 如果类别变量的分类较少,我们可以…

Mac平台最佳PDF编辑软件,Qoppa PDF Studio Pro助您实现PDF文件的完美编辑

Qoppa PDF Studio Pro是一款功能强大的PDF编辑软件,现已推出Mac版本!无论是个人用户还是企业用户,都能够从中受益。 Qoppa PDF Studio Pro为用户提供了一系列丰富的编辑工具,可以轻松地对PDF文件进行编辑、注释和标记。 用户可以…

概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理

Top NSD DBA DAY09 案例1:搭建redis服务器案例2:常用命令限案例3:部署LNPRedis案例4:创建redis集群 1 案例1:搭建redis服务器 1.1 具体要求如下 在主机redis64运行redis服务修改服务运行参数 ip 地址192.168.88.6…

一.net core 自动化发布到docker (Jenkins安装)

目录 1.安装Jenkins 参考资料:https://www.jenkins.io/doc/book/installing/docker/#downloading-and-running-jenkins-in-docker 1.Open up a terminal window.(打开一个终端窗口。) 2.Create a bridge network in Docker using the following docker network create comma…

AD23使用笔记

1. 如何修改原理图的页面 2. 原理图DRC:快捷键T D ; 或者:菜单→工程→validate pcb project,,,,,,,,, Altium Designer原理图错误编译检查_ad原理图如何编译和查错_y惘然__的博客-CSDN博客 3.

Vscode终端显示调整

前面博主介绍了如何修改vscode如何修改终端背景颜色以及报错信息颜色,详见: vscode终端背景颜色修改以及报错信息颜色修改_追忆苔上雪的博客-CSDN博客 但是Vscode默认情况下不像pycharm那样占满整个下方,显得有点窄 下图是vscode终端 下图是…

应急响应-Webshell

文章目录 一、Webshell概述什么是WebshellWebshell分类基于编程语言基于文件大小/提供的功能多少 Webshell 检测方法 二、常规处置方法三、技术指南1、初步预判2、 Webshell排查3、Web日志分析(查找攻击路径及失陷原因)4、系统排查4.1 Windows4.2 Linux …

本地工具是什么意思?本地工具与远程工具一样吗?

不少刚入行的小伙伴,不知道本地工具是什么意思?以为本地工具与远程工具是一样的、今天我们小编就给大家来简单说说。 本地工具是什么意思?本地工具与远程工具一样吗? 【回答】:本地工具是指软件安装在每个用户终端上&…

Keil开发STM32单片机项目的三种方式

STM32单片机相比51单片机,内部结构复杂很多,因此直接对底层寄存器编码,相对复杂,这个需要我们了解芯片手册,对于复杂项目,这些操作可能需要反复编写,因此出现了标准库的方式,对寄存器…

医药反腐正当时!以此为鉴,企业采购腐败怎么防?

近日,医药行业正在经历一场力度空前的反腐风暴。今年以来,全国通报的多起医药腐败案件中,主要涉及通过在药品采购、医疗器械及耗材采购等事项上为他人谋取利益,收受贿赂等问题,涉及金额算下来更是惊人。 医药行业的采购…

深入源码分析kubernetes informer机制(三)Resync

[阅读指南] 这是该系列第三篇 基于kubernetes 1.27 stage版本 为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 为什么需要resyncresync做了什么 为什么需要resync 如果看过上一篇,大概能了解,client数据主要通…

OpenSSL 远程升级到 3.2.1

OpenSSL 远程升级到 3.2.1 文章目录 OpenSSL 远程升级到 3.2.1背景升级 OpenSSL1. 查看 OpenSSL版本2. 下载最新稳定版本 OpenSSL3. 解压缩,安装4. 配置 背景 最近的护网行动,被查出来了好几个关于OpenSSH的漏洞。需要升级OpenSSH,升级OpenS…

Postman通用接口加密解决方案

前言: 很对小伙伴对于psotman接口加密不知道如何解决,这里给大家出了一个全网最详细的解决方案,希望能帮助到大家 问题 postman内置加密Api,但不支持RSA加解密码。如何用postman进入rsa加解密?postman中request对象…

【机器学习5】数据处理(二)Pandas:表格处理

Pandas:表格处理 🌟🌟Pandas三种数据类型✨✨Series数据结构✨✨ DataFrame数据结构🌙🌙DataFrame数据的选取🌕🌕DataFrame的构建🌕🌕选取多行🌕🌕选取某一列…

Qt应用开发(基础篇)——滚屏区域类 QScrollArea

一、前言 QScrollArea类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt滚动视图的常用部件。 滚屏区域基类 QAbstractScrollArea 框架类 QFrame QScrollArea类提供了对另一个小部件的滚动视图,基础功能、滚动条控制、界面策…