keepalived配置nfs高可用
一.簡介
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/ [email protected]:/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.安裝keepalived
apt-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