Mycat高階進階---高可用與叢集
MySQL高可用的幾種方案
首先我們看看MySQL高可用的幾種方案:
對於資料實時性要求不是特別嚴格的應用,只需要通過廉價的pc server 來擴充套件Slave 的數量,將讀壓力分散到多臺Slave 的機器上面,即可通過分散單臺數據庫伺服器的讀壓力來解決資料庫端的讀效能瓶頸,畢竟在大多數資料庫應用系統中的讀壓力還是要比寫壓力大很多。這在很大程度上解決了目前很多中小型網站的資料庫壓力瓶頸問題,甚至有些大型網站也在使用類似方案解決資料庫瓶頸。
MySQL Cluster由一組計算機構成,每臺計算機上均執行著多種程序,包括MySQL伺服器,NDB Cluster 的資料節點,管理伺服器,以及(可能)專門的資料訪問程式。NDB” 是一種“記憶體中”的儲存引擎,它具有可用性高和資料一致性好的特點。MySQL Cluster要實現完全冗餘和容錯,至少需要 4臺物理主機,其中兩個為管理節點。MySQL Cluster使用不那麼廣泛,除了自身構架因素、適用的業務有限之外,另一個重要的原因是其安裝配置管理相對複雜繁瑣,總共有幾十個操作步驟,需要DBA花費幾個小時才能搭建或完成。重啟 MySQL Cluster 資料庫的管理操作之前需要執行 46 個手動命令,需要耗費 DBA 2.5 小時的時間,而依靠MySQL Cluster Manager只需一個命令即可完成,但MySQL Cluster Manager 僅作為商用 MySQL Cluster 運營商級版本 (CGE) 資料庫的一部分提供,需要購買。其官方的說明,若應用中的SQL操作為主鍵資料庫訪問,包含一些 JOIN 操作而非對整個表執行常規掃描和JOIN而返回數萬行資料,則適合Cluster,否則不合適,從這一條限制來看,表明大多數業務場景並不合適MySQL Cluster,業內有資深人士也憑評價:NDB不適合大多數業務場景,而且有安全問題。
heartbeat是Linux-HA工程的一個元件,heartbeat最核心的包括兩個部分:心跳監測和資源接管。在指定的時間內未收到對方傳送的報文,那麼就認為對方失效,這時需啟動資源接管模組來接管運 行在對方主機上的資源或者服務。
DRBD是通過網路來實現塊裝置的資料映象同步的一款開源Cluster軟體,它自動完成網路中兩個不同伺服器上的磁碟同步,相對於binlog日誌同步,它是更底層的磁碟同步,理論上DRDB適合很多檔案型系統的高可用。
Lvs是一個虛擬的伺服器集群系統,可以實現LINUX平臺下的簡單負載均衡。keepalived是一個類似於layer3, 4 & 5交換機制的軟體,主要用於主機與備機的故障轉移,這是一種適用面很廣的負載均衡和高可用方案,最常用於Web系統。
這種gluster模式可以說是全新的一種高可用方案,前面也提到其優點,它的缺點不多,不支援XA,不支援Lock Table,只能用InnoDB引擎。
Mycat高可用方案
Mycat作為一個代理層中介軟體,Mycat系統的高可用涉及到Mycat本身的高可用以及後端MySQL的高可用,前面章節所講的MySQL高可用方案都可以在此用來確保Mycat所連線的後端MySQL服務的高可用性。在大多數情況下,建議採用標準的MySQL主從複製高可用性配置並交付給Mycat來完成後端MySQL節點的主從自動切換。
如圖所示,MySQL節點開啟主從複製的配置方案,並將主節點配置為Mycat的dataHost裡的writeNode,從節點配置為readNode,同時Mycat內部定期對一個dataHost裡的所有writeHost與readHost節點發起心跳檢測,正常情況下,Mycat會將第一個writeHost作為寫節點,所有的DML SQL會發送給此節點,若Mycat開啟了讀寫分離,則查詢節點會根據讀寫分離的策略發往readHost(+writeHost)執行,當一個dataHost裡面配置了兩個或多個writeHost的情況下,如果第一個writeHost宕機,則Mycat會在預設的3次心跳檢查失敗後,自動切換到下一個可用的writeHost執行DML SQL語句,並在conf/dnindex.properties檔案裡記錄當前所用的writeHost的index(第一個為0,第二個為1,依次類推),注意,此檔案不能刪除和擅自改變,除非你深刻理解了它的作用以及你的目的。
那麼問題來了,當原來配置的MySQL寫節點宕機恢復以後,怎麼重新加入Mycat,要不要恢復為原來的寫節點?關於這個問題,我們也曾與DBA討論很久,最終的建議方案是,保持現有狀態不變,改旗易幟,恢復後的MySQL節點作為從節點,跟隨新的主節點,重新配置主從同步,原先跟隨該節點做同步的其他節點也同樣換帥,重新配置同步源,這些節點的資料手工完成同步以後,再加入Mycat裡。目前1.3版本的Mycat還沒有實現監控MySQL主從同步狀態的功能,因此這個過程裡,DBA可以先修改MySQL的密碼,讓Mycat無法連結故障伺服器,等同步完成以後,恢復密碼,這樣Mycat就自動重新將修復好的Mycat納管進來了。
說完了MySQL部分,接下來我們看看Mycat自身的高可用性,由於Mycat自身是屬於無狀態的中介軟體(除了主從切換過程中記錄的dnindex.properties檔案),因此Mycat很容易部署為叢集方式,提供高可用方案。原先有規劃Mycat-balance元件,專門用於Mycat負載均衡,但由於缺乏志願者,也沒有經過生產實踐驗證,
因此暫時不建議使用,官方建議是採用基於硬體的負載均衡器或者軟體方式的HAproxy,HAProxy相比LVS的使用要簡單很多,功能方面也很豐富,免費開源,穩定性也是非常好,可以與LVS相媲美,根據官方文件,HAProxy可以跑滿10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express),這個作為軟體級負載均衡,也是比較驚人的,下圖是HAproxy+Mycat叢集+MySQL主從所組成的高可用性方案:
、
如果還擔心HAproxy的穩定性和單點問題,則可以用keepalived的VIP的浮動功能,加以強化:
Galary Cluster 配置
Mycat1.4.1 開始支援galary cluster 叢集的配置,提高心跳可用。
配置如下: 1.4.1 開始支援MySQL 叢集模式,讓讀更加安全可靠,配置如下: MyCAT心跳檢查語句配置為 show status like ‘wsrep%’ , dataHost 上定義兩個新屬性: switchType=”3” 此時意味著開啟MySQL叢集複製狀態狀態繫結的讀寫分離與切換機制,Mycat心跳機制通過檢測叢集複製時延時,如果延時過大或者叢集出現節點問題不會負載改節點。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="3" >
<heartbeat> show status like ‘wsrep%’</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root"password="123456"> </writeHost>
<writeHosthost="hostS1"url="localhost:3316"user="root"password="123456" ></writeHost> </dataHost>
相關推薦
Mycat高階進階---高可用與叢集
MySQL高可用的幾種方案 首先我們看看MySQL高可用的幾種方案: 對於資料實時性要求不是特別嚴格的應用,只需要通過廉價的pc server 來擴充套件Slave 的數量,將讀壓力分散到多臺Slave 的機器上面,即可通過分散單臺數據庫伺服器的讀壓力來
(三)mycat的高可用與叢集
HAProxy: HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy 相比 LVS 的 使用要簡單很多,功能方面也很豐富,免費開源,穩定性也是非常好,可以與 LVS 相媲美。根據官方文件,HAProxy最
Mysql高可用與叢集
第一種:主從複製+讀寫分離 客戶端通過Master對資料庫進行寫操作,slave端進行讀操作,並可進行備份。Master出現問題後,可以手動將應用切換到slave端。 對於資料實時性要求不是特別嚴格的應用,只需要通過廉價的pc server來擴充套件Slave的數量,
Mycat高階進階---讀寫分離
MySQL主從複製的幾種方案 資料庫讀寫分離對於大型系統或者訪問量很高的網際網路應用來說,是必不可少的一個重要功能。 從資料庫的角度來說,對於大多數應用來說,從集中到分佈,最基本的一個需求不是資料儲存的瓶頸,而是在於計算的瓶頸,即SQL查詢的瓶頸,我們知道,正
python爬蟲進階(八):分散式系統的高可用與高併發處理
一、應對高併發的基本思路 1、加快單機的速度,例如使用Redis,提高資料訪問頻率;增加CPU的核心數,增大記憶體; 2、增加伺服器的數量,利用叢集。 二、分散式系統的設計 1、無狀態 應用本身沒有狀態,狀態全部通過配置檔案或者叢集的服務端提供並與之同步。比如不同
多節點高可用Eureka叢集配置與部署
前言 上一節講的是動態擴容Eureka服務,說實話,一般情況這種操作並不多,一般多用在,由於大量服務節點部署後給Eureka造成壓力突然積增,而解決的辦法。這節講的是一次啟動或部署,直接就是叢集多節點的,多用於服務節點相對穩定的場景。還有筆者這裡有實際部署和應用的經驗分享給大家,就是,我目前25
Redis叢集進階-資料備份與恢復
備份: 使用save或者bgsave(後臺執行備份命令) 該命令將在 redis 安裝目錄中建立dump.rdb檔案。 恢復: 將備份檔案 (dump.rdb) 移動到 redis 安裝目錄並啟
python之面向物件高階進階-反射與內建模組
內建函式模組isinstance和issubaclassclass Foo: pass obj=Foo() print(isinstance(obj,Foo)) #isinstance(obj,Foo)判斷是否obj是否是類 Foo 的物件class Pa
Android高階進階——繪圖篇(七)Canvas 與 圖層(一)
開篇 前面很多篇文章都用到了圖層的概念,但是一直沒有詳細介紹,今天這篇文章將詳細的介紹 Canvas 與 圖層的概念 一、如何獲得一個Canvas物件 方法一:自定義view時, 重寫onDraw、dispatchDraw方法 protect
python3進階之*args與**kwargs用法
{0} class 表示 可變參 mat 命名 lov 多個 pre *args 和 **kwargs 主要用於函數定義。 你可以將不定數量的參數傳遞給一個函數。不定的意思是:預先並不知道, 函數使用者會傳遞多少個參數給你, 所以在這個場景下使用這兩個關鍵字。其實並不是
Python的進階:copy與deepcopy區別
對他 可能 並不會 ID wfq .html 因此 陌生 iba copy()與deepcopy()之間的區分必須要涉及到python對於數據的存儲方式。 首先直接上結論: —–我們尋常意義的復制就是深復制,即將被復制對象完全再復制一遍作為獨立的新個體單獨存在。所以改變原有
C語言進階——有符號與無符號02
開始 有符號 分析 ack 方式 pri 位運算 運算 pan 在計算機的內部,我們所有的信息都是由二進制數字組成的 有符號數的表實法: 在計算機內部用補碼的方式表實有符號數 正數的補碼位正數的本身 負數的補碼為其絕對值取反然後加一得到 例如-7 他在計算機內部的是11
Android進階之Fragment與Activity之間的數據交互
|| int tails support 實例 onclick interface rod sel 1 為什麽 因為Fragment和Activity一樣是具有生命周期,不是一般的bean通過構造函數傳值,會造成異常。 2 Activity把值傳遞給Fragment 2.1
Android高階進階之自定義View
前言 在網上看到一張圖,花了些時間自己嘗試著寫了一個自定義View,裡面涉及到了自定義屬性、自定義View padding屬性的處理、畫筆(Paint)和畫布(Canvas)的使用、解析度適配問題、效能問題、屬性動畫等,覺得還是有些東西值的記錄一下的,效果圖如下: 自定義屬
MySQL主主複製+Keepalived 打造高可用MySQL叢集
轉載地址:http://www.linuxidc.com/Linux/2014-09/106570.htm 為了響應公司需求,打造出更安全的mysql叢集,能夠實現mysql故障後切換,研究了幾天終於有了成果,一起分享一下。 首先介紹一下這套叢集方案實現的功能 1、mys
使用kubeadm安裝安全高可用kubernetes叢集
安裝包地址 如非高可用安裝請忽略此教程,直接看產品頁的三步安裝。 單個master流程: 單master視訊教程 解壓後在master 上 cd shell && sh init.sh ,然後sh master.sh(注意因為指令碼用的相
微服務Spring Cloud實戰—Eureka Server的簡介和高可用性—叢集
Eureka簡介 什麼是Eureka? Eureka是Netflix開源的服務發現元件,本身是一個基於REST的服務。它包含Server和Client兩部分。Spring Cloud將它整合在子專案Spring Cloud Netflix中,從而實現服務的註冊與發現 (注:Eurek
Java效能優化高階進階
目錄$ b& Z7 N" v3 B├─1 什麼是效能優化2 w5 O/ k6 p- D+ q│ ├─1.1效能優化專題-什麼是效能優化一-.mp4│ ├─1.1效能優化專題-什麼是效能優化二-.mp4│ ├─效能優化.pdf/
Redis高階進階(二)
一、訊息通知 在一些網站上,經常會有一些釋出/訂閱或者郵件訂閱的功能,尤其一些部落格上。其實這種問題很常見,當頁面需要進行如傳送郵件、複雜的計算時會阻塞頁面的渲染。為了避免使用者等待太久,應該使用其他程序單獨完成此類操作,這裡郵件訂閱可以用任務佇列來實現,具體來說,當需要傳送郵件時,將其存入佇列中,另外一個
Redis高階進階(一)
一、redis中的事務 在關係型資料庫中事務是必不可少的一個核心功能,生活中也是處處可見,比如我們去銀行轉賬,首先需要將A賬戶的錢划走,然後存到B賬戶上,這兩個步驟必須在同一事務中,要麼都執行,要麼都不執行,不然錢憑空消失了,換了誰也無法接受。 同樣,redis中也為我們提供了事務,原理是:先把一組同一事