4.15
1趴腋、什么是rsync?
rsync荐糜,Rsync英文全稱為Remote synchronization 縮寫rsync
是開源鳖链、高速的、可實現(xiàn)本地以及遠(yuǎn)程官扣,全量以及增量的數(shù)據(jù)復(fù)制(拷貝)工具翅敌。
官方鏈接資料:http://www.samba.org/ftp/rsync/rsync.html
2、全量和增量區(qū)別
全量復(fù)制:
[root@nfs01 ~]# cp -a /etc/ /opt/
[root@nfs01 ~]# \cp -a /etc/ /opt
[root@nfs01 ~]# touch /etc/oldboy.txt
[root@nfs01 ~]# \cp -a /etc/ /opt/
增量復(fù)制:
只復(fù)制oldboy.txt
3惕蹄、rsync的作用
工作中需要定時/實時數(shù)據(jù)備份蚯涮。本地服務(wù)器目錄、不同機(jī)器卖陵、
不同機(jī)房之間的數(shù)據(jù)備份遭顶。都可以用rsync完成。
4赶促、rsync功能特性
支持拷貝普通文件與特殊文件液肌,如鏈接文件,設(shè)備文件等鸥滨。
支持排除指定文件或目錄同步的功能嗦哆,相當(dāng)于打包命令tar的排除功能。
可以做到保持原文件或目錄的權(quán)限婿滓、時間老速、軟硬鏈接、屬主凸主、組等所有屬性均不改變橘券。
可實現(xiàn)增量復(fù)制,既只復(fù)制發(fā)生變化的數(shù)據(jù)卿吐,因此數(shù)據(jù)傳輸效率很高旁舰。
可以使用rcp,rsh,ssh等方式來配合進(jìn)行隧道加密傳輸文件(rsync本身不對數(shù)據(jù)加密)。
可以通過socket(進(jìn)程方式)傳輸文件和數(shù)據(jù)(服務(wù)端和客戶端)*嗡官。
支持匿名或認(rèn)證(無需系統(tǒng)用戶)進(jìn)程模式傳輸箭窜,安全的進(jìn)行數(shù)據(jù)備份及鏡像
5、增量復(fù)制原理
使用 quick check算法衍腥,只對增量的部分復(fù)制磺樱,根據(jù)大小屬性的變化進(jìn)行復(fù)制。
2.x比對差異后復(fù)制婆咸,3.x一邊比對一邊復(fù)制竹捉。
https://coolshell.cn/articles/7425.html
6、rsync三種工作模式介紹
1)本地(local)
rsync就是一個命令
rsync [OPTION...] SRC... [DEST]
rsync命令 參數(shù)選項 [源目錄或文件] 目的目錄或文件
命令操作:
rsync命令
a.把數(shù)據(jù)從一個地方復(fù)制到另一個地方(僅在一臺機(jī)器增量),相當(dāng)于cp尚骄。
b.通過加參數(shù)實現(xiàn)刪除文件和清空文件內(nèi)容的功能块差,相當(dāng)于rm命令。
c.查看屬性信息功能,相當(dāng)于ls憾儒。
實踐:
a.拷貝實踐
[root@backup ~]# ls /opt
[root@backup ~]# rsync /etc/hosts /opt
[root@backup ~]# ls /opt
hosts
[root@backup ~]# \cp /etc/hosts /opt
保持屬性:
[root@backup ~]# rsync -zrtopg /etc/hosts /opt/
[root@backup ~]# ls -lhi /etc/hosts /opt/hosts
16829878 -rw-r--r--. 1 root root 332 4月 12 11:24 /etc/hosts
71373 -rw-r--r-- 1 root root 332 4月 12 11:24 /opt/hosts
b.刪除實踐
刪除文件內(nèi)容:
[root@backup ~]# touch /null.txt #空文件
[root@backup ~]# cat /opt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db01.etiantian.org
172.16.1.61 m01
[root@backup ~]# rsync --delete /null.txt /opt/hosts #讓前面null.txt和后面hosts一樣
rsync: --delete does not work without --recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]
[root@backup ~]# rsync -r --delete /null.txt /opt/hosts
[root@backup ~]# cat /opt/hosts
刪除目錄下所有文件:
[root@backup ~]# mkdir /null
[root@backup ~]# rsync -r --delete /null/ /opt/ #讓后面opt和前面null目錄內(nèi)容保持一致
[root@backup ~]# ls /opt/
c.查看屬性
[root@backup ~]# rsync /etc/hosts
-rw-r--r-- 332 2019/04/12 11:24:41 hosts
2)遠(yuǎn)程Shell模式
借助類似ssh隧道傳輸數(shù)據(jù)询兴,適合不同的機(jī)器之間復(fù)制乃沙。
異地拷貝起趾,相當(dāng)于scp,區(qū)別scp是遠(yuǎn)程全量拷貝)
拉門 推門 思考:
pull,拉:從遠(yuǎn)端拉取到本地警儒。
語法:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
rsync命令 參數(shù)選項 [認(rèn)證用戶]@[主機(jī)地址]:[源路徑] 本地路徑
語法:
push,推:從本地推到遠(yuǎn)端训裆。
rsync [OPTION...] SRC... [USER@]HOST:[DEST]
rsync命令 參數(shù)選項 本地路徑 [認(rèn)證用戶]@[主機(jī)地址]:[目標(biāo)路徑]
push實踐:
[root@nfs01 ~]# rsync -avz /etc/hosts root@172.16.1.41:/opt/ #加密傳輸。
The authenticity of host '172.16.1.41 (172.16.1.41)' can't be established.
ECDSA key fingerprint is SHA256:qZSBkrmOv7xO/63qOU1uLXkPyNVHdkqvrNAcAmXqNEk.
ECDSA key fingerprint is MD5:23:d0:cb:a9:f4:7c:0b:eb:2d:07:00:e1:a3:12:d8:33.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.41' (ECDSA) to the list of known hosts.
root@172.16.1.41's password:
sending incremental file list
hosts
sent 219 bytes received 35 bytes 14.51 bytes/sec
total size is 332 speedup is 1.31
檢查:
[root@backup ~]# cd /opt/
[root@backup /opt]# ls
hosts
rsync -avz /etc/hosts root@172.16.1.41:/opt/
rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
上述命令是等價的蜀铲。-e 指定通道 ssh ssh服務(wù)連接客戶端 -p 22指定22端口边琉。
[root@nfs01 ~]# rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list
sent 44 bytes received 12 bytes 22.40 bytes/sec
total size is 332 speedup is 5.93
拉的命令:
rsync -avz root@172.16.1.41:/opt/hosts /opt
rsync -avz -e "ssh -p 22" root@172.16.1.41:/opt/hosts /opt
推拉:
a.參照物,執(zhí)行命令的機(jī)器
b.root@172.16.1.41 使用的用戶和主機(jī)记劝,就用主機(jī)和用戶的密碼变姨。
強(qiáng)調(diào)一個重點:適合rsync
null和null/ 區(qū)別,null是目錄和目錄下的內(nèi)容厌丑,
null/只是目錄下的內(nèi)容定欧,不含本身。
3)rsync守護(hù)進(jìn)程模式
首先要搭建rsync服務(wù)端(要有守護(hù)進(jìn)程)怒竿,然后才能在客戶端實現(xiàn)推拉數(shù)據(jù)砍鸠。
企業(yè)運維的重要模式,重點講耕驰。
客戶端語法暫時不講爷辱。
rsync服務(wù)模式:*****開啟后臺進(jìn)程,接受別人訪問朦肘。
7饭弓、rsync命令參數(shù)
rsync命令參數(shù):
-v, --verbose 顯示輸出過程
-z, --compress 壓縮
-a, --archive 多參數(shù)集合(-rtopgDl)
-r, --recursive 遞歸
-t, --times 保持修改時間屬性
-o, --owner 保持屬主不變
-p, --perms 保持權(quán)限不變
-g, --group 保持用戶組不變
-l, --links 保持拷貝軟連接
-q, --quiet 安靜的拷貝
--bwlimit=KBPS 限制I/O帶寬,KBytes per second媒抠。
--delete 刪除
--exclude 排除
--exclude-from 從文件中排除
企業(yè)常用參數(shù)組合:-avz或者-vzrtopg
8弟断、rsync守護(hù)進(jìn)程模式應(yīng)用實踐
(1)以下操作都是在backup服務(wù)器
1)安裝
[root@backup ~]# rsync --version
rsync version 3.1.2 protocol version 31
[root@backup ~]# yum install rsync(不需要)
2)配置配置文件/etc/rsyncd.conf
備份
cp /etc/rsyncd.conf{,.ori}
cat>/etc/rsyncd.conf<<EOF
#rsync_config_______________start
#created by oldboy
#site: http://www.oldboyedu.com
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup!
path = /backup/
EOF
man rsync 查命令的參數(shù)
man rsyncd.conf 查配置參數(shù)
https://www.samba.org/ftp/rsync/rsync.html
創(chuàng)建用戶和備份目錄
[root@backup ~]# useradd rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) 組=1001(rsync)
[root@backup ~]# mkdir -p /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/
3)啟動和檢查
rsync --daemon(c6及以前)
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
[root@backup ~]# ps -ef|grep sync|grep -v grep #檢查進(jìn)程
root 7521 1 0 11:39 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
[root@backup ~]# netstat -lntup|grep 873 #檢查端口
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7521/rsync
tcp6 0 0 :::873 :::* LISTEN 7521/rsync
[root@backup ~]# lsof -i :873 #檢查端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7521 root 3u IPv4 41439 0t0 TCP *:rsync (LISTEN)
rsync 7521 root 5u IPv6 41440 0t0 TCP *:rsync (LISTEN)
面試題:如何查看某端口對應(yīng)什么服務(wù)?答案就是上面兩個领舰。
4)配置密碼文件
[root@backup ~]# echo "rsync_backup:oldboy" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:oldboy
[root@backup ~]# ls -l /etc/rsync.password
-rw------- 1 root root 20 4月 15 11:51 /etc/rsync.password
rsync服務(wù)端配置完成夫嗓。
(2)以下操作都是在客戶端服務(wù)器
以下方法2選1
方法1:認(rèn)證密碼文件
[root@nfs01 ~]# echo "oldboy" > /etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# cat /etc/rsync.password
oldboy
[root@nfs01 ~]# ls -l /etc/rsync.password
-rw------- 1 root root 7 4月 15 11:55 /etc/rsync.password
方法2:
[root@nfs01 ~]# echo ' export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
[root@nfs01 ~]# tail -1 /etc/bashrc
export RSYNC_PASSWORD=oldboy
[root@nfs01 ~]# . /etc/bashrc
[root@nfs01 ~]# echo $RSYNC_PASSWORD
oldboy
rsync客戶端 nfs01 配置完成
(3)守護(hù)進(jìn)程模式,客戶端rsync的命令語法:
配置服務(wù)器端守護(hù)進(jìn)程冲秽,實現(xiàn)數(shù)據(jù)傳輸:
1舍咖、服務(wù)器端守護(hù)進(jìn)程。2锉桑、客戶端執(zhí)行命令排霉。
拉門、推門 思考:
pull,拉:從遠(yuǎn)端拉取到本地民轴。
語法1(常用):
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync命令 參數(shù)選項 [虛擬用戶]@[主機(jī)地址]::[模塊名] 本地路徑
語法2:
rsync [OPTION...] rsync://[USER@]HOST::SRC... [DEST]
rsync命令 參數(shù)選項 rsync://[虛擬用戶]@[主機(jī)地址]/[模塊名] 本地路徑
push,推:從本地推到遠(yuǎn)端攻柠。
語法1(常用):
rsync [OPTION...] [DEST] [USER@]HOST::SRC...
rsync命令 參數(shù)選項 本地路徑 [虛擬用戶]@[主機(jī)地址]::[模塊名]
語法2:
rsync [OPTION...] [DEST] rsync://[USER@]HOST::SRC...
rsync命令 參數(shù)選項 本地路徑 rsync://[虛擬用戶]@[主機(jī)地址]/[模塊名]
(4)測試成果
錯誤1:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
解答:
[root@backup ~]# useradd rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) 組=1001(rsync)
[root@backup ~]# mkdir -p /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/
錯誤2:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
rsync: chgrp ".hosts.YDuTjO" (in backup) failed: Operation not permitted (1)
sent 223 bytes received 124 bytes 694.00 bytes/sec
total size is 332 speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
解答:增加如下參數(shù)到/etc/rsyncd.conf
fake super = yes #不用root用戶也可以存儲文件的完整屬性球订。
This allows the full attributes of a file to be stored without having to have the daemon actually running as root.
[root@backup ~]# grep fake /etc/rsyncd.conf
fake super = yes
改完配置,要重啟服務(wù):
[root@backup ~]# systemctl restart rsyncd
在測試:成功
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 89 bytes received 49 bytes 276.00 bytes/sec
total size is 332 speedup is 2.41
rsync -avz /etc rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
服務(wù)端檢查:
[root@backup ~]# ls /backup/
hosts
[root@backup ~]# ls /backup/
etc hosts
如果客戶端按照環(huán)境變量的方式配置瑰钮,則可以忽略--password-file=/etc/rsync.password參數(shù)冒滩。
[root@nfs01 ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
sent 52,071 bytes received 644 bytes 105,430.00 bytes/sec
total size is 31,244,350 speedup is 592.70
測試增量
[root@nfs01 ~]# touch /etc/oldboy.txt
[root@nfs01 ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
etc/oldboy.txt
sent 52,098 bytes received 655 bytes 105,506.00 bytes/sec
total size is 31,244,350 speedup is 592.28
(OVER)歐耶!
企業(yè)用法:
rsync -avz oldboy.log /opt
刪除功能(rm)
--delete 刪除
[root@backup ~]# mkdir /null
[root@backup ~]# rsync --delete /null/ /opt/
--exclude 排除
--exclude-from 從文件排除
rsync -avz --exclude=a * /opt/
rsync -avz --exclude={a,c,e,m} ~/ /opt/
rsync 參數(shù) 源 目標(biāo)
從文件排除:
rsync --delete -avz --exclude-from=paichu.log ~/ /opt/
3浪谴、(異地拷貝)還可以從一臺機(jī)器把數(shù)據(jù)復(fù)制到另一臺機(jī)器
rsync增量:
rsync -avz /opt -e 'ssh -p 52113' oldboy@172.16.1.31:~
命令 參數(shù) 源 通過ssh隧道傳輸 用戶 IP 機(jī)器里的目錄开睡。
scp全量拷貝:
scp -rp -P 52113 /opt oldboy@172.16.1.31:/tmp 全量:
secure copy
區(qū)別:
/opt 目錄本身及目錄下內(nèi)容
/opt/ 目錄下內(nèi)容
-v, --verbose 詳細(xì)模式輸出。
-q, --quiet 精簡輸出模式苟耻。
-c, --checksum 打開校驗開關(guān)篇恒,強(qiáng)制對文件傳輸進(jìn)行校驗。
-a, --archive 歸檔模式凶杖,表示以遞歸方式傳輸文件胁艰,并保持所有文件屬性,等于-rlptgoD智蝠。
-r, --recursive 對子目錄以遞歸模式處理腾么。
-R, --relative 使用相對路徑信息。
-b, --backup 創(chuàng)建備份寻咒,也就是對于目的已經(jīng)存在有同樣的文件名時哮翘,將老的文件重新命名為~filename∶兀可以使用--suffix選項來指定不同的備份文件前綴饭寺。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴叫挟。
-u, --update 僅僅進(jìn)行更新艰匙,也就是跳過所有已經(jīng)存在于DST,并且文件時間晚于要備份的文件抹恳,不覆蓋更新的文件员凝。
-l, --links 保留軟鏈結(jié)。
-L, --copy-links 想對待常規(guī)文件一樣處理軟鏈結(jié)奋献。
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結(jié)健霹。
--safe-links 忽略指向SRC路徑目錄樹以外的鏈結(jié)。
-H, --hard-links 保留硬鏈結(jié)瓶蚂。
-p, --perms 保持文件權(quán)限糖埋。
-o, --owner 保持文件屬主信息。
-g, --group 保持文件屬組信息窃这。
-D, --devices 保持設(shè)備文件信息瞳别。
-t, --times 保持文件時間信息。
-S, --sparse 對稀疏文件進(jìn)行特殊處理以節(jié)省DST的空間。
-n, --dry-run現(xiàn)實哪些文件將被傳輸祟敛。
-w, --whole-file 拷貝文件疤坝,不進(jìn)行增量檢測。
-x, --one-file-system 不要跨越文件系統(tǒng)邊界馆铁。
-B, --block-size=SIZE 檢驗算法使用的塊尺寸跑揉,默認(rèn)是700字節(jié)。
-e, --rsh=command 指定使用rsh叼架、ssh方式進(jìn)行數(shù)據(jù)同步畔裕。
--rsync-path=PATH 指定遠(yuǎn)程服務(wù)器上的rsync命令所在路徑信息。
-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件乖订,用來排除那些不希望傳輸?shù)奈募?br>
--existing 僅僅更新那些已經(jīng)存在于DST的文件,而不備份那些新創(chuàng)建的文件具练。
--delete 刪除那些DST中SRC沒有的文件乍构。
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件。
--delete-after 傳輸結(jié)束以后再刪除扛点。
--ignore-errors 及時出現(xiàn)IO錯誤也進(jìn)行刪除哥遮。
--max-delete=NUM 最多刪除NUM個文件。
--partial 保留那些因故沒有完全傳輸?shù)奈募昃浚允羌涌祀S后的再次傳輸眠饮。
--force 強(qiáng)制刪除目錄,即使不為空铜邮。
--numeric-ids 不將數(shù)字的用戶和組id匹配為用戶名和組名仪召。
--timeout=time ip超時時間,單位為秒松蒜。
-I, --ignore-times 不跳過那些有同樣的時間和長度的文件扔茅。
--size-only 當(dāng)決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間秸苗。
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口召娜,默認(rèn)為0。
-T --temp-dir=DIR 在DIR中創(chuàng)建臨時文件惊楼。
--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份玖瘸。
-P 等同于 --partial。
--progress 顯示備份過程檀咙。
-z, --compress 對備份的文件在傳輸時進(jìn)行壓縮處理雅倒。
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J健?br>
--include=PATTERN 指定不排除而需要傳輸?shù)奈募J健?br>
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件攀芯。
--version 打印版本信息屯断。
--address 綁定到特定的地址。
--config=FILE 指定其他的配置文件,不使用默認(rèn)的rsyncd.conf文件殖演。
--port=PORT 指定其他的rsync服務(wù)端口氧秘。
--blocking-io 對遠(yuǎn)程shell使用阻塞IO。
-stats 給出某些文件的傳輸狀態(tài)趴久。
--progress 在傳輸時現(xiàn)實傳輸過程丸相。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 從FILE中得到密碼彼棍。
--bwlimit=KBPS 限制I/O帶寬灭忠,KBytes per second。
rsync服務(wù)模式(daemon)
服務(wù)端:提供服務(wù)的一端座硕。
業(yè)務(wù)需求:搭建一個備份服務(wù)器
1)備份的地點 /backup
mkdir /backup -p
2)創(chuàng)建一個用戶
[root@backup ~ 08:49:49]# useradd -s /sbin/nologin rsync
[root@backup ~ 08:50:39]# id rsync
uid=501(rsync) gid=501(rsync) groups=501(rsync)
3)授權(quán)rsync管理backup目錄
chown -R rsync.rsync /backup
部署服務(wù):
1弛作、檢查rsync是否安裝
[root@backup ~ 08:47:31]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
如果沒有安裝就yum install rsync -y
查看版本:rsync --version
2、配置文件說明(/etc/rsyncd.conf)
man rsyncd.conf
###backup 2018-4-27
uid = rsync #訪問/backup的用戶
gid = rsync #訪問/backup的用戶組
use chroot = no #和安全相關(guān)的設(shè)置华匾,不用映琳。
max connections = 200 #并發(fā)連接數(shù)
timeout = 300 #超時時間
pid file = /var/run/rsyncd.pid #進(jìn)程號所在的文件
lock file = /var/run/rsync.lock #鎖文件
log file = /var/log/rsyncd.log #日志文件 服務(wù)運行不正常 第一時間看日志。
ignore errors #忽略錯誤
read only = false #可讀寫
list = false #不能ls(列表)
hosts allow =172.16.1.0/24 #內(nèi)網(wǎng)網(wǎng)段蜘拉。
hosts deny = 0.0.0.0/32 #什么網(wǎng)段不讓連萨西。
auth users = rsync_backup #認(rèn)證虛擬用戶(客戶端連接使用的用戶)。
secrets file = /etc/rsync.password ##認(rèn)證虛擬用戶密碼文件旭旭。
[backup] #模塊標(biāo)簽
comment = "backup dir by oldboy"#注釋
path = /backup #備份的路徑
3谎脯、開始配置配置文件
vim /etc/rsyncd.conf
#rsync_config_____________________start
#created by oldboy 15:01 2007-6-5
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
#rsync_config_______________________end
檢查:
[root@backup ~ 09:25:41]# cat /etc/rsyncd.conf
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup
[oldboy]
/oldboy
#rsync_config_______________________end
4、啟動rsync服務(wù)
rsync --daemon #后臺啟動
[root@backup ~ 09:25:54]# rsync --daemon
檢查:
[root@backup ~ 09:26:48]# netstat -lntup|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 22933/rsync
tcp 0 0 :::873 :::* LISTEN 22933/rsync
[root@backup ~ 09:29:50]# ps -ef|grep rsync|grep -v grep
root 22933 1 0 09:26 ? 00:00:00 rsync --daemon
5持寄、創(chuàng)建密碼文件并設(shè)置權(quán)限
格式:用戶:密碼
rsync_backup:oldboy123
[root@backup ~ 09:32:19]# echo "rsync_backup:oldboy123" >/etc/rsync.password
[root@backup ~ 09:33:30]# cat /etc/rsync.password
rsync_backup:oldboy123
設(shè)定權(quán)限:
[root@backup ~ 09:33:34]# chmod 600 /etc/rsync.password
[root@backup ~ 09:34:07]# ls -l /etc/rsync.password
-rw------- 1 root root 23 Apr 28 09:33 /etc/rsync.password
服務(wù)器端配置完畢源梭。
配置rsync客戶端
1)配置密碼文件并授權(quán)。
echo "oldboy123" >/etc/rsync.password
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
2)備份文件
rsync -avz /tmp rsync_backup@172.16.1.41::backup
--password-file=FILE 從FILE中得到密碼际看。
rsync -avz /tmp rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
[root@nfs01 ~ 09:39:39]# rsync -avz /tmp rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
tmp/
tmp/yum.log
tmp/.ICE-unix/
tmp/scripts/
tmp/scripts/back_vimrc
tmp/scripts/installMachines.sh
sent 3686 bytes received 77 bytes 2508.67 bytes/sec
total size is 7363 speedup is 1.96
4.16
實踐排除復(fù)制:
NFS01:
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# cd /data
[root@nfs01 /data]# touch {a..d}
[root@nfs01 /data]# ls
a b c d
--exclude 排除參數(shù)
例:排除 a b
[root@nfs01 /data]# rsync -avz /data/ --exclude=a --exclude=b rsync_backup@172.16.1.41::backup
sending incremental file list
./
c
d
排除1到4
[root@nfs01 /data]# touch {1..5}
[root@nfs01 /data]# rsync -avz /data/ --exclude={1..4} rsync_backup@172.16.1.41::backup
sending incremental file list
./
5
a
b
[root@nfs01 /data]# rsync -avz /data/ --exclude={1,3,a} rsync_backup@172.16.1.41::backup
sending incremental file list
2
4
--exclude-from 從文件排除
[root@nfs01 /data]# rsync -avz /data/ --exclude-from=./paichu.txt rsync_backup@172.16.1.41::backup
sending incremental file list
./
16
17
18
19
20
paichu.txt
實踐刪除:
rsync作為鏡像咸产,相當(dāng)于raid1,讓兩臺服務(wù)器目錄保持一致仲闽。
--delete 讓兩臺服務(wù)器目錄保持一致
推送:
rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup
本地目錄有啥脑溢,遠(yuǎn)端就有啥。
注意:遠(yuǎn)端目錄是不是東西更多赖欣,多了東西會被刪除屑彻。提前備份backup對應(yīng)的目錄。
rsync -avz --delete rsync_backup@172.16.1.41::backup /data/
遠(yuǎn)端有啥顶吮。本地目錄就有啥社牲,注意本地/data目錄。把/data改成根悴了。提前注意備份本地/data
--partial 支持大文件斷點續(xù)傳
--bwlimit=KBPS 限速搏恤。
企業(yè)案例:
某上市公司违寿,白天高峰期某DBA人員從數(shù)據(jù)庫服務(wù)器通過rsync將上百GB數(shù)據(jù)復(fù)制到備份服務(wù)器,導(dǎo)致數(shù)據(jù)庫庫服務(wù)器帶寬占滿熟空,造成用戶無法訪問網(wǎng)站的悲劇藤巢。其實可以利用rsync限速功能,將復(fù)制速度限制在剩余帶寬的1/3或者1/2息罗,可能就不會出現(xiàn)故障了
1)最簡單的實現(xiàn)掂咒,可以在配置文件結(jié)尾加如下內(nèi)容(特殊底紋部分):
[root@backup ~]# cat /etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy
#site: http://www.oldboyedu.com
uid = rsync
gid = rsync
use chroot = no
fake super = yes
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup.
path = /backup/
[data] #<==新模塊。
path = /data/ #<==新備份目錄迈喉。
#除了增加以上兩行外绍刮,讀者也可以設(shè)定更多的獨立配置參數(shù),例如:獨立虛擬用戶挨摸,獨立密碼文件等孩革。
2)建立目錄并授權(quán)。
[root@backup ~]# mkdir -p /data
[root@backup ~]# chown -R rsync.rsync /data
[root@backup ~]# ls -ld /data
drwxr-xr-x 2 rsync rsync 6 4月 16 10:04 /data
3)重啟rsync服務(wù)(只要修改配置油坝,就考慮重載服務(wù))
[root@backup ~]# systemctl restart rsyncd
4)從客戶端訪問測試
[root@backup ~]# ls /data
etc
1嫉戚、內(nèi)部人員產(chǎn)生的數(shù)據(jù)(定時備份足矣):
程序員開發(fā)代碼(他電腦上)==>代碼服務(wù)上(git/svn代碼版本管理)==>測試環(huán)境測試===>正式環(huán)境
原則上程序代碼可以不備份。
運維人員澈圈,寫個定時任務(wù),寫個備份腳本帆啃,更改或增加服務(wù)配置rsyncd.conf瞬女,需要備份
運維人員修改配置(測試服務(wù)器)==>代碼服務(wù)器上(git/svn代碼版本管理)==>測試環(huán)境測試===>正式環(huán)境
原則上運維人員的變更可以不備份。
2努潘、用戶產(chǎn)生的數(shù)據(jù)(必須實時備份)
圖片诽偷、視頻等文件是放在存儲服務(wù)器上的,任意時刻都可能傳上來疯坤,必須實時備份报慕。
文本(博客文章),放在數(shù)據(jù)庫里压怠,眠冈,任意時刻都可能發(fā)布,必須實時備份菌瘫。
第一個里程碑:
41搭建好rsync服務(wù)蜗顽,并在31、7上測試成功雨让。
第二個里程碑 開發(fā)腳本打包備份
/backup 備份目錄
/var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs 需要備份的內(nèi)容
模擬創(chuàng)建:
[root@nfs01 ~]# mkdir -p /server/scripts
[root@web01 ~]# mkdir -p /server/scripts /var/html/www /app/logs
web01:
[root@web01 ~]# mkdir -p /backup
[root@web01 ~]# ls -ld /backup/
drwxr-xr-x 2 root root 6 4月 16 11:36 /backup/
[root@web01 /]# tar zcvhf /backup/bak_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs
tar: 從成員名中刪除開頭的“/”
/var/spool/cron/root
/etc/rc.local
/server/scripts/
/var/html/www/
/app/logs/
[root@web01 /]# ls /backup/
bak_2019-04-16_2.tar.gz
寫腳本:
[root@web01 /]# mkdir /server/scripts/ -p
[root@web01 /]# cd /server/scripts/
[root@web01 /server/scripts]# cat /server/scripts/bak.sh
[root@web01 /server/scripts]# cat bak.sh
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=oldboy
IP=IP
#1.打包
tar zchf /backup/(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs &>/dev/null &&
#2.刪除
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&
#3.推送
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null
[root@web01 /server/scripts]# /bin/sh /server/scripts/bak.sh
[root@web01 /server/scripts]# ls /backup/
bak_2019-04-16_2.tar.gz
定時任務(wù):
[root@web01 /server/scripts]# crontab -e
[root@web01 /server/scripts]# crontab -l|tail -2
######back.....
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
[root@web01 /server/scripts]# find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
確保備份完整雇盖。
做flag和采集指紋
[root@nfs01 /server/scripts]# #采集人的指紋
[root@nfs01 /server/scripts]# md5sum oldboy.txt >zhiwen.log
[root@nfs01 /server/scripts]# cat zhiwen.log
348bd3ce10ec00ecc29d31ec97cd5839 oldboy.txt
[root@nfs01 /server/scripts]# #校驗
[root@nfs01 /server/scripts]# md5sum -c zhiwen.log
oldboy.txt: 確定
[root@web01 /server/scripts]# cat bak.sh
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=oldboy
IP=IP
#1.打包
tar zchf /backup/{IP}IP/bak(date +%F_%w).flag &&
#采集指紋
find /backup/ -type f -name ".tar.gz"|xargs md5sum >/backup/{IP}$(date +%F%w).flag &&
#2.刪除
find /backup/ -type f -name ".tar.gz" -mtime +7|xargs rm -f &&
#3.推送
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null
bak_172.16.1.7_2019-04-16_2.tar.gz
bak_172.16.1.7_2019-04-17_3.tar.gz
bak_172.16.1.7_2019-04-18_4.tar.gz
bak_172.16.1.7_2019-04-16_2.tar.gz
4.17
1、什么是NFS栖忠?
全稱 network file system 網(wǎng)絡(luò)文件系統(tǒng)
通過網(wǎng)絡(luò)存儲和組織文件的一種方法或機(jī)制崔挖。
什么是文件系統(tǒng)贸街?
2、為什么要用共享存儲狸相?
前端所有的應(yīng)用服務(wù)器接收到用戶上傳的圖片薛匪、文件、視頻卷哩,都會統(tǒng)一
的放到后端的存儲上蛋辈。
為什么要共享?所有節(jié)點服務(wù)器都需要將內(nèi)容存到存儲上将谊,取的統(tǒng)一來取冷溶。
3、共享存儲的種類
單點存儲系統(tǒng)就是NFS尊浓,中小型企業(yè)逞频,阿里云服務(wù)的NAS服務(wù),OSS對象存儲栋齿。
NFS性能不太高苗胀。
大型企業(yè)會用分布式存儲FastDFS、Ceph瓦堵、GlsterFS基协、Mfs
大型存儲廠商:EMC、Netapp 幾十萬菇用。
藝龍旅行網(wǎng) 存儲用的EMC 傳統(tǒng)企業(yè)澜驮。
硬件存儲:傳統(tǒng)企業(yè):穩(wěn)定、2臺 雙主機(jī)頭 幾十塊硬盤 RAID10惋鸥。
BAT 曾經(jīng)用硬件杂穷,超貴、
阿里云 去IOE Ibm Orace EMC
4卦绣、NFS工作原理
NFS網(wǎng)絡(luò)文件系統(tǒng)
啟動NFS服務(wù)绞佩,而且還有啟動很多端口嘴拢。
NFS功能弟跑,需要很多服務(wù)添寺。每個服務(wù)都有端口,而且經(jīng)常變化蜗搔。
如何讓客戶端找到這些端口呢劲藐?就需要一個經(jīng)紀(jì)人(rpc服務(wù))
NFS服務(wù):
1、NFS服務(wù)(有很多進(jìn)程和端口)樟凄,把自己的端口告訴RPC聘芜。
2、RPC服務(wù)(對外固定端口111)
客戶端請求NFS服務(wù)缝龄,先找RPC 111汰现,查到NFS的端口挂谍,發(fā)給客戶。
原理見圖:
5瞎饲、安裝
服務(wù)器端和客戶端都要安裝:
yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.61.el7.x86_64
rpcbind-0.2.0-47.el7.x86_64
啟動RPC
[root@nfs01 ~]# systemctl start rpcbind.service
[root@nfs01 ~]# systemctl enable rpcbind.service
看看有沒有注冊的端口
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
啟動NFS
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# systemctl enable nfs
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 44521 status
100024 1 tcp 59204 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 55758 nlockmgr
100021 3 udp 55758 nlockmgr
100021 4 udp 55758 nlockmgr
100021 1 tcp 30472 nlockmgr
100021 3 tcp 30472 nlockmgr
100021 4 tcp 30472 nlockmgr
[root@nfs01 ~]# netstat -lntup|egrep "rpc|nfs"
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 9516/rpc.mountd
tcp 0 0 0.0.0.0:59204 0.0.0.0:* LISTEN 9463/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 9516/rpc.mountd
tcp6 0 0 :::14450 :::* LISTEN 9463/rpc.statd
udp 0 0 0.0.0.0:44521 0.0.0.0:* 9463/rpc.statd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 9516/rpc.mountd
udp 0 0 0.0.0.0:695 0.0.0.0:* 9424/rpcbind
udp 0 0 127.0.0.1:735 0.0.0.0:* 9463/rpc.statd
udp6 0 0 :::20048 :::* 9516/rpc.mountd
udp6 0 0 :::695 :::* 9424/rpcbind
udp6 0 0 :::4835 :::* 9463/rpc.statd
6口叙、配置nfs
NFS配置文件 /etc/exports
[root@nfs01 ~]# man exports
EXAMPLE
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub (ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)
待共享的目錄 訪問的主機(jī)(權(quán)限)
1)待共享的目錄 存東西的目錄 取東西的目錄例如:/data
2)訪問的主機(jī),
172.16.1.7(web01) 單個主機(jī)
172.16.1.0/24 網(wǎng)段
172.16.1. 網(wǎng)段
master 主機(jī)名
3)()權(quán)限
rw 可讀寫 read write
ro 只讀 read only
sync 寫到磁盤才算完成嗅战,安全 慢
async 異步寫到遠(yuǎn)程緩沖區(qū)妄田,快 不安全
一會再說。驮捍。疟呐。。
實踐:
[root@nfs01 ~]# tail -1 /etc/exports
/data 172.16.1.0/24(rw,sync)
[root@nfs01 ~]# mkdir -p /data
[root@nfs01 ~]# ls -ld /data
drwxr-xr-x 2 root root 51 4月 16 10:24 /data
NFS默認(rèn)用戶nfsnobody
[root@nfs01 ~]# grep nfsno /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 ~]# ls -ld /data
drwxr-xr-x 2 nfsnobody nfsnobody 51 4月 16 10:24 /data
重啟NFS
[root@nfs01 ~]# systemctl reload nfs #《==生產(chǎn)場景必須要實現(xiàn)平滑重啟东且。
[root@nfs01 ~]# exportfs -r
上述二者等價启具,選一個即可。
[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24 #《==看到共享的目錄了
服務(wù)單本地掛載:
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@nfs01 ~]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點
/dev/sda3 19G 1.8G 18G 10% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 253M 136M 118M 54% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 19G 1.8G 18G 10% /mnt
[root@nfs01 ~]# touch /mnt/oldboy.txt
[root@nfs01 ~]# ls /mnt/
oldboy.txt
換到web01掛載
1)安裝
yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
2)啟動
[root@web01 ~]# systemctl start rpcbind
[root@web01 ~]# systemctl enable rpcbind
[root@web01 ~]# netstat -lntup|grep rpc
udp 0 0 0.0.0.0:775 0.0.0.0:* 11624/rpcbind
udp6 0 0 :::775 :::* 11624/rpcbind
[root@web01 ~]# netstat -lntup|grep rpcbind
udp 0 0 0.0.0.0:775 0.0.0.0:* 11624/rpcbind
udp6 0 0 :::775 :::* 11624/rpcbind
[root@web01 ~]# ps -ef|grep rpcbind
rpc 11624 1 0 12:17 ? 00:00:00 /sbin/rpcbind -w
3)查看NFS服務(wù)器提供的共享目錄
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
nt_create: RPC: Program not registered
程序 沒有 注冊
RPC服務(wù)開啟了珊泳,但是NFS沒有告訴RPC服務(wù)端口鲁冯。
4)掛載測試
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點
/dev/sda3 19G 1.8G 18G 10% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 253M 136M 118M 54% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 19G 1.8G 18G 10% /mnt
[root@web01 ~]# touch /mnt/oldgirl.txt
[root@web01 ~]# ls /mnt/
oldboy.txt oldgirl.txt
4.18
為什么fstab無法實現(xiàn)nfs掛載?
回顧:開機(jī)啟動流程:
1色查、磁盤先啟動/etc/fstab
2薯演、防火墻在前。
3秧了、網(wǎng)卡
NFS網(wǎng)絡(luò)文件系統(tǒng)涣仿,通過網(wǎng)絡(luò)掛載,網(wǎng)絡(luò)沒起如何掛載示惊?
又想在fstab里實現(xiàn)掛載、就用一個服務(wù)愉镰,延遲啟動米罚。
延遲滿足:小孩給棉花糖的故事,學(xué)會延遲滿足是成就自己的優(yōu)秀思維丈探。
[root@nfs01 /data1]# systemctl start remote-fs.target
[root@nfs01 /data1]# systemctl enable remote-fs.target
Created symlink from /etc/systemd/system/multi-user.target.wants/remote-fs.target to /usr/lib/systemd/system/remote-fs.target.
[root@nfs01 /data1]# systemctl status remote-fs.target
● remote-fs.target - Remote File Systems
Loaded: loaded (/usr/lib/systemd/system/remote-fs.target; enabled; vendor preset: enabled)
Active: active since 四 2019-04-18 10:17:57 CST; 18s ago
Docs: man:systemd.special(7)
4月 18 10:17:57 nfs01 systemd[1]: Reached target Remote File Systems.
C6:netfs服務(wù)
C7:remote-fs.target
3)()權(quán)限
rw 可讀寫 read write
ro 只讀 read only
sync 寫到磁盤才算完成录择,安全 慢
async 異步寫到遠(yuǎn)程緩沖區(qū),快 不安全
一會再說碗降。
all_squash※ 不管客戶端什么用戶隘竭,到服務(wù)端都是nfsnobody
anonuid=匿名用戶的UID
anongid=匿名用戶的GID
[root@nfs01 ~]# cat /etc/exports
#oldboy shared dir at time
#/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro)
/data 172.16.1.0/24(rw,sync)
/data1 10.0.0.0/24(ro)
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data1 10.0.0.0/24(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,ro,secure,root_squash,no_all_squash)
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
更改默認(rèn)NFS默認(rèn)用戶
項目實踐2:
NFS共享的匿名用戶用www,使得客戶端上傳的圖片都是www用戶讼渊,而不是匿名的nfsnobody动看。
web01 backup客戶端實現(xiàn)掛載到nfs
NFS下面共享/backup ,允許web01 backup客戶端(/backup)可讀寫.
web01上傳圖片爪幻,backup上可以刪除web01上傳的圖片菱皆。
NFS下面共享/data1,允許 web01 backup客戶端10網(wǎng)段只讀(data1)
實現(xiàn)開機(jī)自動掛載
1)nfs01服務(wù)端NFS须误、以及所有客戶端:
[root@nfs01 ~]# useradd -u 1111 www
[root@nfs01 ~]# id www
uid=1111(www) gid=1111(www) 組=1111(www)
2)服務(wù)端NFS特殊配置
[root@nfs01 ~]# tail -2 /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(ro)
[root@nfs01 ~]# chown -R www.www /data
[root@nfs01 ~]# ls -ld /data
drwxr-xr-x 2 www www 70 4月 18 10:05 /data
3)服務(wù)端NFS重啟
[root@nfs01 ~]# systemctl reload nfs
4)每個客戶端
mount -t nfs 172.16.1.31:/data /data
[root@web01 ~]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點
172.16.1.31:/data 19G 1.8G 18G 10% /data
[root@web01 /data]# touch new_web01.txt
[root@web01 /data]# ls -l
總用量 0
-rw-r--r-- 1 www www 0 4月 16 10:24 ddddf
-rw-r--r-- 1 www www 0 4月 16 10:23 dddfff
-rw-r--r-- 1 www www 0 4月 18 11:01 new_web01.txt
-rw-r--r-- 1 www www 0 4月 17 11:59 oldboy.txt
-rw-r--r-- 1 www www 0 4月 17 12:30 oldgirl.txt
[root@nfs01 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Mar 4 11:15:16 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=3a3a295f-88f8-456d-94dc-1a3eeb517c02 / xfs defaults 0 0
UUID=fd2e0ca7-32be-425f-86a2-85c02b9ec5ea /boot xfs defaults 0 0
UUID=79a3924b-739e-48dc-ab0c-0444b9ac6591 swap swap defaults,_netdev 0 0
man mount
_netdev
The filesystem resides on a device that requires network access (used to prevent the system from attempting to mount these filesystems until the network has been enabled on the system).
[root@web01 ~]# cat /etc/fstab
# /etc/fstab
# Created by anaconda on Mon Mar 4 11:15:16 2019
UUID=3a3a295f-88f8-456d-94dc-1a3eeb517c02 / xfs defaults 0 0
UUID=fd2e0ca7-32be-425f-86a2-85c02b9ec5ea /boot xfs defaults 0 0
UUID=79a3924b-739e-48dc-ab0c-0444b9ac6591 swap swap defaults 0 0
172.16.1.31:/data /data nfs defaults,soft 0 0
172.16.1.31:/data /data nfs defaults,hard,intr 0
mount -t nfs -o hard,intr,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt
NFS服務(wù)器出問題時候,客戶端重啟依然能夠啟動仇轻,可以用如下列兩個方法:
defaults,soft
defaults,hard,intr
#/etc/fstab
客戶端掛載深入
[root@web01 ~]# cat /proc/mounts
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0
/dev/sda1 /boot xfs rw,relatime,attr2,inode64,noquota 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
10.0.0.31:/data1 /mnt nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.7,local_lock=none,addr=10.0.0.31 0 0
172.16.1.31:/data /data nfs rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.16.1.31,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=172.16.1.31 0 0
rsize=131072,wsize=131072
hard
proto=tcp
tcp安全穩(wěn)定 udp無連接 FTP服務(wù)
Linux正在工作呢京痢,文件系統(tǒng)只讀。
企業(yè)生產(chǎn)案例文件系統(tǒng)只讀故障/fstab故障篷店。
自己找一下:
1祭椰、救援模式修復(fù)。
2疲陕、單用戶方淤,mount -o remount,rw /
2)安全加優(yōu)化的掛載方式如下:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
4.19
實時復(fù)制實踐:
前提:backup rsync服務(wù)端部署好。
1)部署NFS客戶端
[root@nfs01 ~]# echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc
[root@nfs01 ~]# source /etc/bashrc
[root@nfs01 ~]# echo $RSYNC_PASSWORD
oldboy
測試推送
[root@nfs01 ~]# rsync -avz /data rsync_backup@172.16.1.41::backup/
sending incremental file list
sent 164 bytes received 25 bytes 126.00 bytes/sec
total size is 0 speedup is 0.00
2)查看inotify支持情況
[root@nfs01 ~]# uname -r
3.10.0-957.5.1.el7.x86_64
[root@nfs01 ~]# ls -l /proc/sys/fs/inotify/
總用量 0
-rw-r--r-- 1 root root 0 4月 19 09:45 max_queued_events
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_instances
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_watches
3)安裝inotify-tools
yum install epel-release -y
yum install inotify-tools -y
[root@nfs01 ~]# rpm -ql inotify-tools|head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch
[root@nfs01 ~]# rpm -qa inotify-tools
inotify-tools-3.14-8.el7.x86_64
4)命令參數(shù)和事件知識
略
5)測試實踐
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data
6)思考:實現(xiàn)數(shù)據(jù)復(fù)制
監(jiān)控哪些事件鸭轮?
增 改 刪 需要監(jiān)控
[root@nfs01 ~]# inotifywait -mrq --format '%w%f' -e close_write,delete /data
/data/a.txt
/data/a.txt
/data/a.txt
7)編寫腳本
mkdir /server/scripts -p
rsync -az --delete /data/ rsync_backup@172.16.1.41::backup
[root@nfs01 /server/scripts]# /bin/sh /server/scripts/monitor1.sh &
[2] 9199
[root@nfs01 /server/scripts]# tail -2 /etc/rc.local
########################
/bin/sh /server/scripts/monitor1.sh &
sersync實踐:
1)客戶端推送成功
rsync -az /data rsync_backup@172.16.1.41::backup
2)部署sersync服務(wù)(NFS)
wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
sersync_oldboy_64bit_20160928.tar.gz
[root@nfs01 /server/tools]# mkdir /application -p
[root@nfs01 /server/tools]# mv application/sersync /application/
[root@nfs01 /server/tools]# tree /application/
/application/
└── sersync
├── bin
│ └── sersync
├── conf
│ ├── confxml.xml
│ └── confxml.xml.ori
├── logs
│ └── rsync_fail_log.sh
└── readme.txt
4 directories, 5 files
[root@nfs01 /server/tools]# cd /application/sersync/
[root@nfs01 /application/sersync]# ls
bin conf logs readme.txt
[root@nfs01 /application/sersync]# cd conf/
[root@nfs01 /application/sersync/conf]# ls
confxml.xml confxml.xml.ori
3)sersync配置文件:干兩件事:
1)完成監(jiān)控配置:
inotifywait -mrq --format '%w%f' -e createFolder,close_write,delete,moveFrom,moveTo /data
2)完整命令拼接:
rsync -az /data --timeout=100 rsync_backup@172.16.1.41::backup
4)啟動服務(wù)
[root@nfs01 /application/sersync/conf]# ../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
參數(shù)-d:啟用守護(hù)進(jìn)程模式
參數(shù)-r:在監(jiān)控前臣淤,將監(jiān)控目錄與遠(yuǎn)程主機(jī)用rsync命令推送一遍
c參數(shù)-n: 指定開啟守護(hù)線程的數(shù)量,默認(rèn)為10個
參數(shù)-o:指定配置文件窃爷,默認(rèn)使用confxml.xml文件
參數(shù)-m:單獨啟用其他模塊邑蒋,使用 -m refreshCDN 開啟刷新CDN模塊
參數(shù)-m:單獨啟用其他模塊,使用 -m socket 開啟socket模塊
參數(shù)-m:單獨啟用其他模塊按厘,使用 -m http 開啟http模塊
不加-m參數(shù)医吊,則默認(rèn)執(zhí)行同步程序
[root@nfs01 /application/sersync/conf]# /application/sersync/bin/sersync -d -n 10 -o /application/sersync/conf/confxml.xml
最終
/application/sersync/bin/sersync -d
pkill sersync
二進(jìn)制程序,不是yum安裝的逮京,所以不能systemctl start sersync
配置:systemctl start sersync啟動方案
https://blog.51cto.com/oldboy/2155931
[root@nfs01 /data]# tail -1 /etc/rc.local
/application/sersync/bin/sersync -d
配置:systemctl start sersync啟動方案
https://blog.51cto.com/oldboy/2155931
[root@nfs01 /data]# cat /etc/rc.d/init.d/sersync
#!/bin/bash
# chkconfig: 2345 21 81
# description: rsync service start and stop scripts
# Author: oldboy
# Organization: www.oldboyedu.com
start(){
/application/sersync/bin/sersync -d -o /application/sersync/conf/confxml.xml &>/dev/null
}
stop(){
killall sersync 2>/dev/null
}
case ""Usage:$0 {start|stop|restart}"
exit 1
esac
chmod +x /etc/rc.d/init.d/sersync
[root@nfs01 /data]# cat /usr/lib/systemd/system/sersync.service
[Unit]
Description=sersyncd service
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/sersync start
ExecReload=/etc/rc.d/init.d/sersync restart
ExecStop=/etc/rc.d/init.d/sersync stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod +x /usr/lib/systemd/system/sersync.service
[root@nfs01 /data]# systemctl enable sersync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sersync.service to /usr/lib/systemd/system/sersync.service.
[root@nfs01 /data]# systemctl status sersync.service
● sersync.service - sersyncd service
Loaded: loaded (/usr/lib/systemd/system/sersync.service; enabled; vendor preset: disabled)
Active: inactive (dead)
[root@nfs01 /data]# systemctl stop sersync
[root@nfs01 /data]# ps -ef|grep sersync|grep -v grep
[root@nfs01 /data]# systemctl start sersync