架构图如下:
image.png
服务器信息
服务器信息
10.10.5.156 nfs-service1
10.10.5.157 nfs-service2
10.10.5.158 nfs-client
安装相关服务 两个service 节点
yum install -y nfs-utils
yum install -y keepalived
yum install -y rsync
yum install -y inotify
安装nfs client 节点
yum install -y nfs-utils
2.配置nfs服务
2-1两个service节点配置nfs,并启动服务
mkdir -p /data/nfs
echo "/data/nfs *(insecure,rw,sync,no_root_squash,no_all_squash)" > /etc/exports
systemctl restart nfs
systemctl enable nfs
2-2client节点配置nfs,并启动服务
systemctl restart nfs
systemctl enable nfs
3.配置keepalived
修改master节点
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP #两个节点均为BACKUP
nopreempt #非抢占模式
interface eth0 #主节点对应ip地址的网卡名称
virtual_router_id 66 #修改默认id
priority 102
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.5.164 #浮动ip
}
}
修改buckup节点
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP #两个节点均为BACKUP
nopreempt #非抢占模式
interface eth0 #对应ip地址的网卡名称
virtual_router_id 66 #修改默认id
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.5.164 #浮动ip
}
}
启动服务keepalived
systemctl restart keepalived
systemctl enable keepalived
查看是否有eth0网卡上是否有对应的vip
image.png4.配置rsync+inotify(2service 节点)
1.rsync 同步文件需要对应用户和密码,这里直接使用root,两台服务器之间做免密操作即可:
免密操作:
略
inotifywait 参数说明:
-m,–monitor:始终保持事件监听状态 # 重要参数
-r,–recursive:递归查询目录 # 重要参数
-q,–quiet:只打印监控事件的信息 # 重要参数
-exclude:排除文件或目录时,不区分大小写
-t,–timeout:超时时间
–timefmt:指定时间输出格式 # 重要参数
–format:指定时间输出格式 # 重要参数
-e,–event:后面指定删、增、改等事件 # 重要参数
inotifywait events 事件说明:
access:读取文件或目录内容
modify:修改文件或目录内容
attrib:文件或目录的属性改变
close_write:修改真实文件内容 # 重要参数
close_nowrite:文件或目录关闭,在只读模式打开之后关闭的
close:文件或目录关闭,不管读或是写模式
open:文件或目录被打开
moved_to:文件或目录移动到
moved_from:文件或目录从移动
move:移动文件或目录移动到监视目录 # 重要参数
create:在监视目录下创建文件或目录 # 重要参数
delete:删除监视目录下的文件或目录 # 重要参数
delete_self:文件或目录被删除,目录本身被删除
unmount:卸载文件系统
编写脚本用来监控并同步两个service端的共享存储
本脚本为157服务器内容
#!/bin/bash
#监控本地目录,有变动则输出
cd /usr/local/sbin/
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /data/nfs/ | while read file
do
#将本地同步到远程目录,这里要根据实际情况修改
rsync -avz --delete /data/nfs/ root@10.10.5.156:/data/nfs/
echo " ${file} was rsynced" >>/tmp/rsync.log 2>&1
done
本脚本为156服务器内容
#!/bin/bash
#监控本地目录,有变动则输出
cd /usr/local/sbin/
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /data/nfs/ | while read file
do
#将本地同步到远程目录,这里要根据实际情况修改
rsync -avz --delete /data/nfs/ root@10.10.5.157:/data/nfs/
echo " ${file} was rsynced" >>/tmp/rsync.log 2>&1
done
加入到开启自启
echo "nohup /usr/local/sbin/sync_nfs.sh & ">> /etc/rc.local
5.client 挂载共享存储
#查看可用挂载点
showmount -e 10.10.5.164
#创建挂载目录
mkdir /nfs/158 -p
#写入配置文件并挂载
echo "10.10.5.164:/data/nfs /nfs/158 nfs defaults 0 0">> /etc/fstab
mount -a
#查看挂载情况
df -h
6.编写端检查nfs服务脚本
6-1 service 脚本,判断nfs服务是否正常可用
cat check_service.sh
#!/bin/bash
#nfs check
#if no nfsserver then start nfs
#if start nfs fail then stop keepalived
for i in `seq 14`;do
counter=`ps -aux | grep '\[nfsd\]' | wc -l`
if [ $counter -eq 0 ];then
systemctl restart nfs
fi
sleep 2
counter=`ps -aux | grep '\[nfsd\]' | wc -l`
if [ $counter -eq 0 ];then
systemctl stop keepalived.service
fi
sleep 2
done
6-2 client 端脚本,当vip飘移后保证服务可用
cat check_client.sh
#!/bin/bashz
#用for循环设置每两秒检查一次 2*(29+1)检查一分钟 可用性
for i in `seq 29`;do
df -Th &> /dev/null
if [ `echo $?` -ne 0 ];then
umount -lf /nfs/158 && mount -a
fi
sleep 2
done
编写定时任务配置 定时执行检查脚本
crontab -e
#服务端定时任务
* * * * * /usr/local/sbin/chenk_service.sh &> /dev/null
#客户端定时任务
* * * * * /usr/local/sbin/chenk_client.sh &> /dev/null
7.高可用测试
客户主机挂载测试:使用当前平台一个节点机,挂载浮动ip地址共享目录,同时做文件读写,观察存储主机两个节点文件生成情况;
主机宕机测试:可直接关闭服务器,或停止nfs和keepalived服务,查看共享目录可用性;
nfs服务终端测试:正常服务的同时,关闭nfs主节点服务进程,测试客户端读写文件功能正常与否,以及浮动IP切换正常与否;
文件同步测试:测试在主节点进行文件增、删、改后,备节点的文件变动情况;
网友评论