1. 程式人生 > >3-7-LVS實現企業負載均衡高級應用配置實戰2

3-7-LVS實現企業負載均衡高級應用配置實戰2

request ifconfig receive fall 解決方案 www. 問題 應用 日誌

健康邏輯:
網絡層檢測:能不能ping通,有可能有誤差,服務不知道在不在線
傳輸層檢測:80或443端口,tcp ping 或udp ping,但是不知道服務可用不可用(頁面資源被刪)
更向上一層,應用層檢測資源,狀態碼必須是200,內容必須包含我檢測的關鍵字,但是會記錄日誌,會幹擾
做哪一層的檢測,自己決定,而且檢測不是一次有問題就認為有問題,(這叫做軟狀態)連續3次以後就轉換為硬狀態(自己設置)或者10次以內有多少次有問題,轉換硬狀態

註意:腳本的執行效率很差,因為腳本不是專門的編程語言,它的實現是調用系統命令,每執行一個命令就啟用一個進程,所以對時間要求較嚴格(防止一個時鐘周期過去,命令沒有執行完成)
ldirectord:是為了輔助lvs對後端RS進行健康檢測的,並且作為守護進程來實現周期檢測

有兩個站點是用來搜索rpm包的:rpmfind.net和pkgs.org
視頻中的課件,接上一節課

考慮:
    (1)Director不可用,整個系統將不可用;SPoF
        解決方案:高可用
            keepalived
            heartbeat/corosync
    (2)某RS不可用時,Director依然會調度請求至此RS;
        解決方案:對各RS的健康狀態做檢查,失敗時禁用,成功時啟用;
            keepalived---可以高可用,也可以健康檢測
            ldirectord---只能健康檢測,而且增刪操作是直接調用內核的api不需要ipvsadm命令
        檢測方式:
        (a)網絡層檢測;
        (b)傳輸層檢測,端口探測;
        (c)應用層檢測,請求某關鍵資源;---不同服務檢測機制不一樣

        ok-->failure
        failure-->ok

ldirectord:
配置示例:
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=no
virtual=5
real=172.16.0.7:80 gate 2
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate
service=http
scheduler=wr
checktype=negotiate
checkport=80
request="index.html"
receive="CentOS"

補充:共享存儲
    NAS:Network Attached Storage
        nfs/cifs
        文件系統解耦
    SAN:Storage Area Network
        "塊"接口

ldirectord需要自己安裝,去rpmfind.net或者pkgs.org站點搜索
yum install -y ldirectord---有可能本機沒有,需要自己下載
rpm -ql ldirectord可以查看安裝這個命令後修改的文件
less 可以查看腳本中默認的配置文件位置(視頻中說可以自己指定位置)
如果不指定配置文件,默認配置文件放在/etc/ha.d/conf/下
less /etc/init.d/ldirectord---讀取一下腳本中的配置文件地址/etc/ha.d/ldirectord.cf
默認是沒有配置文件的,但是可以從rpm -ql命令中看到有一個配置模板,復制到腳本中指定的位置然後編輯
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/---復制模板
vim ldirectord.cf---編輯配置文件

下面講配置文件
global directives---全局配置checktimeout=3---超時時長
checkinterval=1---每隔多長時間檢測一次
#fallback=127.0.0.1:80---如果rs全掛了,會由這個主機提供服務
#fallback6=[::1]:80
autoreload=yes---如果配置文件發生改變,會自動加載
logfile="/var/log/ldirectord.log"---自己指定日誌地址
#logfile="local0"---由rsyslog來收集日誌
#emailalert="[email protected]"---出現問題給誰發郵件
br/>checktimeout=3---超時時長
checkinterval=1---每隔多長時間檢測一次
#fallback=127.0.0.1:80---如果rs全掛了,會由這個主機提供服務
#fallback6=[::1]:80
autoreload=yes---如果配置文件發生改變,會自動加載
logfile="/var/log/ldirectord.log"---自己指定日誌地址
#logfile="local0"---由rsyslog來收集日誌
#emailalert="[email protected]"---出現問題給誰發郵件
#emailalertstatus=all---什麽狀態發郵件
quiescent=no---不要工作在靜默模式

配置文件中一個virtual就代表一個虛擬主機
#Sample for an http virtual service
virtual=172.16.0.99:80---vip和端口
real=172.16.0.7:80 gate---rip和端口,gate表示-g dr類型
real=172.16.0.8:80 gate
fallback=127.0.0.1:80 gate
service=http---指明應用層是什麽協議
scheduler=rr
#persistent=600---要不要做持久連接
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80---有可能和上邊的port不一致,因為有可能專門有一臺虛擬主機用來接收檢測,否則會產生大量日誌信息
request="test1.html"---請求哪個頁面
#receive="Test Page"---期望請求頁面中包含什麽
#virtualhost=www.x.y.z---指定向哪個虛擬主機發請求

下邊不是講解配置文件了,而是操作步驟
在Directory:172.16.0.6上
yum install -y nginx---安裝nginx服務,就是為了提供一個say sorry的服務
mkdir /data/nginx/html -pv
vim /data/nginx/html/inde.html---創建sorry主頁
<h1>Maintanance Time</h1>---例行維護時間

vim /etc/nginx/nginx.conf---定義一個虛擬主機,下邊的server配置沒有記錄完全,視頻中用的是nginx提供的默認虛擬主機,只是把root改了
server {
listen 80 default_server;
servername ;
root /data/nginx/html;
}

nginx -t---檢查語法錯誤
systemctl start nginx.service
ss -tnl---查看80端口已經啟動起來了

ipvsadm -ln---查看一下規則
ipvsadm -C---把自己的ipvsadm規則全部刪除
ifconfig eno16777736:0 172.16.0.99 netmask 255.255.255.255 broadcast 172.16.0.00 up---添加vip
service ldirectord start---啟動ldirectord服務
ipvsadm -ln---查看有沒有加進來,sorry server加進來了,其他rs檢測失敗了
curl http://172.16.0.99
<h1>Maintanance Time</h1>---會看到自己定義的sorry server網頁
後端服務器RS啟用以後,執行curl http://172.16.0.99/test1.html是可以訪問到的


上邊講的是定義單一服務,下邊講定義防火墻標記的集群服務。
配置文件:
#Sample configuration for a fwmark based service For an explanation of
#fwmark see the ipvsadm(8) man page
virtual=3
real=172.16.0.7 gate---因為是防火墻標記,所以不要加端口
real=172.16.0.8 gate
fallback=127.0.0.1:80 gate
service=http---指明應用層是什麽協議
scheduler=rr
#persistent=600---要不要做持久連接
#netmask=255.255.255.255
protocol=fwm---協議是防火墻標記
checktype=negotiate
checkport=80---有可能和上邊的port不一致,因為有可能專門有一臺虛擬主機用來接收檢測,否則會產生大量日誌信息
request="test1.html"---請求哪個頁面
#receive="Test Page"---期望請求頁面中包含什麽
#virtualhost=www.x.y.z---指定向哪個虛擬主機發請求
然後重啟服務
service ldirectord restart
ipvsadm -ln---可以看到生成了新規則(防火墻標記為3的新規則)
後邊講發布,更新服務,淩晨發布,先下線一部分,用腳本發布並保留老的服務(只是一個鏈接,方便替換)

3-7-LVS實現企業負載均衡高級應用配置實戰2