sersync實時複製工具實踐
環境
- NFS ip = 10.0.0.31
- backup ip = 10.0.0.41(作爲實時共享)
在backup的rsync服務配置裏面加一個模塊,創建/nfsbackup並改變權限。
[root@backup ~]#vim /etc/rsyncd.conf
[nfsbackup]
path = /nfsbackup
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
[root@backup ~]# pkill rsync 配置完後要重啓,先刪掉目前的進程!
[root@backup ~]# lsof -i :873
[root@backup ~]# rsync --daemon
[root@backup ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1401 root 4u IPv4 14468 0t0 TCP *:rsync (LISTEN)
rsync 1401 root 5u IPv6 14469 0t0 TCP *:rsync (LISTEN)
[root@backup ~]# mkdir -p /nfsbackup
[root@backup ~]# chown -R rsync.rsync /nfsbackup
在nfs客戶端推送資料到backup裏面:
[root@nfs01 data]# rsync -avz /data/ [email protected]::nfsbackup --password-file=/etc/rsync.password
sending incremental file list
./
a
b
c
sent 182 bytes received 68 bytes 500.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup nfsbackup]# ls --->我們回到backup去看看
a b c
實現從nfs客戶端到rsync服務端的rsync服務部署
sersync優點:
1)支持配置文件管理
2)真正的守護進程socket
3)可以對失敗文件定時重傳(定時任務功能)
4)第三方的HTTP接口(更新CDN緩存)
5)默認多線程rsync同步
高併發數據實時同步方案小結:
1.inotify(sersync)+rsync 是文件級別的 ----> 效率不高
2.drbd文件系統級別,文件級別的,基於block。缺點:備節點數據不可用。
3.第三方軟件的同步功能: mysql 同步、orcale,mongodb
4.程序雙寫,直接寫兩臺服務器。
5.透過業務邏輯解決(讀寫分離,備讀不到,讀主)
6.NFS集羣(雙寫主存儲,備存儲用inotify(sersync)+rsync ,備沒有找主 解決延遲問題)
sersync實時複製工具實踐
rsync部署如上面的例子:
第一個里程碑:實現從nfs客戶端到rsync服務端的rsync服務部署
第二個里程碑:在客戶端安裝sersync
網上源安裝:
git clone https://github.com/wsgzao/sersync
把這個檔案放在/application 裏面,整理成下面的樣子
[root@nfs01 sersync]# tree
.
├── bin
│ └── sersync
├── conf
│ └── confxml.xml ---->配置文件
├── GNU-Linux-x86
├── logs
└── sersync2.5.4_64bit_binary_stable_final.tar.gz
4 directories, 3 files
在confxml.xml裏面:
過濾功能:
6 <filter start="false">
7 <exclude expression="(.*)\.svn"></exclude>
8 <exclude expression="(.*)\.gz"></exclude>
9 <exclude expression="^info/*"></exclude>
10 <exclude expression="^static/*"></exclude>
11 </filter>
inotify監控什麼屬性:(true表示當前有監控的事件)
12 <inotify>
13 <delete start="true"/>
14 <createFolder start="true"/>
15 <createFile start="false"/>
16 <closeWrite start="true"/>
17 <moveFrom start="true"/>
18 <moveTo start="true"/>
19 <attrib start="false"/>
20 <modify start="false"/>
21 </inotify>
sersync同步
<sersync>
<localpath watch="/data">
<remote ip="172.16.1.41" name="nfsbackup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-avz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="true" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/application/logs/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加上可執行的權限:
chmod +x bin/sersync
可執行的參數:
[root@nfs01 data]# /application/sersync/bin/sersync -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
參數-d:啓用守護進程模式
參數-r:在監控前,將監控目錄與遠程主機用rsync命令推送一遍
c參數-n: 指定開啓守護線程的數量,默認爲10個
參數-o:指定配置文件,默認使用confxml.xml文件
參數-m:單獨啓用其他模塊,使用 -m refreshCDN 開啓刷新CDN模塊
參數-m:單獨啓用其他模塊,使用 -m socket 開啓socket模塊
參數-m:單獨啓用其他模塊,使用 -m http 開啓http模塊
不加-m參數,則默認執行同步程序
________________________________________________________________
執行sersync:
/application/sersync/bin/sersync -d -r -n 8 -o /application/sersync/conf/confxml.xml
檢驗成果:
在NFS服務端:
[root@nfs01 data]# ps -ef | grep sersync root 4180 1 0 10:57 ? 00:00:00 /application/sersync/bin/sersync -d -r -n 8 -o /application/sersync/conf/confxml.xml
root 4194 2910 0 10:57 pts/0 00:00:00 grep sersync
[root@nfs01 data]# cd /data
[root@nfs01 data]# ls
[root@nfs01 data]# touch stu{01..10}
[root@nfs01 data]# ls
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
到backup
[root@backup nfsbackup]# ls
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10