MySQL之可擴展性(九)

可擴展性

直接連接

2.修改應用的配置

還有一個分發負載的辦法是重新配置應用。例如,你可以配置多個機器來分擔生成大報表操作的負載。每臺機器可以配置成連接到不同的MySQL備庫,并為第N個用戶或網站生成報表。
這樣的系統很容易實現,但如果需要修改一些代碼——包括配置文件修改——會變得脆弱且難以處理。硬編碼有著固有的限制,需要在每臺機器上修改硬編碼,或者在一個中心服務器上修改,然后通過文件副本或代碼控制更新命令"發布"到其他服務器上,如果將配置存儲在服務器或緩存中,就可以避免這些麻煩。

3.修改DNS名

這是一個比較粗糙的負載均衡技術,但對于一些簡單的應用,為不同的目的創建DNS還是很實用的。你可以為不同的服務器指定一個合適的名字。最簡單的方法是只讀服務器有一個NDS名,而給負責寫操作的服務器起另外一個DNS名。如果備庫能夠跟上主庫,那就把只讀DNS名指定給備庫,當出現延遲時,再將該DNS名指定給主庫。這種DNS技術非常容易實現,但也有很多缺點。最大的問題是無法完全控制DNS.

  • 1.修改DNS并不是立刻生效的,也不是原子的。將DNS的變化傳遞到整個網絡或在網絡間傳播都需要比較長的時間
  • 2.DNS數據會在各個地方緩存下來,它的過期時間是建議性質的,而非強制的
  • 3.可能需要應用或服務器重啟才能使修改后的DNS完全生效。
  • 4.多個IP共用一個DNS名依賴于輪詢行為來均衡請求,這并不是一個好主意,因為輪詢行為并不宗總是可預知的
  • 5.DBA可能沒有權限直接訪問DNS
    除非應用非常簡單,否則依賴不受控制的系統會非常危險。你可以通過修改/etc/hosts/文件而非DNS來改善對系統的控制。當發布一個對該文件的更新時,會知道該變更已經生效。這比等待緩存的DNS失效要好得多。但這仍然不是理想的辦法。通常建議人們構建一個完全不依賴DNS的應用。即使應用很簡單也適用,因為你無法預知應用會增長到多大規模。

4.轉移IP地址

一些負載均衡解決方案依賴于在服務器間轉移虛擬地址(虛擬IP地址不是直接連接到任何特定的計算機或網絡端口,而是"漂浮"在計算機之間),一般能夠很好地工作。這聽起來和修改DNS很像,但完全時兩碼事。服務器不會根據DNS名去監聽網絡流量,而是根據指定的IP地址去見挺流量,所以轉移IP地址允許DNS名保持不變。你可以通過ARP(地址解析協議)命令強制IP地址的更改快速而且原子性地通知到網絡上。看過的適用最普遍的技術時Pacemaker,這是Linux-HA享目的Heartbeat工具的繼承者。你可以適用單個IP地址,為其分配一個角色,例如read-only,當需要在機器間轉移IP地址時,它能夠感知到。其他的類似的工具包括LVS和Wackamole.
一個比較方便的技術時為每個物理服務器分配一個固定的IP地址。該IP地址固定在服務器上,不再改變。然后可以為每個邏輯上的"服務"使用一個虛擬IP地址。它們能夠很方便地在服務器間轉移,這使得轉移服務和應用實例無須再重新配置應用,因此更加容易。即使不怎么經常轉移IP地址,這也是一個很好地特性。

引入中間件

在這里插入圖片描述

迄今為止,我們所討論的方案都嘉定應用跟MySQL服務器使直接相連的。但是許多負載均衡解決方案都會引入一個中間件,作為網絡通信的代理。它以便接受所有的通信請求,另一邊將這些請求派發到指定的服務器上,然后把執行結果發送回請求的機器上。中間件可以實硬件設備或時軟件(你可以把諸如LVS這樣的解決方案配置成只有一個用需要創建一個新連接時才參與進來,此后不再作為中間價)。如圖描述了這種架構,這種解決方案通常能工作得很好,當然除非為負載均衡器本身增加冗余,這樣才能避免單點故障引起的整個系統癱瘓。從開源軟件,如HAProxy,到許多廣為人知的商業系統,有許多負載均衡器得到了成功的應用

1.負載均衡器

在這里插入圖片描述
在這里插入圖片描述

在市場上有許多負載均衡硬件和軟件,但很少有專門為MySQL服務器設計的(MySQL Proxy是個例外,但目前還未能證明能夠很好地工作,因為它會帶來一些問題,例如延遲增加以及可擴展性瓶頸)。Web服務器通常更需要負載均衡,因此許多多用途的負載均衡設備都會支持HTTP,而對其他用途則只有一些很少的基本特性。MySQL連接都只是正常的TCP/IP連接,所以可以在MySQL上適用多用途負載均衡器。但由于缺少MySQL專有的特性,因此回多一些限制。

  • 1.除非負載均衡器知道MySQL的真實負載,否則在分發請求時可能無法做到很好的負載均衡。不是所有的請求都是等同的,但多用途負載均衡器通常對所有的請求一視同仁。
  • 2.許多負載均衡器知道如何檢查一個HTTP請求并把會話"固定"到一個服務器上以保護在Web服務器上的會話狀態。MySQL連接也是有狀態的,但負載均衡器可能并不知道如何把所有從單個HTTP會話發送的連接請求"固定"到一個MySQL服務器上,這回損失一部分效率(如果單個會話的請求都是發到同一個MySQL服務器,服務器的緩存會更優效率)
  • 3.連接池和長連接可能會阻礙負載均衡器分發連接請求。例如,一個連接池打開了預先配置好的連接數,負載均衡器在已有的四個MySQL服務器上分發這些連接。現在增加了兩個以上的MySQL服務器。由于連接池不會請求新連接,因而新的服務器會一直空閑著。池中的連接會在服務器間不公平地分配負載,導致一些服務器超出負載,一些則幾乎沒有負載。可以在多個層面為連接設置失效時間來緩解這個問題,但這很復雜并且很難做到。連接池方案只有它們本身能夠處理負載均衡時才能工作得很好。
  • 4.許多多用途負載均衡器只會針對HTTP服務器做健康和負載檢查。一個簡單的負載均衡器最少能夠核實服務器在一個TCP端口上接受的連接數。更好的負載均衡器能夠自動發起一個HTTP請求,并檢查返回值以確定這個Web服務器是否正常運轉。MySQL并不接受3306端口的HTTP,因此需要自己來構建健康檢查方法。你可以在MySQL服務器上安裝一個HTTP服務器如那件,并將負載均衡器指向一個腳本,這個腳本檢查MySQL服務器的狀態并返回一個對應的狀態值(實際上,如果能編碼實現一個監聽80端口的程序,或者配置xinetd來調用程序,甚至不需要再安裝一個Web服務器)。最重要的時檢查操作系統負載(通過查看/proc/loadavg)、復制狀態,以及MySQL的連接數。

2.負載均衡算法

有許都算法用來決定哪個服務器接受下一個連接。每個廠商都有各自不同的算法,下面這個清單列出了一些可用的方法:

  • 1.隨機
    負載均衡器隨機地從可用的服務器池中選擇一個服務器來處理請求
  • 2.輪詢
    負載均衡器以循環順序發送請求到服務器,例如:A,B,C,A,B,C
  • 3.最少連接數
    下一個連接請求分配給擁有最少活躍連接的服務器
  • 4.最快響應
    能夠最快處理請求的服務器接受下一個連接。當服務器池里同時存在快速和慢速服務器時,這很有小。即使同樣的查詢在不同的場景下運行也會有不同的表現,例如當查詢結果已經緩存在查詢緩存中,或者服務器緩存中已經包含了所需要的數據時
  • 5.哈希
    負載均衡器通過連接的源IP地址進行哈希,將其映射到池中的同一個服務器上。每次從同一個IP地址發起請求,負載均衡器都會將請求發送給同樣的服務器。只有當池中服務器數目改變時這種綁定才會發生變化
  • 6.權重
    負載均衡器能夠結合適用上述幾種算法。例如,你可能擁有單CPU核雙CPU的機器。雙CPU機器有接近兩倍的性能,所以可以讓負載均衡器分派兩倍的請求給雙CPU機器

哪種算法最優取決于具體的工作負載。例如最少連接算法,如果有新機器加入,可能會有大量連接涌入該服務器,而這時候它的緩存還沒有包含熱數據。你需要通過測試來為你的工作負載找到最好的性能。除了正常的日常運轉,還需要考慮極端情況。在比較極端的情況下——例如負載升高,修改模式,或者多臺服務器下線——至少要避免系統出現重大錯誤。我們這里只描述了即時處理請求的算法,無須對連接請求排隊。但有時候適用排隊算法可能更有效。例如,一個算法可能只維護給定的數據庫服務器并發數目,同一時刻只允許不超過N個活躍事務。如果有太多的活躍事務,就將新的請求放到一個隊列里,然后讓可用服務器列表的第一個來處理它。有些連接池也支持隊列算法

3.在服務器池中增加/移除服務器

增加一個服務器到池中并不是簡單地插入禁區,然后通知負載均衡器就可以了,你可能以為只要不是一下子涌進大量連接請求就可以了,但并不一定如此。有時候你會緩慢增加一臺服務器的負載,但一些緩存還是"冷"的服務器可能會慢到一段時間內都無法處理任何的用戶請求。如果用戶瀏覽一個頁面需要30秒才能返回數據,即使流量很小,這個服務器也是不可用的。有一個方法可以避免這個問題,在通知負載均衡器有新服務器加入前,可以暫時把SELECT查詢映射到一臺活躍服務器上,然后再新開啟的服務器上讀取和重放活躍服務器上的日志文件,或者捕捉生產服務器上的網絡通信,并重放它的一部分查詢。Percona Toolkit中的pt-query-digest工具能夠有所幫助。另一個有效的辦法是適用Percona Server或MySQL5.6的快速預熱特性。
在配置連接池中的服務器時,要保證有足夠多未使用的容量,以備在撤下服務器做維護時適用,或者當服務求失效時可以派上用場。每臺服務器上都應該保留高于"足夠’的容量。
要確保配置的限制值足夠高,即使從池中撤出一些服務器也能夠工作。舉個例子,如果你發現每個MySQL服務器一般有100個連接,應該設置池中每個服務器的max_connections值為200.這樣就算一半的服務器失效,服務器池也能處理同樣數量的請求
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38102.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Python自動化收集和處理視頻資源的教程

在這篇教程中,我們將介紹如何利用Python腳本自動化收集和處理視頻資源。這篇文章將幫助您掌握基本的網絡自動化技術,并使用相關庫進行視頻資源的獲取和保存。以下是具體的實現步驟和代碼示例。 環境準備 在開始之前,請確保您的工作環境中已…

數據庫基礎教程

數據庫基礎教程 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!在本文中,我們將深入探討數據庫的基礎知識和操作,幫助您建立起扎實的數據…

Spring Boot集成jasypt快速入門Demo

1.什么是Jasypt? Jasypt(Java Simplified Encryption)是一個專注于簡化Java加密操作的工具。 它提供了一種簡單而強大的方式來處理數據的加密和解密,使開發者能夠輕松地保護應用程序中的敏感信息,如數據庫密碼、API密…

stl的map和set

概念 map和set底層都是紅黑樹 set是key模型結構,本質就是看一個元素在不在容器中。 map是key/value結構,里面存了一個pair結構,可以通過一個值來查找另外一個值 map和set結構中遍歷出來的都是有序并且去重了的,map和set都支持增…

Java高級重點知識點-17-異常

文章目錄 異常異常處理自定義異常 異常 指的是程序在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。Java處 理異常的方式是中斷處理。 異常體系 異常的根類是 java.lang.Throwable,,其下有兩個子類:ja…

【QT】概述|對象樹模型|兩種控件模式|信號和槽|lambda

目錄 什么是QT 特點 QT程序 main函數 QT按鈕 純代碼模式 圖形化模式 對象樹模型 信號和槽 連接與斷開 自動連接 斷開連接 信號的發射 lambda表達式 基本語法 捕獲列表 Lambda表達式用于信號與槽的連接 例如 什么是QT Qt是一個跨平臺的C圖形用戶界面應用…

NeXT-Server 手動安裝

38 cd /home 使用 wget 下載你選擇的版本,https://go.dev/dl/ 找到適用于Linux的版本,你可以選擇 .tar.gz 格式的文件以用于Debian系統 39 wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz 40 tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz 42 echo ‘export PAT…

辦理河南公司企業信用等級3A證書流程和條件

企業信用等級3A證書屬于一種榮譽資質,是提升企業公信力和影響力保障的一項資質。信用等級是信用 (資信)評估機構根據企業資信評估結果對企業信用度劃分的等級類別,它反映了企業信用度的高低。AAA信用等級是一種等級劃分。代指企業的信用經過行業、機構評…

零成本搭建個人圖床服務器

前言 圖床服務器是一種用于存儲和管理圖片的服務器,可以給我們提供將圖片上傳后能外部訪問瀏覽的服務。這樣我們在寫文章時插入的說明圖片,就可以集中放到圖床里,既方便多平臺文章發布,又能統一管理和備份。 當然下面通過在 Git…

中藥材圖像識別:中醫與深度學習的融合(目標檢測)

親愛的讀者們,您是否在尋找某個特定的數據集,用于研究或項目實踐?歡迎您在評論區留言,或者通過公眾號私信告訴我,您想要的數據集的類型主題。小編會竭盡全力為您尋找,并在找到后第一時間與您分享。 一、引…

flink的窗口

目錄 窗口分類 1.按照驅動類型分類 1. 時間窗口(Time window) 2.計數窗口(Count window) 2.按照窗口分配數據的規則分類 窗口API分類 API調用 窗口分配器器: 窗口函數 增量聚合函數: 全窗口函數…

MySQL高級-MVCC-原理分析(RC級別)

文章目錄 1、RC隔離級別下,在事務中每一次執行快照讀時生成ReadView2、先來看第一次快照讀具體的讀取過程:3、再來看第二次快照讀具體的讀取過程: 1、RC隔離級別下,在事務中每一次執行快照讀時生成ReadView 我們就來分析事務5中,兩…

VBA代碼解決方案第十五講:如何對單元格區域進行高亮顯示

《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位于入門后的提高,在學習這套教程過程中,側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼…

Java中集中常見的算法

以下是對選擇排序、冒泡排序和插入排序的理解及代碼實現 選擇排序: 理解:它通過不斷地從待排序元素中選擇最小(或最大)元素,并將其放置在已排序序列的一端。 代碼實現: public class SelectionSort {pu…

final、const、readonly關鍵字在不同語言中代表著什么

一、Java 1.被final修飾的類不能被繼承。 2.被final修飾的方法不能被重寫。 被 final 修飾的類中所有的成員方法都會隱式的定義為 final 方法。 若父類中 final 方法的訪問權限為 private ,則子類中不能直接繼承該方法。此時可以在子類中定義相同方法名的函數&…

【操作系統期末速成】EP06 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????2.1 考點十四:同步互斥的基本概念2.2 考點十五:實現臨界區互斥的基本方法2.3 考點十六:信號量的含義及常用信號量 一、前言🚀&#x1…

品牌推廣的三個階段與核心內容,一篇文章全掌握!

在競爭激烈的市場環境中,品牌推廣是企業成功的關鍵。精心策劃的推廣策略能夠幫助企業在消費者心中樹立獨特的品牌形象,進而促進銷售增長。 作為一家手工酸奶品牌的創始人,目前全國也復制了100多家門店,我理解的品牌推廣分為3個階…

操作系統概論(二)

一、單項選擇題(本大題共20小題,每小題1分,共20分) 在每小題列出的四個備選項中只有一個選項是符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未選均無分。 1.操作員接口是操作系統為用戶提供的使用計算機系統的手…

Vitis IDE 艱難切換--從傳統 Vitis GUI 到 2024.1 統一軟件界面

目錄 1. 簡介 2. 界面展示 2.1 啟動 2.2 Flow Navigator 2.1.1 C Simulation Dialog 2.1.2 C Synthesis 2.1.3 C/RTL Co-simulation 2.1.4 Implementation 2.1.5 Package 3. C Synthesis 詳解 3.1 Classic Configuration Settings 3.1.1 config_array_partition 3…

MySQL進階:存儲過程和函數

存儲過程和函數 1. 簡介2. 創建存儲過程使用MySQL工作臺創建存儲過程 3. 刪除存儲過程4. 參數帶默認值的參數參數驗證輸出參數 5. 變量6. 函數7. 其他約定 1. 簡介 存儲過程三大作用: 儲存和管理SQL代碼(置于數據庫中,與應用層分離&#xf…