1. 程式人生 > >rsync實現負載均衡叢集檔案同步,搭建線上測試部署環境

rsync實現負載均衡叢集檔案同步,搭建線上測試部署環境

此次測試使用三臺伺服器CentOS7(1511)版本

192.168.254.1  web伺服器+線上測試環境+源站

192.168.254.2  web伺服器

192.168.254.3  web伺服器

其中2 3 伺服器作為叢集中的web伺服器,對外開放,是負載均衡叢集的部分。

其中1 伺服器不對外開放,程式碼釋出到該伺服器,在該伺服器上進行測試,完成後程式由該伺服器同步到其他叢集伺服器上,同時網站後臺以及自動指令碼位於該伺服器上。(如果為了安全期間,大家可以對該伺服器進行配置,只允許你們公司內部網路訪問,在家時通過VPN連線內部網路,這樣就可以確保後臺安全)

這裡講兩個場景供參考

1. 通過

shell指令碼,實現資料夾實時同步

2. 1伺服器上制定一個規則,即只要rsync.txt存在我們就開始同步,這樣只要開發上傳該檔案同步就開始,同步完成後自動刪除該檔案。

第一步:安裝rsync

centos 7(1511)版本,已經預設安裝了rsync,所以就不再進行安裝,未安裝的可以自行安裝,過程相對簡單

第二步:安裝inotify和inotify-tools

Centos 7已經預設安裝了inotify如果要檢視是否安裝可以使用如下命令

ll /proc/sys/fs/inotify

如果列出如下三項,則證明已經安裝

-rw-r--r-- 1 root root 0 21 13:59 max_queued_events


-rw-r--r-- 1 root root 0 21 13:59 max_user_instances
-rw-r--r-- 1 root root 0 21 13:59 max_user_watches

沒有安裝的可以自行安裝

然後需要安裝inotify-tools工具

tar -zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure

make && make install

第三步:對客戶端服務端進行配置

記住1是客戶端,2 3 需要同步的服務端將1的檔案同步到2 3上面

首先對 2 3 進行配置,

相應配置檔案   /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = no

max connections = 10

strict mode = no

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /usr/data/rsync/rsyncd.log

[laiwojia-data]

path = /usr/website/html/www.laiwojia.la/data/

comment = web4 files

ignore errors

read only = no

write noly = no

hosts allow = 192.168.254.1

hosts deny = *

list = false

uid = root

gid = root

auth users = root

secrets file = /usr/local/rsync/conf/server.pass

[laiwojia]

path = /usr/website/html/www.laiwojia.la/

comment = web4 files

ignore errors

read only = no

write noly = no

hosts allow = 192.168.254.1

hosts deny = *

list = false

uid = root

gid = root

auth users = root

secrets file = /usr/local/rsync/conf/server.pass

這裡配置了兩個模組 'laiwojia-data''laiwojia' ,其中'laiwojia-dada'只要發生變化就要同步的(想想大家把後臺放在1上面,那麼這個data裡面的檔案就是後臺生成的持久化檔案,後臺配置,然後整個叢集通用),而'laiwojia'了這個模組是釋出系統所用的模組,需要在站點下有'rsync.txt'檔案時才同步。

從上面的配置可以看出'/usr/website/html/www.laiwojia.la/data/'這個目錄必須存在, '/usr/local/rsync/conf/server.pass'這個密碼檔案也必須存在

# mkdir -p /usr/website/html/www.laiwojia.la/data/

# mkdir -p /usr/local/rsync/conf/

密碼檔案/usr/local/rsync/conf/server.pass中的內容為

root:123abc+-

記住2 3 作為服務端 密碼檔案要有字首,如果寫成 '123abc+-' 後面就會不通過

給密碼檔案設定訪問許可權:

# chmod 600 server.pass

然後我們對1進行配置,這裡貼出配置檔案

uid = nobody

gid = nobody

use chroot = no

max connections = 10

strict mode = yes

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /usr/data/rsync/rsyncd.log

建立目錄:

# mkdir -p /usr/website/html/www.laiwojia.la/data/

# mkdir -p /usr/local/rsync/conf/

然後還要建立一個密碼檔案'/usr/local/rsync/conf/server.pass' 由於1是客戶端,因此密碼沒有字首

123abc+-

設定訪問許可權:

# chmod 600 server.pass

第四步:編寫shell指令碼

首先是改變就同步的shell指令碼,命名 'datarsync.sh' 內容為

#!/bin/bash

host2=192.168.254.2

host3=192.168.254.3

src=/usr/website/html/www.laiwojia.la/data/

dst2=laiwojia-data

dst3=laiwojia-data

user=root

/usr/local/bin/inotifywait\

 -mrq --timefmt '%d/%m/%y'\

 --format '%T %w%f%e'\

 -e  modify,delete,create,attrib $src\

|while read files

    do

    /usr/bin/rsync  -vzrtopg --delete --progress --password-file=/usr/local/rsync/conf/server.pass  $src [email protected]$host2::$dst2

    /usr/bin/rsync  -vzrtopg --delete --progress --password-file=/usr/local/rsync/conf/server.pass  $src [email protected]$host3::$dst3

    echo "${files} was rsyncd" >>/tmp/rsync.log 2>&1

done

測試:

執行shell指令碼

# sh datarsync.sh

'/usr/website/html/www.laiwojia.la/data/' 目錄下建立test.php 並改寫其內容

vim test.php

#以下是內容

<?php

this is a test

hello tom!

看看執行結果

然後檢視2 3 機器上是否有test.php  發現服務端都有test.php 檔案,檢視內容

cat test.php

<?php
this is a test
hello tom

實時同步成功!

第二個場景

制定一個規則實現線上測試部署後同步,首先我們還是要建立一個shell指令碼,命名為harsync.sh,內如如下

!/bin/bash

host2=192.168.254.2

host3=192.168.254.3

src=/usr/website/html/www.laiwojia.la/

excludedir=$src"data/" $src"rsync.txt"

dst3=laiwojia

dst4=laiwojia

user=root

rsync_file=${src}"rsync.txt"

if [ -f "$rsync_file" ]

then

        /usr/bin/rsync  -vzrtopg --delete --progress --exclude=$excludedir  --password-file=/usr/local/rsync/conf/server.pass  $src [email protected]$host2::$dst2

        /usr/bin/rsync  -vzrtopg --delete --progress --exclude=$excludedir  --password-file=/usr/local/rsync/conf/server.pass  $src [email protected]$host3::$dst3

fi

rm -rf $src"rsync.txt"

測試

touch rsync.txt

touch test.html

執行指令碼

# sh harsync.sh

各個伺服器上檢視是否同步。這樣,如果你把程式碼發到1上,沒有rsync.txt就不會同步,可以進行線上測試,等測試好了,可以通過上傳一個rsync.txt 然後就可以實現檔案同步

rsync 常見錯誤與解決方法整理

問題一:

@ERROR: chroot failed

rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

伺服器端的目錄不存在或無許可權,建立目錄並修正許可權可解決問題。

問題二:

@ERROR: auth failed on module tee

rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

伺服器端該模組(tee)需要驗證使用者名稱密碼,但客戶端沒有提供正確的使用者名稱密碼,認證失敗。

提供正確的使用者名稱密碼解決此問題。

問題三:

@ERROR: Unknown module ‘tee_nonexists'

rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:

伺服器不存在指定模組。提供正確的模組名或在伺服器端修改成你要的模組以解決問題。

問題1

在client上遇到問題:

rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::backup /home/

rsync: could not open password file "/etc/rsync.pas": No such file or directory (2)

Password:

@ERROR: auth failed on module backup

rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

遇到這個問題:client端沒有設定/etc/rsync.pas這個檔案,而在使用rsync命令的時候,加了這個引數--

password-file=/etc/rsync.pas

問題2

rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::backup /home/

@ERROR: auth failed on module backup

rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

遇到這個問題:client端已經設定/etc/rsync.pas這個檔案,裡面也設定了密碼111111,和伺服器一致,但是

伺服器段設定有錯誤,伺服器端應該設定/etc/rsync.pas ,裡面內容root:111111 ,這裡登陸名不可缺少

問題3

rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::backup /home/

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

遇到這個問題,是因為伺服器端的/home/backup 其中backup這個目錄並沒有設定,所以提示:chdir failed

問題4

rsync: write failed on "/home/backup2010/wensong": No space left on device (28)

rsync error: error in file IO (code 11) at receiver.c(302) [receiver=3.0.7]

rsync: connection unexpectedly closed (2721 bytes received so far) [generator]

rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7]

磁碟空間不夠,所以無法操作。

可以通過df /home/backup2010 來檢視可用空間和已用空間

問題5:網路收集問題

1、許可權問題

類似如下的提示:rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)注意檢視同步的目錄許可權是否為755

2、time out

rsync: failed to connect to 203.100.192.66: Connection timed out (110)

rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]

檢查伺服器的埠netstat –tunlp,遠端telnet測試。

可能因為客戶端或者服務端的防火牆開啟 導致無法通訊,可以設定規則放行 rsync(873埠) 或者直接關閉防火牆。

還有一種在同步過程中可能會提示沒有許可權 (將同步目錄加上SvcwRsync全部許可權即可,更簡單的方法就是將SvcwRsync設為管理員即可)

3、服務未啟動

rsync: failed to connect to 10.10.10.170: Connection refused (111)

rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]

啟動服務:rsync --daemon --config=/etc/rsyncd.conf

4、磁碟空間滿

rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device (28)

*** Skipping any contents from this failed directory ***

5、Ctrl+C或者大量檔案

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [receiver=3.0.5]

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [generator=3.0.5]

說明:導致此問題多半是服務端服務沒有被正常啟動,到伺服器上去查查服務是否有啟動,然後檢視下 /var/run/rsync.pid 檔案是否存在,最乾脆的方法是殺死已經啟動了服務,然後再次啟動服務或者讓指令碼加入系統啟動服務級別然後shutdown -r now伺服器

6、xnetid啟動

rsync: read error: Connection reset by peer (104)

rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5]

檢視rsync日誌

rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory

xnetid查詢的配置檔案位置預設是/etc下,根據具體情況建立軟連結。例如:

ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf

或者更改指定預設的配置檔案路徑,在/etc/xinetd.d/rsync配置檔案中。

Rsync configure:

配置一:

ignore errors

說明:這個選項最好加上,否則再很多crontab的時候往往發生錯誤你也未可知,因為你不可能天天去看每時每刻去看log,不加上這個出現錯誤的機率相對會很高,因為任何大點的專案和系統,磁碟IO都是一個瓶頸

Rsync error

錯誤一:

@ERROR: auth failed on module xxxxx

rsync: connection unexpectedly closed (90 bytes read so far)

rsync error: error in rsync protocol data stream (code 12) at io.c(150)

說明:這是因為密碼設定錯了,無法登入成功,檢查一下rsync.pwd,看客服是否匹配。還有伺服器端沒啟動rsync 服務也會出現這種情況。

錯誤二:

password file must not be other-accessible

continuing without password file

Password:

說明:這是因為rsyncd.pwd rsyncd.sec的許可權不對,應該設定為600。如:chmod 600 rsyncd.pwd

錯誤三:

@ERROR: chroot failed

rsync: connection unexpectedly closed (75 bytes read so far)

rsync error: error in rsync protocol data stream (code 12) at io.c(150)

說明:這是因為你在 rsync.conf 中設定的 path 路徑不存在,要新建目錄才能開啟同步

錯誤四:

rsync: failed to connect to 218.107.243.2: No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]

說明:防火牆問題導致,這個最好先徹底關閉防火牆,排錯的基本法就是這樣,無論是S還是C,還有ignore errors選項問題也會導致

錯誤五:

@ERROR: access denied to www from unknown (192.168.1.123)

rsync: connection unexpectedly closed (0 bytes received so far) [receiver]

rsync error: error in rsync protocol data stream (code 12) at io.c(359)

說明:此問題很明顯,是配置選項host allow的問題,初學者喜歡一個允許段做成一個配置,然後模組又是同一個,致使導致

錯誤六:

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) [generator=2.6.9]

rsync error: received SIGUSR1 (code 19) at main.c(1182) [receiver=2.6.9]

說明:導致此問題多半是服務端服務沒有被正常啟動,到伺服器上去查查服務是否有啟動,然後檢視下 /var/run/rsync.pid 檔案是否存在,最乾脆的方法是殺死已經啟動了服務,然後再次啟動服務或者讓指令碼加入系統啟動服務級別然後shutdown -r now伺服器

錯誤七:

rsync: read error: Connection reset by peer (104)

rsync error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]

說明:原資料目錄裡沒有資料存在

相關推薦

rsync實現負載均衡叢集檔案同步搭建線上測試部署環境

此次測試使用三臺伺服器,CentOS7(1511)版本: 192.168.254.1  web伺服器+線上測試環境+源站 192.168.254.2  web伺服器 192.168.254.3  web伺服器 其中2 3 伺服器作為叢集中的web伺服器,對外開放,是負

nginx+tomcat+redis叢集實現負載均衡和session同步的步驟和問題處理方法

最近在研究nginx+tomcat的負載均衡功能, 因為需要實現failover時使用者無感知的效果,所以我考慮使用tomcat的session同步方式來實現。網上能查到的東西我就直接貼連結了,我把搭建這套系統的過程,與遇到的坑的處理方式說明一下。 我使用的系

tomcat+apache實現負載均衡叢集

1,使用負載均衡叢集原因 當開發一個流量小,併發量不大的系統的時候,負載均衡叢集沒什麼大的意義。反之則意義重大。 使用apache+tomcat配置負載均衡叢集流程如下:使用者傳送請求到Web伺服器(也就是apache) apache 根據定義規則進行http轉發到不同的tomcat伺服器

Nginx +tomcat 實現負載均衡叢集

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目標 實現高效能負載均衡的Tomcat叢集: 三、 步驟 1、首先下載Nginx,要下載穩定版: 2、然後解壓兩個Tomcat,分別命名為apache-tomcat-6.0.33-1和

Linux下Nginx實現負載均衡 Nginx學習系列之搭建環境

關於在本地虛擬機器(VMware 14)下安裝Linux同時安裝Nginx,請參考Nginx學習系列之搭建環境 1、啟動Nginx 在Nginx安裝成功的前提下,啟動Nginx 已root模式登陸(許可權需要),接著找到Nginx的安裝目錄,啟動Nginx,並且指定Nginx啟動所需的配置檔案,該檔

2、Tomcat叢集並用Nginx實現負載均衡(win環境

1、Tomcat的配置 1、系統環境變數配置: 首先要實現Tomcat的叢集就得擁有多個tomcat,所以我在本地電腦下載了兩個Tomcat,我這裡使用的是Tomcat7,當然,配置與Tomcat的版本沒多大關係~ 下載之後我們先來配置好環境變數: 在我們的系統變數中增加上

搭建linux伺服器叢集簡單實現,負載均衡,動靜分離,資料主從複製,分散式快取,共享session回話。

負載均衡方案: nignx  應用層負載均衡      優點:配置簡單 缺點:均衡效能一般 有流量消耗  基於反向代理 LVS    網路層負載均衡 優點:配置複雜 缺點:作

2、Tomcat叢集實戰並用Ngnix實現負載均衡(win環境

1、Tomcat的配置 1、系統環境變數配置: 首先要實現Tomcat的叢集就得擁有多個tomcat,所以我在本地電腦下載了兩個Tomcat,我這裡使用的是Tomcat7,當然,配置與Tomcat的版本沒多大關係~ 下載之後我們先來配置好環境變數: 在我們

Nginx+keepalived做雙機熱備實現負載均衡(主主模式)

nginx keepalive Keepalived: 簡介:Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepali

drbd+mariadb+corosync+pacemaker構建高可用實現負載均衡

drbd mysql 高可用DRBD DRBD是由內核模塊和相關腳本而構成,用以構建高可用性的集群 drbd 工作原理:DRBD是一種塊設備,可以被用於高可用(HA)之中.它類似於一個網絡RAID-1功能。當你將數據寫入本地 文件系統時,數據還將會被發送到網絡中另一臺主機上。以相同的形式記錄在

Ubuntu 配置雙網卡綁定實現負載均衡

AI -a ace -m 有效 網卡綁定 etc modprobe net Ubuntu 配置雙網卡綁定,實現負載均衡 1、Bond的工作模式 Linux bonding驅動提供了一個把多個網絡接口設備捆綁為單個的網絡接口設置來使用,用於網絡負載均衡及網絡冗余。 bondi

專案部署、收集靜態檔案、nginx和uwsgi實現負載均衡

專案部署 1)靜態檔案伺服器 ​ 開發階段: live-server ​ 部署階段: nginx ​ 域名: www.meiduo.site Django專案靜態檔案收集: # 設定setting配置檔案 STATIC_ROOT = '指定收集靜態檔案的儲存目錄'

解決Nginx + Keepalived主從雙機熱備+自動切換實現負載均衡及高可用

解決Nginx + Keepalived主從雙機熱備+自動切換,實現負載均衡及高可用 IP 伺服器 服務 192.168.1.10 lb-node1 Nginx、kee

LVS+Keepalived 實現高可用負載均衡叢集

LVS+Keepalived  實現高可用負載均衡叢集     隨著網站業務量的增長,網站的伺服器壓力越來越大?需要負載均衡方案!商業的硬體如 F5 ,Array又太貴,你們又是創業型互聯公司如何有效節約成本,節省不必要的浪費?同時還需要實現商業硬體一樣的高效能高可

Keepalived + LVS + LAMP 高可用負載均衡叢集實現

一、Keepalived 簡介           Keepalived 是一個用 C 語言編寫的路由軟體。它最初是專門為 LVS 負載均衡軟體設計的,用來管理並監控 LVS 集群系統中各個服務節點的狀態,後來又加

nginx+tomcat+memcached搭建負載均衡叢集實現交叉快取

tomcat tomcat簡介 Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可

想要玩轉實現負載均衡你知道這些嗎?

一、前言 網際網路早期,業務流量比較小並且業務邏輯比較簡單,單臺伺服器便可以滿足基本的需求;但隨著網際網路的發展,業務流量越來越大並且業務邏輯也越來越複雜,單臺機器的效能問題以及單點問題凸顯了出來,因此需要多臺機器來進行效能的水平擴充套件以及避免單點故障。但是要如何

如何實現負載均衡有哪些演算法可以實現

【前言】 負載均衡技術對於中大型網站的效能提高有著很大的優勢,最近在學習《大型網站技術的架構》,其中對於負載均衡技術有一些介紹,將學習的經驗總結一下,分享下。多交流。 【協議層】http重定向協議實現負載均衡 原理:根據使用者的http請求計算出一個真實的web

docker下用keepalived+Haproxy實現高可用負載均衡叢集

先記錄下遇到的坑,避免之後忘了; 花時間最多去解決的一個題是:在docker下啟動haproxy服務後在這個docker服務內安裝keepalived無法ping通的問題,雖然最後也是莫名其妙就好了,但是加強了不少對docker的理解和還需深入學習的地方。 為什麼要用

nginx為多個不同的服務做反向代理實現負載均衡

http { upsteam servicename1 { server 192.168.1.100 : 2345 } upsteam servicename2 { server 192.168.1.101 : 4567