集群及高可用

来源:http://www.cnblogs.com/xiaocheche/archive/2017/10/19/7695024.html
-Advertisement-
Play Games

1》集群: 隨著互聯網的發展,大量的客戶端請求蜂擁而至,同時伺服器的負載也越來越大,然而單台伺服器的負載又是有限的,這樣就會導致伺服器響應客戶端請求的時間越長, 甚至產生拒絕服務的情況;另外目前的網站多數是7*24小時提供不間斷網路服務,如果僅採用單點伺服器對外提供網路服務,那麼在出現單點故障時,將 ...


1》集群:

         隨著互聯網的發展,大量的客戶端請求蜂擁而至,同時伺服器的負載也越來越大,然而單台伺服器的負載又是有限的,這樣就會導致伺服器響應客戶端請求的時間越長,           甚至產生拒絕服務的情況;另外目前的網站多數是7*24小時提供不間斷網路服務,如果僅採用單點伺服器對外提供網路服務,那麼在出現單點故障時,將導致整個網路服務中             斷,這時我們需要部署集群架構,最終將成百上千台主機有機地結合在一起,以滿足當前大數據時代的海量訪問負載。在部署集群環境時可以選擇的產品有很多,有些是基於             硬體實現的,有些是基於軟體實現的,其中負載均衡的硬體設備有F5的GIG-IP,Radware的AppDirector,以及梭子魚的負載均衡設備等;軟體有基於Linux的LVS,Nginx和                       HAProxy等產品,在集群環境中的核心是負載均衡以及高可用;

2》LVS負載均衡簡介:

         LVS(Linux   Virtual   Server)即Linux虛擬伺服器,目前LVS已經被集成到Linux內核模塊中,該項目在Linux內核中實現了基於IP的數據請求負載均衡調度方案,終端互聯網            用戶從外部訪問公司的外部負載均衡伺服器,終端用戶的WEB請求會發送給LVS調度器,調度器根據自己預設的演算法決定將請求發送給後端的某台WEB伺服器,比如輪詢演算法           可以將外部的請求平均分發給後端的所有伺服器,終端用戶訪問LVS調度器雖然會被轉發到後端真實的伺服器,但如果真實伺服器連接的是相同的存儲,提供的服務也都是相同           的服務,最終用戶不管訪問哪台真實的伺服器,得到的服務內容都是一樣的,整個集群對用戶而言都是透明的,最後根據LVS工作模式的不同,真實伺服器會選擇不同的方式將           用戶所需要的數據發送給終端用戶,LVS工作模式分為NAT模式,TUN模式以及DR模式;

    1>基於NAT的LVS負載均衡:

           NAT即網路地址轉換,其作用是通過數據報頭的修改,使位於企業內部的私有IP可以訪問外網,以及外部用戶可以訪問位於公司內部的私有IP地址主機,VS/NAT                         工作模式是LVS負載調度器使用兩塊網卡配置不同的IP地址,eth0設置為私鑰IP與內部網路通過交換設備相互連接,eth1設置為外網IP與外部網路連通;

            第一步:用戶通過互聯網DNS伺服器解析到公司負載均衡設備上面的外網IP地址,相對於真實伺服器而言,LVS的外網IP又稱為VIP(Virtual  IP   Address),用戶                                                  通過訪問VIP,即可連接後端的真實伺服器,而這一切對用戶而言都是透明的,用戶以為自己訪問的就是真實的伺服器,但他並不知道自己訪問的VIP僅                                                  僅是一個調度器,也不清楚後端的真實伺服器到底在哪裡,有多少台真實伺服器;

         第二步:用戶將數據請求發送至外網IP地址,此時LVS將根據預設的演算法選擇後端的一臺真實伺服器,將數據請求包發送給真實伺服器,並且在轉發之前LVS會                                                     修改數據包中的目標地址以及目標埠,目標地址與目標埠將被修改為選中的真實伺服器IP地址以及相應的埠; 

         第三步:真實的伺服器將響應數據包返回給LVS調度器,調度器在得到響應數據包後會將源地址與源埠修改為VIP及調度器相應的埠,修改完成後,由調度器                                                  將響應數據包發送給終端用戶,另外由於LVS調度器有一個連接Hash表,該表中會記錄連接請求及轉發信息,當同一個連接的下一個數據包發送給調度                                                    器時,從該Hash表中可以直接找到之前的連接記錄,並根據該記錄信息選出相同的真實伺服器及埠信息;

    2>基於TUN的LVS負載均衡:

            在LVS(NAT)模式的集群環境中,由於所有的數據請求及響應的數據包都需要經過LVS調度器轉發,如果後端伺服器的數量大於10台,則調度器就會成為整個                                集群環境的瓶頸,我們知道數據請求包往往遠遠小於響應數據包的大小,因為響應數據包中包含有客戶端需要的具體數據,所以LVS(TUN)的思路就是將請求與響                                應數據分離,讓調度器僅處理數據請求,而讓真實伺服器將響應數據包直接返回給客戶端,VS/TUN工作模式中的IP隧道(IP tunning)是一種數據包封裝技術,它                                可以將原始數據包封裝並添加新的包頭(內容包括新的源地址及埠,目標地址及埠),從而實現將一個目標為調度器VIP的數據包封裝,通過隧道轉發給後端的                             真實伺服器,通過將客戶端發送調度器的原始數據包封裝,併在其基礎上添加新的數據包頭(修改目標地址為調度器選擇出來的真實伺服器的IP地址及對應埠),                             LVS(TUN)模式要求真實伺服器可以直接與外部網路連接,真實伺服器在收到請求數據包後直接給客戶端主機響應數據;

    3>基於DR的LVS負載均衡:

          在LVS(TUN)模式下,由於需要在LVS調度器與真實伺服器之間創建隧道連接,這同樣會增加伺服器的負擔,與LVS(TUN)類似,DR模式也叫直接路由模式,該模                            式中LVS依然僅承擔數據的入站請求以及根據演算法選出合理的真實伺服器,最終由後端真實伺服器負責將響應數據包發送返回給客戶端,與隧道模式不同的是,直接路                         由模式要求調度器與後端伺服器必須在一個區域網內,VIP地址需要在調度器與後端所有的伺服器間共用,因為最終的真實伺服器給客戶端回應數據包時需要設置源地                            址為VIP地址,目標IP為客戶端IP,這樣客戶端訪問的是調度器的VIP地址,回應的源地址也依然是該VIP地址(真實伺服器上的VIP),客戶端是感覺不到後端伺服器                          存在的,由於多台電腦都設置了同樣一個VIP地址,所以在直接路由模式中要求調度器的VIP地址是對外可見的,客戶端需要將請求數據包發送到調度器主機,而所                           有的真實伺服器的VIP地址必須配置在Non-ARP的網路設備上,也就是該網路設備並不會向外廣播自己的MAC及對應的IP地址,真實伺服器的VIP對外界是不可見的,                          但真實伺服器卻可以接收目標地址為VIP的網路請求,併在回應數據包時將源地址設置為該VIP地址,調度器根據演算法在選出真實伺服器後,在不修改數據報文的情況                            下,將數據幀的MAC地址修改為選出的伺服器的MAC地址,通過交換機將該數據幀轉發給真實伺服器,整個過程中,真實伺服器的VIP不需要對外界可見;

      ******因為調度器與真實伺服器都設置了VIP地址,所以這裡要求所有的真實伺服器要禁止對VIP地址的ARP響應,方法是通過arp_ignore與arp_announce來實現的:

          vim   /etc/sysctl.conf

          net.ipv4.conf.eth0.arp_ignore = 1

          net.ipv4.conf.eth0.arp_announce = 2

          net.ipv4.conf.all.arp_ignore = 1

          net.ipv4.conf.all.arp_announce = 2

          sysctl  -p

3》LVS複製均衡調度演算法:

      根據前面的介紹,我們瞭解了LVS的三種模式,但不管實際環境中採用的是哪種模式,調度器進行調度的策略與演算法都是LVS的核心技術,LVS在內核中主要實現了以下              八種調度演算法:

         輪詢調度;

         加權輪詢調度;

         最小連接調度;

         加權最小連接調度;

         基於局部性最少的連接;

         帶複製的基於局部性最少連接;

         目標地址散列調度;

          源地址散列調度;

      輪詢演算法(RR):按依次迴圈的方式將請求調度到不同的伺服器上,該演算法最大的特定就是實現簡單,輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,調度器會                                                   將所有的請求平均分配給每個真實伺服器;  

      加權輪詢演算法(WRR):主要是對輪詢演算法的一種優化與補充,LVS會考慮每台伺服器的性能,並給每台伺服器添加一個權值,如果伺服器A的權值為1,伺服器B的權值                                                                為2,則調度器調度到伺服器B的請求回事伺服器A的兩倍,權值越高的伺服器,處理的請求越多; 

      最小連接調度演算法(LC):把請求調度到連接數最小的伺服器上,而加權最小連接演算法(WLC)則是給每個伺服器一個權值,調度器會儘可能保持伺服器連接數量與權值                                                                之間的平衡;  

      基於局部性的最少連接調度演算法(lblc):是請求數據包的目標IP地址的一種調度演算法,該演算法先根據請求的目標IP地址尋找最近目標IP地址所使用的伺服器,如果這台服                                                                                          務器依然可用,並且有能力處理該請求,調度器會儘量選擇相同的伺服器,否則會繼續選擇其他可行的伺服器;帶複製的基於局                                                                                           部性最少連接演算法記錄的不是一個目標IP與一臺伺服器之間連接記錄,它會維護一個目標IP到一組伺服器之間的映射關係,防止                                                                                         單點伺服器負載過高; 

    目標地址散列調度演算法(DH):是根據目標IP地址通過散列函數將目標IP與伺服器建立映射關係,出現伺服器不可用或負載過高的情況下,發往該目標IP的請求會固定發給                                                                      該伺服器;

    源地址散列調度演算法(SH):與目標地址散列調度演算法類似,但它是根據源地址散列演算法進行行靜態分配固定的伺服器資源;

4》部署LVS服務:

       LVS現在已經集成在Linux內核模塊中,但整個LVS環境中又分為內核層與用戶層,內核層複製核心演算法的實現,用戶層需要安裝ipvsadm工具,通過命令將管理員需要                    的工作模式與實現演算法傳遞給內核來實現,LVS的內核模塊名稱為Ip_vs,我們可以使用YUM方式安裝ipvsadm,也可以自行去官網下載使用源碼安裝;

    1>YUM安裝:

        YUM安裝需要確保本機可以連接YUM源,可以從YUM源中下載RPM格式軟體包;

         yum  -y  install  ipvsadm

    2>源碼安裝:

          源碼安裝需要使用YUM安裝相關的依賴軟體包,Ipvsadm源碼軟體可以從官方網站下載,下載後使用標準的make,make install,編譯,安裝即可;

      #yum  -y  install  gcc popt   popt-devel  popt-static  libn1  libn1-devel

      #wget  http://www.linuxvirtualserver.org/softwart/kernel-2.6/ipvsadm-1.26.tar.gz

      #tar  -xvf  ipvsadm-1.26.tar.gz  -C   /usr/src

      #cd  /usr/src/ipvsadm-1.26

      #make

        #make  install

       3>相關命令:

               無論使用哪種方式安裝ipvsadm軟體,安裝完成後都會生成一個同名的命令工具,我們需要使用該命令來管理配置LVS虛擬伺服器組和相應的調度演算法;

      ipvsadm命令的描述和用法如下:

      描述:Linux虛擬伺服器管理工具;

      用法:ipvsadm    選項    伺服器地址    -s     演算法

            ipvsadm    選項    伺服器地址     -r     真實伺服器地址【工作模式】【權重】

      選項:

         -A    添加一個虛擬服務,使用IP地址,埠號,協議來唯一定義一個虛擬服務;

           -E     編輯一個虛擬服務;

           -D     刪除一個虛擬服務

           -C     清空虛擬服務表

           -R     從標準輸入中還原虛擬服務規則

          -S       保存虛擬服務規則至標準輸出,輸出的規則可以使用-R導入還原

           -a       在虛擬服務中添加一臺真實伺服器

           -e       在虛擬服務中編輯一臺真實伺服器

           -d       在虛擬服務中減少一臺真實伺服器

           -L       顯示虛擬服務列表

           -t        使用TCP服務,該參數後需要跟主機與埠信息

                -u      使用UDP服務,該參數後需要跟主機與埠信息

           -s     指定LVS所採用的調度演算法

           -r      設置真實伺服器IP地址與埠信息

          -g      設置LVS工作模式為DR直連路由模式

          -i       設置LVS工作模式為TUN隧道模式

          -m       設置LVS工作模式為NAT地址轉換模式

         -w       設置指定伺服器的權重

         -c        連接狀態,需要配合-L使用

         -n      數字格式輸出

                    命令示例:

          添加一個虛擬服務,設置調度演算法為輪詢,所有使用的TCP協議訪問124.126.147.168的80埠的請求,最終被調度器通過NAT模式轉發給了                                                   192.168.0.1,192.168.0.2,192.168.0.3這三台主機的80埠:   

             

       service  ipvsadm  save     保存調度規則

                          sed  -l  /ip_forward/s/0/1/   /etc/sysctl.conf    重新載入sysctl.conf

      查看LVS規則表:

           

     查看當前IPVS調度狀態:

         

    刪除為虛擬服務提供WEB功能的真實伺服器192.168.0.3:         

      [root@hadoop-master ~]# ipvsadm -d -t 124.126.147.168:80 -r 192.168.0.3

    虛擬服務規則表備份與還原:

         

    修改虛擬服務的調度演算法:        

      [root@hadoop-master ~]# ipvsadm -E -t 124.126.147.168:80 -s wrr

    創建一個使用WRR演算法的虛擬服務,工作模式為直接路由(DR)模式,在該虛擬服務上添加兩台真實伺服器,併為每台真實伺服器設置權重:

           

 

5》常見問題分析:

      1>路由轉發功能:

          在LVS(NAT)工作模式中,LVS調度器必須能夠提供數據轉發功能,而系統預設的規則沒有開啟路由轉發功能,需要手動修改/etc/sysctl.conf文件開啟該功能;

      2>在LVS(NAT)工作模式中,調度器處理擔當調度的角色外,還需要擔當路由的角色,但系統的防火牆轉發規則預設禁止轉發,因此需要將轉發規則清空:

            iptables  -F

            Iptables  -X

            service  iptables  save

      3>在LVS(DR)工作模式下,由於所有的真實伺服器都配置了VIP地址,因此需要設置伺服器不進行針對VIP地址的ARP廣播,Linux中可以直接通過arp_ignore與                                          arp_announce來實現;

        arp_ignore用來定義網卡在響應外部ARP請求時的響應級別:

           0:預設值,任何網路介面收到ARP請求後,如果本機的任意介面有該MAC,則予以響應;

           1:某個網路介面收到ARP請求後,判斷請求的MAC地址是否是本介面,是則回應,否則不回應,LVS調度器會將客戶請求轉發給真實伺服器的eth0介面,而                                                真實伺服器的VIP地址配置在迴環設備上;

         arp_announce用來定義網卡廣播ARP包時的級別:

          0:預設值,任何網路介面接收到ARP請求後,如果本機的任意介面有該MAC,則予以響應;

          1:儘量避免響應MAC地址非本網路介面MAC地址的ARP請求;

          2:不響應MAC地址非本網路介面MAC地址的ARP請求; 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 每天寫一點,總有一天我這條鹹魚能變得更咸 cron服務是一個linux下 的定時執行工具,可以在無需人工干預的情況下運行作業。頻率可以劃分為 分鐘 小時 天 月 周,格式如下: 1.crontab 服務: service crond start 啟動服務 service crond stop 停止服 ...
  • (一)I2S匯流排概述: 音響數據的採集、處理和傳輸是多媒體技術的重要組成部分。眾多的數字音頻系統已經進入消費市場,例如數字音頻錄音帶、數字聲音處理器。對於設備和生產廠家來說,標準化的信息傳輸結構可以提高系統的適應性。I2S(Inter—IC Sound)匯流排是飛利浦公司為數字音頻設備之間的音頻數據傳 ...
  • 在給別人使用GUEST用戶登陸使用共用目錄,併在電腦上已將guest用戶啟用,但是報“登錄失敗:未授予用戶在此電腦上的請求登錄類型” 解決方法: 打開“控制面板”中的“管理工具” 在“管理工具”中選擇“本地安全策略” 選擇"本地安全策略"——“本地策略”——"用戶權利分配",在“用戶權利指派”右邊 ...
  • 一.背景 1.1 mips32搭載32bit vxworks操作系統 1.2 x86搭載64bit windows10操作系統 二.大小端模式判定前的準備 2.1 先要知道各種架構上各種整型數占據的bit數,也就是通過範圍來確定bit數 上一篇已經講過,特奉上地址如下: http://www.cnb ...
  • 首先你需要Ubuntu 系統在你的電腦上:(這個應該都有了吧,這個就不做介紹了) 環境:Java Python maven 這個你可以在Windows上下載好 jdk_8u144-linux-x86.tar.gz包(我安裝時最新版,現在可以下 載最新版) Apache-maven-3.5.0 (聲 ...
  • 前言 Apache 2.4 以後的版本不再自帶 APR 庫(Apache Portable Runtime,Apache 可移植運行庫),所以在安裝 Apache 之前需要手動下載安裝 APR 庫。 完整的 APR 實際上包含了三個依賴包:apr、apr-util 以及 apr-iconv。 正文 ...
  • 個人原創禁止轉載 軟體環境: Centos6.9 x64 openvpn-2.4.3-1.el6.x86_64.rpm easy-rsa-2.2.2-1.el6.noarch.rpm #推薦使用2.2的版本 pkcs11-helper-1.11-3.el6.x86_64.rpm 網路環境: open ...
  • 參考文檔: 本文涉及zookeeper集群的安裝配置。 一.環境 1. 操作系統 CentOS-7-x86_64-Everything-1511 2. 版本 JDK 8u131:http://www.oracle.com/technetwork/java/javase/downloads/index ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...