一.简介

NFS是单点的,如果一个节点出现问题,那使用它挂载服务的都将出现问题。所以需要高可用,挂掉一台不影响。

采用keepalived+rsync+inotify-tools

环境: ubuntu16.4

nfs1 192.168.1.1 /mnt/server

nfs2 192.168.1.2 /mnt/server

虚拟地址 192.168.1.3

二.操作

基本配置

1.机器之间添加信任关系免密码登录,安装nfs

2.有三项输出,则表示默认支持inotify,可以安装inotify-tools工具.

​ll /proc/sys/fs/inotify​


-rw-r—r— 1 root root 0 Oct 18 12:18 max_queued_events
-rw-r—r— 1 root root 0 Oct 18 12:18 max_user_instances
-rw-r—r— 1 root root 0 Oct 18 12:18 max_user_watches


同步配置(2台服务器均操作)

1.编写脚本

​vim sync_nfs.sh​


  1. #!/bin/bash

  2. #监控本地目录,有变动则输出一下
  3. inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /mnt/server/ | while read file
  4. do
  5. #将本地同步到远程目录,这里要根据实际情况修改
  6. rsync -avz --delete /mnt/server/ root@192.168.1.1:/mnt/server/
  7. echo " ${file} was rsynced" >>/tmp/rsync.log 2>&1
  8. done

2.添加权限并运行

​chmod +x sync_nfs.sh​

​nohup inotify_bak.sh &​

3.查看日志

​tail -f /tmp/rsync.log​

4.提示

如果是主备模式,则一个脚本直接同步即可,如果是双方做备份,则要写2个脚本进行互相同步

主备切换(均操作)

1.安装keepalived

​apt-get install keepalived -y​

2.编写文件,默认可能没有配置文件,直接新建即可

​vim /etc/keepalived/keepalived.conf​


  1. ! Configuration File for keepalived

  2. global_defs { #全局配置
  3. router_id lb01 #路由id号,不能重复
  4. }

  5. vrrp_script nfs #vrrp脚本命名
  6. {
  7. script "/etc/keepalived/check_nfs.sh" #要执行的脚本
  8. interval 2 #脚本指定间隔
  9. weight -40 #优先级(如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加,如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少)
  10. }

  11. vrrp_instance VI_1 { #定义一个实例
  12. state MASTER #态参数 master/backup 只是说明,具体根据优先级
  13. interface eth0 #虚IP地址放置的网卡位置
  14. virtual_router_id 51 #同一个集群id一致
  15. priority 100 #优先级决定是主还是备 越大越优先
  16. advert_int 1 #主备通讯时间间隔
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111 #认证号,集群中要一致
  20. }
  21. virtual_ipaddress {
  22. 192.168.1.3 #使用的虚拟ip,要和网段内ip不冲突
  23. }
  24. }

备份nfs配置文件,这是不一样的


  1. ! Configuration File for keepalived

  2. global_defs { #全局配置
  3. router_id lb02 #路由id号,不能重复
  4. }

  5. vrrp_script nfs #vrrp脚本命名
  6. {
  7. script "/etc/keepalived/check_nfs.sh" #要执行的脚本
  8. interval 2 #脚本指定间隔
  9. weight -40 #优先级(如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加,如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少)
  10. }

  11. vrrp_instance VI_1 { #定义一个实例
  12. state BACKUP #态参数 master/backup 只是说明,具体根据优先级
  13. interface eth0 #虚IP地址放置的网卡位置
  14. virtual_router_id 51 #同一个集群id一致
  15. priority 80 #优先级决定是主还是备 越大越优先
  16. advert_int 1 #主备通讯时间间隔
  17. authentication {
  18. auth_type PASS
  19. auth_pass 1111 #认证号,集群中要一致
  20. }
  21. virtual_ipaddress {
  22. 192.168.1.3 #使用的虚拟ip,要和网段内ip不冲突
  23. }
  24. }

3.编写检查脚本

​vim /etc/keepalived/check_nfs.sh​


  1. #!/bin/bash
  2. #nfs服务检测脚本,服务不存在则返回1

  3. A=`ps -aux | grep '\[nfsd\]' | wc -l`
  4. if [ $A -eq 0 ];then
  5. exit 1 #测试的时候可以加一个echo 1
  6. fi

添加权限

​chmod +x /etc/keepalived/check_nfs.sh​

4.测试

systemctl start keepalived

查看是否有配置的虚拟ip,ping一下试试,只会在主上面出现

​ip addr​