web+nfs+rsync+sersync 綜合實驗(實時(shí)同步resync,加多台web節點,nfs - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

web+nfs+rsync+sersync 綜合實驗(實時(shí)同步resync,加多台web節點,nfs

發表時(shí)間:2020-10-19

發布人(rén):融晨科技

浏覽次數:110

搭建架構原理圖以(yǐ)及實時(shí)同步概念

在(zài)這(zhè)裏插入圖片描述

0.概念

1.什麽是(shì)實時(shí)同步

百度雲同步盤 金山雲盤 騰訊文檔

實時(shí)監測目錄的(de)變化, 當出(chū)現 增 删 改 時(shí), 則觸發一個(gè)動作, 這(zhè)個(gè)動作就(jiù)是(shì)推送至遠程服務器

2.爲(wéi / wèi)什麽要(yào / yāo)實時(shí)同步

1.解決NFS單點故障問題
2.遷移 ( 本地(dì / de)環境 --> 雲環境 )
3.實時(shí)同步的(de)原理
4.實時(shí)同步的(de)場景
5.實時(shí)同步工具選擇

rsync+inotify 複雜
sersync 二進制包,解壓即用 ( 國(guó)人(rén)開發 )
lsyncd 将sersync替換爲(wéi / wèi)lsyncd

3.實時(shí)同步案例演示(重點)

角色外網IP(nat)内網IP(lan)安裝工具WEB01eth0:10.0.0.7eth1:172.16.1.7httpd,php,可道(dào)雲NFSeth0:10.0.0.31eth1:172.16.1.31nfs-serverBACKUPeth0:10.0.0.41eth1:172.16.1.41rsync-server

🦄1.準備備份服務器backup

💗rsync服務服務端(backup):💗

①rsync服務配置(安裝和(hé / huò)配置文件修改)

[root@backup ~]# yum install rsync -y
[root@backup ~]# cat /etc/rsyncd.conf 
uid = rsync
gid = rsync 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read>= false 
list = false 
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#############################
[backup]
comment = welcome to oldboyedu backup! 
path = /backup 

[data]
comment = welcome to oldboyedu data!
path = /data 

在(zài)這(zhè)裏插入圖片描述

②創建用戶,準備虛拟連接用戶

1,創建進程虛拟運行的(de)用戶

[root@backup ~]# useradd rsync -M -s /sbin/nologin
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync)=1001(rsync)

2.創建認證用戶以(yǐ)及認證用戶的(de)密碼/etc/rsync.passwd

格式: Username:Password

[root@backup ~]# cat /etc/rsync.passwd 
rsync_backup:1
[root@backup ~]# chmod 600 /etc/rsync.passwd

3.創建接收備份數據目錄,進行授權。

[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# mkdir /data
[root@backup ~]# chown -R rsync.rsync /data/

在(zài)這(zhè)裏插入圖片描述

4.重啓服務,檢查服務

[root@backup ~]#systemctl start rsyncd
[root@backup ~]#systemctl enable rsyncd
[root@backup ~]#systemctl status rsyncd

在(zài)這(zhè)裏插入圖片描述

5.檢查服務端口号

netstat -lntup |grep rsync
873

💗rsync服務客戶端(nfs):💗

6.測試一下rsync能否正常工作

③客戶端創建上(shàng)傳文件:

[root@nfs01 ~]# rsync -avz cry.txt rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
cry.txt

②服務端查看推送的(de)文件


[root@backup ~]# cd /backup/
[root@backup backup]# ls
cry.txt

🦄2.準備NFS共享存儲

💗nfs服務服務端(nfs):💗

①nfs服務配置:

[root@nfs01 ~]# yum install nfs-utils -y
[root@nfs01 ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

②創建管理用戶組和(hé / huò)用戶

[root@nfs01 ~]# groupadd -g 666 www
[root@nfs01 ~]# useradd -u666 -g666 www

③創建共享目錄及設置共享目錄權限

[root@nfs01 ~]# mkdir -p /data
[root@nfs01 ~]# chown www.www /data

④開啓服務下次開啓自啓

[root@nfs01 ~]# systemctl restart nfs
[root@nfs01 ~]# systemctl enable nfs

在(zài)這(zhè)裏插入圖片描述

💗nfs服務客戶端測試(backup):💗

①安裝nfs服務

[root@web01 ~]# yum install nfs-utils -y

②查看共享目錄

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

③将共享目錄挂載到(dào)本地(dì / de)/mnt,測試能否使用

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# touch /mnt/hello
[root@web01 ~]# umount /mnt/

在(zài)這(zhè)裏插入圖片描述

🦄3.準備web站點程序,php編寫 (httpd php)

web服務服務端(web01):💗

①安裝web服務需要(yào / yāo)的(de)包

[root@web01 ~]# yum install httpd php php-mbstring php-gd -y
[root@web01 ~]# groupadd -g666 www
[root@web01 ~]# useradd -u666 -g666 www

在(zài)這(zhè)裏插入圖片描述

②修改httpd以(yǐ)www用戶身份運行

[root@web01 ~]# sed -i '/^User/c User www' /etc/httpd/conf/httpd.conf 
[root@web01 ~]# sed -i '/^Group/c Group www' /etc/httpd/conf/httpd.conf

在(zài)這(zhè)裏插入圖片描述

③進入站點目錄,下載代碼,授權整個(gè)/var/www/html目錄爲(wéi / wèi)www (httpd程序就(jiù)可以(yǐ)通過www身份讀取所有代碼)

[root@web01 ~]# cd /var/www/html				#默認網站代碼存放的(de)路徑
[root@web01 html]# wget http://static.kodcloud.com/update/download/kodexplorer4.40.zip
[root@web01 html]# unzip kodexplorer4.40.zip

在(zài)這(zhè)裏插入圖片描述

[root@web01 html]# chown -R www.www /var/www/html

在(zài)這(zhè)裏插入圖片描述

④重啓服務,下次開啓自啓

[root@web01 ~]# systemctl restart httpd
[root@web01 ~]# systemctl enable httpd
[root@web01 ~]# systemctl status httpd

在(zài)這(zhè)裏插入圖片描述

⑤将用戶寫入web主機上(shàng)的(de)視頻類資源,自動的(de)寫入至NFS存儲.

1)我們打開谷歌浏覽器輸入配置httpd服務web01的(de)外網(10.0.0.7)

在(zài)這(zhè)裏插入圖片描述

2)登陸admin 密碼默認設置爲(wéi / wèi)1

在(zài)這(zhè)裏插入圖片描述

3)創建一個(gè)我們實驗環境下,測試上(shàng)傳視頻用的(de)video文件夾。

在(zài)這(zhè)裏插入圖片描述

4)我們在(zài)web01将nfs共享的(de)目錄挂載到(dào)httpd的(de)站點目錄下

[root@web01 ~]# mount       -t        nfs     172.16.1.31:/data             /var/www/html/data/User/admin/home/video/
                挂載  選項(指定類型) nfs  nfs服務端ip:共享目錄   站點目錄(/var/www/html)/我們創建文件的(de)路徑/

在(zài)這(zhè)裏插入圖片描述

5)我們現在(zài)上(shàng)傳一個(gè)照片,這(zhè)個(gè)照片相當于(yú)上(shàng)傳存儲到(dào)nfs的(de)共享目錄/data下。

在(zài)這(zhè)裏插入圖片描述

#nfs的(de)共享目錄/data挂載在(zài)站點目錄下(/var/www/html/data/User/admin/home/video),所以(yǐ)我們要(yào / yāo)在(zài)這(zhè)個(gè)路徑下查找上(shàng)傳的(de)圖片。
在(zài)這(zhè)裏插入圖片描述

🦄4.部署sersync

接入sersync實時(shí)同步工具, 同步NFS數據至 備份服務器的(de)data模塊

1.安裝sersync

我們把windows中rersync實時(shí)同步這(zhè)個(gè)工具移動到(dào)Linux中的(de)nfs服務器中,

在(zài)這(zhè)裏插入圖片描述

 解釋: 爲(wéi / wèi)什麽我們把resync裝在(zài)nfs中?
 因爲(wéi / wèi)我們用sersync這(zhè)個(gè)工具監控nfs共享目錄/data的(de)增 删 改 查,然後增量備份上(shàng)傳到(dào)backup(rsync服務端)
[root@nfs01 ~]# unzip sersync_installdir_64bit.zip 
[root@nfs01 ~]# mv sersync_installdir_64bit/sersync/ /usr/local/

在(zài)這(zhè)裏插入圖片描述

2.配置

[root@nfs01 /]# vim /usr/local/sersync/conf/confxml.xml

在(zài)這(zhè)裏插入圖片描述
在(zài)這(zhè)裏插入圖片描述

3.編輯一個(gè)免交互的(de)密碼文件,要(yào / yāo)給/etc/rsync.pass 600權限

[root@nfs01 /]# vim /etc/rsync.pass
[root@nfs01 /]# cat /etc/rsync.pass 
1
[root@nfs01 data]# chmod 600 /etc/rsync.pass

在(zài)這(zhè)裏插入圖片描述

4.更改權限

[root@nfs01 ~]# chmod +x /usr/local/sersync/bin/sersync
[root@nfs01 /]# chown -R  www.www  /usr/local/sersync/bin/sersync 

在(zài)這(zhè)裏插入圖片描述

5.啓動resync實時(shí)監控工具

[root@nfs01 ~]# /usr/local/sersync/bin/sersync -rdo /usr/local/sersync/conf/confxml.xml
在(zài)這(zhè)裏插入圖片描述

🦄5.測試三台機器整套流程(實時(shí)同步)

用戶上(shàng)傳一個(gè)視頻 --> /var/video —>nfs–>/data —> push —>rsync---->backup

💗a.web01虛拟機:

第一步:我們開始測試 首先是(shì)上(shàng)傳一個(gè)文件(文件名稱爲(wéi / wèi)實驗成功大(dà)吉大(dà)利)在(zài)web網頁上(shàng)。

在(zài)這(zhè)裏插入圖片描述

第二步:我們查看web服務器下的(de)站點目錄(/var/www/html/data/User/admin/home/video)有沒有我們的(de)大(dà)吉大(dà)利!

在(zài)這(zhè)裏插入圖片描述
web節點測試成功!!!

💗b.nfs01虛拟機:

第三步:我們查看nfs的(de)共享目錄/data下有沒有大(dà)吉大(dà)利文件,因爲(wéi / wèi)我們的(de)nfs共享目錄/data,挂載在(zài)web01虛拟機的(de)站點目錄下,所以(yǐ)我們查看nfs的(de)共享目錄/data下有大(dà)吉大(dà)利文件。

在(zài)這(zhè)裏插入圖片描述
nfs節點測試成功!!!

第四步:我們手動用一下rsync

在(zài)這(zhè)裏插入圖片描述

💗c.backup虛拟機

第五步:檢查rsync備份/data下是(shì)否擁有大(dà)吉大(dà)利

在(zài)這(zhè)裏插入圖片描述

backup節點測試成功!!!

🦄6.增加一個(gè)web節點

原理圖
在(zài)這(zhè)裏插入圖片描述

1.web02節點配置

[root@web02 ~]# yum install nfs-utils -y 
[root@web02~]# yum install httpd php php-mbstring php-gd -y
[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 www

在(zài)這(zhè)裏插入圖片描述#

2.修改httpd以(yǐ)www用戶身份運行

[root@web02 ~]# sed -i '/^User/c User www' /etc/httpd/conf/httpd.conf
[root@web02 ~]# sed -i '/^Group/c Group www' /etc/httpd/conf/httpd.conf

在(zài)這(zhè)裏插入圖片描述

3.進入站點目錄,下載代碼,授權整個(gè)/var/www/html目錄爲(wéi / wèi)www (httpd程序就(jiù)可以(yǐ)通過www身份讀取所有代碼)

[root@web02 ~]# cd /var/www/html				#默認網站代碼存放的(de)路徑
[root@web02 html]# wget http://static.kodcloud.com/update/download/kodexplorer4.40.zip
[root@web02 html]# unzip kodexplorer4.40.zip
[root@web02 html]# chown -R www.www /var/www/html

4.重啓服務

[root@web02 ~]# systemctl restart httpd
[root@web02 ~]#  systemctl enable httpd
[root@web02 ~]# systemctl status httpd

5.測試

①.我們把nfs共享目錄/data挂載到(dào)web02站點目錄(/var/www/html/data/User/admin/home/video)下,并且上(shàng)傳一個(gè)web站點添加的(de)文件。

[root@web02 ~]# showmount -e 172.16.1.31
 Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@web02 ~]# mount -t nfs 172.16.1.31:/data    /var/www/html/data/User/admin/home/video/

在(zài)這(zhè)裏插入圖片描述

②查看web02下

在(zài)這(zhè)裏插入圖片描述

③查看web01下

在(zài)這(zhè)裏插入圖片描述

④查看nfs01下

在(zài)這(zhè)裏插入圖片描述

⑤推送到(dào)backup的(de)data模塊下

在(zài)這(zhè)裏插入圖片描述

⑥查看backup下

在(zài)這(zhè)裏插入圖片描述

🦄7.模拟nfs服務器故障,如何快速切換 (平滑遷移,冷備方式).

1.在(zài)backup備份服務器上(shàng)配置nfs

①.在(zài)backup服務器搭建一個(gè)nfs ( 不(bù)使用 ,等有故障時(shí)能正常切換使用 )

[root@backup ~]# yum install nfs-utils -y
[root@backup ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@backup ~]# groupadd -g666 www
[root@backup ~]# useradd -u666 -g666 www
[root@backup ~]# chown -R www.www /data/

在(zài)這(zhè)裏插入圖片描述

②.修改rsync的(de)權限爲(wéi / wèi)www

[root@backup ~]# head -2 /etc/rsyncd.conf 
uid = www
gid = www

在(zài)這(zhè)裏插入圖片描述

[root@backup ~]# chown -R www.www /backup/

③.重啓服務

[root@backup ~]# systemctl restart rsyncd nfs	

2 .測試:我們關閉nfs準備環境

[root@nfs01 sersync]# systemctl stop nfs

在(zài)這(zhè)裏插入圖片描述

3.web卸載nfs ,重新到(dào)backup挂載,達到(dào)平滑遷移

[root@web01 ~]# umount -lf 172.16.1.31:/data && mount -t nfs 172.16.1.41:/data /var/www/html/data/User/admin/home/video

在(zài)這(zhè)裏插入圖片描述

[root@web02 ~]# umount -lf 172.16.1.31:/data && mount -t nfs 172.16.1.41:/data /var/www/html/data/User/admin/home/video~

8.拓展實時(shí)同步的(de)工具 Lsyncd

Lysncd是(shì)一款開源的(de)數據實時(shí)同步工具,基于(yú)inotify和(hé / huò)rsync基礎之(zhī)上(shàng)進行開發。

lsyncd與sersync一樣,會監控本地(dì / de)目錄,隻要(yào / yāo)當本地(dì / de)目錄發生變化則觸發動作,這(zhè)個(gè)動作就(jiù)是(shì)同步至遠程服務器。Lsyncd應用場景例如CDN鏡像、網站數據備份、網站搬家等等。

1.環境準備

rsync服務端172.16.1.41rsynclsync客戶端172.16.1.31lsyncd
[root@nfs01-31:~]# yum install lsyncd~

2.backup服務器環境準備

[root@backup-41:~]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read>= false
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = "backup dir by oldboy"
path = /backup

3.根據配置初始化環境

[root@backup-41:~]# mkdir /backup
[root@backup-41:~]# useradd rsync
[root@backup-41:~]# ll /backup/ -d
drwxr-xr-x 2 root root 6 Aug  2 15:40 /backup/
[root@backup-41:~]# chown rsync.rsync /backup/
[root@backup-41:~]# echo "rsync_backup:123456" >/etc/rsync.password
[root@backup-41:~]# chmod 600 /etc/rsync.password 
[root@backup-41:~]# systemctl start rsyncd.service

4.NFS服務器配置lsync

①安裝lsyncd

[root@nfs01-31:~]# yum install lsyncd

②配置lsyncd,監控本地(dì / de)目錄,觸發則立即同步

[root@nfs01-31:~]# cat /etc/lsyncd.conf

settings {
 logfile = "/var/log/lsyncd/lsyncd.log",
 statusFile = "/var/log/lsyncd/lsyncd.status",
 inotifyMode = "CloseWrite",
 maxProcesses = 8,
}

sync {
 default.rsync,
 source = "/data",
 target = "rsync_backup@172.16.1.41::backup",
 delete= true,
 exclude = { ".*" },
 delay = 1,

rsync = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
    password_file = "/etc/rsync.pwd",
    _extra = {"--bwlimit=200"}
    }
}


③配置

[root@nfs01-31:~]# mkdir /data
[root@nfs01-31:~]# echo "123456" >/etc/rsync.pwd  #創建密碼文件
[root@nfs01-31:~]# chmod 600 /etc/rsync.pwd 
[root@nfs01-31:~]# systemctl start lsyncd.service
[root@nfs01-31:~]# touch /data/{1..10}
[root@nfs01-31:~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup

相關案例查看更多