一、負載均衡中文件同步必不可少,我這邊選擇rsync來實現文件同步shell
rsync同步文件機制更適用於單向文件同步,可配合unison實現雙向同步功能。vim
實現同步的兩種方法bash
一:ssh方法服務器
rsync -avz 用戶名@服務器ip /文件地址 本地目錄負載均衡
回車ssh
input passwordui
二:rsync同步spa
首先安裝yum install rsynccode
建立 /etc/rsyncd.confblog
uid = nobody gid = nobody use chroot = yes max connections = 4 pid file = /var/run/rsyncd.pid exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [data] path = /home/cloud-user/rsync comment = ftp export area read only = yes auth users = username secrets file = /etc/rsync_user.pas
建立用戶密碼文件
vim /etc/rsync_user.pas
username:password
啓動同步功能
rsync --daemon
另外一臺服務器同步
rsync -acz username@ip::data 本地目錄
回車
input password
注意:對於auth 失敗;最可能的緣由是rsync_user.pas的權限 必須爲600
對於上行同步和下行同步失敗還有多是由於權限的問題,對於權限有兩道檢測;1:rsync配置文件的對於該用戶的權限爲只讀;2:服務器對於rsync用戶在同步的文件夾的權限不夠;
上行同步
rsync -avz 本地目錄 username@ip:服務器目錄
免密登錄
方式一:ssh免密登陸
ssh-keygen -t rsa //回車、回車、回車
系統會生成.ssh目錄 ,該目錄下有三個文件
id_rsa : 生成的私鑰文件
id_rsa.pub : 生成的公鑰文件
know_hosts : 已知的主機公鑰清單
提交本身的用戶名和密碼去服務器
ssh-copy-id username@ip //回車 input password
而後能夠經過ssh登陸
ssh username@ip
二:rsync免密同步
系統中有一個環境變量RSYNC_PASSWORD 初始爲空
設置RSYNC_PASSWORD密碼
export RSYNC_PASSWORD=password
而後經過rsync同步
rsync -acz username@ip::data 本地目錄
若是要實現實時同步須要先監控文件夾中的變化
使用inotifywait
編譯安裝inotify-tools-3.13
開始監控
//監控;監控/home/cloud-user/rsync/ 的增長和刪除操做
inotifywait -mrq -e create,delete /home/cloud-user/rsync/
//同步;將本地home/cloud-user/rsync中的文件同步到改ip下的home/cloud-user/rsync中
rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync
編寫inotifywait.sh腳本文件
#!bin/bash inotifywait="inotifywait -mrq -e create,delete /home/cloud-user/rsync/" rsync="rsync -avz /home/cloud-user/rsync/* cloud-user@IP:/home/cloud-user/rsync" $inotifywait | while read directory event file do $rsync done
//執行腳本 bash inotifywait.sh
rsync 更適合單向同步
若是要實現雙向同步,可以使用unison
yum install unison
編寫腳本inotifywait_unison.sh
#!bin/bash inotifywait="inotifywait -mrq -e create,delete,modify,move /home/cloud-user/rsync/" unison="unison -batch /home/cloud-user/rsync/ ssh://IP//home/cloud-user/rsync" $inotifywait | while read directory event file do $unison done
注意shell文件權限
執行:
nohup bash inotifywait_unison.sh &
另外一臺服務也是相同操做,注意修改腳本文件中的ip