1. 程式人生 > >為論壇做負載均衡叢集

為論壇做負載均衡叢集

開發十年,就只剩下這套架構體系了! >>>   

1. 克隆虛擬機器

修改IP地址
修改主機名


2. 準備工作

兩臺機器上開啟nginx,保證能訪問論壇
第二臺機器上,關閉mariadb 
修改配置檔案:config/config_global.php config/config_ucenter.php  uc_server/data/config.inc.php
測試,保證兩臺機器都能正常訪問到論壇。


測試:

[root@wangzb03 ~]# /etc/init.d/mysqld stop
[root@wangzb03 ~]# chkconfig mysqld off
[root@wangzb03 ~]# systemctl stop httpd
[root@wangzb03 ~]# systemctl enable nginx  //nginx開機啟動
wangzb03上需要訪問登入wangzb01上資料庫
[root@wangzb03 ~]#mysql -ubbs -pmysql -h192.168.153.133

如果報錯不被允許,則需要在wangzb01機器上授權

[root@wangzb01 ~]# mysql -uroot -pmysql
MariaDB [(none)]> show grants for 'bbs'@'127.0.0.1';
+------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bbs'@'127.0.0.1' IDENTIFIED BY PASSWORD '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA' |
| GRANT ALL PRIVILEGES ON `bbs`.* TO 'bbs'@'127.0.0.1'                                                       |
+------------------------------------------------------------------------------------------------------------+

執行授權語句給wangzb03機器ip

MariaDB [(none)]> GRANT USAGE ON *.* TO 'bbs'@'192.168.153.135' IDENTIFIED BY PASSWORD '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `bbs`.* TO 'bbs'@'192.168.153.135';
MariaDB [(none)]> flush privilege;

配置Windows下C:\Windows\System32\drivers\etc\hosts檔案中域名解析,開啟瀏覽器輸入域名bbs.wangzb.cc訪問論壇,需要確保wangzb01和wangzb03都可以訪問(通過檢視日誌/data/logs/bbs.access.log)。

[root@wangzb01 ~]# tail -f /data/logs/bbs.access.log
[root@wangzb03 ~]# tail -f /data/logs/bbs.access.log

點選瀏覽器論壇介面檢視日誌bbs.access.log是否有打印出來,如果有說明訪問該主機成功。注意如果切換Windows下的hosts域名解析後,需要重啟瀏覽器清楚快取,不然日誌還是記錄到切換前的主機裡。


3. LVS負載均衡介紹

幾個專業術語:DIR(分發器)DIP(DIR的IP)  RS(真實伺服器)  VIP(虛擬IP,也是提供服務的IP)  


LVS三種模式(http://www.it165.net/admin/html/201401/2248.html)

NAT模式(Network address translation)

用iptables的NAT表實現網路地址轉換,資料包目標IP為DIP,DIR將目標IP地址轉換為RS的IP,
這樣請求的包就到了RS上,而RS返回的資料包本來是到DIP的,也會經過DIR轉換,
把目標IP轉換為客戶端的IP


DR模式(direct routing)

DIR會改請求報文中的MAC地址,本來請求的包中的MAC地址為DIR的MAC地址,但是卻被修改成了
RS的MAC地址,這樣資料包就到了RS上。由於資料包的源IP為客戶端IP,所以它在返回資料包的時候,
可以直接發給客戶端,而不再經過DIR。	


Tunnel模式(ip tunneling)

客戶端請求的資料包發給DIR,DIR會近一步把包封裝,加上了一個新的目標IP(RS的IP),這樣
資料包到了RS後再將封裝的包拆開,獲得原始資料包。返回資料包的時候,也是直接發給了客戶端。


LVS八種排程演算法

輪叫(round Robin)

排程器通過"輪叫"排程演算法將外部請求按順序輪流分配到叢集中的真實伺服器上,
它均等地對待每一臺伺服器,而不管伺服器上實際的連線數和系統負載。


加權輪叫(Weighted Round Robin)

排程器通過"加權輪叫"排程演算法根據真實伺服器的不同處理能力來排程訪問請求。
這樣可以保證處理能力強的伺服器處理更多的訪問流量。排程器可以自動問詢真實伺服器的負載情況,
並動態地調整其權值。


最少連結(Least Connections)

排程器通過"最少連線"排程演算法動態地將網路請求排程到已建立的連結數最少的伺服器上。
如果集群系統的真實伺服器具有相近的系統性能,採用"最小連線"排程演算法可以較好地均衡負載。


加權最少連結(Weighted Least Connections)

在集群系統中的伺服器效能差異較大的情況下,排程器採用"加權最少連結"排程演算法優化負載均衡效能,
具有較高權值的伺服器將承受較大比例的活動連線負載。排程器可以自動問詢真實伺服器的負載情況,
並動態地調整其權值。


基於區域性性的最少連結(Locality-Based Least Connections)

"基於區域性性的最少連結" 排程演算法是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。
該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該伺服器 是可用的且沒有超載,
將請求傳送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,
則用"最少連結"的原則選出一個可用的服務 器,將請求傳送到該伺服器。


帶複製的基於區域性性最少連結(Locality-Based Least Connections with Replication)

"帶複製的基於區域性性最少連結"排程演算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。
它與LBLC演算法的不同之處是它要維護從一個 目標IP地址到一組伺服器的對映,
而LBLC演算法維護從一個目標IP地址到一臺伺服器的對映。該演算法根據請求的目標IP地址找出該目標IP地址
對應的服務 器組,按"最小連線"原則從伺服器組中選出一臺伺服器,若伺服器沒有超載,
將請求傳送到該伺服器,若伺服器超載;則按"最小連線"原則從這個叢集中選出一 臺伺服器,
將該伺服器加入到伺服器組中,將請求傳送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,
將最忙的伺服器從伺服器組中刪除,以降低複製的 程度。


目標地址雜湊(Destination Hashing)

"目標地址雜湊"排程演算法根據請求的目標IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表
找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。


源地址雜湊(Source Hashing)

"源地址雜湊"排程演算法根據請求的源IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,
若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。


4. 搭建LVS負載均衡 - DR模式

準備

三臺機器: 
wangzb01(133)  -> RS1
wangzb03(35)  -> RS2
wangzb02(135)  -> DIR

VIP: 100


在DIR上操作:

安裝ipvsadm:

yum install -y ipvsadm

編輯指令碼

vim /usr/local/sbin/lvs_dr.sh //內容如下

#! /bin/bash
ipv=/usr/sbin/ipvsadm
vip=192.168.222.100
rs1=192.168.222.128
rs2=192.168.222.130
#注意這裡的網絡卡名字
#之所以要先重啟ens33網絡卡,是為了防止指令碼重複執行時和之前的配置衝突
ifdown ens33
ifup ens33
#增加ens33:1虛擬網絡卡,並把vip配置在ens33:1上
ifconfig ens33:1 $vip broadcast $vip netmask 255.255.255.255 up
#增加路由
route add -host $vip dev ens33:1
#-C表示清空之前的規則
$ipv -C
#-A表示增加規則,-t指定vip以及port,-s指定排程演算法,這裡還有一個-p選項,後面跟時間(單位s),表示保持長連線
$ipv -A -t $vip:80 -s wrr
#-a表示增加rs,-r指定具體的rsip和port,-g表示使用dr模式(-i表示ip tunnel模式,-m表示NAT模式),-w指定權重
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
# 指令碼內容到此結束



執行指令碼

sh /usr/local/sbin/lvs_dr.sh

檢查:ip add

在兩臺RS上編輯指令碼

vim /usr/local/sbin/lvs_rs.sh //內容如下:

#!/bin/bash
vip=192.168.222.100
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#更改arp核心引數,目的是為了讓rs順利傳送mac地址給客戶端
#參考文件https://www.imooc.com/article/79661
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce



執行指令碼

sh /usr/local/sbin/lvs_rs.sh

測試

windows hosts 瀏覽器<