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
LVS-NAT LVS-DR