LVS-NAT LVS-DR

什麼是集羣?

一組通過高速網絡互聯的計算組,並以單一系統的模式加以管理,將很多服務器集中在一起,提供同一種服務,在客戶端看起來就像是隻有一個服務器。任務調度是集羣系統中的技術核心。


集羣的目的:

        提高性能:如計算密集型應用,如:天氣預報、核試驗模擬

降低成本:相對百萬美元級的超級計算機,價格便宜

提高可擴展性:只要增加集羣節點即可

增強可靠性:多個節點完成相同功能,避免單點失敗


集羣分類:

HPC:高性能計算集羣,解決複雜的科學問題

LB:負載均衡集羣,客戶端負載在計算機集羣中儘可能的平均分攤

HA:高可用集羣,避免單點故障,當一個系統發生故障時,可以快速遷移


LVS概述


LVS項目介紹:

Linux 虛擬服務器(LVS)是章文嵩在國防科技大學就讀博士期間創建的

LVS可以實現高可用的、可伸縮的Web、Mail、Cache和Media等網絡服務

最終目標是利用Linux操作系統和LVS集羣軟件實現一個高可用、高性能、低成本的服務器應用集羣


LVS集羣組成

前端:負載均衡層,由一臺或多臺負載調度器構成

中間:服務器羣組層,由一組實際運行應用服務的服務器組成

底端:數據共享存儲層,提供共享存儲空間的存儲區域




LVS術語:

Director Server:調度服務器 【lvs】

將負載分發到Real Server的服務器

Real Server:真實服務器  【web】

真正提供應用服務的服務器

VIP:虛擬IP地址

公佈給用戶訪問的虛擬IP地址

RIP:真實IP地址

集羣節點上使用的IP地址

DIP:調度器連接節點服務器的IP地址



LVS工作模式

VS/NAT:

通過網絡地址轉換實現的虛擬服務器

大併發訪問時,調度器的性能成爲瓶頸

VS/DR:

直接使用路由技術實現虛擬服務器

節點服務器需要配置VIP,注意MAC地址廣播

VS/TUN:

通過隧道方式實現虛擬服務器




負載均衡調度算法:

LVS目前實現了10種調度算法

常用調度算法有4種

輪詢(Round Robin):將客戶端請求平均分發到Real Server

加權輪詢(Weighted Round Robin):根據Real Server權重值進行輪詢調度

最少連接(Least Connections):選擇連接數最少的服務器

加權最少連接( Weighted Least Connections ):根據Real Server權重值,選擇連接數最少的服務器

源地址散列(Source Hashing):根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器

其他調度算法:基於局部性的最少鏈接

      帶複製的基於局部性最少鏈接

      目標地址散列(Destination Hashing)

      最短的期望的延遲

      最少隊列調度







準備LAMP分離環境


一,準備四臺虛擬機,全新的,免密登錄

vh05.tedu.cn   192.168.4.5   mysql

vh06.tedu.cn   192.168.4.6   web

vh07.tedu.cn   192.168.4.7   web

vh08.tedu.cn   192.168.4.8   lvs


二,安裝web服務器

1.在vh06/vh07上安裝軟件包

[root@vh06 ~]# yum  -y  install  httpd  php  php-mysql

[root@vh06 ~]# systemctl   restart  httpd

[root@vh06 ~]# systemctl   enable  httpd


三,配置數據庫服務器,在vh05上

[root@vh05 ~]# yum  -y  install   mariadb-server

[root@vh05 ~]# systemctl   restart   mariadb

[root@vh05 ~]# systemctl   enable   mariadb

[root@vh05 ~]# mysql

MariaDB [(none)]> grant  all   on  *.* to  'admin'@"%"   identified  by  "tedu.cn";


四,在vh06上安裝Discuz

[root@room9pc01 ~]# scp   -r  888888/項目/Discuz_X3.3_SC_UTF8.zip  192.168.4.6:/root

[root@vh06 ~]# unzip   Discuz_X3.3_SC_UTF8.zip

[root@vh06 ~]# cp -r upload/ /var/www/html/bbs

[root@vh06 ~]# chown -R apache.apache /var/www/html/bbs

[root@room9pc01 ~]# firefox   http://192.168.4.6/bbs &

同意---->下一步----> 數據庫服務器:192.168.4.5---->數據庫用戶名: admin----->數據庫密碼:tedu.cn


管理員賬號:admin--->密碼隨便(論壇帳號)--->下一步

登錄時,輸入的是論壇的密碼

管理中心:輸入的是授權的密碼

模塊管理中心:輸入的是論壇帳號密碼---->論壇

[root@vh05 ~]# mysql

MariaDB [(none)]> use  ultrax

MariaDB [ultrax]> show  tables;

MariaDB [ultrax]> desc  pre_common_member;

MariaDB [ultrax]> select  username,email  from  pre_common_member;

+----------+------------------+

| username | email            |

+----------+------------------+

| admin    | [email protected]  |

| haha     | [email protected] |

+----------+------------------+


MariaDB [ultrax]> desc   pre_forum_post;

MariaDB [ultrax]> select  author,subject,message   from  pre_forum_post;

+--------+----------------+--------------------+

| author | subject        | message            |

+--------+----------------+--------------------+

| admin  | hfdbvgewtkhtrj | wml/hahah/zuimei

 |

+--------+----------------+--------------------+





ipvsadm用法:

-Ln  查看命令

-A  添加虛擬服務器

-t  tcp協議,設置羣集地址

-s  指定負載調度算法    


添加、刪除服務器節點:

-a  添加真實服務器

-d  刪除真實服務器

-r  指定真實服務器(Real Server)的地址

-m  使用NAT模式;-g、-i分別對應DR、TUN模式

-w  爲節點服務器設置權重,默認爲1



配置LVS-NAT模式

1.在vh08上安裝

[root@vh08 ~]# yum  -y  install   ipvsadm


2、在vh06和vh07 web服務器上把網關指向192.168.4.8

# nmtui  添加網關

# ifdown eth0; ifup eth0

【[root@vh06 html]# nmcli  connection   modify   eth0   ipv4.method   manual  ipv4.gateway   192.168.4.8  connection.autoconnect  yes】



3、在vh08的eth2上配置額外的地址201.1.1.8/24

[root@vh08 ~]# nmtui

[root@vh08 ~]# systemctl restart NetworkManager

【[root@vh08 ~]# nmcli connection  add   con-name   eth2  ifname   eth2  type   ethernet 

[root@vh08 ~]# nmcli   connection   modify   eth2  ipv4.method   manual  ipv4.addresses   201.1.1.8/24  connection.autoconnect  yes

[root@vh08 ~]# nmcli  connection   up  eth2


4、打開vh08的路由轉發功能(RHEL7默認已打開,以前版本需要做以下配置)

[root@vh08 ~]# vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1

[root@vh08 ~]# sysctl -p

net.ipv4.ip_forward = 1  讓內核參數生效

[root@vh08 ~]# sysctl -a   查看所有的內核參數



5.在vh06和vh07上做一個網頁

[root@vh06 html]# vim  index.html

<html><h1><<font color=red>我想和你一起吃火鍋</font></h1></html>

[root@vh06 html]# systemctl   restart  httpd


[root@vh07 html]# vim  index.html

<html><h1><font  color=yellow>你是屎嗎?×××的!</font></h1></html>

[root@vh07 html]# systemctl   restart  httpd


6、lvs集羣配置

(1)創建虛擬服務器,使用tcp的80端口,調度算法是rr

[root@vh08 ~]# ipvsadm -A -t 201.1.1.8:80 -s rr  不加-s選項默認是wlc

(2)向VIP中加入RIP

[root@vh08 ~]# ipvsadm -a -t 201.1.1.8:80 -r 192.168.4.6 -m -w 2

[root@vh08 ~]# ipvsadm -a -t 201.1.1.8:80 -r 192.168.4.7 -m



7、驗證

[root@vh08 ~]# ipvsadm -Ln

[root@room8pc16 ~]# firefox http://201.1.1.8/bbs

刷新頁面時,按ctrl+f5重新連接服務器


修改調度算法爲WRR

[root@vh08 ~]# ipvsadm -E -t 201.1.1.8:80 -s wrr

[root@vh08 ~]# ipvsadm  -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  201.1.1.8:80 wrr

  -> 192.168.4.6:80               Masq    2      0          1         

  -> 192.168.4.7:80               Masq    1      0          1         



從規則中移除real server

[root@vh08 ~]# ipvsadm -d -t 201.1.1.8:80 -r 192.168.4.6



[root@vh08 ~]# vim  1.sh

#!/bin/bash

RIP1=192.168.4.2

RIP2=192.168.4.3

VIP=201.1.1.4:80


while [ 1 ]

do

for  IP  in  $RIP1  $RIP2

do

     curl  -I  http://${IP} &> /dev/null

     web_state=$?

     ipvsadm  -Ln  |  grep  ${IP}  &> /dev/null

     ip_in_lvs=$?

     if 

     [ $web_state  -ne  0  -a  $ip_in_lvs  -eq 0 ]

     then

     ipvsadm  -d  -t  $VIP  -r  $IP

     elif

     [ $web_state -eq 0  -a   $ip_in_lvs  -ne 0 ]

     then

     ipvsadm  -a  -t  $VIP  -r  $IP  -m

fi

done

sleep  3

done

[root@vh08 ~]# sh  1.sh &



[root@vh06 html]# systemctl   stop  httpd

[root@vh08 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  201.1.1.4:80 rr

  -> 192.168.4.3:80               Masq    1      0          0         

[root@vh06 html]# systemctl   restart  httpd

[root@vh08 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  201.1.1.4:80 rr

  -> 192.168.4.2:80               Masq    1      0          0         

  -> 192.168.4.3:80               Masq    1      0          0         


lvs起動狀態管理

[root@vh08 ~]# systemctl   stop   ipvsadm

[root@vh08 ~]# systemctl   restart   ipvsadm  重起失敗,提示執行journalctl -xe,報錯日誌是/etc/sysconfig/ipvsadm文件不存在,所以要創建它

查看狀態

[root@vh08 ~]# systemctl   status   ipvsadm  會檢查出沒有/etc/sysconfig/ipvsadm文件

[root@vh08 ~]# touch  /etc/sysconfig/ipvsadm  創建文件

[root@vh08 ~]# ipvsadm   -A  -t  201.1.1.4:80  -s  rr

[root@vh08 ~]# ipvsadm   -a  -t  201.1.1.4:80   -r  192.168.4.2  -m  -w  2

[root@vh08 ~]# ipvsadm   -a  -t  201.1.1.4:80   -r  192.168.4.3  -m

[root@vh08 ~]# ipvsadm   -Ln

[root@vh08 ~]# systemctl   restart   ipvsadm

[root@vh08 bin]# systemctl enable ipvsadm

[root@vh08 ~]# cat  /etc/sysconfig/ipvsadm

-A -t 201.1.1.4:80 -s rr

-a -t 201.1.1.4:80 -r 192.168.4.2:80 -m -w 2

-a -t 201.1.1.4:80 -r 192.168.4.3:80 -m -w 1



配置LVS-DR模式

一、清理LVS-NAT的配置


1、刪除lvs規則

[root@vh08 bin]# ipvsadm -D -t 201.1.1.8:80



2、刪除eth2的地址

[root@vh08 bin]# nmtui  刪除地址,將地址獲取改爲自動

[root@vh08 bin]# ifdown eth2

【[root@vh08 ~]# nmcli connection   delete  eth2】



二、配置VIP

1、調度器上配置在vh08的eth0上

[root@vh08 bin]# cd /etc/sysconfig/network-scripts/

[root@vh08 bin]# cd /etc/sysconfig/network-scripts/

[root@vh08 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0

[root@vh08 network-scripts]# vim ifcfg-eth0:0

TYPE=Ethernet

BOOTPROTO=none

NAME=eth0:0

DEVICE=eth0:0

ONBOOT=yes

IPADDR=192.168.4.100

PREFIX=24

[root@vh08 network-scripts]# ifup eth0:0



2、把VIP配置在vh06和vh07兩臺real server的lo

[root@vh06 html]# cd /etc/sysconfig/network-scripts/

[root@vh06 network-scripts]# cp ifcfg-lo ifcfg-lo:0

[root@vh06 network-scripts]# vim ifcfg-lo:0

DEVICE=lo:0

IPADDR=192.168.4.100

NETMASK=255.255.255.255  如果寫成了255.255.255.0將導致該網段其他主機不管理配置192.168.4.0/24網段的哪個地址,都會出現地址衝突

NETWORK=192.168.4.100

BROADCAST=192.168.4.100

ONBOOT=yes

NAME=lo:0

[root@vh06 network-scripts]# ifup lo:0



三、在WEB服務器上修改內核參數


三臺主機都有VIP192.168.4.100。當請求發送過來時,應該是調度器接收請求, real server不要接收。爲了實現這個功能,需要修改real server的內核參數。

[root@vh06 ~]# sysctl -a | grep arp_ig

[root@vh06 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf 

[root@vh06 ~]# echo  "net.ipv4.conf.lo.arp_ignore  = 1"  >>  /etc/sysctl.conf 

[root@vh06 ~]# sysctl -a | grep arp_ann

[root@vh06 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

[root@vh06 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf

[root@vh06 ~]# sysctl -p  應用內核參數



四、配置LVS DR規則

[root@vh08 network-scripts]# ipvsadm -A -t 192.168.4.100:80 

[root@vh08 network-scripts]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.6 -g

[root@vh08 network-scripts]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.7


驗證:

[root@room9pc01 ~]# firefox   192.168.4.100

[root@room9pc01 ~]# curl   http://192.168.4.100

<html><h1><font color=red>我想和你一起吃火鍋</font></h1></html>

[root@room9pc01 ~]# curl   http://192.168.4.100

<html><h1><font  color=yellow>你是屎嗎?×××的!</font></h1></html>

[root@room9pc01 ~]# curl   http://192.168.4.100

<html><h1><font color=red>我想和你一起吃火鍋</font></h1></html>

 


[root@vh08 network-scripts]# ipvsadm  -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.4.100:80 wlc

  -> 192.168.4.6:80               Route   1      0          10        

  -> 192.168.4.7:80               Route   1      0          11        



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章