web+nfs+rsync+sersync 綜合實驗(實時(shí)同步resync,加多台web節點,nfs
發表時(shí)間:2020-10-19
發布人(rén):融晨科技
浏覽次數:110
搭建架構原理圖以(yǐ)及實時(shí)同步概念
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
②創建用戶,準備虛拟連接用戶
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/
4.重啓服務,檢查服務
[root@backup ~]#systemctl start rsyncd
[root@backup ~]#systemctl enable rsyncd
[root@backup ~]#systemctl status rsyncd
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
💗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/
🦄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
②修改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
③進入站點目錄,下載代碼,授權整個(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
[root@web01 html]# chown -R www.www /var/www/html
④重啓服務,下次開啓自啓
[root@web01 ~]# systemctl restart httpd
[root@web01 ~]# systemctl enable httpd
[root@web01 ~]# systemctl status httpd
⑤将用戶寫入web主機上(shàng)的(de)視頻類資源,自動的(de)寫入至NFS存儲.
1)我們打開谷歌浏覽器輸入配置httpd服務web01的(de)外網(10.0.0.7)
2)登陸admin 密碼默認設置爲(wéi / wèi)1
3)創建一個(gè)我們實驗環境下,測試上(shàng)傳視頻用的(de)video文件夾。
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)路徑/
5)我們現在(zài)上(shàng)傳一個(gè)照片,這(zhè)個(gè)照片相當于(yú)上(shàng)傳存儲到(dào)nfs的(de)共享目錄/data下。
#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)圖片。
🦄4.部署sersync
接入sersync實時(shí)同步工具, 同步NFS數據至 備份服務器的(de)data模塊
1.安裝sersync
我們把windows中rersync實時(shí)同步這(zhè)個(gè)工具移動到(dào)Linux中的(de)nfs服務器中,
解釋: 爲(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/
2.配置
[root@nfs01 /]# vim /usr/local/sersync/conf/confxml.xml
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
4.更改權限
[root@nfs01 ~]# chmod +x /usr/local/sersync/bin/sersync
[root@nfs01 /]# chown -R www.www /usr/local/sersync/bin/sersync
5.啓動resync實時(shí)監控工具
[root@nfs01 ~]# /usr/local/sersync/bin/sersync -rdo /usr/local/sersync/conf/confxml.xml
🦄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)。
第二步:我們查看web服務器下的(de)站點目錄(/var/www/html/data/User/admin/home/video)有沒有我們的(de)大(dà)吉大(dà)利!
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à)利文件。
nfs節點測試成功!!!
第四步:我們手動用一下rsync
💗c.backup虛拟機
第五步:檢查rsync備份/data下是(shì)否擁有大(dà)吉大(dà)利
backup節點測試成功!!!
🦄6.增加一個(gè)web節點
原理圖
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
#
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
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/
②查看web02下
③查看web01下
④查看nfs01下
⑤推送到(dào)backup的(de)data模塊下
⑥查看backup下
🦄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/
②.修改rsync的(de)權限爲(wéi / wèi)www
[root@backup ~]# head -2 /etc/rsyncd.conf
uid = www
gid = www
[root@backup ~]# chown -R www.www /backup/
③.重啓服務
[root@backup ~]# systemctl restart rsyncd nfs
2 .測試:我們關閉nfs準備環境
[root@nfs01 sersync]# systemctl stop nfs
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
[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