lvs編譯
① 求集群管理的相關知識!
集群技術案例介紹和具體操作
集群技術案例介紹和具體操作
中國科學院西安網路中心 中科紅旗linux培訓認證中心
集群技術
1.1 什麼是集群
簡單的說,集群(cluster)就是一組計算機,它們作為一個整體向用戶提
供一組網路資源。這些單個的計算機系統就是集群的節點(node)。一個理想的
集群是,用戶從來不會意識到集群系統底層的節點,在他/她們看來,集群是一
個系統,而非多個計算機系統。並且集群系統的管理員可以隨意增加和刪改集群
系統的節點。
1.2 為什麼需要集群
集群並不是一個全新的概念,其實早在七十年代計算機廠商和研究機構就
開始了對集群系統的研究和開發。由於主要用於科學工程計算,所以這些系統並
不為大家所熟知。直到Linux集群的出現,集群的概念才得以廣為傳播。
對集群的研究起源於集群系統良好的性能可擴展性(scalability)。提高CPU
主頻和匯流排帶寬是最初提供計算機性能的主要手段。但是這一手段對系統性能的
提供是有限的。接著人們通過增加CPU個數和內存容量來提高性能,於是出現了
向量機,對稱多處理機(SMP)等。但是當CPU的個數超過某一閾值,象SMP這些
多處理機系統的可擴展性就變的極差。主要瓶頸在於CPU訪問內存的帶寬並不能
隨著CPU個數的增加而有效增長。與SMP相反,集群系統的性能隨著CPU個數的
增加幾乎是線性變化的。圖1顯示了這中情況。
圖1. 幾種計算機系統的可擴展性
對於關鍵業務,停機通常是災難性的。因為停機帶來的損失也是巨大的。下
面的統計數字列舉了不同類型企業應用系統停機所帶來的損失。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
應用系統每分鍾損失(美元)
呼叫中心(Call Center) 27000
企業資源計劃(ERP)系統13000
供應鏈管理(SCM)系統11000
電子商務(eCommerce)系統10000
客戶服務(Customer Service Center)系統27000
圖2:停機給企業帶來的損失
隨著企業越來越依賴於信息技術,由於系統停機而帶來的損失也越拉越大。
集群系統的優點並不僅在於此。下面列舉了集群系統的主要優點:
高可擴展性:如上所述。
高可用性:集群中的一個節點失效,它的任務可傳遞給其他節點。可以有效防止單點失效。
高性能:負載平衡集群允許系統同時接入更多的用戶。
高性價比:可以採用廉價的符合工業標準的硬體構造高性能的系統。
2.1 集群系統的分類
雖然,根據集群系統的不同特徵可以有多種分類方法,但是一般把集群系統分為兩類:
(1)、高可用(High Availability)集群,簡稱HA集群。
這類集群致力於提供高度可靠的服務。就是利用集群系統的容錯性對外提供7*24小時不間
斷的服務,如高可用的文件伺服器、資料庫服務等關鍵應用。
目前已經有在Linux下的高可用集群,如Linux HA項目。
負載均衡集群:使任務可以在集群中盡可能平均地分攤不同的計算機進行處理,充分利
用集群的處理能力,提高對任務的處理效率。
在實際應用中這幾種集群類型可能會混合使用,以提供更加高效穩定的服務。如在一個使
用的網路流量負載均衡集群中,就會包含高可用的網路文件系統、高可用的網路服務。
(2)、性能計算(High Perfermance Computing)集群,簡稱HPC集群,也稱為科學計算
集群。
在這種集群上運行的是專門開發的並行應用程序,它可以把一個問題的數據分布到多
台的計算機上,利用這些計算機的共同資源來完成計算任務,從而可以解決單機不能勝任
的工作(如問題規模太大,單機計算速度太慢)。
這類集群致力於提供單個計算機所不能提供的強大的計算能力。如天氣預報、石油勘探與油
藏模擬、分子模擬、生物計算等。這些應用通常在並行通訊環境MPI、PVM等中開發,由於MPI
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
是目前的標准,故現在多使用MPI為並行環境。
比較有名的集群Beowulf就是一種科學計算集群項目。
3、集群系統轉發方式和調度演算法
3.1轉發方式
目前LVS主要有三種請求轉發方式和八種調度演算法。根據請求轉發方式的不同,所構
架集群的網路拓撲、安裝方式、性能表現也各不相同。用LVS主要可以架構三種形式的集群,
分別是LVS/NAT、LVS/TUN和LVS/DR,可以根據需要選擇其中一種。
(1)、網路地址轉換(LVS/NAT)
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(2)、直接路由
(3)、IP隧道
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
三種轉發方式的比較:
3.2、調度演算法
在選定轉發方式的情況下,採用哪種調度演算法將決定整個負載均衡的性能表現,不同
的演算法適用於不同的應用場合,有時可能需要針對特殊場合,自行設計調度演算法。LVS的算
法是逐漸豐富起來的,最初LVS只提供4種調度演算法,後來發展到以下八種:
1.輪叫調度(Round Robin)
調度器通過「輪叫」調度演算法將外部請求按順序輪流分配到集群中的真實伺服器上,它均
等地對待每一台伺服器,而不管伺服器上實際的連接數和系統負載。
2.加權輪叫(Weighted Round Robin)
調度器通過「加權輪叫」調度演算法根據真實伺服器的不同處理能力來調度訪問請求。這樣
可以保證處理能力強的伺服器能處理更多的訪問流量。調度器可以自動詢問真實伺服器的
負載情況,並動態地調整其權值。
3.最少鏈接(Least Connections)
調度器通過「最少連接」調度演算法動態地將網路請求調度到已建立的鏈接數最少的伺服器
上。如果集群系統的真實伺服器具有相近的系統性能,採用「最小連接」調度演算法可以較
好地均衡負載。
4.加權最少鏈接(Weighted Least Connections)
在集群系統中的伺服器性能差異較大的情況下,調度器採用「加權最少鏈接」調度演算法優
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
化負載均衡性能,具有較高權值的伺服器將承受較大比例的活動連接負載。調度器可以自
動詢問真實伺服器的負載情況,並動態地調整其權值。
5.基於局部性的最少鏈接(Locality-Based Least Connections)
「基於局部性的最少鏈接」調度演算法是針對目標IP地址的負載均衡,目前主要用於Cache
集群系統。該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該服務
器是可用的且沒有超載,將請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且
有伺服器處於一半的工作負載,則用「最少鏈接」的原則選出一個可用的伺服器,將請求
發送到該伺服器。
6. 帶復制的基於局部性最少鏈接( Locality-Based Least Connections with
Replication)
「帶復制的基於局部性最少鏈接」調度演算法也是針對目標IP地址的負載均衡,目前主要
用於Cache集群系統。它與LBLC演算法的不同之處是它要維護從一個目標IP地址到一組服務
器的映射,而LBLC演算法維護從一個目標IP地址到一台伺服器的映射。該演算法根據請求的目
標IP地址找出該目標IP地址對應的伺服器組,按「最小連接」原則從伺服器組中選出一
台伺服器,若伺服器沒有超載,將請求發送到該伺服器;若伺服器超載,則按「最小連接
」原則從這個集群中選出一台伺服器,將該伺服器加入到伺服器組中,將請求發送到該服
務器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,
以降低復制的程度。
7.目標地址散列(Destination Hashing)
「目標地址散列」調度演算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分
配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,
否則返回空。
8.源地址散列(Source Hashing)
「源地址散列」調度演算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的
散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則
返回空。
了解這些演算法原理能夠在特定的應用場合選擇最適合的調度演算法,從而盡可能地保持
Real Server的最佳利用性。當然也可以自行開發演算法,不過這已超出本文范圍,請參考有
關演算法原理的資料。
4.1、什麼是高可用性
計算機系統的可用性(availability)是通過系統的可靠性(reliability)和可維護性
(maintainability)來度量的。工程上通常用平均無故障時間(MTTF)來度量系統的可靠性,
用平均維修時間(MTTR)來度量系統的可維護性。於是可用性被定義為:
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
MTTF/(MTTF+MTTR)*100%
業界根據可用性把計算機系統分為如下幾類:
可用比例
(Percent
Availability)
年停機時間
(downtime/year
)
可用性分類
99.5 3.7天
常規系統
(Conventional)
99.9 8.8小時可用系統(Available)
99.99 52.6分鍾
高可用系統(Highly
Available)
99.999 5.3分鍾Fault Resilient
99.9999 32秒Fault Tolerant
為了實現集群系統的高可用性,提高系統的高可性,需要在集群中建立冗餘機制。一個功
能全面的集群機構如下圖所示
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
負載均衡伺服器的高可用性
為了屏蔽負載均衡伺服器的失效,需要建立一個備份機。主伺服器和備份機上都運行
High Availability監控程序,通過傳送諸如「I am alive」這樣的信息來監控對方的運
行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主伺服器的服務IP並
繼續提供服務;當備份管理器又從主管理器收到「I am alive」這樣的信息是,它就釋放
服務IP地址,這樣的主管理器就開開始再次進行集群管理的工作了。為在住伺服器失效的
情況下系統能正常工作,我們在主、備份機之間實現負載集群系統配置信息的同步與備份,
保持二者系統的基本一致。
HA的容錯備援運作過程
自動偵測(Auto-Detect)階段 由主機上的軟體通過冗餘偵測線,經由復雜的監聽程序。邏
輯判斷,來相互偵測對方運行的情況,所檢查的項目有:
主機硬體(CPU和周邊)
主機網路
主機操作系統
資料庫引擎及其它應用程序
主機與磁碟陣列連線
為確保偵測的正確性,而防止錯誤的判斷,可設定安全偵測時間,包括偵測時間間隔,
偵測次數以調整安全系數,並且由主機的冗餘通信連線,將所匯集的訊息記錄下來,以供
維護參考。
自動切換(Auto-Switch)階段 某一主機如果確認對方故障,則正常主機除繼續進行原來的
任務,還將依據各種容錯備援模式接管預先設定的備援作業程序,並進行後續的程序及服
務。
自動恢復(Auto-Recovery)階段 在正常主機代替故障主機工作後,故障主機可離線進行修
復工作。在故障主機修復後,透過冗餘通訊線與原正常主機連線,自動切換回修復完成的
主機上。整個回復過程完成由EDI-HA自動完成,亦可依據預先配置,選擇回復動作為半自
動或不回復。
4.2、HA三種工作方式:
(1)、主從方式 (非對稱方式)
工作原理:主機工作,備機處於監控准備狀況;當主機宕機時,備機接管主機的一切工作,
待主機恢復正常後,按使用者的設定以自動或手動方式將服務切換到主機上運行,數據的
一致性通過共享存儲系統解決。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(2)、雙機雙工方式(互備互援)
工作原理:兩台主機同時運行各自的服務工作且相互監測情況,當任一台主機宕機時,另
一台主機立即接管它的一切工作,保證工作實時,應用服務系統的關鍵數據存放在共享存
儲系統中。
(3)、集群工作方式(多伺服器互備方式)
工作原理:多台主機一起工作,各自運行一個或幾個服務,各為服務定義一個或多個備用
主機,當某個主機故障時,運行在其上的服務就可以被其它主機接管。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
相關文檔
http://tech.sina.com.cn/it/2004-04-09/1505346805.shtml
http://stonesoup.esd.ornl.gov
LINUX下的集群實列應用
最近有客戶需要一個負載均衡方案,筆者對各種軟硬體的負載均衡方案進行了調查和
比較,從IBM sServer Cluster、Sun Cluster PlatForm 等硬體集群,到中軟、紅旗、
TurboLinux的軟體集群,發現無論採用哪個廠商的負載均衡產品其價格都是該客戶目前所
不能接受的。於是筆者想到了開放源項目Linux Virtual Server(簡稱LVS)。經過對LVS的研
究和實驗,終於在Red Hat 9.0上用LVS成功地構架了一組負載均衡的集群系統。整個實
現過程整理收錄如下,供讀者參考。
選用的LVS實際上是一種Linux操作系統上基於IP層的負載均衡調度技術,它在操
作系統核心層上,將來自IP層的TCP/UDP請求均衡地轉移到不同的伺服器,從而將一組
伺服器構成一個高性能、高可用的虛擬伺服器。使用三台機器就可以用LVS實現最簡單的集
群,如圖1所示。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
圖1 LVS實現集群系統結構簡圖
圖1顯示一台名為Director的機器在集群前端做負載分配工作;後端兩台機器稱之為
Real Server,專門負責處理Director分配來的外界請求。該集群的核心是前端的Director
機器,LVS就是安裝在這台機器上,它必須安裝Linux。Real Server則要根據其選用的負
載分配方式而定,通常Real Server上的設置比較少。接下來介紹Director機器上LVS的
安裝過程。
安裝
LVS的安裝主要是在Director機器上進行,Real Server只需針對不同的轉發方式做簡單
的設定即可。特別是對LVS的NAT方式,Real Server惟一要做的就是設一下預設的網關。
所以構架集群的第一步從安裝Director機器開始。
首先,要在Director機器上安裝一個Linux操作系統。雖然早期的一些Red Hat版本,
如6.2、7.2、8.0等自帶Red Hat自己的集群軟體,或者是在內核中已經支持LVS,但是為
了更清楚地了解LVS的機制,筆者還是選擇自行將LVS編入Linux內核的方式進行安裝,
Linux版本採用Red Hat 9.0。
如果用戶對Red Hat的安裝比較了解,可以選擇定製安裝,並只安裝必要的軟體包。
安裝中請選擇GRUB 做為啟動引導管理軟體。因為GRUB 在系統引導方面的功能遠比
LILO強大,在編譯Linux內核時可以體會它的方便之處。
LVS是在Linux內核中實現的,所以要對原有的Linux內核打上支持LVS的內核補丁,
然後重新編譯內核。支持LVS 的內核補丁可以從LVS 的官方網
http://www.linuxvirtualserver.org 下載,下載時請注意使用的Linux核心版本,必須下載和
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
使用的Linux內核版本相一致的LVS內核補丁才行。對於Red Hat 9.0,其Linux內核版本
是2.4.20,所以對應內核補丁應該是http://www.linuxvirtualserver.org/software/kernel-
2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。筆者經過多次實驗,使用Red Hat 9.0自帶的Linux
源代碼無法成功編譯LVS 的相關模組。由於時間關系筆者沒有仔細研究,而是另外從
kernel.org上下載了一個tar包格式的2.4.20內核來進行安裝,順利完成所有編譯。下面是
整個內核的編譯過程:
1.刪除Red Hat自帶的Linux源代碼
# cd /usr/src
# rm -rf linux*
2.下載2.4.20內核
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解壓到當前目錄/usr/src
# cd /usr/src
# tar -xjpvf linux-2.4.20.tar.bz2
4.建立鏈接文件
# cd /usr/src # ln -s linux-2.4.20 linux-2.4 # ln -s linux-2.4.20 linux
5.打上LVS的內核補丁
# cd /usr/src
#wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-
1.0.9.patch.gz
# gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
# cd /usr/src/linux
# patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
在打補丁時,注意命令執行後的信息,不能有任何錯誤信息,否則核心或模組很可能
無法成功編譯。
6.打上修正ARP問題的內核補丁
# cd /usr/src
# wget http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
# cd /usr/src/linux
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
# patch -p1 < ../hidden-2.4.20pre10-1.diff
這一步在Director機器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server
上必須做。
7.為新核心命名
打開/usr/src/linux/Makefile。注意,在開始部分有一個變數EXTRAVERSION可以自行定
義。修改這個變數,比如改成「EXTRAVERSION=-LVS」後,編譯出的核心版本號就會顯
示成2.4.20-LVS。這樣給出有含義的名稱將有助於管理多個Linux核心。
8.檢查源代碼
# make mrproper
這一步是為確保源代碼目錄下沒有不正確的.o文件及文件的互相依賴。因為是新下載的內
核,所以在第一次編譯時,這一步實際可以省略。
9.配置核心選項
# make menuconfig
命令執行後會進入一個圖形化的配置界面,可以通過這個友好的圖形界面對內核進行定製。
此過程中,要注意對硬體驅動的選擇。Linux支持豐富的硬體,但對於伺服器而言,用不到
的硬體驅動都可以刪除。另外,像Multimedia devices、Sound、Bluetooth support、Amateur
Radio support等項也可以刪除。
注意,以下幾項配置對LVS非常重要,請確保作出正確的選擇:
(1)Code maturity level options項
對此項只有以下一個子選項,請選中為*,即編譯到內核中去。
Prompt for development and/or incomplete code/drivers
(2)Networking options項
對此項的選擇可以參考以下的配置,如果不清楚含義可以查看幫助:
<*> Packet socket
[ ] Packet socket: mmapped IO
< > Netlink device emulation
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Socket Filtering
<*> Unix domain sockets
TCP/IP networking
IP: multicasting
IP: advanced router
IP: policy routing
[ ] IP: use netfilter MARK value as routing key
[ ] IP: fast network address translation
<M> IP: tunneling
IP: broadcast GRE over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ] IP: TCP Explicit Congestion Notification support
[ ] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
IP: Virtual Server Configuration --->
(3)Networking options項中的IP: Virtual Server Configuration項
如果打好了LVS的內核補丁,就會出現此選項。進入Virtual Server Configuration選項,
有以下子選項:
<M> virtual server support (EXPERIMENTAL)
IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheler
<M> round-robin scheling
<M> weighted round-robin scheling
<M> least-connection scheling scheling
<M> weighted least-connection scheling
<M> locality-based least-connection scheling
<M> locality-based least-connection with replication scheling
<M> destination hashing scheling
<M> source hashing scheling
<M> shortest expected delay scheling
<M> never queue scheling
--- IPVS application helper
<M> FTP protocol helper
以上所有項建議全部選擇。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(4)Networking options項中的IP: Netfilter Configuration項
對於2.4版本以上的Linux Kernel來說,iptables是取代早期ipfwadm和ipchains的
更好選擇,所以除非有特殊情況需要用到對ipchains和ipfwadm的支持,否則就不要選它。
本文在LVS/NAT方式中,使用的就是iptables,故這里不選擇對ipchains和ipfwadm的
支持:
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) support
10. 編譯內核
(1)檢查依賴關系
# make dep
確保關鍵文件在正確的路徑上。
(2)清除中間文件
# make clean
確保所有文件都處於最新的版本狀態下。
(3)編譯新核心
# make bzImage
(4)編譯模組
# make moles
編譯選擇的模組。
(5)安裝模組
# make moles_install
# depmod -a
生成模組間的依賴關系,以便modprobe定位。
(6)使用新模組
# cp System.map /boot/System.map-2.4.20-LVS
# rm /boot/System.map
# ln -s /boot/System.map-2.4.20-LVS /boot/System.map
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20-LVS
# rm /boot/vmlinuz
# ln -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz
# new-kernel-pkg --install --mkinitrd --depmod 2.4.20-LVS
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(7)修改GRUB,以新的核心啟動
執行完new-kernel-pkg命令後,GRUB的設置文件/etc/grub.conf中已經增加了新核心的
啟動項,這正是開始安裝Linux時推薦使用GRUB做引導程序的原因。
grub.conf中新增內容如下:
title Red Hat Linux (2.4.20-LVS)
root (hd0,0)
kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/
initrd /boot/initrd-2.4.20LVS.img
將Kernel項中的root=LABEL=/改成 root=/dev/sda1 (這里的/dev/sda1是筆者Linux的根
分區,讀者可根據自己的情況進行不同設置)。
保存修改後,重新啟動系統:
# reboot
系統啟動後,在GRUB的界面上會出現Red Hat Linux(2.4.20-LVS)項。這就是剛才編譯的
支持LVS的新核心,選擇此項啟動,看看啟動過程是否有錯誤發生。如果正常啟動,ipvs
將作為模塊載入。同時應該注意到,用LVS的內核啟動後在/proc目錄中新增了一些文件,
比如/proc/sys/net/ipv4/vs/*。
11.安裝IP虛擬伺服器軟體ipvsadm
用支持LVS的內核啟動後,即可安裝IP虛擬伺服器軟體ipvsadm了。用戶可以用tar包或
RPM 包安裝,tar 包可以從以下地址http://www.linuxvirtualserver.org/software/kernel-
2.4/ipvsadm-1.21.tar.gz 下載進行安裝。
這里採用源RPM包來進行安裝:
# wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm
# rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
注意:高版本的rpm命令去掉了--rebuild這個參數選項,但提供了一個rpmbuild命令來實
現它。這一點和以前在Red Hat 6.2中以rpm—rebuild XXX.src.rpm來安裝源RPM包的習
慣做法有所不同。
安裝完,執行ipvsadm命令,應該有類似如下的信息出現:
# ipvsadm
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
IP Virtual Server version 1.0.9 (size=4096)
Prot LocalAddress:Port Scheler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
出現類似以上信息,表明支持LVS 的內核和配置工具ipvsadm 已完全安裝,這台
Director機器已經初步安裝完成,已具備構架各種方式的集群的條件。
實例
理解了上述關於請求轉發方式和調度演算法的基本概念後,就可以運用LVS來具體實現
幾種不同方式的負載均衡的集群系統。LVS的配置是通過前面所安裝的IP虛擬伺服器軟體
ipvsadm來實現的。ipvsadm與LVS的關系類似於iptables和NetFilter的關系,前者只是
一個建立和修改規則的工具,這些命令的作用在系統重新啟動後就消失了,所以應該將這
些命令寫到一個腳本里,然後讓它在系統啟動後自動執行。網上有不少配置LVS的工具,
有的甚至可以自動生成腳本。但是自己手工編寫有助於更深入地了解,所以本文的安裝沒
有利用其它第三方提供的腳本,而是純粹使用ipvsadm命令來配置。
下面就介紹一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的負載均衡集群。
1.設定LVS/NAT方式的負載均衡集群
NAT是指Network Address Translation,它的轉發流程是:Director機器收到外界請求,
改寫數據包的目標地址,按相應的調度演算法將其發送到相應Real Server上,Real Server
處理完該請求後,將結果數據包返回到其默認網關,即Director機器上,Dire
② 怎樣從零開始學習linux
1. 基本功要扎實
學習任何一種語言,必備的基本功是必須要有的,一方面可以提高效率,另一方面可以拓寬思路。
對於Linux基本知識的學習,對一些初學者來說是枯燥乏味的,可以通過理解再背誦的方式先進行代碼及語法的學習,然後進行實踐操作,必須手動輸入命令行,不要藉助工具,這樣可以更快速有效的掌握Linux。
2. 學以致用
Linux學習的目的是應用,Linux基本知識是一些零散的技術,當沒有應用在項目上時,我們無法理解他的真實價值,所以打好基本功之後,最緊迫的是多做幾個完整的項目,剛開始可以是功能簡單的項目,之後可以選擇稍微復雜的項目,勤於動手,敢於實踐,一定能學好Linux。
3. 學會使用Linux聯機幫助
任何一種教材都不會完全講述Linux知識,一般講的都是比較常用的或者是比較有代表性的知識,但是,我們在項目應用中往往有些功能的實現是需要一些生僻知識和技能的,那麼,如何查找我們所需的知識呢,推薦查閱Linux幫助文檔,主流的Linux都自帶詳細的幫助文檔,很方便解決問題!
4. 在網上找資源
在Linux的學習和應用中,難免會遇到一些沒有思路、不知道如何解決的問題,這時就要藉助網路力量,可以通過搜索引擎搜索查找,也可以咨詢資深技術人員,最終實現問題的解決,這是Linux知識積累的一個重要的途徑!
5. 查閱英文技術文檔
如果想深入學習Linux,查閱英文技術文檔是十分必要的,往往最新的技術都是採用英文文檔的方式發布的,而且更全面,因此,對於Linux人員來說,多看一些Linux技術文檔,對於掌握前沿技術和加深知識是十分有必要的!
Linux學習是一個需要長期堅持不懈的過程,新的技術不斷的產生,要想成為Linux大牛,必須要時刻關注Linux發展動態,掌握最新技術,才能走在行業前列!
③ 如何使用LVS構架負載均衡Linux集群系統
集群和負載均衡的區別如下:1、集群(Cluster)
所謂集群是指一組獨立的計算機系統構成的一個松耦合的多處理器系統,它們之間通過網路實現進程間的通信?應用程序可以通過網路共享內存進行消息傳送,實現分布式計算機?
2、負載均衡(Load Balance)
網路的負載均衡是一種動態均衡技術,通過一些工具實時地分析數據包,掌握網路中的數據流量狀況,把任務合理均衡地分配出去?這種技術基於現有網路結構,提供了一種擴展伺服器帶寬和增加伺服器吞吐量的廉價有效的方法,加強了網路數據處理能力,提高了網路的靈活性和可用性?
3、特點
(1)高可靠性(HA)?利用集群管理軟體,當主伺服器故障時,備份伺服器能夠自動接管主伺服器的工作,並及時切換過去,以實現對用戶的不間斷服務?
(2)高性能計算(HP)?即充分利用集群中的每一台計算機的資源,實現復雜運算的並行處理,通常用於科學計算領域,比如基因分析?化學分析等?
(3)負載平衡?即把負載壓力根據某種演算法合理分配到集群中的每一台計算機上,以減輕主伺服器的壓力,降低對主伺服器的硬體和軟體要求?
LVS系統結構與特點
1. Linux Virtual Server:簡稱LVS?是由中國一個Linux程序員章文嵩博士發起和領導的,基於Linux系統的伺服器集群解決方案,其實現目標是創建一個具有良好的擴展性?高可靠性?高性能和高可用性的體系?許多商業的集群產品,比如RedHat的Piranha? Turbo Linux公司的Turbo Cluster等,都是基於LVS的核心代碼的?
2. 體系結構:使用LVS架設的伺服器集群系統從體系結構上看是透明的,最終用戶只感覺到一個虛擬伺服器?物理伺服器之間可以通過高速的 LAN或分布在各地的WAN相連?最前端是負載均衡器,它負責將各種服務請求分發給後面的物理伺服器,讓整個集群表現得像一個服務於同一IP地址的虛擬伺服器?
3. LVS的三種模式工作原理和優缺點: Linux Virtual Server主要是在負載均衡器上實現的,負載均衡器是一台加了 LVS Patch的2.2.x版內核的Linux系統?LVS Patch可以通過重新編譯內核的方法加入內核,也可以當作一個動態的模塊插入現在的內核中?
④ 技術面試會問很多技術問題嗎
筆者其實沒有想到去面試,只是在智聯上更新了一下簡歷,就陸陸續續接到很多獵頭的郵件和電話,實在是沒准備好要去面試,就推掉了幾家公司的面試了。正因為筆者也很久沒有面試了,筆者也想去面試學習一下,閑話少說,下面就分享給大家筆者在2018年1月4號上午10點30分的面試經歷:
首先,獵頭或者公司人資會把公司的介紹及崗位要求發到你郵箱(或者QQ、微信),下面這份是獵頭發給我的崗位說明,為了職業道德操守,公司的介紹和面試通知信息我就不貼出來了,我就把崗位要求貼出來:
職位描述:
1、 負責應用伺服器的安裝、配置、優化與維護;
2、 負責應用系統的日誌信息備份、管理、維護與分析;
3、 負責應用系統的日常監測於維護、故障處理、性能分析與優化;
4、 負責應用部署系統、環境配置系統、監控系統的開發、部署、升級與維護,建設高性能的運維平台。
崗位要求:
1、 熟悉Linux操作系統的基礎知識,熟練使用Linux常用操作命令;
2、 熟練配置Nginx、HAproxy 等應用相關軟體的部署、配置與優化維護;
3、 熟悉網路基礎知識、熟悉TCP/IP的工作原理,會配交換機或路由器,能熟練的對網路情況進行分析
4、 熟悉shell/perl/python中的一種或多種進行運維程序的開發;
5、 熟悉Nagios,Ganglia等監控軟體
看著上面的要求大家是不是覺得要求也不高啊,你要細看就會發現,這家公司要求的還挺多,不僅要會網路知識(熟悉TCP/IP好像是每家單位的都會寫這樣的要求),還要會開發技能。相信很多做運維的兄弟在網路這一塊是個頭疼的事情,都對交換機和路由器不怎麼會配置和管理。
然後,筆者詳細了解他們公司,了解崗位要求,在突擊復習一下可能會問到的知識點和技術點。到了面試的這天時間,早早的起床,把牙一定要刷干凈,特別是有口臭的兄弟,最好准備點口香糖,到達面試公司前嚼塊口香糖,以免因為口氣的原因熏到面試官,讓你在面試官心裡減分。早點要記得吃,如果你是下午面試的話也要吃午飯,吃早點了精氣神就有了。還要注意,帶上你的簡歷和一支筆,雖然他們那邊也會有你的簡歷,為了以防萬一還是准備好簡歷。
最後,關鍵點來了,就是和面試官溝通了,有筆試的公司會讓你做些面試題,沒有筆試就直接和面試官聊了,下面是我和面試官溝通完之後記住的一些問題,分享給大家看一下,筆者一共記住了7個問題,好像還有兩個問題實在想不起來了,如果大家有更恰當的回答一定要貼出來一起探討和進步:
1、介紹下自己?(幾乎每家公司首先都會讓你做個自我介紹,好像是必修課一樣)
筆者回答:此處省略筆者的自我介紹,筆者建議介紹自己的時間不宜過長,3-4分鍾為宜,說多了面試官會覺得你太啰嗦了。說太少了也不行,那樣會讓人感覺你的經歷太簡單了、太空了。正常情況下,一般你在做自我介紹的同時,面試官這個時候在看你的簡歷,他需要一邊看簡歷、一邊聽你介紹自己,如果你說個幾句話就把自己介紹完了,他肯定還沒緩過神來,對你的映像會減分的。在介紹的同時思維要清晰,邏輯要清楚,最好是根據你簡歷上寫的經歷來介紹,這樣可以把面試官的思路帶到你這里來,讓他思路跟著你走。不要東扯一句,西扯一句。竟量少介紹自己的性格、愛好(最好能不說就不說),你可以簡單羅列干過幾家公司(最多羅列3家公司/也包含目前所在的公司,注意順序不要亂),都在那幾家公司負責什麼工作,都用過什麼技術,在著重介紹一下你目前所在的公司是負責哪些工作的,可以稍微詳細一點介紹,不要讓面試官聽著暈頭轉向的感覺。
2、灰度發布如何實現?
筆者回答:其實對這個問題筆者也答的不好,就不寫出來誤導大家了。大家有好的方法可以共享出來。不過筆事後在知呼上看到了一位網友的建議覺得不錯,大家可以參考看一下 :https://www.hu.com/question/20584476
3、Mongodb熟悉嗎,一般部署幾台?
筆者回答:部署過,沒有深入研究過,一般mongodb部署主從、或者mongodb分片集群;建議3台或5台伺服器來部署。MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若乾片裡面,每個片只負責總數據的一部分。 對於客戶端來說,無需知道數據被拆分了,也無需知道服務端哪個分片對應哪些數據。數據在分片之前需要運行一個路由進程,進程名為mongos。這個路由器知道所有數據的存放位置,知道數據和片的對應關系。對客戶端來說,它僅知道連接了一個普通的mongod,在請求數據的過程中,通過路由器上的數據和片的對應關系,路由到目標數據所在的片上,如果請求有了回應,路由器將其收集起來回送給客戶端。
4、如何發布和回滾,用jenkins又是怎麼實現?
筆者回答:發布:jenkins配置好代碼路徑(SVN或GIT),然後拉代碼,打tag。需要編譯就編譯,編譯之後推送到發布伺服器(jenkins裡面可以調腳本),然後從分發伺服器往下分發到業務伺服器上。
回滾:按照版本號到發布伺服器找到對應的版本推送
5、Tomcat工作模式?
筆者回答:Tomcat是一個JSP/Servlet容器。其作為Servlet容器,有三種工作模式:獨立的Servlet容器、進程內的Servlet容器和進程外的Servlet容器。
進入Tomcat的請求可以根據Tomcat的工作模式分為如下兩類:
Tomcat作為應用程序伺服器:請求來自於前端的web伺服器,這可能是Apache, IIS, Nginx等;
Tomcat作為獨立伺服器:請求來自於web瀏覽器;
6、監控用什麼實現的?
筆者回答:現在公司的業務都跑在阿里雲上,我們首選的監控就是用阿里雲監控,阿里雲監控自帶了ECS、RDS等服務的監控模板,可結合自定義報警規則來觸發監控項。上家公司的業務是託管在IDC,用的是zabbix監控方案,zabbix圖形界面豐富,也自帶很多監控模板,特別是多個分區、多個網卡等自動發現並進行監控做得非常不錯,不過需要在每台客戶機(被監控端)安裝zabbix agent。
7、你是怎麼備份數據的,包括資料庫備份?
筆者回答:在生產環境下,不管是應用數據、還是資料庫數據首先在部署的時候就會有主從架構、或者集群,這本身就是屬於數據的熱備份;其實考慮冷備份,用專門一台伺服器做為備份伺服器,比如可以用rsync+inotify配合計劃任務來實現數據的冷備份,如果是發版的包備份,正常情況下有台發布伺服器,每次發版都會保存好發版的包。
總結
總結一下面試注意幾點事項,可能筆者也說得不太對,為了我們運維工作的兄弟們都能拿到高薪,大家一定要指證出來一起進步、一起探討:
第一,你要對自己的簡歷很熟悉,簡歷上的寫的技能自己一定要能說出個一二,因為面試官的很多問題都會挑你簡歷上寫的問。比如你簡歷上寫了這么一條技能「熟悉mysql資料庫的部署安裝及原理」。你即然寫了這么一條技能,你在怎麼不熟悉你也要了解mysql的原理,能說出個大概意思。萬一面試官問到了你寫的這一條,你都答不上來,那在他心裡你又減分了,基本上這次面試希望不大。
第二,如果面試官問到你不會的問題,你就說這個不太熟悉,沒有具體研究過,千萬別不懂裝懂,還扯一堆沒用的話題來掩飾,這樣只會讓面試官反感你。
第三,准備充分,竟可能多的記住原理性的知識,一般面試問的多的就是原理。很少問具體的配置文件是怎麼配置的。面試前也要了解清楚「職位描述」和「崗位要求」,雖然有時候大多數不會問到崗位要求的問題,但也要了解和熟悉。
第四,面試完後一定要總結,盡量記住面試官問的每一個問題,回去記錄下來,如果問到不會的問題,事後要立馬查網路或者找朋友搞清楚、弄明白,這樣你才能記勞,下次面試說不定又問到同樣的問題。
問完之後,面試官就跟我聊薪資待遇了,問我多少錢能達到自己的要求,我就不便透露了,可以私聊,哈哈,後續筆者會陸陸續續更新以前面試的經歷和問題,有需要的朋友可以轉載或者收藏起來一起討論。
基於大家熱情高昂的氣氛,筆者又花了一個下午的時間回憶並整理在2017年2月24號筆者在東三環邊上(快到東四環了,沒有地鐵過去,到了四惠還要轉公交車)的一家傳媒公司的面試經歷,還好筆者有做筆記的習慣,把之前面試的問題都記錄在案,這一次的面試筆者可是記憶猶新,因為這次這家公司都跟筆者發offer了,實在是真心不想去這家公司就找原因推掉了,大家可別學我這么不靠譜。下面是這家公司中的崗位要求說明:
崗位職責:
1、負責公司產品的版本控制、構建和發布管理;
2、負責公司統一配置庫管理工作,許可權管理與分配准確及時,定期完成配置備份;
3、負責公司內部開發/測試伺服器的運行管理工作;
4、負責Linux操作系統的安裝、配置、監控和維護、問題處理、軟體升級、 數據備份、應急響應、故障排除等、保證線上環境的穩定運行;
5、負責支撐平台24×7穩定運行,並進行前瞻性容量規劃;
6、負責公司機房伺服器日常維護及網路系統安裝、部署、維護工作。
崗位要求:
1、計算機相關專業本科及以上學歷,2年以上運維或配置管理工作經驗;
2、至少熟悉一種監控系統搭建,如Nagios/Zabbix/等;
3、至少熟悉一種集群管理工具,如Ansible/SaltStack等;
4、有使用集成發布工具發布構建經驗優先。比如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系統,熟悉Weblogic/tomcat等中間件,能夠編寫shell腳本,熟悉軟體開發過程及過程產品,有一定的網路基礎;
6、熟悉rsyslog, flume等日誌收集和處理系統;
7、具有強烈的安全意識及較強的溝通協調和學習能力,良好的團隊合作精神,工作積極主動。
過去之後,前台美眉把我帶到他們公司的地下室,我掃視了一下周圍的環境,貌似旁邊就是機房,因為我聽到伺服器的聲音。等了幾分鍾,面試官下來了,面試官目測比較瘦,看著跟我身材差不多(應該不到120),他說他是負責運維部的,然後開始就叫我先自我介紹,都是一個套路,免不了介紹的,所以兄弟們一定要把自我介紹練好。然後開始問我問題了,跟面試官聊得還行,問我應該有不下10個以上的問題,我記住了下面有10個問題:
1、LVS負載的原理,和Nginx負載有啥區別?
筆者回答:這個問題我覺得面試官司沒問好,正常都會這么問「LVS有哪些負載均衡技術和調度演算法?"。我回答就是按我說的這種問法回答的,反正他也頻繁點頭,當然,筆者回答的可能沒有下面我整理出來的那麼詳細,大概意思我都說明白了。
LVS是Liunx虛擬伺服器的簡稱,利用LVS提供的負載均衡技術和linux操作系統可實現高性能、高可用的伺服器集群,一般LVS都是位於整個集群系統的最前端,由一台或者多台負載調度器(Director Server)組成,分發給應用伺服器(Real Server)。它是工作在4層(也就是TCP/IP中的傳輸層),LVS是基於IP負載均衡技術的IPVS模塊來實現的,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:
VS/NAT: 即(Virtual Server via Network Address Translation)
也就是網路地址翻譯技術實現虛擬伺服器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標埠也改成選定的Real Server的相應埠,最後將報文請求發送到選定的Real Server。在伺服器端得到數據後,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源埠改成虛擬IP地址和相應埠,然後把數據發送給用戶,完成整個負載調度過程。
可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬伺服器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬伺服器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
回答負載調度演算法,IPVS實現在八種負載調度演算法,我們常用的有四種調度演算法(輪叫調度、加權輪叫調度、最少鏈接調度、加權最少鏈接調度)。一般說了這四種就夠了,也不會需要你詳細解釋這四種演算法的。你只要把上面3種負載均衡技術講明白面試官就對這道問題很滿意了。接下來你在簡單說下與nginx的區別:
LVS的優點:
抗負載能力強、工作在第4層僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體里的性能最強的;無流量,同時保證了均衡器IO的性能不會受到大流量的影響;
工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
應用范圍比較廣,可以對所有應用做負載均衡;
配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。
LVS的缺點:
軟體本身不支持正則處理,不能做動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優勢。
如果網站應用比較龐大,LVS/DR+Keepalived就比較復雜了,特別是後面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單一點
Nginx的優點:
工作在OSI第7層,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則比HAProxy更為強大和靈活;
Nginx對網路的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在;
Nginx安裝和配置比較簡單,測試起來比較方便;
可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的並發量;
Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點;
Nginx不僅僅是一款優秀的負載均衡器/反向代理軟體,它同時也是功能強大的Web應用伺服器。LNMP現在也是非常流行的web環境,大有和LAMP環境分庭抗禮之勢,Nginx在處理靜態頁面、特別是抗高並發方面相對apache有優勢;
Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid伺服器更快,有需求的朋友可以考慮用其作為反向代理加速器;
Nginx的缺點:
Nginx不支持url來檢測。
Nginx僅能支持http和Email,這個它的弱勢。
Nginx的Session的保持,Cookie的引導能力相對欠缺。
2、redis集群的原理,redis分片是怎麼實現的,你們公司redis用在了哪些環境?
筆者回答:reids集群原理:
其實它的原理不是三兩句話能說明白的,redis 3.0版本之前是不支持集群的,官方推薦最大的節點數量為1000,至少需要3(Master)+3(Slave)才能建立集群,是無中心的分布式存儲架構,可以在多個節點之間進行數據共享,解決了Redis高可用、可擴展等問題。集群可以將數據自動切分(split)到多個節點,當集群中的某一個節點故障時,redis還可以繼續處理客戶端的請求。
redis分片:
分片(partitioning)就是將你的數據拆分到多個 Redis 實例的過程,這樣每個實例將只包含所有鍵的子集。當數據量大的時候,把數據分散存入多個資料庫中,減少單節點的連接壓力,實現海量數據存儲。分片部署方式一般分為以下三種:
(1)在客戶端做分片;這種方式在客戶端確定要連接的redis實例,然後直接訪問相應的redis實例;
(2)在代理中做分片;這種方式中,客戶端並不直接訪問redis實例,它也不知道自己要訪問的具體是哪個redis實例,而是由代理轉發請求和結果;其工作過程為:客戶端先將請求發送給代理,代理通過分片演算法確定要訪問的是哪個redis實例,然後將請求發送給相應的redis實例,redis實例將結果返回給代理,代理最後將結果返回給客戶端。
(3)在redis伺服器端做分片;這種方式被稱為「查詢路由」,在這種方式中客戶端隨機選擇一個redis實例發送請求,如果所請求的內容不再當前redis實例中它會負責將請求轉交給正確的redis實例,也有的實現中,redis實例不會轉發請求,而是將正確redis的信息發給客戶端,由客戶端再去向正確的redis實例發送請求。
redis用在了哪些環境:
java、php環境用到了redis,主要緩存有登錄用戶信息數據、設備詳情數據、會員簽到數據等
3、你會怎麼統計當前訪問的IP,並排序?
筆者回答:統計用戶的訪問IP,用awk結合uniq、sort過濾access.log日誌就能統計並排序好。一般這么回答就夠了,當然你還可以說出其它方式來統計,這都是你的加分項。
4、你會使用哪些虛擬化技術?
筆者回答:vmware vsphere及kvm,我用得比較多的是vmware vsphere虛擬化,幾本上生產環境都用的vmware vsphere,kvm我是用在測試環境中使用。vmware 是屬於原生架構虛擬化技術,也就是可直接在硬體上運行。kvm屬於寄居架構的虛擬化技術,它是依託在系統之上運行。vmware vcenter
管理上比較方便,圖形管理界面功能很強大,穩定性強,一般比較適合企業使用。KVM管理界面稍差點,需要管理人員花費點時間學習它的維護管理技術。
5、假如有人反應,調取後端介面時特別慢,你會如何排查?
筆者回答:其實這種問題都沒有具體答案,只是看你回答的內容與面試官契合度有多高,能不能說到他想要的點上,主要是看你排查問題的思路。我是這么說的:問清楚反應的人哪個服務應用或者頁面調取哪個介面慢,叫他把頁面或相關的URL發給你,首先,最直觀的分析就是用瀏覽器按F12,看下是哪一塊的內容過慢(DNS解析、網路載入、大圖片、還是某個文件內容等),如果有,就對症下葯去解決(圖片慢就優化圖片、網路慢就查看內網情況等)。其次,看後端服務的日誌,其實大多數的問題看相關日誌是最有效分析,最好用tail -f 跟蹤一下日誌,當然你也要點擊測試來訪問介面日誌才會打出來。最後,排除sql,,找到sql去mysql執行一下,看看時間是否很久,如果很久,就要優化SQL問題了,expain一下SQL看看索引情況啥的,針對性優化。數據量太大的能分表就分表,能分庫就分庫。如果SQL沒啥問題,那可能就是寫的邏輯代碼的問題了,一行行審代碼,找到耗時的地方改造,優化邏輯。
6、mysql資料庫用的是主從讀寫分離,主庫寫,從庫讀,假如從庫無法讀取了、或者從庫讀取特別慢,你會如何解決?
筆者回答:這個問題筆者覺得回答的不太好,對mysql比較在行的朋友希望能給點建議。以解決問題為前提條件,先添加從庫數量,臨時把問題給解決,然後抓取slow log ,分析sql語句,該優化就優化處理。慢要不就是硬體跟不上,需要升級;要不就是軟體需要調試優化,等問題解決在細化。
7、cpu單核和多核有啥區別?
筆者回答:很少有面試官會問這樣的問題,即然問到了,也要老實回答。還好筆者之前了解過CPU,我是這么說的:雙核CPU就是能處理多份任務,順序排成隊列來處理。單核CPU一次處理一份任務,輪流處理每個程序任務。雙核的優勢不是頻率,而是對付同時處理多件事情。單核同時只能幹一件事,比如你同時在後台BT下載,前台一邊看電影一邊拷貝文件一邊QQ。
8、機械磁碟和固態硬碟有啥區別?
筆者回答:我擦,啥年代了,還問磁碟的問題,這面試官有點逗啊。那也要回答啊:
HDD代表機械硬碟,SSD代表固態硬碟。首先,從性能方面來說,固態硬碟幾乎完勝機械硬碟,固態硬碟的讀寫速度肯定要快機械硬碟,因為固態硬碟和機械硬碟的構造是完全不同的(具體的構造就沒必要解釋了)。其次,固態盤幾乎沒有噪音、而機械盤噪音比較大。還有就是,以目前的市場情況來看,一般機械盤容量大,價格低;固態盤容量小,價格偏高。但是企業還是首選固態盤。
9、說一下用過哪些監控系統?
筆者回答:這個監控的問題又問到了,筆者在2018年1月4號也被問到類似這樣的問題,筆者曾經用過zabbix、nagios、 cacit等。但是在這次面試中只說用過zabbix和nagios。說完了之後,面試官就讓我說一下這兩個監控有啥區別:
從web功能及畫圖來講:
Nagios簡單直觀,報警與數據都在同一頁面, 紅色即為問題項。Nagios web端不要做任何配置。 Nagios需要額外安裝插件,且插件畫圖不夠美觀。
Zabbix監控數據與報警是分開的,查看問題項需要看觸發器,查看數據在最新數據查看。而且zabbix有很多其它配置項, zabbix攜帶畫圖功能,且能手動把多個監控項集在一個圖中展示。
從監控服務來講:
Nagios自帶的監控項很少。對一些變動的如多個分區、多個網卡進行監控時需要手動配置。
Zabbix自帶了很多監控內容,感覺zabbix一開始就為你做了很多事,特別是對多個分區、多個網卡等自動發現並進行監控時,那一瞬間很驚喜,很省心的感覺。
從批量配置和報警來講:
Nagios對於批量監控主機,需要用腳本在server端新增host,並拷貝service文件。 Nagios用腳本來修改所有主機的services文件,加入新增服務。
Zabbix在server端配置自動注冊規則,配置好規則後,後續新增client端不需要對server端進行操作。 Zabbix只需手動在模板中新增一監控項即可。
總體來講:
Nagios要花很多時間寫插件,Zabbix要花很多時間探索功能。
Nagios更易上手,Nagios兩天弄會,Zabbix兩周弄會。
Zabbix畫圖功能比Nagios更強大
Zabbix對於批量監控與服務更改,操作更簡潔;Nagios如果寫好自動化腳本後,也很簡單,問題在於寫自動化腳本很費神。
10、給你一套環境,你會如何設計高可用、高並發的架構?
筆者回答:如果這套環境是部署在雲端(比如阿里雲),你就不用去考慮硬體設計的問題。可直接上阿里雲的SLB+ECS+RDS這套標準的高可用、高並發的架構。對外服務直接上SLB負載均衡技術,由阿里的SLB分發到後端的ECS主機;ECS主機部署多台,應用拆分在不同的ECS主機上,盡量細分服務。資料庫用RDS高可用版本(一主一備的經典高可用架構)、或者用RDS金融版(一主兩備的三節點架構)。在結合阿里其它的服務就完全OK,業務量上來了,主機不夠用了,直橫向擴容ECS主機搞定。
如果這套環境託管在IDC,那麼你就要從硬體、軟體(應用服務)雙面去考慮了。硬體要達到高可用、高並發公司必須買多套網路硬體設備(比如負載設備F5、防火牆、核心層交換、接入層交換)都必須要冗餘,由其是在網路設計上,設備之間都必須有雙線連接。設備如果都是跑的單機,其中一個設備掛了,你整個網路都癱瘓了,就談不上高可用、高並發了。其次在是考慮應用服務了,對外服務我會採用成熟的開源方案LVS+Keepalived或者Nginx+Keepalived,緩存層可以考慮redis集群及Mongodb集群,中間件等其它服務可以用kafka、zookeeper,圖片存儲可以用fastDFS或MFS,如果數據量大、又非常多,那麼可採用hadoop這一套方案。後端資料庫可採用 「主從+MHA」。這樣一套環境下來是絕對滿足高可用、高並發的架構
⑤ lvs+keepalived怎麼處理dos攻擊
被DoS攻擊時的現象大致有:
* 被攻擊主機上有大量等待的TCP連接;
* 被攻擊主機的系統資源被大量佔用,造成系統停頓;
* 網路中充斥著大量的無用的數據包,源地址為假地址;
* 高流量無用數據使得網路擁塞,受害主機無法正常與外界通訊;
* 利用受害主機提供的服務或傳輸協議上的缺陷,反復高速地發出特定的服務請求,使受害主機無法及時處理所有正常請求;
* 嚴重時會造成系統死機。
到目前為止,防範DoS特別是DDoS攻擊仍比較困難,但仍然可以採取一些措施以降低其產生的危害。對於中小型網站來說,可以從以下幾個方面進行防範:
主機設置:
即加固操作系統,對各種操作系統參數進行設置以加強系統的穩固性。重新編譯或設置Linux以及各種BSD系統、Solaris和Windows等操作系統內核中的某些參數,可在一定程度上提高系統的抗攻擊能力。
例如,對於DoS攻擊的典型種類—SYN Flood,它利用TCP/IP協議漏洞發送大量偽造的TCP連接請求,以造成網路無法連接用戶服務或使操作系統癱瘓。該攻擊過程涉及到系統的一些參數:可等待的數據包的鏈接數和超時等待數據包的時間長度。因此,可進行如下設置:
* 關閉不必要的服務;
* 將數據包的連接數從預設值128或512修改為2048或更大,以加長每次處理數據包隊列的長度,以緩解和消化更多數據包的連接;
* 將連接超時時間設置得較短,以保證正常數據包的連接,屏蔽非法攻擊包;
* 及時更新系統、安裝補丁。
防火牆設置:
仍以SYN Flood為例,可在防火牆上進行如下設置:
* 禁止對主機非開放服務的訪問;
* 限制同時打開的數據包最大連接數;
* 限制特定IP地址的訪問;
* 啟用防火牆的防DDoS的屬性;
* 嚴格限制對外開放的伺服器的向外訪問,以防止自己的伺服器被當做工具攻擊他人。
⑥ lvs fullnat 必須編譯內核么
fullnat開源已經有一陣子了,內核版本為2.6.32-220.23.1.e16,項目地址http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY。本屌編譯測試環境如下:
centos6.3 64位
編譯過程參照官方做法,只是融入後續的打rpm包的部分。過程如下:
一、下載相關代碼:
下載 kernel-2.6.32-220.23.1.el6.src.rpmlinux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
lvs-fullnat-synproxy.tar.gz
二、編譯內核
1、安裝kernel-2.6.32-220.23.1.el6.src.rpm
1
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm
2、生成內核源碼
默認的,你會在root家目錄下看到rpmbuild目
1
2
cd ~/rpmbuild/SPECS
rpmbuild -bp kernel.spec
3、對生成的內核源碼打patch默認的
1
2
3
4
5
6
7
8
9
10
#在/usr/local/src下解壓linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
tar zxf linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
#打patch
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
cp /usr/local/src/linux-2.6.32-220.23.1.el6.x86_64.lvs/lvs-2.6.32-220.23.1.el6.patch .
#淘寶將IP_VS改成了22,測試時遇到些麻煩,因此改為20了。
#vim .config
CONFIG_IP_VS_TAB_BITS=20
#你可以修改Makefile把內核的名稱做下標記(line:4)
EXTRAVERSION = .FNAT.shanks.e27.x86_64
4、make
1
2
3
make -j16
make moles_install
make install;
5、配置grub.conf
1
2
#vim /boot/grub/grub.conf
default=0
三、reboot
reboot之後uname -r看下是不是你想要的內核。
四、打內核rpm包
1、安裝kernel-2.6.32-220.23.1.el6.src.rpm
1
rpm -ivh /usr/local/src/kernel-2.6.32-220.23.1.el6.src.rpm
2、生成內核源碼目錄
1
rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec
3、復制出一份內核源碼目錄
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
cp -a linux-2.6.32-220.23.1.el6.x86_64/ linux-2.6.32-220.23.1.el6.x86_64_new
4、為內核打fullnat的patch
1
2
3
cd linux-2.6.32-220.23.1.el6.x86_64_new/
patch -p1 < /usr/local/src/lvs-2.6.32-220.23.1.el6.patch
cp .config ~/rpmbuild/SOURCES/config-x86_64-generic
5、刪除原來內核源碼目錄中的.config文件。
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
rm -rf .config
不刪的話,會在最後打rpm時遇到報錯
wKioL1NM8jWhm-LPAAK42XDh8KU043.jpg
6、打自己的patch
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
diff -uNr linux-2.6.32-220.23.1.el6.x86_64 linux-2.6.32-220.23.1.el6.x86_64_new/ > ../../SOURCES/lvs-2.6.32-220.23.1.el6.patch
7、編輯kernel.spec
1
2
3
4
5
6
7
8
9
vim ~/rpmbuild/SPECS/kernel.spec
line:9 打上個版本號
%define dist .e27
line:22 打上個名稱的標記
%define distro_build fnat.shanks
line:605 標記下自己的patch
Patch999999: lvs-2.6.32-220.23.1.el6.patch
line:915 讓自己的patch生效
ApplyOptionalPatch lvs-2.6.32-220.23.1.el6.patch
8、打rpm
1
rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=x86_64 SPECS/kernel.spec
1
2
3
4
5
6
7
8
9
10
11
12
在這里如果遇到這樣的報錯:
+ cp /root/rpmbuild/SOURCES/Mole.kabi_x86_64 /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Mole.kabi
+ /root/rpmbuild/SOURCES/check-kabi -k /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Mole.kabi -s Mole.symvers
*** ERROR - ABI BREAKAGE WAS DETECTED ***
The following symbols have been changed (this will cause an ABI breakage):
register_ip_vs_scheler
unregister_ip_vs_scheler
+ exit 1
error: Bad exit status from /var/tmp/rpm-tmp.0Wfj33 (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.0Wfj33 (%build)
可以在rpmbuild的時候加上--without kabichk
參考:https://fedoraproject.org/wiki/Building_a_custom_kernel/zh-cn
http://wiki.centos.org/HowTos/Custom_Kernel
⑦ 伺服器集群,負載均衡,分布式等問題
集群和負載均衡的區別如下:
1、集群(Cluster)
所謂集群是指一組獨立的計算機系統構成的一個松耦合的多處理器系統,它們之間通過網路實現進程間的通信?應用程序可以通過網路共享內存進行消息傳送,實現分布式計算機?
2、負載均衡(Load Balance)
網路的負載均衡是一種動態均衡技術,通過一些工具實時地分析數據包,掌握網路中的數據流量狀況,把任務合理均衡地分配出去?這種技術基於現有網路結構,提供了一種擴展伺服器帶寬和增加伺服器吞吐量的廉價有效的方法,加強了網路數據處理能力,提高了網路的靈活性和可用性?
3、特點
(1)高可靠性(HA)?利用集群管理軟體,當主伺服器故障時,備份伺服器能夠自動接管主伺服器的工作,並及時切換過去,以實現對用戶的不間斷服務?
(2)高性能計算(HP)?即充分利用集群中的每一台計算機的資源,實現復雜運算的並行處理,通常用於科學計算領域,比如基因分析?化學分析等?
(3)負載平衡?即把負載壓力根據某種演算法合理分配到集群中的每一台計算機上,以減輕主伺服器的壓力,降低對主伺服器的硬體和軟體要求?
LVS系統結構與特點
1. Linux Virtual Server:簡稱LVS?是由中國一個Linux程序員章文嵩博士發起和領導的,基於Linux系統的伺服器集群解決方案,其實現目標是創建一個具有良好的擴展性?高可靠性?高性能和高可用性的體系?許多商業的集群產品,比如RedHat的Piranha? Turbo Linux公司的Turbo Cluster等,都是基於LVS的核心代碼的?
2. 體系結構:使用LVS架設的伺服器集群系統從體系結構上看是透明的,最終用戶只感覺到一個虛擬伺服器?物理伺服器之間可以通過高速的 LAN或分布在各地的WAN相連?最前端是負載均衡器,它負責將各種服務請求分發給後面的物理伺服器,讓整個集群表現得像一個服務於同一IP地址的虛擬伺服器?
3. LVS的三種模式工作原理和優缺點: Linux Virtual Server主要是在負載均衡器上實現的,負載均衡器是一台加了 LVS Patch的2.2.x版內核的Linux系統?LVS Patch可以通過重新編譯內核的方法加入內核,也可以當作一個動態的模塊插入現在的內核中?
⑧ VS2015 win32 編譯的時候 createwindow不支持 LVS_REPORT類型。
用ctrl+f5運行試試
⑨ linux的什麼內核版本中包括了lvs
要自己手動編譯的。
根據不同版本內核,下載不同的lvs版本,
高的linux版本兼容低的lvs版本。反過來就有問題。
lvs官網地址:http://www.linuxvirtualserver.org/