如何實現Linux多臺伺服器間的檔案雙向同步
Linux系統間檔案雙向同步搭建Unison版
一、Unison簡介
Unison是Windows、Linux以及其他Unix平臺下都可以使用的檔案同步工具,它能使兩個資料夾(本地或網路上的)保持內容的一致。Unison擁有與其它一些同步工具或檔案系統的相同的特性,但也有自身的特點:
1.跨平臺使用;
2.對核心和使用者許可權沒有特別要求;
3.Unison是雙向的,它能自動處理兩分拷貝中更新沒有衝突的部分,有衝突的部分將會顯示出來讓使用者選擇更新策略;
4.只要是能連通的兩臺主機,就可以執行unison,可以直接使用socket連線或安全的ssh連線方式,對頻寬的要求不高,使用類似rsync的壓縮傳輸協議。環境如下:
vm1 192.168.30.64
vm2 192.168.30.65二、編譯安裝Unison
Linux下通過原始碼包編譯安裝Unison時,需要用到Objective Caml compiler。
通過以下方式安裝
[[email protected] ~]# wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.0.tar.gz
[[email protected] ~]# tar -xzvf ocaml-4.02.0.tar.gz
[[email protected] ~]# cd ocaml-4.02.0
[[email protected] ocaml-4.02.0]# ./configure
[[email protected] ocaml-4.02.0]# make world opt
[[email protected] ocaml-4.02.0]# make install編譯安裝Unison
[[email protected] ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.3.tar.gz
[[email protected] ~]# tar -xzvf unison-2.48.3.tar.gz
[[email protected] ~]# cd unison-2.48.3
[[email protected] unison-2.48.3]# make UISTYLE=text
[[email protected] unison-2.48.3]# make install在執行make install的過程中,可能會出現以下錯誤提示:
mv: cannot stat ‘/root/bin//unison’: No such file or directory
make: [doinstall] Error 1 (ignored)
cp unison /root/bin/
cp: cannot create regular file ‘/root/bin/’: Is a directory
make: * [doinstall] Error 1出現錯誤的原因在與Unison預設是將檔案Copy到/root/bin目錄,但Linux預設是沒有該目錄的,因此我們需要將生成的可執行檔案unison複製到系統的PATH目錄。
[[email protected] unison-2.48.3]# cp unison /usr/local/bin將可執行檔案unison上傳到遠端主機192.168.30.65
[[email protected] unison-2.48.3]# scp unison [email protected]:/root/
通過SSH登陸到遠端主機,再將unison複製到vm2的PATH目錄
[[email protected] ~]#cp unison /usr/local/bin三、配置ssh key信任
建議通過普通使用者進行操作,理由是通過root操作本身就危險,免密碼登陸的root就更危險了。
我們使用部署 OA應用程式的使用者即可,如 我們的應用程式放在了 /home/oa/tomcat7/webapps/下面,我們可以使用oa使用者進行登陸
在兩臺伺服器上建立oa使用者的命令
[[email protected] ~]# useradd oa
[[email protected] ~]# passwd oa在vm1上建立key並配置vm2的信任
[[email protected] ~]# su – oa
[[email protected] ~]$ ssh-keygen -t rsa
在提示儲存私鑰(key)和公鑰(public key)的位置時,使用預設值;
在提示是否需要私鑰密碼(passphrase)時,直接敲回車,即不使用私鑰密碼。
之後,將生成一對金鑰,id_rsa(私鑰檔案)和id_rsa.pub(公鑰檔案),儲存在/home/oa/.ssh/目錄下。將公鑰新增到vm2的 authorized_keys 檔案中
將檔案上傳到vm2
[[email protected] ~]$ scp ~/.ssh/id_rsa.pub [email protected]:/home/oa/使用rsync使用者SSH到登陸到遠端主機,並將公鑰新增到 authorized_keys 檔案中
[[email protected] ~]$ mkdir .ssh
[[email protected] ~]$ chmod 700 .ssh
[[email protected] ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys
[[email protected] ~]$ chmod 600 ~/.ssh/authorized_keys同理,執行以下步驟在vm2上建立key並配置vm1的信任
[[email protected] ~]# su – oa
[[email protected] ~]$ ssh-keygen -t rsa將檔案上傳到vm1
[[email protected] ~]$ scp ~/.ssh/id_rsa.pub [email protected]/home/oa/使用rsync使用者SSH到登陸到vm1,並將公鑰新增到 authorized_keys 檔案中
[[email protected] ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys重啟SSH服務
[[email protected] ~]# service sshd restart
[[email protected] ~]# service sshd restart四、Unison的配置與使用
直接使用已部署好的應用程式目錄進行同步測試,配置前請先對應用程式進行備份。
在實際部署中可先部署將應用程式部署在其中一臺應用伺服器上,然後使用同步工具測試時直接進行同步。在兩臺伺服器上分別執行一次unison,如果出現提示確認,則直接敲回車選擇預設值;
如果報錯提示許可權問題請使用chown命令、chmod命令進行相應檔案、資料夾的屬主及執行許可權的變更
[[email protected] ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://[email protected]//home/oa/tomcat7/webapps/OA/
[[email protected] ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://[email protected]//home/oa/tomcat7/webapps/OA/
如果上述執行順利,說明雙向同步的環境已經搭建起來了,下面就是做一些配置 使檔案同步常態化。修改兩臺伺服器的unison配置檔案,輸入以下內容
[[email protected] ~]$ vi /home/oa/.unison/default.prf
#Unison preferences file
root = /home/oa/tomcat7/webapps/OA/
root = ssh://[email protected]//home/oa/tomcat7/webapps/OA/
#force =
#ignore =
batch = true
#repeat = 1
#retry = 3
#owner = true
#group = true
#perms = -1
#fastcheck = false
#rsync = false
#sshargs = -C
#xferbycopying = true
log = true
logfile = /home/oa/.unison/unison.log
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
[[email protected] ~]$ vi /home/oa/.unison/default.prf
#Unison preferences file
root = /home/oa/test
root = ssh://[email protected]//home/oa/tomcat7/webapps/OA/
#force =
#ignore =
batch = true
#repeat = 1
#retry = 3
#iowner = true
#igroup = true
#iperms = -1
#ifastcheck = false
#irsync = false
#isshargs = -C
#ixferbycopying = true
log = true
logfile = /home/oa/.unison/unison.log
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
相關注解如下:
force表示會以本地所指定資料夾為標準,將該目錄同步到遠端。這裡需要注意,如果指定了force引數,那麼Unison就變成了單項同步了,也就是說會以force指定的資料夾為準進行同步,類似與rsync。
Unison雙向同步基本原理是:假如有A B兩個資料夾,A資料夾把自己的改動同步到B,B資料夾也把自己的改動同步到A,最後A B兩資料夾的內容相同,是AB資料夾的合集。
Unison雙向同步的一個缺點是,對於一個檔案在兩個同步資料夾中都被修改時,unison是不會去同步的,因為unison無法判斷以那個為準。
ignore = Path表示忽略指定目錄,即同步時不同步它。
batch = true,表示全自動模式,接受預設動作,並執行。
-fastcheck true 表示同步時僅通過檔案的建立時間來比較,如果選項為false,Unison則將比較兩地檔案的內容。
log = true 表示在終端輸出執行資訊。
logfile 指定輸出的log檔案。另外,Unison有很多引數,這裡僅介紹常用的幾個,詳細的請參看Unison手冊。
-auto //接受預設的動作,然後等待使用者確認是否執行。
-batch //batch mode, 全自動模式,接受預設動作,並執行。
-ignore xxx //增加 xxx 到忽略列表中
-ignorecase [true|false|default] //是否忽略檔名大小寫
-follow xxx //是否支援對符號連線指向內容的同步
owner = true //保持同步過來的檔案屬主
group = true //保持同步過來的檔案組資訊
perms = -1 //保持同步過來的檔案讀寫許可權
repeat = 1 //間隔1秒後,開始新的一次同步檢查
retry = 3 //失敗重試
sshargs = -C //使用ssh的壓縮傳輸方式
xferbycopying = true”
-immutable xxx //不變目錄,掃描時可以忽略
-silent //安靜模式
-times //同步修改時間
-path xxx 引數 //只同步 -path 引數指定的子目錄以及檔案,而非整個目錄,-path 可以多次出現。PS:Windows下的unison配置檔案預設位於C:\Documents and Settings\currentuser.unison目錄,預設的配置檔名是default.prf。
五、測試
在應用伺服器vm1、vm2的 /home/oa/tomcat7/webapps/OA/目錄中 新建一個檔案
[[email protected] OA]# touch app1.txt
[[email protected] OA]# touch app2.txt在vm1上執行unison
[[email protected] OA]# unison在vm1與vm2上檢視檔案是否同步
[[email protected] ~]$ cd ./tomcat7/webapps/OA
[[email protected] OA]$ ls
app1.txt app2.txt
[[email protected] ~]\$ cd ./tomcat7/webapps/OA
[[email protected] OA]\$ ls
app1.txt app2.txt均看到了“app1.txt app2.txtt”所有檔案,說明檔案同步已經成功!
注意:第一次SSH連線的時候可能需要輸入一次密碼,之後就不需要輸入了。
六、定期或實時執行同步
如果想要定期執行,則通過crontab計劃任務來實現,例如通過以下方式設定每5分鐘執行一次
[[email protected] ~]# su - oa
[[email protected] ~]$ crontab -e
/5 * * * /usr/local/bin/unison
使計劃任務生效 需要重啟 crond服務
[[email protected] ~]# service crond restart
unison這個工具很好用,只要把同步機制及目錄設定好,只要在64、65中兩臺伺服器的任意一臺伺服器執行定時同步任務,就能對檔案進行雙向同步。
相關推薦
如何實現Linux多臺伺服器間的檔案雙向同步
Linux系統間檔案雙向同步搭建Unison版 一、Unison簡介 Unison是Windows、Linux以及其他Unix平臺下都可以使用的檔案同步工具,它能使兩個資料夾(本地或網路上的)保持內容的一致。Unison擁有與其它一些同步工具或檔案系統的相同的特性,但也有自身的特點: 1.跨平臺
Linux多臺伺服器間SSH免密碼登入配置
SSH實現各個伺服器間的檔案相互備份,如執行scp命令,可以實現免密碼登入,從而可以使用SHELL指令碼實現一些自動化的處理。 假如A機要免密碼登入B機,具體方法如下: 1、在A機執行:"ssh-keygen -t rsa" 命令,建立公鑰資訊 #ssh-keygen
Linux伺服器間檔案實時同步的實現
使用場景 現有伺服器A和伺服器B,如果伺服器A的指定目錄(例如 /home/paul/rsync/ )中的內容發生變更(增刪改和屬性變更),實時將這些變更同步到伺服器B的目標目錄中(例如 /home/paul/rsync/ )。 資料映象備份工具Rsync Rsy
基於shell實現向多臺伺服器拷貝hosts檔案
寫這個指令碼的目的是在生產環境中向多個伺服器拷貝hosts檔案,能滿足自己的使用要求。 github: https://github.com/charnet1019/auto-scp-files.git 注意: 需要安裝expect #!/bin/bash ####
關於解決多臺伺服器間的檔案實時同步問題
最近要做一個相關的解決方案,在虛擬機器測試沒有問題。給大家分享出來,有更好的解決方案,歡迎討論。 1.1 inotify相關介紹 1、rsync 與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支援增量備份等優點,通
Linux多臺主機間配置SSH免密登陸
包含 生成 目錄 apt 裏的 html .cn 密碼 查看 1.安裝ssh. sudo apt-get install ssh. 安裝完成後會在~目錄(當前用戶主目錄,即這裏的/home/xuhui)下產生一個隱藏文件夾.ssh(ls -a 可以查看隱藏文件)。如果沒有
多臺伺服器間無密碼訪問
多臺伺服器相互無密碼訪問,與兩臺伺服器單向無密碼訪問的原理是一樣的,只不過由於是多臺伺服器之間相互無密碼訪問,不能象兩臺伺服器無密碼登入那樣直接上傳,步驟如下: 1、在每臺伺服器上都執行ssh-keygen -t rsa生成金鑰對: #ssh-keyge
Python實現分發資料塊到多臺伺服器上
程式碼如下: # coding: utf-8 import paramiko import re import os from time import sleep # 定義一個類,表示一臺遠端linux主機 # 參考https://www.cnblogs.com/haigege/p/55174
多臺伺服器檔案分發指令碼和命令執行指令碼
背景:基於hadoop的分散式部署 (具體請看文章),為了方便檔案的分發與命令的執行,顧編制此指令碼 伺服器配置四臺:(h101 192.168.44.101)(h102 192.168.44.102)(h103 19
【甘道夫】拷貝檔案到多臺伺服器的Shell指令碼
在多機叢集環境中,經常面臨修改配置檔案後拷貝到多臺伺服器的情況,傳統的執行scp比較麻煩,所以寫了以下shell指令碼,可以將指定檔案拷貝到多臺機器。 使用方法請參見HELP部分程式碼。 #!/bin/bash help() { cat << HEL
實現ssh簡便登入和利用Polysh實現多臺伺服器批量管理
在叢集管理中我們經常需要遠端跳轉到其他伺服器ssh [email protected]_host -p port 這裡我們編寫一個簡單的python指令碼實現遠端需求 config.py #!/usr/bin/env python # -*-
shell-scp分發資料夾下所有檔案到多臺伺服器
#!/usr/bin/expect -f #chmod 777 distribute_file.sh #把所有目的ip寫入ipfile.txt檔案,ipfile.txt檔案與distribute_fil
C#使用互斥量(Mutex)實現多進程並發操作時多進程間線程同步操作(進程同步)
互斥 空字符 示例 logfile format ror var mutex類 www 本文主要是實現操作系統級別的多進程間線程同步(進程同步)的示例代碼及測試結果。代碼經過測試,可供參考,也可直接使用。 承接上一篇博客的業務場景[C#使用讀寫鎖三行代碼簡單解決多線程並發
多臺服務器文件同步實現
創建目錄 zed error host 屬組 殺死 dup comm read 一、rsync特性 可以鏡像保存整個目錄樹和文件系統。 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。 無須特殊權限即可安裝。 快速:第一次同步時rsync會復制全部內容,但在下
網路程式設計(InetAddress類、Socket和ServerSocket、實現客戶端和伺服器之間的雙向通訊)
網路程式設計的底層是IO,通過IO將一臺計算機中的資料傳送到另一臺計算機中。傳送的時候,要知道接受方的地址,該地址即為IP地址。知道IP地址後即可進行傳送。A向B發訊息,訊息是發過去了,但是B要怎樣接受呢?因此定義了埠,B監聽了A所使用的埠。A發的訊息中含有埠號,當B接受到訊息時,知道了埠號
實現在同一臺伺服器上登入的ssh使用者的群聊(聊天室)功能
直接上程式碼了,註釋還算清晰,有問題歡迎提問指證。 為方便下載編譯,程式碼都放到一個檔案裡了。 伺服器是CentOS,客戶端用的secureCRT。 /* 功能: 在同一臺伺服器上ssh登入的使用者可以群聊(聊天室) 原理: 1、通過roomNo.來區分不同的房間或群組; 2
linux兩臺伺服器建立SSH信任關係
這裡只講解A——B單項信任關係(A可以直接ssh進入B) 伺服器A:192.168.1.20 zabbix_sever 伺服器B:192.168.1.57 maven -------------------- 1、登入A,生成公鑰 以root管理員賬號登入 [
1.8分散式叢集模式基礎(VM安裝多臺伺服器)
前言 一晃就是10幾天,學習的過程是斷斷續續的,對個人來說,這並不是一個良好的狀態。在這10幾天了,迷戀起了PS... 從今天起,堅持一週4篇,額。希望吧 在之前的隨筆中,我安裝了Xshell 和 CentOS系統。今天我們簡單的來在VM上搭建多個伺服器 為後面叢集模式建立基礎。 伺
多臺伺服器安裝配置JDK的shell指令碼
多臺伺服器需要配置ssh免密登入配置,可參考ssh基於祕鑰免密登入 在三臺伺服器中分別建立如下資料夾 mkdir -p /export/softwares mkdir -p /export/services 將JDK壓縮包上傳至/export/softwares目錄下
Ubuntu上多臺伺服器相互掛載資料夾
工具安裝 $ sudo apt-get install ssfts 掛載目錄 [email protected]:~$ sshfs -o gid=1012,uid=1012 [email protected]:/home/JohnRain/mycode /home/JohnRain/