1. 程式人生 > >LVS-NAT LVS-DR

LVS-NAT LVS-DR

路由轉發 hit $? 列表 ont 查看 ddr lin 添加

什麽是集群?

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


集群的目的:

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

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

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

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


集群分類:

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



LVS-NAT LVS-DR