lvs應用

練習:負載均衡一個php應用:

測試是否需要會話保持;

是否需要用到共享存儲;

   為了檢測是否需要會話保持和共享存儲,要在兩臺主機上分別配置LAMP環境;這樣就使得兩者之間沒有了共享存儲;負載均衡使用nat模型的wlc算法,并且不使用lvs的長連接選項。數據庫故意使用了相同的賬號密碼來進行安裝。

步驟一:配置環境:

使用yum分別安裝兩臺主機的環境,分別安裝Discuz論壇;

blob.png

blob.png

此種方式可以在安裝的時候就會發現,因為沒有會話保持,每次安裝的下一步都可以正確使用,但是安裝之后就不能正常訪問了,每次刷新頁面都會報錯,是如下兩個頁面的來回切換:

blob.png

blob.png

而第一張圖片的錯誤應該是刷新到了沒有安裝論壇的主機,而第二張雖然能夠訪問,但是連接數據庫出現了錯誤,因為點擊登錄并不能登錄成功。我們再打開一個新的頁面進行訪問,結果還是相同。

我們重新負載均衡,這時使用會話保持的非共享存儲:使用lvs自帶的保持連接機制:

[root@localhost ~]# ipvsadm  -E -t 10.1.49.11:80  -p 360
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.11:80 wlc persistent 360
  -> 192.168.49.2:80              Masq    1      0          0         
  -> 192.168.49.3:80              Masq    1      0          0

重新安裝:

blob.png

訪問正常,發表一個帖子,查看也正常。但是此時很明顯另一臺主機并沒有安裝discuz,并且數據庫相互獨立。我們將另一臺主機安裝discuz,查看效果:

blob.png

可以正常訪問,但是可以看到我們在另一臺主機上發表的一個帖子,在此主機上并不能看得到,這對于用戶來說并不是想要的結果。因此我們需要共享存儲,利用nas、sands等等或者主從復制等方法將數據庫同步,才可以使用,如下圖所示:

blob.png

blob.png

  當使用了共享存儲,但沒有會話保持的時候:登錄之后,確實能夠看到同樣的內容,但是因為沒有會話保持,登錄之后刷新,登錄就會斷開,也會影響用戶體驗,類似于在淘寶上面買東西,從登錄=》拍得東西=》添加地址=》付款,這是一個一系列的過程,也可以理解成一次操作過程,所有這一系列的操作過程都應當由一臺服務器完成,而不能被負載均衡器分配到不同的服務器上。

 

課后作業dr模型中vipdip/rip不在同一個網段的實驗環境設計及配置實現;

 

先配置VIPDIP/RIP在同一網段的情況,此時兩臺RS主機的網關指向的是10.1.0.1,響應報文會從交換機發送出去。

blob.png

而在配置不同網段的情況下,可以將RIP的網關指向其它路由器,從而從另一個途徑直接發給用戶,其源地址是VIP,目標地址是CIP。如下圖:

blob.png

步驟一:配置準備,此處使用一臺客戶端,一臺Director和兩臺RS

同步時間

[root@localhost ~]# ntpdate 10.1.0.1

centos7中:

[root@localhost ~]# vim /etc/chrony.conf

blob.png

重啟服務:

[root@localhost ~]# systemctl restart chronyd.service 
[root@localhost ~]# date
2016年 10月 26日 星期三 22:13:42 CST

打開Director的核心轉發功能:

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

更改兩臺RS的內核參數及網卡,此處使用腳本更改:

[root@localhost ~]# cat set.sh 
#!/bin/bash
#
vip=10.1.49.49
mask=255.255.255.255
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 
ifconfig lo:0 $vip netmask $mask broadcast $vip up
route add -host $vip dev lo:0
;;
stop)
ifconfig lo:0 down
 
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "usage `basename` $0 start|stop"
exit 1
;;
esac

將網卡改為同一網段,并執行腳本:

blob.png

blob.png

Director上創建DR模型,使用腳本:

[root@localhost ~]# cat rs.sh 
#!/bin/bash
#
vip='10.1.49.49'
iface='eno16777736:0'
mask=255.255.255.255
port='80'
rs1='10.1.252.28'
rs2='10.1.49.10'
scheduler='wrr'
type='-g'
 
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up #Director上直接配置別名,使用VIP
iptables -F 
ipvsadm -A -t $vip:$port -s $scheduler
ipvsadm -a -t $vip:$port -r $rs1 $type -w 1
ipvsadm -a -t $vip:$port -r $rs2 $type -w 1
;;
stop)
ipvsadm -C 
ifconfig $iface down 
;;
*)
echo "usage"
exit 1
;;
esac
[root@localhost ~]# ipvsadm -ln 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.49:80 wrr
  -> 10.1.49.10:80                Route   1      0          0         
  -> 10.1.252.28:80               Route   1      0          0

檢測結果:

blob.png

blob.png

[root@localhost ~]# for i in {1..10}; do curl http://10.1.49.49/index.html; done 
RS1
RS2
RS1
RS2
RS1
RS2
RS1
RS2
RS1
RS2

練習三:使用rsync+inotify實現數據同步;

 

(1)實驗拓撲圖:

blob.png

(2)實驗目的:主機client創建有/data/tom/data/jerry的非空目錄并擔任客戶端角色,結合inotify-tools工具;server1server2主機分別創建有/data/test1/data/test2并擔任rsync的服務器。本實驗驗證當clent的目錄內容發生變化時,能否實時同步到服務器端的目錄中。

(3)rsync特性:

可以鏡像備份整個目錄樹或者文件系統。

可以借助于rcpremote file copy)、rshremote shell)、sshsecure shell)傳輸文件,又可以通過sockets直接連接傳輸。

基于增量備份機制,有較高的同步效率。

支持匿名和認證的進程模式傳輸,方便數據傳輸與鏡像。

可以指定排除同步部分目錄或文件。

支持拷貝設備文件、鏈接等特殊文件。

文件或目錄的拷貝可以保留其權限、時間戳、軟硬鏈接等所有屬性。

(4)配置實驗環境:

yum安裝rsyncinotify。

服務端:

[root@localhost ~]# service xinetd start 
正在啟動 xinetd:                                          [確定]
[root@localhost ~]# chkconfig rsync on 
[root@localhost ~]# chkconfig --list | grep rsync 
rsync:          啟用

centos6rsync安裝好之后沒有自己的配置文件,我們需要手動創建配置文件:

[root@localhost ~]# cat /etc/rsyncd.conf
 uid = root
 gid = root
 use chroot = no
 max connections = 20
 pid file = /var/run/rsyncd.pid
 log file = /var/log/rsyncd.log
 lock file = /var/run/rsync.lock
 timeout = 900
[data]
path = /data/tom
ignore errors
read only = false
list = false 
hosts allow = 10.1.49.11/24
auth users = backuser
secrets file = /etc/rsync.passwd

rsync命令:

 rsync [option]SRC [SRC]DEST [DEST]

          optionrsync能夠使用的選項,如下

            -n : 同步測試,不執行同步    

            -v :  verbose,詳細輸出模式,顯示詳細過程    

            -q : quiet,靜默模式,盡可能輸出少的信息    

            -c : checksum,可以對傳輸的文件進行較驗的,強制對文件傳輸進行校驗    

            -r  : recursive,遞歸復制    

            -p : perms,保存文件的權限    

            -t  : times,保留文件的時間戳    

            -l  : links,保留文件的符號鏈接    

            -g : group,保留文件的屬組    

            -o : owner,保留文件的屬主    

            -D : devices,保留設備文件

            -A : acls,保留acl訪問控制列表

            -a : archives歸檔,復制時可以保存原有的屬主屬主等屬性信息,甚至包括一點額外的屬性。等同于-rlptgoD    

            -e SSH : 遠程復制時,表示使用ssh協議作承載。如果ssh端口不是22,可以用-e ssh -p 22   

            -z : 基于網絡時使用,對文件壓縮后傳輸   

            progress : 顯示壓縮進度條的,簡寫-P   

            stats : 顯示如何執行壓縮和傳輸的,也就是顯示傳輸狀態的

(5)inotify,linux內核版本2.6.13以及更新版本支持,提供強大的文件系統監控,通過打開一個獨立的文件描述符并以此監控一個或則多個文件的打開、關閉、移動/重命名、刪除創建或者改變屬性的事件。由于notify是內核功能,因此需要使用時,需要通過其接口程序inotify-tools接口程序調取使用。inotify-tools是基于linux平臺為inotify的提供的C語言開發的接口工具,并提供一系列命令行工具并利用這些工具監控文件系統的事件。

(6)建立rsync用戶名和密碼文件,并更改權限:

[root@localhost ~]# echo "backuser:123" >> /etc/rsync.passwd
[root@localhost ~]# chmod 600 /etc/rsync.passwd

以上,服務器端配置完成。

(7)客戶端配置:

[root@localhost ~]# echo "123" > /etc/rsync.passwd
[root@localhost ~]# chmod 600 /etc/rsync.passwd

配置inotify:

[root@localhost ~]# yum install inotify-tools

(8)添加腳本:此處只寫了一臺服務器,兩臺以上服務器可以使用for循環執行:

[root@localhost ~]# cat inotify.sh
#!/bin/bash
#
src=/data/tom
des=data
ip=10.1.49.10
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib
$src | while read file do
rsync -avzP --delete --progress $src backuser@$ip::$des --password-file=/etc/rsync.passwd
echo "$src was rsynced"
done

注意文件名及變量的書寫。

執行腳本:

[root@localhost ~]# bash inotify.sh &

此處的腳本在測試時會顯示同步過程,是為了檢測錯誤方便;在實際中可以將結果重定向至/dev/null。

(9)測試,此處只測試一個服務器:在客戶端的tom目錄下創建文件:

[root@localhost tom]# touch asdf
[root@localhost tom]# sending incremental file list
tom/
tom/asdf
  0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
tom/asdfasdf
  0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=0/3)
sent 144 bytes  received 50 bytes  388.00 bytes/sec
total size is 0  speedup is 0.00
/data/tom was rsynced
/data/tom was rsynced

在服務端查看:

[root@localhost tom]# ls
tom
[root@localhost tom]# cd tom/
[root@localhost tom]# ls
asdf  asdfasdf

確實能夠同步成功,但是此處做的還有不足。

在服務器端可以看出,同步的目錄在tom下又新建了一個tom目錄,說明兩者的配置中的目錄并不是同層的。此處的改進,可使服務器端的配置文件中的目錄更改為path=/data,這樣就可以同步至/data目錄下了。也可以將腳本中的src=/data/tom,更改為/data。

原創文章,作者:SilencePavilion,如若轉載,請注明出處:http://www.www58058.com/56513

(0)
SilencePavilionSilencePavilion
上一篇 2016-11-11 08:41
下一篇 2016-11-11 08:41

相關推薦

  • mysql or條件可以使用索引而避免全表

    在某些情況下,or條件可以避免全表掃描的。 1 .where 語句里面如果帶有or條件, myisam表能用到索引, innodb不行。 1)myisam表:  CREATE TABLE IF NOT EXISTS `a` (   `id` int(1)&nb…

    Linux干貨 2015-04-13
  • btrfs文件系統

                                                      &nbsp…

    Linux干貨 2015-08-21
  • LVS的簡介和配置

    lvs分為3種模式 :1:lvs-nat:本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP(2)請求報文和響應報文都必須經由Director轉發,Director易于成為系統瓶頸(3)支持端口映射,可修改請求報文的目…

    2017-10-23
  • 26期全程班-第七周博客作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; # fdisk /dev/sda # mkf…

    Linux干貨 2017-03-17
  • Linux的哲學思想及Linux發行版

    講述一下幾個問題: 第一,Linux的哲學思想;第二,Linux發行版的基礎目錄名稱,命名法則和功用規定;第三,Linux不同發行版之間的聯系和區別。 Linux的哲學思想: 1、一切皆文件。是Unix/Linux的基本哲學之一,不僅普通的文件,目錄,字符設備,塊設備,套接字等在Unix/Linux中都是以文件被對待。 2、小型,單一用途的程序。程序和可執行…

    Linux干貨 2016-09-17
  • bash腳本之for循環和while循環及包管理

    一.概述 上一章剩余內容 壓縮工具 cpio 復制從或到文件 cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。 cpio[選項] > 文件名或者設備名 cpio[選項] < 文件名或者設備名 選項 -o 將文件拷貝打包成文件或者將文件輸出到設備上 -i解包,將打包文件解壓或將…

    Linux干貨 2016-08-24
欧美性久久久久