Keepalived实现nfs高可用

news2024/10/2 16:28:02

Keepalived实现nfs高可用

Nfs_master服务器:172.20.26.167 (keepalived、nfs、sersync、rsync)

Nfs_salve服务器:172.20.26.198   (keepalived、nfs、rsync)

Nfs_client服务器:172.20.26.24     (nfs)

原理:两台机器上配置要一致,keepalived监控nfs进程,master上的nfs主进程宕掉无法启动时由slave主机上的nfs继续工作,master的数据备份到slave上,同时master和slave数据用rsync和sersync实时同步,保证数据的完整性。

部署keepalived服务

分别在172.20.26.167、172.20.26.198安装部署keepalived服务

yum install epel-release -y  #安装epel 源

yum update -y   #更新安装源

yum install psmisc -y  #脚本中用到killall 命令,需要安装pamisc

yum install keepalived -y

vim /etc/keepalived/keepalived.conf   #设置VIP地址为172.20.26.200,并增加chk_nginx 的脚本检测以及脚本追踪:

vrrp_script chk_nfs {

       script "/data/sh/chk_nfs.sh"

       interval 1

       weight -20

      }

track_script {

           chk_nfs

           }

notify_backup "/data/sh/notify_nfs.sh backup"

追踪上面所定义的chk_nfs,名字要与上面定义的一致。

非抢占模式:master和backup的state均设置为BACKUP,其次是master端配置nopreempt,backup不用配置。

 两边keepalived服务都安装后,将配置文件拷贝到172.20.26.198服务器/etc/keepalived/目录下

scp /etc/keepalived/keepalived.conf root@172.20.26.198:/etc/keepalived/

vim /etc/keepalived/keepalived.conf

分别在172.20.26.167、172.20.26.198服务器上创建/data/sh目录及chk_nfs.sh脚本:

mkdir -p /data/sh    #创建脚本目录

vim /data/sh/chk_nfs.sh   #编写脚本文件

#!/bin/bash

killall -0 nfsd &>/dev/null

if [[ $? -ne 0]];then

   pkill keepalived

fi

chmod +x /data/sh/chk_nfs.sh    #授权执行权限

两台服务器启动keepalived服务,查看VIP地址在172.20.26.167服务器上

systemctl start keepalived

如果172.20.26.167上nfs服务sotp掉,随之nfs服务stop 掉,keepalived服务也会被pkill掉,VIP 将漂移到172.20.26.198服务器上, 即使172.20.26.167服务器上nfs服务和keepalived服务恢复,VIP也不抢回,继续保留在172.20.26.198服务器上,只有在172.20.26.198服务器上nfs服务down掉,随着nfs服务down掉,keepalived服务也被pkill 掉,VIP才会漂移回172.20.26.167服务器上。

上面配置文件中需要关注的是我们设置成非抢占模式,如果设置成抢占模式会在不断的切换主备时容易造成nfs数据丢失。

部署NFS服务

在nfs_master172.20.26.167、nfs_slave172.20.26.198、nfs_client172.20.26.24 设置免密登录

[root@node1 ~]# ssh-keygen   #一路回车

[root@node1 ~]# ssh-copy-id 172.20.26.198  #输入172.20.26.198root密码,回车即可

[root@node1 ~]# ssh-copy-id 172.20.26.24  #输入172.20.26.24root密码,回车即可

在nfs_master172.20.26.167安装nfs-utils

yum install nfs-utils -y

#创建nfs共享目录

mkdir -p /nfs

#修改权限

chmod -R 777 /nfs

#编辑export文件

vim /etc/exports

/nfs 172.20.26.0/24(rw,no_root_squash,sync)   #设置172.20.26.0网段的设备均可访问nfs目录

#配置生效

exportfs -r

#查看生效

exportfs

exportfs -rv

#启动rpcbind、nfs服务

systemctl start rpcbind && systemctl enable rpcbind

systemctl start nfs && systemctl enable nfs

#查看 RPC 服务的注册状况

rpcinfo -p localhost

#showmount测试

showmount -e 172.20.26.200

###由于只是测试,我们共享的这个/nfs目录默认是没有单独挂载硬盘的,生产环境下最好是给这个共享目录单独挂载一块硬盘或者单独的磁盘分区

在nfs_slave172.20.26.198服务器所有操作和master一致

yum install epel-release -y  #安装epel 源

yum update -y   #更新安装源

yum install nfs-utils -y

创建nfs共享目录

mkdir -p /nfs

#修改权限

chmod -R 777 /nfs

#编辑export文件

vim /etc/exports

/nfs 172.20.26.0/24(rw,no_root_squash,sync)  设置172.20.26.0网段的设备均可访问nfs目录

#配置生效

exportfs -r

#查看生效

exportfs

exportfs -rv

#启动rpcbind、nfs服务

systemctl start rpcbind && systemctl enable rpcbind

systemctl start nfs && systemctl enable nfs

#showmount测试

showmount -e 172.20.26.200

在客户端172.20.26.24上也安装nfs

yum install epel-release -y  #安装epel 源

yum update -y   #更新安装源

yum install nfs-utils -y

systemctl start rpcbind && systemctl enable rpcbind

mkdir -p /nfs  #创建挂载点目录

在客户端172.20.26.24上挂载nfs_master172.20.26.167上的nfs共享目录

mount -t nfs 172.20.26.200:/nfs /nfs

在客户机上实现开机挂载,则需要编辑/etc/fstab

vim /etc/fstab

172.20.26.200:/nfs   /nfs  nfs defaults 0 0

mount -a    #表示读取fstab 里的信息进行挂载

 目前VIP在172.20.26.167服务器上,拷贝新文件到172.20.26.167服务器上nfs目录下,客户端172.20.26.24访问nfs共享目录正常。

部署172.20.26.167、172.20.26.198服务器上的rsync服务

在172.20.26.167安装sersync、rsync、inotify-tools

上传、安装 sersync

root@node1 /]# cd /usr/src

[root@node1 src]# rz   

将sersync2.5.4_64bit_binary_stable_final.tar上传到172.20.26.167上,配置sersync服务

[root@node1 src]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

将解压出来的GNU-Linux-x86目录移到/usr/local/sersync

root@node1 src]# mv GNU-Linux-x86/ /usr/local/sersync

 /usr/local/sersync下只有confxml.xml、sersync2两个文件,一个是配置文件、一个可执行文件。

[root@node1 sersync]# vim /usr/local/sersync/confxml.xml

将<fileSystem xfs="false"/>  改为 <fileSystem xfs="true"/>

Inotify 模块定义通知开始同步的条件:

<inotify>

        <delete start="true"/>     #开始删除的时候,默认为true

        <createFolder start="true"/>    #创建目录的时候,默认为true

        <createFile start="true"/>      #创建文件的时候,默认为false,这里改为“true”

        <closeWrite start="true"/>      #关闭写的时候,默认为true

        <moveFrom start="true"/>     #从---移动到的时候,默认为true

        <moveTo start="true"/>     #开始移动的时候,默认为true

        <attrib start="false"/>      #查询开始,默认为false

        <modify start="false"/>      #修改开始的时候,默认为false

</inotify>

将超时时间改为true

<timeout start="true" time="100"/><!-- timeout=100 -->

计划任务默认是false ,如果改为true,默认是600分钟做一次全量同步

<crontab start="false" schedule="600"><!--600mins-->

开启认证,配置使用rsync 和密码文件

<auth start="true" users="rsync" passwordfile="/etc/rsync.passwd"/>

保存退出

[root@node1 sersync]# ./sersync2 -d -r -o /usr/local/sersync/confxml.xml #启动sersync 服务

[root@node1 sersync]# echo "123456" >/etc/rsync.passwd   #编辑密码文件

[root@node1 sersync]# chmod 600 /etc/rsync.passwd  #修改rsync.passwd 文件的权限,其他人和组不可读写

[root@node1 ~]# yum install rsync inotify-tools -y

[root@node1 ~]# vim /etc/rsyncd.conf

systemctl start rsyncd  #启动rsync服务

systemctl enable rsyncd   #将rsync服务添加为开机启动

172.20.26.198服务器上安装 rsync inotify-tools

[root@node2 ~]# yum install rsync inotify-tools -y

[root@node2 ~]# vim /etc/rsyncd.conf

[root@node2 /]# echo "rsync:123456" >/etc/rsync.passwd   #编辑密码文件

[root@node2 /]# chmod 600 /etc/rsync.passwd  #修改rsync.passwd 文件的权限,其他人和组不可读写

[root@node2 /]# systemctl start rsyncd     #启动rsync 服务

[root@node2 /]# systemctl enable rsyncd   #设置开机启动rsync服务

现在我们在master节点172.20.26.167上手工同步一下,让slave172.20.26.198节点同步master的数据

rsync -av /nfs/ rsync@172.20.26.198::slave_nfs --password-file=/etc/rsync.passwd

客户端查看

我们验证两台nfs服务器数据实时数据同步

在172.20.26.167服务器上nfs目录下创建test0219.txt文件

客户端挂载VIP172.20.26.200访问正常

在客户端172.20.26.24服务器上执行卸载、重新挂载的脚本命令

mkdir -p /data/sh

vim /data/sh/nfs_remount.sh

#!/bin/bash

#by lqc

#2021-02

#############################

while true;do

ls /nfs &>/dev/null

if [ $? -ne 0 ];then

umount -l /nfs && mount -o soft,timeo=1 172.20.26.200:/nfs /nfs

fi

sleep 1

done

[root@node3 nfs]# nohup bash /data/sh/nfs_remount.sh &

将nfs_remount.sh脚本设置后台运行程序,并开机自启动,创建serverAutoRun.sh脚本:

vim /data/sh/serverAutoRun.sh

#!bash

nohup bash /data/sh/nfs_remount.sh >>/dev/null &

再把执行serverAutoRun.sh脚本命令写进/etc/rc.d/rc.local文件中

vim /etc/rc.local

nohup bash /data/sh/serverAutoRun.sh &

再将两个文件赋予可执行权限

chmod +x /data/sh/serverAutoRun.sh

chmod +x /etc/rc.local

重启客户端

我们在172.20.26.167服务器上stop 掉nfs服务,VIP 将漂移到172.20.26.198服务器上,客户端172.20.26.24可以正常访问挂载的nfs目录内容。

如果是抢占模式下,我们将172.20.26.167服务器上的nfs 启动,,172.20.26.198服务器卸载VIP,VIP漂移回172.20.26.167服务器上。

我们这里配置的是非抢占模式,即使将172.20.26.167服务器上的nfs 启动,VIP还是继续保留在172.20.26.198服务器上,客户端访问nfs目录正常。

我们将172.20.26.198服务器上的nfs服务stop掉,VIP将被卸载掉,将漂移到172.20,26.167服务器上

如果两次切换时客户端172.20.26.24当前访问目录在nfs目录下,则会提示无法打开目录,失效文件句柄,需要重新挂载,如果两次切换时客户端当前访问目录不在nfs目录下,则可以直接进入nfs目录,进行查阅挂载的目录文件。

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

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

相关文章

LeetCode面试题05.06

美好的一天&#xff0c;从力扣开始 王子公主请看题 整数转换。编写一个函数&#xff0c;确定需要改变几个位才能将整数A转成整数B。 示例1: 输入&#xff1a;A 29 &#xff08;或者0b11101&#xff09;, B 15&#xff08;或者0b01111&#xff09;输出&#xff1a;2示例2: 输…

Python爬虫--5

1、异步爬虫 异步爬虫的方式&#xff1a; &#xff08;1&#xff09;多线程&#xff0c;多进程&#xff08;不建议使用&#xff09; 好处&#xff1a;可以为相关阻塞的操作单独开启线程或者进程&#xff0c;阻塞操作就可以异步执行。 弊端&#xff1a;无法无限制的开启多线程…

Docker安装配置OnlyOffice

OnlyOffice 是一款强大的办公套件&#xff0c;你可以通过 Docker 轻松安装和部署它。本文将指导你完成安装过程。 步骤 1&#xff1a;拉取 OnlyOffice Docker 镜像 首先&#xff0c;使用以下命令从 Docker Hub 拉取 OnlyOffice Document Server 镜像&#xff1a; sudo docke…

【代码随想录09】28. 找出字符串中第一个匹配项的下标 459. 重复的子字符串

目录 28. 找出字符串中第一个匹配项的下标题目描述参考代码 459.重复的子字符串题目描述参考代码 28. 找出字符串中第一个匹配项的下标 题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08…

Spring Boot3.2.2整合MyBatis Plus3.5.5

目录 1.前置条件 2.导坐标 3.配置数据源 4.配置mapper扫描路径 5.MyBatis Plus代码生成器整合 1.导坐标 2.编写代码生成逻辑 1.前置条件 已经初始化好一个spring boot项目且版本为3X&#xff0c;项目可正常启动 2.导坐标 <dependency><groupId>com.baomid…

深入了解性能优化(web应用)

影响一个系统性能的方方面面 一个 web应用不是一个孤立的个体,它是一个系统的部分,系统中的每一部分都会影响整个系统的性能 一.常用的性能评价/测试指标 1.响应时间 提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。 常用操作的响应时间列表: 操作 响应…

在达沃斯,人工智能引发的乐观情绪可谓一分为二

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

动手做个无人机—材料篇

基于浙江大学Fast-Lab(高飞&#xff0c;潘能)和深蓝学院合作课程&#xff1a;第二课&#xff1a;动力套焊接_哔哩哔哩_bilibili 无人机材料1&#xff1a; 1、NUC 猛虎峡谷 准系统 i5薄款&#xff1a; 一款机载电脑&#xff0c;使用i5-1135G7 &#xff0c;最大内存64G&#xff…

java-BigDecimal

为什么浮点数 float 或 double 运算的时候会有精度丢失的风险呢&#xff1f; 这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的&#xff0c;而且计算机在表示一个数字时&#xff0c;宽度是有限的&#xff0c;无限循环的小数存储在计算机时&#xff0c;只能被…

数据结构--数组和广义表

1. 数组的定义 略 2. 数组的顺序表示 由于数组定义后&#xff0c;数组的维度和每维的长度就不再改变&#xff0c;其结构是固定的&#xff0c;因此一般采用顺序存储结构。 3. 特殊矩阵的压缩矩阵 4. 广义表的定义和抽象操作 广义表一些操作可以看数据结构--广义表_空广义表的…

机器学习:BootStrapping(Python)

import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.decomposition import PCA # 主成分分析 from sklearn.preprocessing import LabelEncoder, StandardScaler # 类别标签编码&#xff0c;标准化处理 import matplo…

uniapp组件库SwipeAction 滑动操作 使用方法

目录 #平台差异说明 #基本使用 #修改按钮样式 #点击事件 #API #Props #Event 该组件一般用于左滑唤出操作菜单的场景&#xff0c;用的最多的是左滑删除操作。 注意 如果把该组件通过v-for用于左滑删除的列表&#xff0c;请保证循环的:key是一个唯一值&#xff0c;可以…

k8s 使用tomcat官方镜像部署集群并解决访问页面404

一、集群节点配置&#xff1a; master:192.168.206.138 k8s-node1:192.168.206.136 k8s-node2:192.168.206.137 二、下载一个Tomcat镜像 docker pull tomcat docker images | grep tomcat docker tag docker.io/tomcat tomcat 三、根据官方镜像自己构建一个一次性就能启动的…

怎样的安全数据交换系统 可以支持信创环境?

首先&#xff0c;我来看看&#xff0c;什么是安全数据交换系统&#xff1f;安全数据交换系统是一种专门设计用于在不同网络环境之间安全传输数据的技术解决方案。它确保数据在传输过程中的完整性、机密性和可用性&#xff0c;同时遵守相关的数据保护法规和行业标准。 那么&…

笔试面试题——二叉树进阶(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、根据二叉树创建字符串1、题目讲解2、思路讲解3、代码实现 二、二叉树的分层遍历1、题目讲…

docker使用http_proxy配置代理

钢铁知识库&#xff0c;一个学习python爬虫、数据分析的知识库。人生苦短&#xff0c;快用python。 在内网服务器中&#xff0c;docker经常需要下载拉取镜像&#xff0c;但由于没有网络要么只能手动导入镜像包&#xff0c;又或者通过http_proxy代理到其它服务器下载。 解决方法…

17.用户身份与能力

Linux系统的管理员之所以是root&#xff0c;并不是因为它的名字叫root&#xff0c;而是因为该用户的身 份号码即UID&#xff08;User IDentification&#xff09;的数值为 0。在 Linux 系统中&#xff0c;UID就像我们的身份证号 码一样具有唯一性&#xff0c;因此可通过用户的U…

【蓝桥杯冲冲冲】动态规划初步[USACO2006 OPEN] 县集市

蓝桥杯备赛 | 洛谷做题打卡day13 文章目录 蓝桥杯备赛 | 洛谷做题打卡day13题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示样例说明数据规模与约定 思路&#xff1a;方程&#xff1a; 题解代码我的一些话 [USACO2006 OPEN] 县集市 The County Fair 题目描述 每年…

蓝桥杯官网填空题(奇怪的分式)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 上小学的时候&#xff0c;小明经常自己发明新算法。一次&#xff0c;老师出的题目是&#xff1a;1/4乘以8/5 小明居然把分子拼接在一起&#xff0c;分母拼接在一起&…

66K star!想画出高颜值的流程图,试试这个手绘风开源白板

工作中总是少不了要画画图&#xff0c;不管是开发中绘制流程图&#xff0c;还是设计系统时画出架构图&#xff0c;一款趁手的工具总是少不了。今天我们就来聊聊画图的白板工具。 今天我们推荐的推荐的项目帮你画出手绘风的高颜值图表&#xff0c;目前在GitHub已超过66K Star&a…