環境:php
linux :內核3.0以上html
同步工具:linux
rsync&sersyncexpress
資料:https://rsync.samba.org/examples.htmlvim
要求:須以root實現一下操做,不然容易失敗服務器
rsync是文件或目錄同步的經常使用工具,尤爲在分佈式系統下進行同步,能夠經過自寫腳本調用該命令的方式實現,但如今有更加容易實現的方法,經過以上工具以配置文件的形式實現實時雙向同步。ssh
第一步:安裝rsynctcp
yum -y install xinetd rsync 分佈式
xinetd --是用來管理rsync的工具
rsync--同步工具
sersync--監控目錄
調整內核參數:
sysctl -w fs.inotify.max_queued_events="99999999" #inotify隊列最大長度,若是值過小,會出現"** Event Queue Overflow **"錯誤,致使監控文件不許確
sysctl -w fs.inotify.max_user_watches="99999999" #要同步的文件包含多少目錄,能夠用find /opt/tongbu1 -type d | wc -l 統計,必須保證max_user_watches值大於統計結果
sysctl -w fs.inotify.max_user_instances="65535" #每一個用戶建立inotify實例最大值
二 安裝rsync
在AB服務器各自安裝rsync:
yum -y install xinetd rsync(用root權限)
mkdir -p /cmiot/File_Receive(用root用戶)
第一步:配置rsync的配置文件
vi /cmiot/File_Receive
#===========================
#主機A的配置文件
uid = root
gid = root
port=873
use chroot = yes
max connections = 5
syslog facility = local5
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
transfer logging = yes
address=192.168.106.205 #服務器A
hosts allow=192.168.106.206 #服務器B
hosts deny = * #禁止同步的ip
read only=false
list=yes
ignore errors #忽略一些IO錯誤
auth users = rsyncuser
secrets file = /etc/rsync.passwd
################################
[backup]
path = /cmiot/File_Receive/ #必須是完整路徑,某位的'/'必須加上
comment = welcome to oldboyedu backup! #解釋
#===========================
#創建虛擬帳戶對應的用戶名與密碼(用於客戶端鏈接的帳戶和密碼)
#A主機密碼驗證文件
vim /etc/rsync.passwd
rsyncuser:123456
chmod 600 /etc/rsync.passwd
B主機登陸密碼文件--用於登陸B主機使用
vim /etc/rsync_bak.passwd
123456
chmod 600 /etc/rsync_bak.passwd
#===========================
#主機B的配置文件
uid = root
gid = root
port=873
use chroot = yes
max connections = 5
syslog facility = local5
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
transfer logging = yes
address=192.168.106.206 #服務器B
hosts allow=192.168.106.205 #服務器A:修改一下容許訪問的網段,根據實際狀況填寫
hosts deny = * #禁止同步的ip
read only=false
list=yes
ignore errors #忽略一些IO錯誤
auth users = rsyncuser_bak
secrets file = /etc/rsync_bak.passwd
################################
[backup_bak] #模塊名稱
path = /cmiot/File_Receive/ #備份目錄,必須是完整路徑,某位的'/'必須加上
comment = welcome to oldboyedu backup! #解釋
#===========================
#創建虛擬帳戶對應的用戶名與密碼(用於客戶端鏈接的帳戶和密碼)
B主機密碼驗證文件
vim /etc/rsync_bak.passwd
rsyncuser_bak:123456
chmod 600 /etc/rsync_bak.passwd
A主機密碼登錄了文件
vim /etc/rsync.passwd
123456
chmod 600 /etc/rsync.passwd
#注意:密碼驗證文件與登陸密碼文件密碼必須一致
第二步:開啓873端口
netstat -antup|grep 873
防火牆開機啓動:systemctl enable firewalld.service
查看防火牆狀態:firewall-cmd --state
開啓防火牆:systemctl start firewalld.service
開放873端口:firewall-cmd --zone=public --add-port=873/tcp --permanent
重啓:systemctl restart firewalld.service
從新加載載:firewall-cmd --reload
#===========================
第三步: 查看rsync進程
ps -ef | grep rsync | grep -v grep
檢查啓動用戶並kill掉進程,刪除進程文件
kill -9 pid
rm -rf /var/run/rsyncd.pid
rm -rf /var/run/rsync.lock
rm -rf /var/run/rsyncd_bak.pid
rm -rf /var/run/rsync_bak.lock
#===========================
第三步:啓動rsync進程:rsync --daemon --config=/etc/rsyncd.conf
echo -ne rsync –daemon --config=/etc/rsyncd.conf >> /etc/rc.local #開機自啓
#===========================
第四步:測試同步--採起
備用服務器建立同步目錄:mkdir -p /cmiot/File_Receive
rsync -avz /cmiot/File_Receive/ rsyncuser@Bip::backup
輸入密碼成功同步後修改:echo"123456">/etc/rsync.passwd
以下命令就能夠自動登陸:
rsync -avz /cmiot/File_Receive/* rsyncuser@s206::backup --password-file=/etc/rsync.passwd
第四步:配置sersync
在AB服務器上傳壓縮文件sersync2.5.4_64bit_binary_stable_final.tar 至/usr/local/ 目錄下,
用tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz進行解壓,而後執行mv GNU-Linux-x86 sersync,
而後執行vim /usr/local/sersync/confxml.xml進行修改
vi /usr/local/sersync/confxml.xml
對以下內容進行修改:
<host hostip="localhost" port="8008"></host>
# 開啓DUBUG模式
#注:設置爲true,開啓debug模式,會在sersync正在運行的控制檯,打印inotify事件與rsync同步命令。
<debug start="true"/>
# 設置要監控的事件
#注:對於大多數應用,能夠嘗試把createFile(監控文件事件選項)設置爲false來提升性能,減小 rsync通信。由於拷貝文件到監控目錄會產生create事件與close_write事件,因此若是關閉create事件,只監控文件拷貝結束時的事 件close_write,一樣能夠實現文件完整同步。
#若是將createFolder設爲false,則不會對產生的目錄進行監控,該目錄下的子文件與子目錄也不會被監控。
#默認狀況下對建立文件(目錄)事件與刪除文件(目錄)事件都進行監控,若是項目中不須要刪除遠程目標服務器的文件(目錄),則能夠將delete 參數設置爲false,則不對刪除事件進行監控。
<inotify>
<delete start="true"/>
<createFolder start="false"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="false"/>
</inotify>
<sersync>
# 本地同步的目錄路徑
<localpath watch="/cmiot/File_Receive/">
# 遠程IP和rsync模塊名
<remote ip="對方ip" name="rsync_bak"/>
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="對方配置用戶" passwordfile="本機登陸對方密碼"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<!--<exclude expression="*.php"></exclude>-->
<!--<exclude expression="info/*"></exclude>-->
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
#=====================================================
啓動sersync:/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
1)在主服務器開啓sersync守護進程,使sersync在後臺運行,開啓實時同步
./sersync -d
2)在開啓實時監控以前對主服務器目錄與遠程目標機目錄進行一次總體同步
./sersync -r
若是設置了過濾器,即在xml文件中,filter爲true,則暫時不能使用-r參數進行總體同步。-r參數將會無效。
3)指定配置文件
./sersync -o XXX.xml
對於sersync使用可執行文件目錄下的默認配置文件confxml.xml,若是須要使用另外一個配置文件,可使用-o參數指定其它配置文件。也可開啓多個sersync守護進程分別使用不一樣的配置文件。
自啓動:vim /etc/rc.d/rc.local在最後一行增長/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
#==============================================================
同步測試:
在開啓rsync和sersync進程後,在A或B其中一臺服務器上從其餘目錄文件隨意複製一個文件或文件夾,在被同步機上查看其文件大小或文件夾大小,文件個數
命令:
顯示硬盤佔用空間
du -h
lsblk
查看指定目錄大小
du -sh /opt
查看各個目錄大小
du -h --max-depth=1
當前目錄的所有文件個數(包含子文件夾的文件)
ls -lR | grep "^-" | wc -l
按文件大小排序 由大到小
ls -Slh
包含子目錄文件
du -sh * | sort -n