爲論壇作負載均衡集羣

1. 克隆虛擬機

修改IP地址
修改主機名

2. 準備工做

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

測試: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 bbs@127.0.0.1                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| 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(135)  -> RS2
wangzb02(35)  -> DIR

VIP: 35

在DIR上操做:

安裝ipvsadm:

yum install -y ipvsadm

編輯腳本

vim /usr/local/sbin/lvs_dr.sh //內容以下html

#! /bin/bash
ipv=/usr/sbin/ipvsadm
vip=192.168.153.35
rs1=192.168.153.133
rs2=192.168.153.135
#注意這裏的網卡名字
#之因此要先重啓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.shmysql

檢查:ip addlinux

在兩臺RS上編輯腳本

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

#!/bin/bash
vip=192.168.153.35
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 瀏覽器sql

linux curl vip數據庫

相關文章
相關標籤/搜索