博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Keepalived+NFS+SHELL脚本实现NFS-HA高可用
阅读量:6836 次
发布时间:2019-06-26

本文共 1883 字,大约阅读时间需要 6 分钟。

本来想做DRBD+HEARTBEAT,但是领导说再加硬盘浪费资源,没有必要,而且在已有硬盘上做风险较大,所以就只能用rsync来实现数据同步了,实验中发现很多的坑,都用脚本和计划任务给填上了,打算把这套直接用在生产环境中,到时候如果还遇到什么问题,再进行修正和补全,下面是项目细节:

主机配置:

web:192.168.6.10 Centos 6.4

nfs1:192.168.6.1 Centos 6.4

nfs2:192.168.6.2 Centos 6.4

keepalived 1.2.13 VIP:192.168.6.105

1.安装NFS和keepalived

这部分比较简单,直接用yum -y install nfs keepalived

2.配置NFS(两台同样配置)

mkdir /home/shares

vim /etc/exports

/home/shares 192.168.6.0/24(rw,sync,no_root_squash)

cd /home/shares

echo aaa > /home/shares/a.txt #用作后面脚本判断

touch files{1..10}

service nfs start

3.配置keepalived

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL
}

vrrp_instance VI_1 {

state MASTER  #辅改成BACKUP
interface eth0
virtual_router_id 51
priority 100      #辅改成50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.6.105
}
}

service keepalived start

web:mount -t nfs 192.168.6.1:/home/shares /shares

4.ssh免密登录

ssh-keygen

ssh-copy-id

5.shell脚本

cd /etc/keepalived

vim notify_master.sh   #判断NFS端口是否存在,不存在就停止keepalived服务

#!/bin/bash

port=`netstat -anp|grep 2049`

if [ "$port" == "" ];then
/sbin/service keepalived stop
fi

vim change.sh(两台NFS都需要)  

#!/bin/bash

ip=`/sbin/ip a|grep "eth0"|grep "105"`
web="192.168.6.10"
if [ "$ip" != "" ];then  #判断VIP是否存在,如果存在就表示现在这台是master
/usr/bin/ssh $web "cat /shares/a.txt"  #在web上运行命令,查看/shares目录是否可用,执行cat a.txt消耗内存cpu较小
if [ "$?" != 0 ];then  #如果不可用$?返回值不为0,则卸载原来的/shares目录,再重新挂载这个目录,这样做的原因是,VIP切换的时候,必须重新挂载/shares,否则不能使用这个目录
/usr/bin/ssh $web "umount /shares&&mount -t nfs 192.168.6.105:/home/shares /shares"
fi
fi

chmod +x change.sh

chmod +x notify_master.sh

6.计划任务crontab

crontab -e

* * * * * /etc/keepalived/notify_master.sh  #每分钟检查一次NFS服务是否正常

* * * * * /etc/keepalived/change.sh  #每分钟检查一次keepalived状态

0 00 * * * rsync /home/shares 192.168.6.2:/home/shares  #每天夜间同步数据

转载于:https://www.cnblogs.com/webforward/p/6182786.html

你可能感兴趣的文章
protobuf 中的嵌套消息的使用 主要对set_allocated_和mutable_的使用
查看>>
0-1背包问题
查看>>
系统的Drawable(二)-Selector
查看>>
CAS 界面根据不同的域名显示不同的界面
查看>>
Node js 嵌入式模板引擎 ejs 的使用
查看>>
vue 事件修饰符
查看>>
自定义的一个JDBC工具类
查看>>
数据类型(列类型)
查看>>
hihocoder [Offer收割]编程练习赛14
查看>>
mongodb_服务端安装及连接
查看>>
将baidu地图中的baidu logo去掉
查看>>
CF1036C Classy Numbers dfs+二分
查看>>
linux管理和进程(4)
查看>>
公钥与私钥,HTTPS详解 转载
查看>>
构建之法阅读笔记(3)
查看>>
mysql having,group by查询去除重复记录
查看>>
StringBuffer和StringBuilder的区别
查看>>
修改GDAL库支持RPC像方改正模型
查看>>
UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)
查看>>
dataGridView 去除默认选择
查看>>