mysql數(shù)據(jù)庫負(fù)載均衡 一般多用于讀負(fù)載,??lvs 負(fù)載均衡,keepalived 高可用性。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),和靜企業(yè)網(wǎng)站建設(shè),和靜品牌網(wǎng)站建設(shè),網(wǎng)站定制,和靜網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,和靜網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
LVS軟件負(fù)載均衡器
LVS(LinuxVirtual Server)是由章文嵩博士主導(dǎo)開發(fā)的一款開源軟件,可以實(shí)現(xiàn)Linux平臺(tái)下的基于網(wǎng)絡(luò)層的負(fù)載均衡軟件。典型的基本架構(gòu)圖如圖所示:
LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求分發(fā)技術(shù)。
LVS集群采用基于IP負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求分發(fā)技術(shù)。當(dāng)客戶端有請(qǐng)求時(shí),首先將請(qǐng)求包傳送到Load Balance,然后Load Balance從后面的Real Servers中按照一定的算法策略選取一臺(tái)Real Server,比如Real Server1,然后把請(qǐng)求包發(fā)送給Real Server1進(jìn)行處理。對(duì)所有用戶而言,面向用戶的服務(wù)器端IP地址,只有一臺(tái),稱之為VirtualIP Address。
大家好,一起來搞一下mysql的負(fù)載均衡這個(gè)技術(shù)點(diǎn)。
1. haproxy介紹與配置
2. keeplived介紹與配置
3. mysql高可用搭建
1. 可靠性與穩(wěn)定性都非常出色,可與硬件級(jí)設(shè)備媲美。
2. 支持連接拒絕,可以用于防止 DDoS 攻擊
3. 支持長連接、短連接和日志功能,可根據(jù)需要靈活配置
4. 路由 HTTP 請(qǐng)求到后端服務(wù)器,基于 cookie 作會(huì)話綁定;同時(shí)支持通過獲取指定的 url 來檢測(cè)后 端服務(wù)器的狀態(tài)
5. HAProxy 還擁有功能強(qiáng)大的 ACL 支持,可靈活配置路由功能,實(shí)現(xiàn)動(dòng)靜分離,在架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)上 帶來很大方便
6. 可支持四層和七層負(fù)載均衡,幾乎能為所有服務(wù)常見的提供負(fù)載均衡功能
7. 擁有功能強(qiáng)大的后端服務(wù)器的狀態(tài)監(jiān)控 web 頁面,可以實(shí)時(shí)了解設(shè)備的運(yùn)行狀態(tài) ,還可實(shí)現(xiàn)設(shè)備上 下線等簡單操作。
8. 支持多種負(fù)載均衡調(diào)度算法,并且也支持 session 保持。
9. Haproxy 七層負(fù)載均衡模式下,負(fù)載均衡與客戶端及后端的服務(wù)器會(huì)分別建立一次 TCP連接,而在 四層負(fù)載均衡模式下(DR),僅建立一次 TCP 連接;七層負(fù)載均衡對(duì)負(fù)載均衡設(shè)備的要求更高,處理能力 也低于四層負(fù)載均衡。
全局設(shè)定
global settings:主要用于定義 haproxy 進(jìn)程管理安全及性能相關(guān)的參數(shù)。
代理設(shè)定
proxies 共分為4段:defaults,frontend,backend,listen
注意:此處只做配置文件介紹,不做為后期負(fù)載均衡配置
在192.168.199.175與192.168.199.172(負(fù)載均衡服務(wù)器)中安裝與配置如下
haproxy狀態(tài)檢測(cè)腳本不執(zhí)行問題,如果是使用的service keeplived start 或者是 systemctl 方式啟動(dòng),腳本可能會(huì)不執(zhí)行,可以使用 Keepalived -f /etc/keepalived/keepalived.conf方式啟動(dòng)Keepalived
它們是按SMP、NUMA、MPP、集群、分布處理從最緊密到最松散的排列。
SMP(多處理系統(tǒng)):這種系統(tǒng)是在一臺(tái)計(jì)算機(jī)里有多個(gè)CPU,CPU之間的地位是平等的,它們共享內(nèi)存空間和I/O設(shè)備。其工作方法是由操作系統(tǒng)負(fù)責(zé)將任務(wù)分解成多個(gè)并發(fā)進(jìn)程,然后讓其在不同的CPU上運(yùn)行。
NUMA(非統(tǒng)一內(nèi)存存取):這種系統(tǒng)可以讓多處理計(jì)算機(jī)的CPU比SMP更高效地共享本地內(nèi)存,CPU可以更快速地存取單一的內(nèi)存區(qū)域,不過如需要也可以用間接方式存取其他區(qū)域的內(nèi)存,這種方法是讓某些CPU在給定范圍的物理內(nèi)存中有更大的優(yōu)先使用權(quán)。
MPP(巨型并行處理):這種系統(tǒng)的節(jié)點(diǎn)都有自己的CPU,并有自己的專有資源。此種結(jié)構(gòu)相對(duì)獨(dú)立,但各個(gè)節(jié)點(diǎn)一般沒有完全存取I/O的能力。
集群:集群系統(tǒng)是由獨(dú)立的計(jì)算機(jī)組成,但有控制管理工具統(tǒng)一管理。
分布處理:它是比我們要構(gòu)筑的集群系統(tǒng)更松散的連接,一般是任務(wù)在不同的地方完成,沒有可以作為整體管理的單一實(shí)體。
以上的聚合方式有緊有疏,它們都有自己的適用范圍,這里就不多說了,有興趣可自己找些資料看,這里只是想讓大家了解它所處的位置。
實(shí)現(xiàn)負(fù)載均衡的方法
集群的目的是共享和高效地利用資源,提供大型運(yùn)算,提供負(fù)載均衡分配請(qǐng)求壓力以及出現(xiàn)故障時(shí)能夠進(jìn)行切換實(shí)現(xiàn)高可用性。
限于篇幅,本文只對(duì)負(fù)載均衡的實(shí)現(xiàn)做些介紹(針對(duì)TurboLinux Cluster Server)。通過對(duì)相關(guān)軟件的分析,實(shí)現(xiàn)集群負(fù)載的功能是通過流量管理實(shí)現(xiàn)的,具體有這樣幾種實(shí)現(xiàn)方法:直接路由(Direct forwarding)、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)、隧道技術(shù)(Tunneling)。
直接路由(Direct forwarding)
當(dāng)參與集群的計(jì)算機(jī)和作為控制管理的計(jì)算機(jī)在同一個(gè)網(wǎng)段時(shí)可以用此法,控制管理的計(jì)算機(jī)接收到請(qǐng)求包時(shí)直接送到參與集群的節(jié)點(diǎn)。優(yōu)點(diǎn)是返回給客戶的流量不經(jīng)過控制主機(jī),速度快開銷少。
網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)
這種方法可能大家較熟悉,地址轉(zhuǎn)換器有能被外界訪問到的合法IP地址,它修改來自專有網(wǎng)絡(luò)的流出包的地址,外界看起來包是來自地址轉(zhuǎn)換器本身,當(dāng)外界包送到轉(zhuǎn)換器時(shí),它能判斷出應(yīng)該將包送到內(nèi)部網(wǎng)的哪個(gè)節(jié)點(diǎn)。優(yōu)點(diǎn)是節(jié)省IP地址,能對(duì)內(nèi)部進(jìn)行偽裝;缺點(diǎn)是效率低,因?yàn)榉祷亟o請(qǐng)求方的流量經(jīng)過轉(zhuǎn)換器。
隧道技術(shù)(Tunneling)
這種方式是在集群的節(jié)點(diǎn)不在同一個(gè)網(wǎng)段時(shí)可用的轉(zhuǎn)發(fā)機(jī)制,是將IP包封裝在其他網(wǎng)絡(luò)流量中的方法,為了安全的考慮,應(yīng)該使用隧道技術(shù)中的VPN,也可使用租用專線。
集群所能提供的服務(wù)是基于TCP/IP的Web服務(wù)、Mail服務(wù)、News服務(wù)、DNS服務(wù)、Proxy服務(wù)器等等,下面我們將就具體的產(chǎn)品TurboLinux Cluster Server 來實(shí)現(xiàn)一個(gè)進(jìn)行負(fù)載均衡集群系統(tǒng),用于提供Web和FTP的服務(wù)。四臺(tái)服務(wù)器的負(fù)載均衡實(shí)例
所提供的服務(wù):Web、FTP。
系統(tǒng)的實(shí)現(xiàn)目的:做一個(gè)較完善負(fù)載均衡的系統(tǒng),以便能用到其中的較多的功能。
采用設(shè)備狀況:使用四臺(tái)服務(wù)器,其中3臺(tái)裝TurboLinux Cluster Server,1臺(tái)安裝Windows 2000 Sever。系統(tǒng)安裝1.在兩臺(tái)服務(wù)器上安裝TurboLinux, apache和wu-ftpd也要安裝,因?yàn)榧阂峁┻@種服務(wù),安裝完后重啟,掛接光驅(qū)在目錄/mnt/cdrom下,執(zhí) 行./TLCS-install,然后按提示完全安裝。
MySQL是一個(gè)高速度、高性能、多線程、開放源代碼,建立在客戶/服務(wù)器(Client/Server)結(jié)構(gòu)上的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。它始于1979年,最初是MichaelWidenius為瑞典TcX公司創(chuàng)建的UNIREG數(shù)據(jù)庫系統(tǒng),當(dāng)時(shí)的UNIREG沒有SQL(StructuredQueryLanguage結(jié)構(gòu)化查詢語言)接口,限制了它的應(yīng)用。
1996年5月,Widenius開發(fā)出了MySQL的最初版本,開始在Internet上公開發(fā)行。MySQL的開發(fā)人員從一開始就一直關(guān)注它的性能,為此不惜特性集,直到今天,MySQL依然保持本色,以高速度高性能為首要原則。隨著時(shí)間的推移,MySQL也加入了大型數(shù)據(jù)庫產(chǎn)品的高級(jí)特性,如存儲(chǔ)過程、視圖、觸發(fā)器等,使其在企業(yè)級(jí)數(shù)據(jù)庫系統(tǒng)中開始被部署應(yīng)用[1]。
2008年10月,SUN公司收購了MySQLAB公司,開始進(jìn)入開源領(lǐng)域。隨著重量級(jí)操作系統(tǒng)Solaris的開源,SUNMySQL在數(shù)據(jù)庫市場(chǎng)占有的份額將會(huì)進(jìn)一步提高。因此,在生產(chǎn)環(huán)境中部署具有負(fù)載均衡功能的MySQL服務(wù)器集群,對(duì)于提高企業(yè)數(shù)據(jù)庫應(yīng)用系統(tǒng)的速度、穩(wěn)定性及可伸縮性具有很大的現(xiàn)實(shí)意義,也可以有效降低應(yīng)用系統(tǒng)的投資成本。
一、負(fù)載均衡基本思路
在一個(gè)服務(wù)器集群中,盡可能的平均負(fù)載量。通常做法是在服務(wù)器前端設(shè)置一個(gè)負(fù)載均衡器(專門的硬件設(shè)備),MySQL的負(fù)載均衡,通常都離不開數(shù)據(jù)分片(把數(shù)據(jù)分割成小塊,存儲(chǔ)到不同的db節(jié)點(diǎn)中)、復(fù)制等操作。
負(fù)載均衡的主要貢獻(xiàn),除了均發(fā)數(shù)據(jù)庫請(qǐng)求,還可提供管理讀/寫策略。在分發(fā)請(qǐng)求時(shí)則確定那些節(jié)點(diǎn)可寫,可讀,隨即將請(qǐng)求發(fā)送到指定節(jié)點(diǎn)上執(zhí)行操作。
二、實(shí)現(xiàn)負(fù)載均衡的方式:
1、mysql讀寫分離:
mysql復(fù)制時(shí),產(chǎn)生了多個(gè)數(shù)據(jù)副本(備庫),為減少服務(wù)器壓力,備庫用于處理讀操作,主庫可同時(shí)處理讀寫是mysql集群實(shí)現(xiàn)讀寫分離的常用策略。
由于備庫的復(fù)制是異步的,無法實(shí)時(shí)同步,讀寫分離的主要難點(diǎn)也在于備庫上的臟數(shù)據(jù)。通常如果使用備庫進(jìn)行讀,一般對(duì)數(shù)據(jù)的實(shí)時(shí)性要求不能太高。對(duì)此,mysql提供了幾種常見的讀寫分離方式,例如基于查詢的讀寫分離、基于臟數(shù)據(jù)、基于會(huì)話等,有興趣可繼續(xù)研究。
mysql設(shè)置的讀寫分離,減少了主庫的請(qǐng)求量,將大量讀的操作發(fā)送給備庫,實(shí)現(xiàn)負(fù)載均衡。
2、修改DNS
在高并發(fā)負(fù)載均衡(一)——企業(yè)架構(gòu)分析和DNS中詳細(xì)介紹了DNS以及DNS如何實(shí)現(xiàn)負(fù)載,簡言之,通過n個(gè)服務(wù)器IP指定到一個(gè)域名,根據(jù)請(qǐng)求的不同標(biāo)識(shí)特征,將請(qǐng)求發(fā)送給不同的IP服務(wù)器進(jìn)行處理。
3、引入中間件
mysql官方提供了一個(gè)mysql負(fù)載的中間件,mysql_proxy,也需要在服務(wù)器上進(jìn)行安裝,修改配置文件(mysql的服務(wù)器IP),實(shí)質(zhì)與nginx類似,也是一個(gè)代理服務(wù)器。
4、利用mysql復(fù)制分流查詢操作
利用mysql的主從復(fù)制可以有效的分流更新操作和查詢操作,具體的實(shí)現(xiàn)是一個(gè)主服務(wù)器,承擔(dān)更新操作,多臺(tái)從服務(wù)器,承擔(dān)查詢操作,主從之間通過復(fù)制實(shí)現(xiàn)數(shù)據(jù)的同步。多臺(tái)從服務(wù)器一方面用來確??捎眯裕环矫婵梢詣?chuàng)建不同的索引滿足不同查詢的需要。
對(duì)于主從之間不需要復(fù)制全部表的情況,可以通過在主的服務(wù)器上搭建一個(gè)虛擬的從服務(wù)器,將需要復(fù)制到從服務(wù)器的表設(shè)置成blackhole引擎,然后定義replicate-do-table參數(shù)只復(fù)制這些表,這樣就過濾出需要復(fù)制的binlog,減少了傳輸binlog的帶寬。因?yàn)榇罱ǖ奶摂M的從服務(wù)器只起到過濾binlog的作用,并沒有實(shí)際紀(jì)錄任何數(shù)據(jù),所以對(duì)主數(shù)據(jù)庫服務(wù)器的性能影響也非常的有限。
通過復(fù)制分流查詢的存在的問題是主數(shù)據(jù)庫上更新頻繁或者網(wǎng)絡(luò)出現(xiàn)問題的時(shí)候,主從之間的數(shù)據(jù)可能存在差異,造成查詢結(jié)果的異議,應(yīng)用在設(shè)計(jì)的時(shí)候需要有所考慮。
5、采用分布式數(shù)據(jù)庫架構(gòu)
mysql從5.0.3開始支持分布式事務(wù),當(dāng)前分布式事務(wù)只對(duì)Innodb存儲(chǔ)引擎支持。分布式的數(shù)據(jù)庫架構(gòu)適合大數(shù)據(jù)量,負(fù)載高的情況,有良好的擴(kuò)展性和高可用性。通過在多臺(tái)服務(wù)器之間分布數(shù)據(jù)實(shí)現(xiàn)在多臺(tái)服務(wù)器之間的負(fù)載平均,提高了訪問的執(zhí)行效率。具體實(shí)現(xiàn)的時(shí)候,可以使用mysql的Cluster功能(NDB引擎)或者自己編寫程序來實(shí)現(xiàn)全局事務(wù)。