本文目錄一覽:
- 1、如何訪問k8s集群內部署的mysql服務
- 2、mysql分散式集群的搭建方案
- 3、五大常見的MySQL高可用方案(最全)
- 4、容器化 | 在 KubeSphere 中部署 MySQL 集群
- 5、如何使用Heartbeat,組建一個高可用性的mysql集群
- 6、如何在Windows系統中配置Mysql群集
如何訪問k8s集群內部署的mysql服務
雖然 kubernetes 社區一直在努力使得有狀態應用成為一等公民,也推出了 statefulset 控制器支持 pod 的順序部署,穩定的域名訪問和存儲訪問。但鑒於 MySQL 部署運維的多樣性和複雜性,在 kubernetes 上部署 MySQL 仍然要面臨眾多挑戰。
1、業務流量入口的配置方式
傳統虛擬機環境下,我們通過虛IP的方式,讓業務應用都配置事先定義的一個虛IP為鏈接資料庫的地址,然後由高可用服務保證虛IP始終能被路由到master資料庫。在kubernetes中,出現了一層網路插件屏蔽了底層網路拓撲,高可用服務管理虛IP的方式需要隨之適應調整,比如通過service結合標籤完成虛IP的漂移,但service本身是kubernetes提供的一項功能,其可靠性和性能都取決於kubernetes服務的穩定。以性能來說,service是kubeproxy組件通過配置iptables實現的,當iptables規則較多時不可避免的會產生時延,需要我們針對性的解決。
2、容器隔離帶來的監控視野問題
在 kubernetes 中,如果將 MySQL 製作為 container 運行在一個 pod 中,container 會將 MySQL 進程和運行環境隔離在一個單獨的 namespace 中。監控組件在獲取 MySQL 的一些 metirc 時,可能不得不進入與 MySQL 同一個 namespace 中,在部署和設計監控組件時需要考慮到這些限制。
3、存儲在 kubernetes 中,支持配置各種不同的存儲。
如果使用本地存儲 local persistent volume,則需要綁定 MySQL 在一個固定的節點,這就完全浪費了 kubernetes 靈活調度的天然優勢;而如果使用遠程共享存儲,確實是將 MySQL 進程與其存儲完全解耦,使得 MySQL 進程可以在任意節點調度,然而考慮到高 I/O 吞吐量的情況,就不是那麼美好了。設計時需要考量遠程存儲是否能夠滿足 MySQL 的帶寬要求。
4、高可用/備份恢復
kubernetes 提供的 statefulset 控制器只能提供最基本的部署,刪除功能,無法實現完善的 MySQL 集群高可用/備份恢復操作。對於有狀態應用的部署,仍需要定製開發,所以多數公司提供了定製的 operator 來完成應用容器的管理。比如 etcd operator,MySQL operator,後文將為大家詳述我測試使用 MySQL operator 的一些記錄。
mysql分散式集群的搭建方案
不是很理解,比如說你3台搭建分散式,你通過什麼方式區分庫表?假設每台伺服器上部署一個mysql實例,那你怎麼把數據分布到3個mysql裡面?是每個mysql裡面存不同的表么?如果這樣,就還可以接受。這塊問題不是很大。
第二個問題,你的HA主備,意思是說兩個分散式互為主備?那怎麼備份,怎麼切換?
其實按照你想要達到的目標。應該是每兩台互做主備,形成3對主備庫,然後這3對再組建一個分散式集群。
其實和你要做的可能差不多,不過邏輯上還是有差異的。HA你準備怎麼做?keepalived?
另外,諮詢一下,你的分散式是通過什麼來實現,不同業務訪問不同的資料庫,每個庫存不同的表?還是相同的表分布在不同資料庫?
看你伺服器的配置如何,其實我覺得一般來說拿3台來做備機有點浪費,如果配置允許,可以考慮做成6套mysql主備的分散式集群。
通過交叉互備實現硬體的最大利用。下圖是我們之前用4台伺服器做的一套集群方案。
如果還有其他問題可以和我聯繫。
五大常見的MySQL高可用方案(最全)
1. 概述
我們在考慮MySQL資料庫的高可用的架構時,主要要考慮如下幾方面:
如果資料庫發生了宕機或者意外中斷等故障,能儘快恢復資料庫的可用性,儘可能的減少停機時間,保證業務不會因為資料庫的故障而中斷。
用作備份、只讀副本等功能的非主節點的數據應該和主節點的數據實時或者最終保持一致。
當業務發生資料庫切換時,切換前後的資料庫內容應當一致,不會因為數據缺失或者數據不一致而影響業務。
關於對高可用的分級在這裡我們不做詳細的討論,這裡只討論常用高可用方案的優缺點以及高可用方案的選型。
2. 高可用方案
2.1. 主從或主主半同步複製
使用雙節點資料庫,搭建單向或者雙向的半同步複製。在5.7以後的版本中,由於lossless replication、logical多線程複製等一些列新特性的引入,使得MySQL原生半同步複製更加可靠。
常見架構如下:
通常會和proxy、keepalived等第三方軟體同時使用,即可以用來監控資料庫的 健康 ,又可以執行一系列管理命令。如果主庫發生故障,切換到備庫後仍然可以繼續使用資料庫。
優點:
架構比較簡單,使用原生半同步複製作為數據同步的依據;
雙節點,沒有主機宕機後的選主問題,直接切換即可;
雙節點,需求資源少,部署簡單;
缺點:
完全依賴於半同步複製,如果半同步複製退化為非同步複製,數據一致性無法得到保證;
需要額外考慮haproxy、keepalived的高可用機制。
2.2. 半同步複製優化
半同步複製機制是可靠的。如果半同步複製一直是生效的,那麼便可以認為數據是一致的。但是由於網路波動等一些客觀原因,導致半同步複製發生超時而切換為非同步複製,那麼這時便不能保證數據的一致性。所以儘可能的保證半同步複製,便可提高數據的一致性。
該方案同樣使用雙節點架構,但是在原有半同複製的基礎上做了功能上的優化,使半同步複製的機制變得更加可靠。
可參考的優化方案如下:
2.2.1. 雙通道複製
半同步複製由於發生超時後,複製斷開,當再次建立起複制時,同時建立兩條通道,其中一條半同步複製通道從當前位置開始複製,保證從機知道當前主機執行的進度。另外一條非同步複製通道開始追補從機落後的數據。當非同步複製通道追趕到半同步複製的起始位置時,恢復半同步複製。
2.2.2. binlog文件伺服器
搭建兩條半同步複製通道,其中連接文件伺服器的半同步通道正常情況下不啟用,當主從的半同步複製發生網路問題退化後,啟動與文件伺服器的半同步複製通道。當主從半同步複製恢復後,關閉與文件伺服器的半同步複製通道。
優點:
雙節點,需求資源少,部署簡單;
架構簡單,沒有選主的問題,直接切換即可;
相比於原生複製,優化後的半同步複製更能保證數據的一致性。
缺點:
需要修改內核源碼或者使用mysql通信協議。需要對源碼有一定的了解,並能做一定程度的二次開發。
依舊依賴於半同步複製,沒有從根本上解決數據一致性問題。
2.3. 高可用架構優化
將雙節點資料庫擴展到多節點資料庫,或者多節點資料庫集群。可以根據自己的需要選擇一主兩從、一主多從或者多主多從的集群。
由於半同步複製,存在接收到一個從機的成功應答即認為半同步複製成功的特性,所以多從半同步複製的可靠性要優於單從半同步複製的可靠性。並且多節點同時宕機的幾率也要小於單節點宕機的幾率,所以多節點架構在一定程度上可以認為高可用性是好於雙節點架構。
但是由於資料庫數量較多,所以需要資料庫管理軟體來保證資料庫的可維護性。可以選擇MMM、MHA或者各個版本的proxy等等。常見方案如下:
2.3.1. MHA+多節點集群
MHA Manager會定時探測集群中的master節點,當master出現故障時,它可以自動將最新數據的slave提升為新的master,然後將所有其他的slave重新指向新的master,整個故障轉移過程對應用程序完全透明。
MHA Node運行在每台MySQL伺服器上,主要作用是切換時處理二進位日誌,確保切換盡量少丟數據。
MHA也可以擴展到如下的多節點集群:
優點:
可以進行故障的自動檢測和轉移;
可擴展性較好,可以根據需要擴展MySQL的節點數量和結構;
相比於雙節點的MySQL複製,三節點/多節點的MySQL發生不可用的概率更低
缺點:
至少需要三節點,相對於雙節點需要更多的資源;
邏輯較為複雜,發生故障後排查問題,定位問題更加困難;
數據一致性仍然靠原生半同步複製保證,仍然存在數據不一致的風險;
可能因為網路分區發生腦裂現象;
2.3.2. zookeeper+proxy
Zookeeper使用分散式演算法保證集群數據的一致性,使用zookeeper可以有效的保證proxy的高可用性,可以較好的避免網路分區現象的產生。
優點:
較好的保證了整個系統的高可用性,包括proxy、MySQL;
擴展性較好,可以擴展為大規模集群;
缺點:
數據一致性仍然依賴於原生的mysql半同步複製;
引入zk,整個系統的邏輯變得更加複雜;
2.4. 共享存儲
共享存儲實現了資料庫伺服器和存儲設備的解耦,不同資料庫之間的數據同步不再依賴於MySQL的原生複製功能,而是通過磁碟數據同步的手段,來保證數據的一致性。
2.4.1. SAN共享儲存
SAN的概念是允許存儲設備和處理器(伺服器)之間建立直接的高速網路(與LAN相比)連接,通過這種連接實現數據的集中式存儲。常用架構如下:
使用共享存儲時,MySQL伺服器能夠正常掛載文件系統並操作,如果主庫發生宕機,備庫可以掛載相同的文件系統,保證主庫和備庫使用相同的數據。
優點:
兩節點即可,部署簡單,切換邏輯簡單;
很好的保證數據的強一致性;
不會因為MySQL的邏輯錯誤發生數據不一致的情況;
缺點:
需要考慮共享存儲的高可用;
價格昂貴;
2.4.2. DRBD磁碟複製
DRBD是一種基於軟體、基於網路的塊複製存儲解決方案,主要用於對伺服器之間的磁碟、分區、邏輯卷等進行數據鏡像,當用戶將數據寫入本地磁碟時,還會將數據發送到網路中另一台主機的磁碟上,這樣的本地主機(主節點)與遠程主機(備節點)的數據就可以保證實時同步。常用架構如下:
當本地主機出現問題,遠程主機上還保留著一份相同的數據,可以繼續使用,保證了數據的安全。
DRBD是linux內核模塊實現的快級別的同步複製技術,可以與SAN達到相同的共享存儲效果。
優點:
兩節點即可,部署簡單,切換邏輯簡單;
相比於SAN儲存網路,價格低廉;
保證數據的強一致性;
缺點:
對io性能影響較大;
從庫不提供讀操作;
2.5. 分散式協議
分散式協議可以很好解決數據一致性問題。比較常見的方案如下:
2.5.1. MySQL cluster
MySQL cluster是官方集群的部署方案,通過使用NDB存儲引擎實時備份冗餘數據,實現資料庫的高可用性和數據一致性。
優點:
全部使用官方組件,不依賴於第三方軟體;
可以實現數據的強一致性;
缺點:
國內使用的較少;
配置較複雜,需要使用NDB儲存引擎,與MySQL常規引擎存在一定差異;
至少三節點;
2.5.2. Galera
基於Galera的MySQL高可用集群, 是多主數據同步的MySQL集群解決方案,使用簡單,沒有單點故障,可用性高。常見架構如下:
優點:
多主寫入,無延遲複製,能保證數據強一致性;
有成熟的社區,有互聯網公司在大規模的使用;
自動故障轉移,自動添加、剔除節點;
缺點:
需要為原生MySQL節點打wsrep補丁
只支持innodb儲存引擎
至少三節點;
2.5.3. POAXS
Paxos 演算法解決的問題是一個分散式系統如何就某個值(決議)達成一致。這個演算法被認為是同類演算法中最有效的。Paxos與MySQL相結合可以實現在分散式的MySQL數據的強一致性。常見架構如下:
優點:
多主寫入,無延遲複製,能保證數據強一致性;
有成熟理論基礎;
自動故障轉移,自動添加、剔除節點;
缺點:
只支持innodb儲存引擎
至少三節點;
3. 總結
隨著人們對數據一致性的要求不斷的提高,越來越多的方法被嘗試用來解決分散式數據一致性的問題,如MySQL自身的優化、MySQL集群架構的優化、Paxos、Raft、2PC演算法的引入等等。
而使用分散式演算法用來解決MySQL資料庫數據一致性的問題的方法,也越來越被人們所接受,一系列成熟的產品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等越來越多的被大規模使用。
隨著官方MySQL Group Replication的GA,使用分散式協議來解決數據一致性問題已經成為了主流的方向。期望越來越多優秀的解決方案被提出,MySQL高可用問題可以被更好的解決。
容器化 | 在 KubeSphere 中部署 MySQL 集群
本文將演示如何在 KubeSphere[1] 上部署 RadonDB MySQL on Kubernetes 2.1.2 ,快速實現高可用的 MySQL on K8s。
若已在 KubeSphere 部署過歷史版本 Operator,可以選擇如下方式更新到最新版本。
可任選一個 RadonDB MySQL 配置示例[5] 部署,或自定義配置部署。
以 mysql_v1alpha1_mysqlcluster.yaml 模版為例,創建一個 RadonDB MySQL 集群。
注意
未指定項目時,集群將被默認安裝在 kubesphere-controls-system 項目中。若需指定項目,安裝命令需添加 –namespace=project_name 。
預期結果
預期結果
在 demo-project 項目中,查看 RadonDB MySQL 集群狀態。
至此,完成在 KubeSphere 中部署 RadonDB MySQL 集群。
[1]:KubeSphere:
[2]:OpenPitrix:
[3]:創建操作:
[4]:項目網關:
[5]:配置示例:
如何使用Heartbeat,組建一個高可用性的mysql集群
需要先使用mysql鏈接mysqld(第步啟服務端)手創建blog_db資料庫rails自創建mysql資料庫(面各表需要創建active_record工作)
看error log應該mysqld沒運行
如何在Windows系統中配置Mysql群集
MySQL 群集是一種技術,該技術允許在無共享的系統中部署「內存中」和「磁碟中」資料庫的 Cluster 。通過無共享體系結構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由於每個組件有自己的內存和磁碟,不存在單點故障。MySQL Cluster 由一組計算機構成,每台計算機上均運行著多種進程,包括 MySQL 伺服器,NDB Cluster 的數據節點,管理伺服器,以及(可能存在的)專門的數據訪問程序。
管理伺服器(MGM節點)負責管理 Cluster 配置文件和 Cluster 日誌。Cluster 中的每個節點從管理伺服器檢索配置數據。當數據節點內出現新的事件時,節點將關於這類事件的信息傳輸到管理伺服器,然後,將這類信息寫入 Cluster 日誌。
目前能夠運行 MySQL Cluster 的操作系統有 Linux、Mac OS X 和 Solaris,最新的版本已經支持 Windows 操作系統。
MySQL 群集的數據節點之間的通信是不加密的,並且需要高速的帶寬,所以建議把群集建立在一個高速區域網內,不建議跨網段、跨公網的部署這種系統體系。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/311300.html