一.簡介
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
#!/bin/bash
#監控本地目錄,有變動則輸出一下
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /mnt/server/ | while read file
do
#將本地同步到遠程目錄,這里要根據實際情況修改
rsync -avz --delete /mnt/server/ root@192.168.1.1:/mnt/server/
echo " ${file} was rsynced" >>/tmp/rsync.log 2>&1
done
2.添加權限並運行chmod +x sync_nfs.sh
nohup inotify_bak.sh &
3.查看日志tail -f /tmp/rsync.log
4.提示
如果是主備模式,則一個腳本直接同步即可,如果是雙方做備份,則要寫2個腳本進行互相同步
主備切換(均操作)
1.安裝keepalivedapt-get install keepalived -y
2.編寫文件,默認可能沒有配置文件,直接新建即可vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { #全局配置
router_id lb01 #路由id號,不能重復
}
vrrp_script nfs #vrrp腳本命名
{
script "/etc/keepalived/check_nfs.sh" #要執行的腳本
interval 2 #腳本指定間隔
weight -40 #優先級(如果腳本執行結果為0,並且weight配置的值大於0,則優先級相應的增加,如果腳本執行結果非0,並且weight配置的值小於0,則優先級相應的減少)
}
vrrp_instance VI_1 { #定義一個實例
state MASTER #態參數 master/backup 只是說明,具體根據優先級
interface eth0 #虛IP地址放置的網卡位置
virtual_router_id 51 #同一個集群id一致
priority 100 #優先級決定是主還是備 越大越優先
advert_int 1 #主備通訊時間間隔
authentication {
auth_type PASS
auth_pass 1111 #認證號,集群中要一致
}
virtual_ipaddress {
192.168.1.3 #使用的虛擬ip,要和網段內ip不沖突
}
}
備份nfs配置文件,這是不一樣的
! Configuration File for keepalived
global_defs { #全局配置
router_id lb02 #路由id號,不能重復
}
vrrp_script nfs #vrrp腳本命名
{
script "/etc/keepalived/check_nfs.sh" #要執行的腳本
interval 2 #腳本指定間隔
weight -40 #優先級(如果腳本執行結果為0,並且weight配置的值大於0,則優先級相應的增加,如果腳本執行結果非0,並且weight配置的值小於0,則優先級相應的減少)
}
vrrp_instance VI_1 { #定義一個實例
state BACKUP #態參數 master/backup 只是說明,具體根據優先級
interface eth0 #虛IP地址放置的網卡位置
virtual_router_id 51 #同一個集群id一致
priority 80 #優先級決定是主還是備 越大越優先
advert_int 1 #主備通訊時間間隔
authentication {
auth_type PASS
auth_pass 1111 #認證號,集群中要一致
}
virtual_ipaddress {
192.168.1.3 #使用的虛擬ip,要和網段內ip不沖突
}
}
3.編寫檢查腳本vim /etc/keepalived/check_nfs.sh
#!/bin/bash
#nfs服務檢測腳本,服務不存在則返回1
A=`ps -aux | grep '\[nfsd\]' | wc -l`
if [ $A -eq 0 ];then
exit 1 #測試的時候可以加一個echo 1
fi
添加權限chmod +x /etc/keepalived/check_nfs.sh
4.測試
systemctl start keepalived
查看是否有配置的虛擬ip,ping一下試試,只會在主上面出現ip addr