MyCat & Nginx

MyCat

(開源數據庫中間件)

MyCat簡介

Mycat背後是阿里曾經開源的知名產品——Cobar。Cobar的核心功能和優勢是MySQL數據庫分片,此產品曾經廣爲流傳,據說最早的發起者對Mysql很精通,後來從阿里跳槽了,阿里隨後開源的Cobar,並維持到2013年年初,然後,就沒有然後了。
Cobar的思路和實現路徑的確不錯。基於Java開發的,實現了MySQL公開的二進制傳輸協議,巧妙地將自己僞裝成一個MySQL Server,目前市面上絕大多數MySQL客戶端工具和應用都能兼容。比自己實現一個新的數據庫協議要明智的多,因爲生態環境在哪裏擺着。
Mycat是基於cobar演變而來,對cobar的代碼進行了徹底的重構,使用NIO重構了網絡模塊,並且優化了Buffer內核,增強了聚合,Join等基本特性,同時兼容絕大多數數據庫成爲通用的數據庫中間件。
簡單的說,MyCAT就是:一個新穎的數據庫中間件產品支持mysql集羣,或者mariadb cluster,提供高可用性數據分片集羣。你可以像使用mysql一樣使用mycat。對於開發人員來說根本感覺不到mycat的存在。
在這裏插入圖片描述

在這裏插入圖片描述

MyCat的官方網站:
http://www.mycat.org.cn/
下載地址:
https://github.com/MyCATApache/Mycat-download
Mycat的默認端口號爲:8066

MyCat分片-海量數據存儲解決方案

什麼是分片
簡單來說,就是指通過某種特定的條件,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單臺設備負載的效果。
數據的切分(Sharding)根據其切分規則的類型,可以分爲兩種切分模式。
(1)一種是按照不同的表(或者Schema)來切分到不同的數據庫(主機)之上,這種切分可以稱之爲數據的垂直(縱向)切分
在這裏插入圖片描述
在這裏插入圖片描述

分片相關的概念

邏輯庫(schema):
前面一節講了數據庫中間件,通常對實際應用來說,並不需要知道中間件的存在,業務開發人員只需要知道數據庫的概念,所以數據庫中間件可以被看做是一個或多個數據庫集羣構成的邏輯庫。

邏輯表(table):
既然有邏輯庫,那麼就會有邏輯表,分佈式數據庫中,對應用來說,讀寫數據的表就是邏輯表。邏輯表,可以是數據切分後,分佈在一個或多個分片庫中,也可以不做數據切分,不分片,只有一個表構成。
分片表:是指那些原有的很大數據的表,需要切分到多個數據庫的表,這樣,每個分片都有一部分數據,所有分片構成了完整的數據。 總而言之就是需要進行分片的表。
非分片表:一個數據庫中並不是所有的表都很大,某些表是可以不用進行切分的,非分片是相對分片表來說的,就是那些不需要進行數據切分的表。

分片節點(dataNode)
數據切分後,一個大表被分到不同的分片數據庫上面,每個表分片所在的數據庫就是分片節點(dataNode)。
節點主機(dataHost)
數據切分後,每個分片節點(dataNode)不一定都會獨佔一臺機器,同一機器上面可以有多個分片數據庫,這樣一個或多個分片節點(dataNode)所在的機器就是節點主機(dataHost),爲了規避單節點主機併發數限制,儘量將讀寫壓力高的分片節點(dataNode)均衡的放在不同的節點主機(dataHost)。

分片規則(rule)
前面講了數據切分,一個大表被分成若干個分片表,就需要一定的規則,這樣按照某種業務規則把數據分到某個分片的規則就是分片規則,數據切分選擇合適的分片規則非常重要,將極大的避免後續數據處理的難度。

數據庫讀寫分離

MySQL 主從複製概念
MySQL 主從複製是指數據可以從一個MySQL數據庫服務器主節點複製到一個或多個從節點。MySQL 默認採用異步複製方式,這樣從節點不用一直訪問主服務器來更新自己的數據,數據的更新可以在遠程連接上進行,從節點可以複製主數據庫中的所有數據庫或者特定的數據庫,或者特定的表。

MySQL 主從複製主要用途 - 讀寫分離
在開發工作中,有時候會遇見某個sql 語句需要鎖表,導致暫時不能使用讀的服務,這樣就會影響現有業務,使用主從複製,讓主庫負責寫,從庫負責讀,這樣,即使主庫出現了鎖表的情景,通過讀從庫也可以保證業務的正常運作。

    數據庫讀寫分離對於大型系統或者訪問量很高的互聯網應用來說,是必不可少的一個重要功能。對於MySQL來說,標準的讀寫分離是主從模式,一個寫節點Master後面跟着多個讀節點,讀節點的數量取決於系統的壓力,通常是1-3個讀節點的配置。

在這裏插入圖片描述

Nginx

什麼是Nginx

    Nginx是一款高性能的http服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師伊戈爾·西索夫(Igor Sysoev)所開發,官方測試nginx能夠支支撐5萬併發鏈接,並且cpu、內存等資源消耗卻非常低,運行非常穩定。

Nginx應用場景:
1、http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。如FastDFS模塊應用Nginx來提供網絡圖片的靜態顯示。
2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集羣可以使用nginx做反向代理。並且多臺服務器可以平均分擔負載,不會因爲某臺服務器負載高宕機而某臺服務器閒置的情況。

域名綁定

什麼是域名:
域名(Domain Name),是由一串用“點”分隔的字符組成的Internet上某一臺計算機或計算機組的名稱,用於在數據傳輸時標識計算機的電子方位(有時也指地理位置,地理上的域名,指代有行政自主權的一個地方區域)。域名是一個IP地址上有“面具”。域名的目的是便於記憶和溝通的一組服務器的地址(網站,電子郵件,FTP等)。域名作爲力所能及難忘的互聯網參與者的名稱。域名按域名系統(DNS)的規則流程組成。在DNS中註冊的任何名稱都是域名。域名用於各種網絡環境和應用程序特定的命名和尋址目的。通常,域名錶示互聯網協議(IP)資源,例如用於訪問因特網的個人計算機,託管網站的服務器計算機,或網站本身或通過因特網傳送的任何其他服務。世界上第一個註冊的域名是在1985年1月註冊的。

域名級別:

    (1)頂級域名

頂級域名又分爲兩類:
一是國家頂級域名(national top-level domainnames,簡稱nTLDs),200多個國家都按照ISO3166國家代碼分配了頂級域名,例如中國是cn,美國是us,日本是jp等;
二是國際頂級域名(international top-level domain names,簡稱iTDs),例如表示工商企業的.Com .Top,表示網絡提供商的.net,表示非盈利組織的.org,表示教育的.edu,以及沒有限制的中性域名如.xyz等。大多數域名爭議都發生在com的頂級域名下,因爲多數公司上網的目的都是爲了贏利。但因爲自2014年以來新頂級域名的發展,域名爭議案件數量增長幅度越來越大[5] 。爲加強域名管理,解決域名資源的緊張,Internet協會、Internet分址機構及世界知識產權組織(WIPO)等國際組織經過廣泛協商, 在原來三個國際通用頂級域名:(com)的基礎上,新增加了7個國際通用頂級域名:firm(公司企業)、store(銷售公司或企業)、Web(突出WWW活動的單位)、arts(突出文化、娛樂活動的單位)、rec (突出消遣、娛樂活動的單位)、info(提供信息服務的單位)、nom(個人),並在世界範圍內選擇新的註冊機構來受理域名註冊申請。
例如:baidu.com
(2)二級域名
二級域名是指頂級域名之下的域名,在國際頂級域名下,它是指域名註冊人的網上名稱,例如ibm,yahoo,microsoft等;在國家頂級域名下,它是表示註冊企業類別的符號,例如.top,com,edu,gov,net等。
中國在國際互聯網絡信息中心(Inter NIC) 正式註冊並運行的頂級域名是CN,這也是中國的一級域名。在頂級域名之下,中國的二級域名又分爲類別域名和行政區域名兩類。類別域名共7個, 包括用於科研機構的ac;用於工商金融企業的com、top;用於教育機構的edu;用於政府部門的gov;用於互聯網絡信息中心和運行中心的net;用於非盈利組織的org。而行政區域名有34個,分別對應於中國各省、自治區和直轄市。
例如:map.baidu.com
(3)三級域名
三級域名用字母(A~Z,a~z,大小寫等)、數字(0~9)和連接符(-)組成, 各級域名之間用實點(.)連接,三級域名的長度不能超過20個字符。如無特殊原因,建議採用申請人的英文名(或者縮寫)或者漢語拼音名 (或者縮寫) 作爲三級域名,以保持域名的清晰性和簡潔性。
例如:
item.map.baidu.com

域名與IP綁定:
一個域名對應一個ip地址,一個ip地址可以被多個域名綁定。
本地測試可以修改hosts文件(C:\Windows\System32\drivers\etc)
可以配置域名和ip的映射關係,如果hosts文件中配置了域名和ip的對應關係,不需要走dns服務器。
我們可以通過一個叫SwitchHosts的軟件來修改域名指向

keepalived

keepalived簡介

keepalived解決的原理是:
keepalived籠統的說,只提供了兩個主要功能:1.虛擬ip地址映射;2.心跳檢測。

解決方案
1.心跳檢測機制:
在Nginx主機和備份機各配置keepalived,建立連接。主機會向備份機固定時間間隔的發送類似“I am alive”這樣的信息,來告知對方“還活着”。
當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務IP並繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時(主機修好了),它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。

2.虛擬ip地址映射機制:
上文中,所謂的“接管主服務器的服務IP”,就是keepalived的虛擬ip地址映射機制。會對外(如用戶)提供一個唯一的ip地址,對內會將此ip與兩臺Nginx關聯起來。當主機健康時,keepalived會將主機的ip關聯給對外的ip。當主機故障時,keepalived會將備份機的ip關聯給對外的ip。
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章