數據同步工具使用總結【rclone、rsync、scp】
- 一、數據處理背景
- 二、數據處理方法對比
- 1、數據關系梳理
- 2、不同工具處理方法
- 3、經驗總結
- 三、工具擴展知識
- 1、rclone工具介紹
- (1)、rclone概述
- (2)、安裝工具及配置
- 本地文件遷移到云上服務
- 本地文件同步到云上服務
- 2、rsync工具介紹
- (1)、rsync(Remote Sync,遠程同步)
- (2)rsync同步源
- (3)、配置rsync源
- 配置源的兩種表達方式
- 免交互格式
- 3、scp工具介紹
一、數據處理背景
- 作為數據工作者,日常工作中常見工作有:數據同步,網絡數據抓取,系統數據入庫,日志數據搜集,還有數據分析、挖掘等等。數據數據同步工作,本地數據文件的復制,本地服務器間數據同步,本地服務器到網絡存儲(網盤、NAS、對象存儲等)的數據同步,網絡存儲之間的數據同步,大數據非結構性數據同步等。
- 本文主要是希望將十幾個T的數據,從A服務器同步到B服務器,數據源是由MinIO實現的對象存儲服務提供(部署在C服務器),mount掛載在A服務器制定路徑(由于服務器訪問安全問題,訪問策略上如此定義)。
二、數據處理方法對比
1、數據關系梳理
- 數據源由MinIO服務提供,掛載在A服務器制定路徑。在數據同步過程我們無需關注A服務器和C服務器之間的訪問關系。在數據同步效率上可能帶來的瓶頸由:a、A服務器和C服務器之間的網絡帶寬;b、C服務器提供MinIO服務的并發能力。
- A服務器和B服務器可通過SSH訪問,但無法訪問C服務器。
B服務器ssh訪問A服務器,端口默認22
用戶名:root 密碼:1qaz@wsx
A服務器IP:192.168.1.100; 數據路徑:/data/bigdata
B服務器數據路徑:/data/bigdata; 數據路徑:/data/bigdata
2、不同工具處理方法
- scp復制
- 簡單直接,比較適合小文件傳輸,沒有復雜的配置。
- 該命令和本地cp命令參數大致相同,區別在于跨服務器復制。
- 命令格式:sudo scp [屬性參數] 源數據路徑 目標數據路徑
- 如果源數據路徑為遠程服務器,則意味著數據從遠程服務器復制到本地;如果源數據路徑為本地,則意味著數據由本地復制到遠程服務器。
- 登錄B服務器,執行如下腳本:
sudo scp -r root@192.168.1.100:/data/bigdata /data/
上述命令實現數據從A服務器復制到B服務器。該命令在執行大文件復制時,可能因為網絡環境因素導致數據復制終端,不支持斷點續傳。
- rsync同步
- 支持斷點續傳,同步執行失敗,可以再次執行,檢查數據狀態,繼續完成前次未同步數據
- Linux系統包自帶工具,需要單獨安裝,命令參數相對復雜,日常簡單的數據同步工作基本滿足需求
- 數據傳輸效率較scp高些,結合inotify-tools可實現數據實時同步; parallel可以實現多線程并行處理
- 命令格式:sudo rsync [屬性] 源數據路徑 目標數據路徑
- 如果源數據路徑為遠程服務器,則意味著數據從遠程服務器復制到本地;如果源數據路徑為本地,則意味著數據由本地復制到遠程服務器。
- 登錄B服務器,執行如下腳本:
sudo rsync -av root@192.168.1.100:/data/bigdata /data/bigdata
上述命令實現數據從A服務器到B服務器數據同步。適合比較大的文件同步,支持斷點續傳。需要注意的是,源數據路徑和目標數據路徑均需指定明確存在的路徑,然后將路徑下所有數據資源同步到目標路徑下,不會創建根路徑名稱。
- rclone同步
- 支持斷點續傳,可實現服務器間的數據同步,復制工作,功能非常強大
- 需要自主安裝的第三方工具包。支持本地數據同步功能,具有與unix命令rsync、cp、mv、mount、ls、ncdu、tree、rm和cat相當的強大云功能
- 支持大文件的快速傳輸,默認支持多線程,數據同步效率大約是rsync的三倍
- 命令格式:sudo rclone 源數據路徑 目標數據路徑 [屬性]
- 如果源數據路徑為遠程服務器,則意味著數據從遠程服務器復制到本地;如果源數據路徑為本地,則意味著數據由本地復制到遠程服務器。
- 登錄B服務器,首先需要配置rclone配置文件:
sudo rcllone config
- 按照向導提示,配置遠程服務器的參數信息。證書部分如果均為空,則按照用戶名,密碼方式認證,生成參數結果如下:
配置參數也可以復制如下信息,僅僅修改標識符,服務器B的IP,user, port, 其他保持不變。
[svra] # 標識符,很重要,可以隨意起
type = sftp
host = 192.168.1.100 # 改為服務器B的ip
user = root # 默認root用戶
port = 22 # 默認22端口,如果是其他端口請修改
# key_file = ~/.ssh/rclone-merged #證書認證,可以刪除該行,僅僅用戶名密碼認證方式
shell_type = unix
md5sum_command = md5sum # 向導生成時可以選擇為空
sha1sum_command = sha1sum # 向導生成時可以選擇為空
- 執行如下命令,實現數據同步
sudo rclone sync svra:/data/bigdata /data/bigdata -u -v -P --transfers=20 --ignore-errors --buffer-size=128M --drive-acknowledge-abuse
上述命令實現數據從A服務器到B服務器數據同步。適合比較大的文件同步,支持斷點續傳。需要注意的是,源數據路徑和目標數據路徑均需指定明確存在的路徑,然后將路徑下所有數據資源同步到目標路徑下,不會創建根路徑名稱。
3、經驗總結
- scp 小白救星,但大文件是噩夢。優勢??:命令簡單、加密傳輸、系統預裝;致命缺陷??:??斷點續傳=0??!傳輸10GB文件若中斷,必須重頭再來;??適用場景??:單文件<1GB、臨時備份、內網低風險環境
- rsync:企業級神器,增量同步碾壓全場。核心理由??:僅傳輸差異部分,??節省帶寬70%+?;–partial:斷點續傳;bwlimit=5000:限速5MB/s避免擠爆業務;??實測數據??:同步100GB變化文件,??scp需1.5小時 → rsync僅18分鐘
- rclone:強大的數據同步工具,云時代數據搬運神奇。支持幾乎所有云存儲,網盤,本地服務器之間的數據同步。重點需要維護好配置文件中各個存儲資源信息
三、工具擴展知識
1、rclone工具介紹
(1)、rclone概述
Rclone 是一款的命令行工具,支持在不同對象存儲、網盤間同步、上傳、下載數據。
官網網址:https://rclone.org/
Github 項目:https://github.com/ncw/rclone
最近有一個不幸的消息是:Amazon 禁止了 rclone 在他家存儲上使用,好憂傷。
新聞地址:https://forum.rclone.org/t/rclone-has-been-banned-from-amazon-drive/2314
新聞地址:https://www.lowendtalk.com/discussion/115117/rclone-banned-from-amazon-drive
支持的主流對象存儲有:
Google Drive
Amazon S3
Openstack Swift / Rackspace cloud files / Memset Memstore
Dropbox
Google Cloud Storage
Amazon Drive
Microsoft One Drive
Hubic
Backblaze B2
Yandex Disk
The local filesystem
(2)、安裝工具及配置
- 工具安裝
以Ubuntu系統為例,執行在線安裝命令,亦可下載安裝包,離線安裝。
sudo -v ; curl https://rclone.org/install.sh | sudo bash
- 資源配置
執行下面命令,按照向導選擇對應資源配置類型,生成配置文件
sudo rclone config
Current remotes:
n) New remote
s) Set configuration password
q) Quit config
n/s/q> q
-
生成配置文件類型舉例:
- 服務器資源
[svra] # 標識符,很重要,可以隨意起 type = sftp host = 192.168.1.100 # 改為服務器B的ip user = root # 默認root用戶 port = 22 # 默認22端口,如果是其他端口請修改 # key_file = ~/.ssh/rclone-merged #證書認證,可以刪除該行,僅僅用戶名密碼認證方式 shell_type = unix md5sum_command = md5sum # 向導生成時可以選擇為空 sha1sum_command = sha1sum # 向導生成時可以選擇為空
- S3協議類型
# cat /root/.config/rclone/rclone.conf [src] #s數據源服務type = s3provider = Minioenv_auth = falseaccess_key_id = xxxxxxsecret_access_key = xxxxxxregion = cn-east-1endpoint = http://10.0.176.163:22829location_constraint = server_side_encryption = [des] #目標數據服務服務type = s3provider = Minioenv_auth = falseaccess_key_id = xxxxxxsecret_access_key = xxxxxxregion = cn-east-1endpoint = http://10.0.176.163:20445location_constraint = server_side_encryption =
-
服務期間免密登錄設置(按需)
- 生成密鑰對
在客戶端上執行命令,生成密鑰對。然后,合并秘鑰,最終會在~/.ssh/目錄下生成 rclone.pub,rclone,以及rclone-merged 三個文件
注意:ssh生成的秘鑰文件,保存在當前用戶目錄下的.ssh目錄下,即:~/.ssh/
ssh-keygen -q -t rsa -b 4096 -C "rclone key" -N "" -f ~/.ssh/rclone #靜默生成rclone密鑰對 cd ~/.ssh/ cat rclone* > rclone-merged # 將密鑰對合并,否則會連接失敗
- 復制公鑰到遠程訪問服務器
- 命令方式復制
假設服務器的ip是192.168.1.100,ssh端口是22,使用以下命令,然后輸入服務器的密碼即可。
- 命令方式復制
ssh-copy-id -i ~/.ssh/rclone.pub -f -p 22 root@192.168.1.100 #自行修改為你自己的
- 手動方式復制
在客戶端上打開rclone.pub,復制里面的內容,在服務器上~/.ssh/的目錄下,新建authorized_keys文件,粘貼內容到authorized_keys
- 生成密鑰對
-
掛載遠程服務到本地路徑
- 使用rclone mount命令,將遠程服務掛載到本地
sudo rclone mount svra:/data/bigdata /data/bigdata --allow-other --allow-non-empty --umask 0002 ll /data/bigdata
-
后臺運行rclone
nohup sudo rclone sync svra:/data/bigdata /data/bigdata -u -v -P --transfers=20 --ignore-errors --buffer-size=128M --drive-acknowledge-abuse sync.log 2 > &1 &
其他例子:
#復制最近7天的消息 --max-age 7d ,支持d、h、m、s,將minio:test的最近7天數據復制到minio1:test,并將日志寫入copyrclone.log #不帶--max-age 7d則是復制所有數據 nohup rclone -P copy --max-age 7d --no-traverse minio:test minio1:test > copyrclone.log 2>&1 &#保留最近30天的數據,30天前的全部刪除 --min-age 30d ,支持d、h、m、s,刪除minio:test 30天前的數據,并將日志寫入derclone.log #不帶--mix-age 30d則是刪除所有數據 #相反--max-age 30d則是刪除最近30天的數據 nohup rclone -P delete --min-age 30d --no-traverse minio:test > derclone.log 2>&1 &
### (3)、命令介紹
- Rclone將一個目錄樹從一個存儲系統同步到另一個。它的語法是這樣的語法:[選項] 子命令 <參數> <參數…>
- 常見子命令查看一個遠端目錄:rclone ls remote:path拷貝一個本地目錄到遠端的目錄:rclone copy /local/path remote:path將本地目錄同步到遠端的目錄:rclone sync --interactive /local/path remote:pathrclone最常用的命令如下,完整的命令列表可以通過help或者是rclone提供的文檔查看:```bashrclone config - Enter an interactive configuration session.rclone copy - Copy files from source to dest, skipping already copied.rclone sync - Make source and dest identical, modifying destination only.rclone bisync - Bidirectional synchronization between two paths.rclone move - Move files from source to dest.rclone delete - Remove the contents of path.rclone purge - Remove the path and all of its contents.rclone mkdir - Make the path if it doesn't already exist.rclone rmdir - Remove the path.rclone rmdirs - Remove any empty directories under the path.rclone check - Check if the files in the source and destination match.rclone ls - List all the objects in the path with size and path.rclone lsd - List all directories/containers/buckets in the path.rclone lsl - List all the objects in the path with size, modification time and path.rclone md5sum - Produce an md5sum file for all the objects in the path.rclone sha1sum - Produce a sha1sum file for all the objects in the path.rclone size - Return the total size and number of objects in remote:path.rclone version - Show the version number.rclone cleanup - Clean up the remote if possible.rclone dedupe - Interactively find duplicate files and delete/rename them.rclone authorize - Remote authorization.rclone cat - Concatenate any files and send them to stdout.rclone copyto - Copy files from source to dest, skipping already copied.rclone genautocomplete - Output shell completion scripts for rclone.rclone gendocs - Output markdown docs for rclone to the directory supplied.rclone listremotes - List all the remotes in the config file.rclone mount - Mount the remote as a mountpoint.rclone moveto - Move file or directory from source to dest.rclone obscure - Obscure password for use in the rclone.confrclone cryptcheck - Check the integrity of an encrypted remote.rclone about - Get quota information from the remote.```>官網 https://rclone.org/### (4)、應用場景
#### 從一個集群服務遷移到另一個集群服務
從一個集群將對應的文件遷移到另一個集群的應用是比較常見的一種應用情況,下面以對象服務的遷移為例進行簡單的介紹:首先我們需要對兩個服務都進行配置,第一個集群是test1,第二個集群是test2,現在需要將test1集群中的桶bucket1遷移到test2中。可以使用如下的命令:
```bash
rclone copy test://bucket1 test2://bucket1
如果在test2集群上沒有這個桶bucket1的話,我們可以選擇先手動在test2上創建對應的桶bucket1,也可以選擇添加參數 --create-empty-src-dirs來自動創建:
rclone --create-empty-src-dirs copy test1://bucket1 test2://bucket2
如果想要實時監控進度的話,可以使用參數—progress;
本地文件遷移到云上服務
本地存在文件需要上云的情況下,也可以使用rclone來完成這個任務:
rclone copy $localpath $remote://$bucket/$prefix
可以用這個參數結構執行命令來完成任務,也可以根據實際情況添加相應的參數。
本地文件同步到云上服務
本地文件在拷貝過一次后,或者是首次直接遷移到云端,也可以使用sync命令來完成:
rclone sync $src_path $dest_path
eg: rclone sync /mnt/test test://bucket1/test
sync與copy最大的區別在于sync命令是以“同步”為目的,也就是說,如果存在一個文件,dest端有而src端沒有的話,會將dest端的文件清理掉。
2、rsync工具介紹
(1)、rsync(Remote Sync,遠程同步)
一款開源的快速備份工具
支持本地復制
也可以在不同主機(例如:其他SSH、rsync主機)之間鏡像同步整個目錄樹,支持增量備份,并保持鉗接和權限。
采用優化的同步算法,傳輸前執行壓縮,,因此非常適用于異地備份、鏡像服務器等應用。
(2)rsync同步源
在遠程同步任務中,負責發起rsync司步操作的客戶機稱為發起端,而負責響應來自客戶機的rsync同步操作的服務器稱為同步源(備份源)。在同步過程中,同步源負責提供文件的原始位置,發起端應對該位置具有讀取權限。
例:
A服務器同步B服務器的數據,B服務器就是備份源
反過來,B服務器同步A服務器的數據,那么A服務器就是備份源
(3)、配置rsync源
-
基本思路
- 建立rsyncd.conf配置文件、獨立的rsync賬號文件
- 配置文件rsyncd.conf
需手動配置,語法類似于Samba配置
認證配置auth users、secrets file,不加則為匿名 - rsync賬號文件
采用“用戶名:密碼”的格式記錄,每行一個用戶記錄
獨立的賬號數據,不依賴系統賬號
- 配置文件rsyncd.conf
- 啟用rsync服務
通過 --daemon獨自提供服務:rsync --daemon
可以通過執行kill $(cat /var/run/rsyncd.pid)關閉服務
- 建立rsyncd.conf配置文件、獨立的rsync賬號文件
-
rsync命令
#命令的用法
rsync [選項] 原始位置 目標位置#----------常用選項--------------------------
-r:遞歸模式,包含目錄及子目錄中的所有文件。
-l:對于符號鏈接文件仍然復制為符號鏈接文件。
-v:顯示同步過程的詳細(verbose)信息。
-z:在傳輸文件時進行壓縮(compress)。
-a:歸檔模式,保留文件的權限、屬性等信息,等同于組合選項“-rlptgoD”。
-p:保留文件的權限標記。
-t:保留文件的時間標記。
-g:保留文件的屬組標記(僅超級用戶使用)。
-o:保留文件的屬主標記(僅超級用戶使用)。
-H:保留硬連接文件。
-A:保留 ACL 屬性信息。
-D:保留設備文件及其他特殊文件。
--delete:刪除目標位置有而原始位置沒有的文件,即刪除差異文件,保留一致性。
--checksum:根據校驗和(而不是文件大小、修改時間)來決定是否跳過文件。
--password-file=file:從file中得到密碼,用于免交互處理,file文件的權限要是600
配置源的兩種表達方式
將指定的資源下載到本地/root 目錄下進行備份。
格式一:
用戶名@主機地址::共享模塊名
例如:
backuper@192.168.163.10::wwwroot /opt
格式二:
rsync://用戶名@主機地址/共享模塊名
例如:
rsync://backuper@192.168.163.10/wwwroot /opt
免交互格式
echo "密碼" > /etc/密碼文件
chmod 600 /etc/密碼文件#設置周期性任務
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/密碼文件 backuper@192.168.163.10::wwwroot /optsystemctl restart crond
systemctl enable crond
-----------------------------------
rsync進程數量 rsync支持多線程
https://blog.51cto.com/u_16213679/10351277
3、scp工具介紹
系統內核命令,基本能力不再贅述。