<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁(yè)>軟件介紹>MySQL集群方案 查詢:
               
          MySQL集群方案

                  一、 概述 

                  (一) LVS 

                  1. 概述 

                  使用LVS架設(shè)的服務(wù)器集群系統(tǒng)從體系結(jié)構(gòu)上看是透明的,最終用戶只感覺(jué)到一個(gè)虛擬服務(wù)器。物理服務(wù)器之間可以通過(guò)高速的LAN或分布在各地的WAN相連。最前端是負(fù)載均衡器,它負(fù)責(zé)將各種服務(wù)請(qǐng)求分發(fā)給后面的物理服務(wù)器,讓整個(gè)集群表現(xiàn)得象一個(gè)服務(wù)于同一IP地址的虛擬服務(wù)器。 

                  一個(gè)完整的負(fù)載均衡項(xiàng)目,由虛擬服務(wù)器、故障隔離及失敗切換3個(gè)功能框架組成。 虛擬服務(wù)器是負(fù)載均衡體系的基本結(jié)構(gòu),分為:負(fù)載均衡器和真實(shí)服務(wù)器。 虛擬服務(wù)器最主要的功能是提供包轉(zhuǎn)發(fā)和負(fù)載均衡,由ipvsadm腳本來(lái)具體實(shí)現(xiàn)。 故障隔離:虛擬服務(wù)器中的某個(gè)真實(shí)服務(wù)器失效,系統(tǒng)將自動(dòng)從轉(zhuǎn)發(fā)隊(duì)列中清理出來(lái),從而保證用戶訪問(wèn)正確性,當(dāng)故障處理后,系統(tǒng)再自動(dòng)加入轉(zhuǎn)發(fā)隊(duì)列。 

                  失敗切換:針對(duì)負(fù)載均衡器采取的措施,當(dāng)豬負(fù)載均衡器出現(xiàn)故障,備用自動(dòng)接管主負(fù)載均衡器的工作,恢復(fù)后恢復(fù)到初始角色。 

                  實(shí)現(xiàn)虛擬服務(wù)器、故障隔離及失敗切換由ipvsdam和keepalived來(lái)實(shí)行。(也可以使用heartbeat來(lái)實(shí)現(xiàn),但復(fù)雜) 

                  LVS集群系統(tǒng)具有良好的可擴(kuò)展性和高可用性。 

                  可擴(kuò)展性是指,LVS集群建立后,可以很容易地根據(jù)實(shí)際的需要增加或減少物理服務(wù)器。而高可用性是指當(dāng)檢測(cè)到服務(wù)器節(jié)點(diǎn)或服務(wù)進(jìn)程出錯(cuò)、失效時(shí),集群系統(tǒng)能夠自動(dòng)進(jìn)行適當(dāng)?shù)闹匦抡{(diào)整系統(tǒng)。 

                  Linux Virtual Server的主要是在負(fù)載均衡器上實(shí)現(xiàn)的,負(fù)載均衡器是一臺(tái)加了LVS Patch的2.2.x版另外,還需要根據(jù)LVS應(yīng)用對(duì)物理服務(wù)器進(jìn)行恰當(dāng)?shù)呐渲谩?以下將分別講述一下三種模式的工作原理和優(yōu)缺點(diǎn)。 

                  1) NAT 

                  Virtual Server via NAT方法的最大優(yōu)點(diǎn)是集群中的物理服務(wù)器可以使用任何支持TCP/IP操作系統(tǒng),物理服務(wù)器可以分配Internet的保留私有地址,只有負(fù)載均衡器需要一個(gè)合法的IP地址。 

                  這種實(shí)現(xiàn)方法的最大的缺點(diǎn)是擴(kuò)展性有限。當(dāng)服務(wù)器節(jié)點(diǎn)(普通PC服務(wù)器)數(shù)據(jù)增長(zhǎng)到20個(gè)或更多時(shí),負(fù)載均衡器將成為整個(gè)系統(tǒng)的瓶頸,因?yàn)樗械恼?qǐng)求包和應(yīng)答包都需要經(jīng)過(guò)負(fù)載均衡器再生。假使TCP包的平均長(zhǎng)度是536字節(jié)的話,平均包再生延遲時(shí)間大約為60us(在Pentium處理器上計(jì)算的,采用更快的處理器將使得這個(gè)延遲時(shí)間變短),負(fù)載均衡器的最大容許能力為8.93M/s,假定每臺(tái)物理服務(wù)器的平臺(tái)容許能力為400K/s來(lái)計(jì)算,負(fù)責(zé)均衡器能為22臺(tái)物理服務(wù)器計(jì)算。 

                  Virtual Server via NAT能夠滿足許多服務(wù)器的服務(wù)性能需求。即使是是負(fù)載均衡器成為整個(gè)系統(tǒng)的瓶頸,如果是這樣也有兩種方法來(lái)解決它。一種是混合處理,另一種是采用Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合處理的方法,將需要許多同屬單一的RR DNS域。你采用Virtual Server via IP tunneling或Virtual Server via direct 

                  routing以獲得更好的可擴(kuò)展性。也可以嵌套使用負(fù)載均衡器,在最前端的是VS-Tunneling

                  或VS-Drouting的負(fù)載均衡器,然后后面采用VS-NAT的負(fù)載均衡器。 

                  2) TUN 

                  采用VS-NAT方式,請(qǐng)求與應(yīng)答包都需要經(jīng)過(guò)負(fù)載均衡器,那么當(dāng)服務(wù)器節(jié)點(diǎn)增長(zhǎng)到20個(gè)或更多時(shí),這個(gè)負(fù)載均衡器就可能成為新的瓶頸。我們發(fā)現(xiàn),許多Internet服務(wù)(例如WEB服務(wù)器)的請(qǐng)求包很短小,而應(yīng)答包通常很大。 

                  而使用VS-TUN方式的話,負(fù)載均衡器只負(fù)責(zé)將請(qǐng)求包分發(fā)給物理服務(wù)器,而物理服務(wù)器將應(yīng)答包直接發(fā)給用戶。所以,負(fù)載均衡器能處理很巨大的請(qǐng)求量,這種方式,一臺(tái)負(fù)載均衡能為超過(guò)100臺(tái)的物理服務(wù)器服務(wù),負(fù)載均衡器不再是系統(tǒng)的瓶頸。使用VS-TUN方式,如果你的負(fù)載均衡器擁有100M的全雙工網(wǎng)卡的話,就能使得整個(gè)Virtual Server能達(dá)到1G的吞吐量。 

                  IP tunneling(IP隧道)能夠用于架構(gòu)一個(gè)高性能的virtual server,非常適合構(gòu)建virtual proxy 

                  server,因?yàn)楫?dāng)代理服務(wù)器收到了請(qǐng)求,能夠讓最終用戶直接與服務(wù)器聯(lián)系。 

                  但是,這種方式需要所有的服務(wù)器支持IP Tunneling(IP Encapsulation)協(xié)議,我僅在Linux系統(tǒng)上實(shí)現(xiàn)了這個(gè),如果你能讓其它操作系統(tǒng)支持,還在探索之中。 

                  3) DR 

                  就象VS-TUN一下,在VS-DR方式下,負(fù)載均衡器也只是分發(fā)請(qǐng)求,應(yīng)答包通過(guò)單獨(dú)的路由方法返回給客戶端。這種方式能夠大大提高Virtual Server的可擴(kuò)展性。與VS-TUN相比,VS-DR這種實(shí)現(xiàn)方式不需要隧道結(jié)構(gòu),但它要求負(fù)載均衡器的網(wǎng)卡必須與物理網(wǎng)卡在一個(gè)物理段上。 

                  而且VS-DR模式,可以使用大多數(shù)操作系統(tǒng)做為物理服務(wù)器,其中包括:Linux 2.0.36、 

                  2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0無(wú)需打補(bǔ)丁;IRIX 6.5;HPUX11等 

                  3. 負(fù)載均衡調(diào)度算法 

                  目前系統(tǒng)有八種負(fù)載均衡調(diào)度算法,具體如下: 

                  1) rr 

                  輪叫(Round Robin)調(diào)度器通過(guò)‖輪叫‖調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載. 

                  2) wrr 

                  加權(quán)輪叫(Weighted Round Robin)調(diào)度器通過(guò)‖加權(quán)輪叫‖調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求.這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量.調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。 

                  3) lc 

                  最少鏈接(Least Connections)調(diào)度器通過(guò)‖最少連接‖調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上.如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用‖最小連接‖調(diào)度算法可以較好地均衡負(fù)載. 

                  4) wlc 

                  加權(quán)最少鏈接(Weighted Least Connections)在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用‖加權(quán)最少鏈接‖調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載.調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值. 

                  5) lblc 

                  基于局部性的最少鏈接(Locality-Based Least Connections)―基于局部性的最少鏈接‖ 調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng).該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒(méi)有超載,將請(qǐng)求發(fā)

                  送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用‖最少鏈接‖的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器. 

                  6) lblcr 

                  帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)―帶復(fù)制的基于局部性最少鏈接‖調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng).它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射.該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按‖最小連接‖原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按‖最小連接‖原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器.同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒(méi)有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度. 

                  7) dh 

                  目標(biāo)地址散列(Destination Hashing)―目標(biāo)地址散列‖調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空. 

                  8) sh 

                  源地址散列(Source Hashing)―源地址散列‖調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空. 

                  4. IPVS 

                  IPVS是整個(gè)負(fù)載均衡的基礎(chǔ),如果沒(méi)有這個(gè)基礎(chǔ)的話,故障隔離與失敗切換毫無(wú)意義。IPVS有IPVSADM來(lái)實(shí)現(xiàn)的。 

                  LVS客戶端是指負(fù)載均衡器/轉(zhuǎn)發(fā)器后面提供服務(wù)的服務(wù)器。 

                  負(fù)載均衡分為直接路由模式DR、網(wǎng)絡(luò)地址轉(zhuǎn)發(fā)模式NAT及隧道模式TUN三種。 

                  LVS客戶端的配置是根據(jù)其采用的負(fù)載均衡種類來(lái)做相應(yīng)操作的。 

                  為了獲得最高性能,采用直接路由模式DR。 

                  (二) Keepalived 

                  1. 概述 

                  Keepalived是運(yùn)行在lvs之上,它的主要功能是實(shí)現(xiàn)真實(shí)機(jī)的故障隔離及負(fù)載均衡器間的失敗切換FailOver。 

                  (三) MySQL Cluster 

                  1. 概述 

                  MySQL Cluster是MySQL適合于分布式計(jì)算環(huán)境的高實(shí)用、高冗余版本。它采用了NDB Cluster 存儲(chǔ)引擎,允許在1個(gè) Cluster 中運(yùn)行多個(gè)MySQL服務(wù)器。在MyQL 5.0及以上的二進(jìn)制版本中、以及與最新的Linux版本兼容的RPM中提供了該存儲(chǔ)引擎。 

                  MySQL Cluster 是一種技術(shù),該技術(shù)允許在無(wú)共享的系統(tǒng)中部署―內(nèi)存中‖數(shù)據(jù)庫(kù)的 Cluster 。通過(guò)無(wú)共享體系結(jié)構(gòu),系統(tǒng)能夠使用廉價(jià)的硬件,而且對(duì)軟硬件無(wú)特殊要求。此外,由于每個(gè)組件有自己的內(nèi)存和磁盤(pán),不存在單點(diǎn)故障。 

                  MySQL Cluster 由一組計(jì)算機(jī)構(gòu)成,每臺(tái)計(jì)算機(jī)上均運(yùn)行著多種進(jìn)程,包括MySQL服務(wù)器,NDB Cluster 的數(shù)據(jù)節(jié)點(diǎn),管理服務(wù)器,以及(可能)專門(mén)的數(shù)據(jù)訪問(wèn)程序。關(guān)于 Cluster 中這些組件的關(guān)系,請(qǐng)參見(jiàn)下圖: 

                  所有的節(jié)點(diǎn)構(gòu)成一個(gè)完成的MySQL集群體系。數(shù)據(jù)保存在―NDB存儲(chǔ)服務(wù)器‖的存儲(chǔ)引擎中,表(結(jié)構(gòu))則保存在―MySQL服務(wù)器‖中。應(yīng)用程序通過(guò)―MySQL服務(wù)器‖訪問(wèn)這些數(shù)據(jù)表,集群管理服務(wù)器通過(guò)管理工具(ndb_mgmd)來(lái)管理―NDB存儲(chǔ)服務(wù)器‖。 通過(guò)將MySQL Cluster 引入開(kāi)放源碼世界,MySQL為所有需要它的人員提供了具有高可用性、高性能和可縮放性的 Cluster 數(shù)據(jù)管理。 

                  1) 優(yōu)點(diǎn) 

                  99.999,的高可用性 

                  快速的自動(dòng)失效切換 

                  靈活的分布式體系結(jié)構(gòu),沒(méi)有單點(diǎn)故障 

                  高吞吐量和低延遲 

                  可擴(kuò)展性強(qiáng),支持在線擴(kuò)容 

                  2) 缺點(diǎn): 

                  存在很多限制,如:不支持外鍵,數(shù)據(jù)行不能超過(guò)8K(不含BLOB和text的數(shù)據(jù)) 部署、管理、配置很復(fù)雜占用磁盤(pán)空間大,MySQL Cluster 能夠使用多種故障切換和負(fù)載平衡選項(xiàng)配置NDB存儲(chǔ)引擎,但在 Cluster 級(jí)別上的存儲(chǔ)引擎上做這個(gè)最簡(jiǎn)單。MySQL Cluster的NDB存儲(chǔ)引擎包含完整的數(shù)據(jù)集,僅取決于 Cluster本身內(nèi)的其他數(shù)據(jù)。 

                  目前,MySQL Cluster的 Cluster部分可獨(dú)立于MySQL服務(wù)器進(jìn)行配置。在MySQL Cluster中, Cluster的每個(gè)部分被視為1個(gè)節(jié)點(diǎn)。 

                  1) 管理(MGM)節(jié)點(diǎn) 

                  這類節(jié)點(diǎn)的作用是管理MySQL Cluster內(nèi)的其他節(jié)點(diǎn),如提供配置數(shù)據(jù)、啟動(dòng)并停止節(jié)點(diǎn)、運(yùn)行備份等。由于這類節(jié)點(diǎn)負(fù)責(zé)管理其他節(jié)點(diǎn)的配置,應(yīng)在啟動(dòng)其他節(jié)點(diǎn)之前首先啟動(dòng)這類節(jié)點(diǎn)。MGM節(jié)點(diǎn)是用命令―ndb_mgmd‖啟動(dòng)的。 

                  2) 數(shù)據(jù)節(jié)點(diǎn) 

                  這類節(jié)點(diǎn)用于保存 Cluster的數(shù)據(jù)。數(shù)據(jù)節(jié)點(diǎn)的數(shù)目與副本的數(shù)目相關(guān),是片段的倍數(shù)。例如,對(duì)于兩個(gè)副本,每個(gè)副本有兩個(gè)片段,那么就有4個(gè)數(shù)據(jù)節(jié)點(diǎn)。不過(guò)沒(méi)有必要設(shè)置多個(gè)副本。數(shù)據(jù)節(jié)點(diǎn)是用命令―ndbd‖啟動(dòng)的。 

                  3) SQL節(jié)點(diǎn) 

                  這是用來(lái)訪問(wèn) Cluster數(shù)據(jù)的節(jié)點(diǎn)。對(duì)于MySQL Cluster,客戶端節(jié)點(diǎn)是使用NDB Cluster存儲(chǔ)引擎的傳統(tǒng)MySQL服務(wù)器。通常,SQL節(jié)點(diǎn)是使用命令―mysqld –ndbcluster‖啟動(dòng)的,或?qū)ⅷDndbcluster‖添加到―my.cnf‖后使用―mysqld‖啟動(dòng)。 

                  3. 注意事項(xiàng) 

                  所有的節(jié)點(diǎn)的主機(jī)上盡量和確保環(huán)境一致,包括數(shù)據(jù)庫(kù)版本~ 

                  在MYSQLD節(jié)點(diǎn)上需要安裝支持cluster的Mysql server。 

                  在安裝NDB節(jié)點(diǎn)時(shí),如果需要各個(gè)節(jié)點(diǎn)環(huán)境盡可能保存一致,建議在NDB和mysql 

                  節(jié)點(diǎn)一樣安裝整個(gè)帶有NDB cluster儲(chǔ)存引擎。 

                  (四) 搭建環(huán)境說(shuō)明 

                  2. 網(wǎng)絡(luò)拓?fù)?nbsp;

                  二、 LVS 

                  (一) LVS核心-IPVS 

                  1. 安裝IPVSADM 

                  1) 下載ipvsadm,在172.16.1.100進(jìn)行操作 

                  wget 

                  2) 創(chuàng)建連接文件 

                  ln -sv /usr/src/kernels/2.6.32-71.29.1.el6.i686 /usr/src/Linux 

                  ln -sv /usr/src/kernels/2.6.32-71.29.1.el6.i686 /usr/src/linux 

                  注: 

                  a、紅色字體部分可根據(jù)實(shí)際情況予以修改,可用ls /usr/src/kernels/ 進(jìn)行查看。 b、連個(gè)命令必須都執(zhí)行,不然將出現(xiàn)找不到*.h這個(gè)錯(cuò)誤,成為無(wú)法安裝~ 

                  3) 解壓包 

                  tar zxvf ipvsadm-1.24.tar.gz 

                  4) 編譯及安裝,需要安裝gcc軟件 

                  yum -y install gcc* make 

                  cd ipvsadm-1.24 

                  make 

                  make install 

                  5) 檢驗(yàn)安裝是否正確 

                  執(zhí)行ipvsadm,提示: 

                  IP Virtual Server version 1.2.1 (size=4096) 

                  Prot LocalAddress:Port Scheduler Flags 

                  -&gt; RemoteAddress:Port Forward Weight ActiveConn InActConn 

                  6) 配置ipvsadm的啟動(dòng)文件 

                  vi /usr/local/sbin/lvs-dr.sh,內(nèi)容如下: 

                  #!/bin/bash 

                  # description: start LVS of DirectorServer 

                  #Written by :NetSeek 

                  GW=172.16.1.1 

                  # website director vip. 

                  MySQL_VIP=172.16.1.99 

                  MySQL_RIP1=172.16.1.101 

                  MySQL_RIP2=172.16.1.102 

                  source /etc/rc.d/init.d/functions 

                  logger $0 called with $1 

                  case &quot;$1&quot; in start) 

                  # set squid vip 

                  /sbin/ipvsadm --set 30 5 60 

                  /sbin/ifconfig eth0:0 $MySQL_VIP broadcast $MySQL_VIP netmask 255.255.255.255 

                  broadcast $MySQL_VIP up 

                  /sbin/route add -host $MySQL_VIP dev eth0:0 

                  /sbin/ipvsadm -A -t $MySQL_VIP:3306 -s wrr -p 3 

                  /sbin/ipvsadm -a -t $MySQL_VIP:3306 -r $MySQL_RIP1:3306 -g -w 1 

                  /sbin/ipvsadm -a -t $MySQL_VIP:3306 -r $MySQL_RIP2:3306 -g -w 1 

                  touch /var/lock/subsys/ipvsadm &gt;/dev/null 2&gt;&amp;1; stop) 

                  /sbin/ipvsadm -C 

                  /sbin/ipvsadm -Z 

                  ifconfig eth0:0 down 

                  route del $MySQL_VIP 

                  rm -rf /var/lock/subsys/ipvsadm &gt;/dev/null 2&gt;&amp;1 echo &quot;ipvsadm stoped&quot; 

                  status) 

                  if [ ! -e /var/lock/subsys/ipvsadm ];then echo &quot;ipvsadm stoped&quot; 

                  exit 1 

                  else 

                  echo &quot;ipvsadm OK&quot; 

                  fi    ;;  *) 

                  echo &quot;Usage: $0 {start|stop|status}&quot; 

                  exit 1 

                  esac 

                  exit 0 

                  7) 配置自啟動(dòng) 

                  chmod +x /usr/local/sbin/lvs-dr.sh 

                  vi /etc/rc.local,添加如下內(nèi)容: 

                  sleep 10 

                  /usr/local/sbin/lvs-dr.sh start 

                  8) 在172.16.1.101和172.16.1.102上添加如下腳本 vi /usr/local/bin/lvs_real,內(nèi)容如下: 

                  #!/bin/bash 

                  #description : start realserver 

                  VIP=172.16.1.99 

                  source /etc/rc.d/init.d/functions 

                  case &quot;$1&quot; in 

                  start) 

                  echo &quot;start LVS of REALServer&quot; 

                  /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up 

                  echo &quot;1&quot; &gt;/proc/sys/net/ipv4/conf/lo/arp_ignore 

                  echo &quot;2&quot; &gt;/proc/sys/net/ipv4/conf/lo/arp_announce 

                  echo &quot;1&quot; &gt;/proc/sys/net/ipv4/conf/all/arp_ignore 

                  echo &quot;2&quot; &gt;/proc/sys/net/ipv4/conf/all/arp_announce; stop) 

                  /sbin/ifconfig lo:0 down 

                  echo &quot;close LVS Directorserver&quot; 

                  echo &quot;0&quot; &gt;/proc/sys/net/ipv4/conf/lo/arp_ignore 

                  echo &quot;0&quot; &gt;/proc/sys/net/ipv4/conf/lo/arp_announce 

                  echo &quot;0&quot; &gt;/proc/sys/net/ipv4/conf/all/arp_ignore 

                  echo &quot;0&quot; &gt;/proc/sys/net/ipv4/conf/all/arp_announce     ;;    *) 

                  echo &quot; Usage: $0 {start|stop} &quot; 

                  exit 1 

                  esac 

                  參數(shù)說(shuō)明: 

                  a、vip(virtual ip)。直接路由模式的vip必須跟服務(wù)器對(duì)外提供服務(wù)的ip地址在同一個(gè)網(wǎng)段,并且lvs 負(fù)載均衡器和其他所有提供相同功能的服務(wù)器都使用這個(gè)vip. 

                  b、vip被綁定在環(huán)回接口lo0:0上,其廣播地址是其本身,子網(wǎng)掩碼是255.255.255.255。

                  這與標(biāo)準(zhǔn)的網(wǎng)絡(luò)地址設(shè)置有很大的不同。采用這種可變長(zhǎng)掩碼方式把網(wǎng)段劃分成只含一個(gè)主機(jī)地址的目的是避免ip地址沖突。 

                  c、echo ―1‖,echo ―2‖ 這段的作用是抑制arp廣播。 

                  9) 在172.16.1.101和172.16.1.102上執(zhí)行如下命令 

                  chmod +x /usr/local/bin/lvs_real 

                  10) 在172.16.1.101和172.16.1.102的執(zhí)行如下命令 

                  vi /etc/rc.local,添加如下內(nèi)容: 

                  /usr/local/bin/lvs_real start 

                  三、 故障隔離、失敗切換框架keepalived(172.16.1.100) 

                  (一) 安裝Keepalived 

                  1. 下載keepalived 

                  wget 

                  2. 解壓包 

                  tar zxvf keepalived-1.2.2.tar.gz 

                  3. 編輯及安裝 

                  cd keepalived-1.2.2 

                  ./configure -prefix=/usr/local/keepalived 

                  make ; make install 

                  (二) 添加keepalived為系統(tǒng)服務(wù) 

                  cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 

                  cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 

                  cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

                  chkconfig --add keepalived 

                  chkconfig keepalived on 

                  (三) 添加配置文件keepalived.conf 

                  1. 配置文件 

                  mkdir /etc/keepalived 

                  vi /etc/keepalived/keepalived.conf,添加如下內(nèi)容: 

                  ! Configuration File for keepalived 

                  global_defs { 

                  notification_email { 

                  [email protected] 

                  } 

                  notification_email_from [email protected] 

                  smtp_server 192.168.1.201 smtp_connect_timeout 30 router_id LVS_MYSQL } 

                  vrrp_instance VI_1 { 

                  state MASTER 

                  interface eth0 

                  virtual_router_id 51 priority 100 

                  advert_int 2 

                  authentication { 

                  auth_type PASS auth_pass 1111 } 

                  virtual_ipaddress { 

                  172.16.1.99 

                  } 

                  } 

                  virtual_server 172.16.1.99 3306 { delay_loop 2 

                  lb_algo rr 

                  lb_kind DR 

                  persistence_timeout 60 protocol TCP 

                  real_server 172.16.1.101 3306 { weight 1 

                  TCP_CHECK { 

                  connect_timeout 10 nb_get_retry 3 

                  delay_before_retry 3 connect_port 3306 } 

                  } 

                  real_server 172.16.1.102 3306 { weight 1 

                  TCP_CHECK { 

                  connect_timeout 10 nb_get_retry 3 

                  delay_before_retry 3 connect_port 3306 } 

                  } 

                  } 

                  2. 配置文件說(shuō)明 

                  1) 全局定義塊 

                  A、email通知。作用:有故障,發(fā)郵件報(bào)警。這是可選項(xiàng)目。 

                  B、Lvs負(fù)載均衡器標(biāo)識(shí)(lvs_id)。在一個(gè)網(wǎng)絡(luò)內(nèi),它應(yīng)該是唯一的。 

                  C、花括號(hào)―{}‖。如果寫(xiě)漏了,keepalived運(yùn)行時(shí),不會(huì)得到預(yù)期的結(jié)果。由于定義塊內(nèi)存在嵌套關(guān)系,因此很容易遺漏結(jié)尾處的花括號(hào),這點(diǎn)要特別注意。 

                  2) VRRP定義塊 

                  A、同步vrrp組vrrp_sync_group。作用:確定失敗切換(FailOver)包含的路由實(shí)例個(gè)數(shù)。 

                  B、實(shí)例組group.至少包含一個(gè)vrrp實(shí)例。 

                  C、Vrrp實(shí)例vrrp_instance.實(shí)例名出自實(shí)例組group所包含的那些名字。 

                  a、實(shí)例狀態(tài)state:只有MASTER和BACKUP兩種狀態(tài),并且需要大寫(xiě)。其中MASTER為工作狀態(tài),BACKUP為備用狀態(tài)。當(dāng)MASTER所在的服務(wù)器失效時(shí),BACKUP所在的系統(tǒng)會(huì)自動(dòng)把它的狀態(tài)有BACKUP變換成MASTER;當(dāng)失效的MASTER所在的系統(tǒng)恢復(fù)時(shí),BACKUP從MASTER恢復(fù)到BACKUP狀態(tài)。 

                  b、通信接口interface。對(duì)外提供服務(wù)的網(wǎng)絡(luò)接口,在選擇服務(wù)接口時(shí),一定要核實(shí)清楚。 

                  c、lvs_sync_daemon_inteface。負(fù)載均衡器之間的監(jiān)控接口,類似于HA HeartBeat的心跳線。但它的機(jī)制優(yōu)于Heartbeat,因?yàn)樗鼪](méi)有―裂腦‖這個(gè)問(wèn)題,它是以優(yōu)先級(jí)這個(gè)機(jī)制來(lái)規(guī)避這個(gè)麻煩的。在DR模式中,lvs_sync_daemon_inteface 與服務(wù)接口interface 使用同一個(gè)網(wǎng)絡(luò)接口。 

                  d、虛擬路由標(biāo)識(shí)virtual_router_id.這個(gè)標(biāo)識(shí)是一個(gè)數(shù)字,并且同一個(gè)vrrp實(shí)例使用唯一的標(biāo)識(shí)。即同一個(gè)vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同時(shí)在整個(gè)vrrp內(nèi)是唯一的。 

                  e、優(yōu)先級(jí)priority.這是一個(gè)數(shù)字,數(shù)值愈大,優(yōu)先級(jí)越高。在同一個(gè)vrrp_instance里,MASTER 的優(yōu)先級(jí)高于BACKUP。若MASTER的priority值為150,那么BACKUP的priority 只能是140或更小的數(shù)值。 

                  f、同步通知間隔 advert_int .MASTER與BACKUP負(fù)載均衡器之間同步檢查的時(shí)間間隔,單位為秒。 

                  g、驗(yàn)證authentication。包含驗(yàn)證類型和驗(yàn)證密碼。類型主要有PASS、AH兩種,通常使用的類型為PASS,據(jù)說(shuō)AH使用時(shí)有問(wèn)題。驗(yàn)證密碼為明文,同一vrrp實(shí)例MASTER與BACKUP 使用相同的密碼才能正常通信。 

                  D、虛擬ip地址virtual_ipaddress :可以有多個(gè)地址,每個(gè)地址占一行,不需要指定子網(wǎng)掩碼。注意:這個(gè)ip必須與我們?cè)趌vs客戶端設(shè)定的vip相一致~ 

                  a、虛擬服務(wù)器virtual_server定義塊:虛擬服務(wù)器定義是keepalived框架最重要的項(xiàng)目了,是keepalived.conf必不可少的部分。 

                  b、虛擬服務(wù)器virtual_server:這個(gè)ip來(lái)自于vrrp定義塊的第―4‖步,后面一個(gè)空格,然后加上端口號(hào)。定義一個(gè)vip,可以實(shí)現(xiàn)多個(gè)tcp端口的負(fù)載均衡功能。 

                  c、delay_loop。健康檢查時(shí)間間隔,單位是秒。 

                  d、lb_algo. 負(fù)載均衡調(diào)度算法,互聯(lián)網(wǎng)應(yīng)用常使用wlc或rr。 

                  e、lb_kind. 負(fù)載均衡轉(zhuǎn)發(fā)規(guī)則。一般包括DR,NAT,TUN3種,在我的方案中,都使用DR的方式。 

                  f、persistence_timeout會(huì)話保持時(shí)間,單位是秒。這個(gè)選項(xiàng)對(duì)動(dòng)態(tài)網(wǎng)站很有用處:當(dāng)用戶從遠(yuǎn)程用帳號(hào)進(jìn)行登陸網(wǎng)站時(shí),有了這個(gè)會(huì)話保持功能,就能把用戶的請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)應(yīng)用服務(wù)器。在這里,我們來(lái)做一個(gè)假設(shè),假定現(xiàn)在有一個(gè)lvs 環(huán)境,使用DR轉(zhuǎn)發(fā)模式,真實(shí)服務(wù)器有3個(gè),負(fù)載均衡器不啟用會(huì)話保持功能。當(dāng)用戶第一次訪問(wèn)的時(shí)候,他的訪問(wèn)請(qǐng)求被負(fù)載均衡器轉(zhuǎn)給某個(gè)真實(shí)服務(wù)器,這樣他看到一個(gè)登陸頁(yè)面,第一次訪問(wèn)完畢;接著他在登陸框填寫(xiě)用戶名和密碼,然后提交;這時(shí)候,問(wèn)題就可能出現(xiàn)了—登陸不能成功。因?yàn)闆](méi)有會(huì)話保持,負(fù)載均衡器可能會(huì)把第2次的請(qǐng)求轉(zhuǎn)發(fā)到其他的服務(wù)器。 

                  g、轉(zhuǎn)發(fā)協(xié)議protocol.一般有tcp和udp兩種。實(shí)話說(shuō),我還沒(méi)嘗試過(guò)udp協(xié)議類的轉(zhuǎn)發(fā)。 

                  h、真實(shí)服務(wù)器real_server.也即服務(wù)器池。Real_server的值包括ip地址和端口號(hào)。多個(gè)連續(xù)的真實(shí)ip,轉(zhuǎn)發(fā)的端口相同。 

                  i、權(quán)重weight.權(quán)重值是一個(gè)數(shù)字,數(shù)值越大,權(quán)重越高。使用不同的權(quán)重值的目的在于為不同性能的機(jī)器分配不同的負(fù)載,性能較好的機(jī)器,負(fù)載分擔(dān)大些;反之,性能差的機(jī)器,則分擔(dān)較少的負(fù)載,這樣就可以合理的利用不同性能的機(jī)器資源。 

                  j、Tcp檢查 tcp_check。 

                  四、 MySQL Cluster 

                  1. 安裝MySQL Cluster 

                  1) 在172.16.1.100載并安裝,MySQL-Cluster-gpl-management,MySQL-Cluster-gpl-tools。 rpm -ivh MySQL-Cluster-gpl-management-7.1.15-1.rhel5.i386.rpm 

                  rpm -ivh MySQL-Cluster-gpl-tools-7.1.15-1.rhel5.i386.rpm 

                  2) 在172.16.1.101和172.16.1.102下載并安裝MySQL-Cluster-gpl-server、 

                  MySQL-Cluster-gpl-client和MySQL-Cluster-gpl-storage 

                  rpm -ivh MySQL-Cluster-gpl-server-7.1.15-1.rhel5.i386.rpm 

                  rpm -ivh MySQL-Cluster-gpl-client-7.1.15-1.rhel5.i386.rpm 

                  rpm -ivh MySQL-Cluster-gpl-storage-7.1.15-1.rhel5.i386.rpm 

                  2. 配置管理節(jié)點(diǎn)(172.16.1.100) 

                  mkdir /var/lib/mysql-cluster 

                  vi /var/lib/mysql-cluster/cluster.conf,添加如下內(nèi)容: 

                  [NDBD DEFAULT] 

                  NoOfReplicas=2 

                  DataMemory=300M 

                  IndexMemory=75M 

                  TransactionDeadLockDetectionTimeOut=60000 

                  [TCP DEFAULT] 

                  portnumber=1186 

                  [NDB_MGMD] 

                  nodeid=1 

                  hostname=172.16.1.100 

                  datadir=/var/lib/mysql-cluster 

                  [NDBD] 

                  nodeid=2 

                  hostname=172.16.1.101 

                  datadir=/var/lib/mysql-cluster 

                  MaxNoOfOrderedIndexes=2048 

                  MaxNoOfAttributes=50000 

                  [NDBD] 

                  nodeid=3 

                  hostname=172.16.1.102 

                  datadir=/var/lib/mysql-cluster 

                  MaxNoOfOrderedIndexes=2048 

                  MaxNoOfAttributes=50000 

                  [MYSQLD] 

                  nodeid=4 

                  hostname=172.16.1.101 

                  [MYSQLD] 

                  nodeid=5 

                  hostname=172.16.1.102 

                  3. 配置sql節(jié)點(diǎn)和db節(jié)點(diǎn) 

                  1) 172.16.1.101和172.16.1.102節(jié)點(diǎn) 

                  vi /etc/my.conf,添加并覆蓋= 3306 

                  socket = /var/lib/mysql/mysql.sock 

                  # Here follows entries for some specific programs 

                  # The MySQL server 

                  [mysqld] 

                  port = 3306 

                  socket = /var/lib/mysql/mysql.sock 

                  skip-locking 

                  skip-name-resolve 

                  key_buffer_size = 16M 

                  max_allowed_packet = 1M 

                  table_open_cache = 64 

                  sort_buffer_size = 512K 

                  net_buffer_length = 8K 

                  read_buffer_size = 256K 

                  read_rnd_buffer_size = 512K 

                  myisam_sort_buffer_size = 8M 

                  character_set_server = utf8 

                  ndbcluster 

                  ndb-connectstring = 172.16.1.100:1186 

                  [mysql_cluster] 

                  ndb-connectstring = 172.16.1.100:1186 

                  # Don‘t listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that 

                  need to connect to mysqld run on the same host. 

                  # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using 

                  this option without enabling named pipes on Windows # (via the &quot;enable-named-pipe&quot; 

                  option) will render mysqld useless! 

                  # 

                  #skip-networking 

                  # Replication Master Server (default) 

                  # binary logging is required for replication 

                  #log-bin=mysql-bin 

                  # binary logging format - mixed recommended 

                  #binlog_format=mixed 

                  # required unique id between 1 and 2 - 1 

                  # defaults to 1 if master-host is not set 

                  # but will not function as a master if omitted 

                  #server-id = 1 

                  # Replication Slave (comment out master section to use this) 

                  # 

                  # To configure this host as a replication slave, you can choose between # two methods : 

                  # 

                  # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the 

                  syntax is: 

                  # 

                  # CHANGE MASTER TO MASTER_HOST=&lt;host&gt;, 

                  MASTER_PORT=&lt;port&gt;, # MASTER_USER=&lt;user&gt;, 

                  MASTER_PASSWORD=&lt;password&gt; ; 

                  # 

                  # where you replace &lt;host&gt;, &lt;user&gt;, &lt;password&gt; by quoted strings and # &lt;port&gt; by the master‘s port number (3306 by default). 

                  # 

                  # Example: 

                  # 

                  # CHANGE MASTER TO MASTER_HOST=?125.564.12.1‘, MASTER_PORT=3306, # MASTER_USER=?joe‘, MASTER_PASSWORD=?secret‘; 

                  # 

                  # OR 

                  # 

                  # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later 

                  # change in this file to the variables‘ values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # 

                  # required unique id between 2 and 2 - 1 

                  # (and different from the master) 

                  # defaults to 2 if master-host is set 

                  # but will not function as a slave if omitted 

                  #server-id = 2 

                  # 

                  # The replication master for this slave - required 

                  #master-host = &lt;hostname&gt; 

                  # 

                  # The username the slave will use for authentication when connecting # to the master - required 

                  #master-user = &lt;username&gt; 

                  # 

                  # The password the slave will authenticate with when connecting to # the master - required 

                  #master-password = &lt;password&gt; 

                  # 

                  # The port the master is listening on. 

                  # optional - defaults to 3306 

                  #master-port = &lt;port&gt; 

                  # 

                  # binary logging - not required for slaves, but recommended 

                  #log-bin=mysql-bin 

                  # Uncomment the following if you are using InnoDB tables 

                  #innodb_data_home_dir = /var/lib/mysql 

                  #innodb_data_file_path = ibdata1:10M:autoextend 

                  #innodb_log_group_home_dir = /var/lib/mysql 

                  # You can set .._buffer_pool_size up to 50 - 80 % 

                  # of RAM but beware of setting memory usage too high 

                  #innodb_buffer_pool_size = 16M 

                  #innodb_additional_mem_pool_size = 2M 

                  # Set .._log_file_size to 25 % of buffer pool size 

                  #innodb_log_file_size = 5M 

                  #innodb_log_buffer_size = 8M 

                  #innodb_flush_log_at_trx_commit = 1 

                  #innodb_lock_wait_timeout = 50 

                  [mysqldump] 

                  quick 

                  max_allowed_packet = 16M 

                  [mysql] 

                  no-auto-rehash 

                  # Remove the next comment character if you are not familiar with SQL #safe-updates 

                  [myisamchk] 

                  key_buffer_size = 20M 

                  sort_buffer_size = 20M 

                  read_buffer = 2M 

                  write_buffer = 2M 

                  [mysqlhotcopy] 

                  interactive-timeout 

                  2) 在172.16.1.101和172.16.1.102節(jié)點(diǎn)執(zhí)行如下命令: useradd -M -d /dev/null -s /sbin/nologin -c &quot;Mysql Cluster&quot; mysql chown mysql:mysql /var/lib/mysql-cluster 

                  4. 啟動(dòng)集群 

                  1) 啟動(dòng)管理節(jié)點(diǎn) 

                  ndb_mgmd -f /var/lib/mysql-cluster/cluster.conf 

                  2) 啟動(dòng)數(shù)據(jù)節(jié)點(diǎn) 

                  ndbd --initial 

                  注: 

                  紅色字體部分盡在第一次啟動(dòng)數(shù)據(jù)節(jié)點(diǎn)時(shí)執(zhí)行。 

                  3) 啟動(dòng)sql節(jié)點(diǎn) 

                  /etc/init.d/mysql start 

                  /usr/bin/mysqladmin -u root password ?MyMysqlPassword‘ 

                  5. 確認(rèn)集群狀態(tài),在管理節(jié)點(diǎn)(ClusterMgm)里執(zhí)行 ndb_mgm 

                  -- NDB Cluster -- Management Client -- 

                  ndb_mgm&gt; show 

                  Connected to Management Server at: localhost:1186 

                  Cluster Configuration 

                  --------------------- 

                  [ndbd(NDB)] 3 node(s) 

                  id=2 @172.16.1.101 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0, *) 

                  id=3 @172.16.1.102 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0) 

                  [ndb_mgmd(MGM)] 1 node(s) 

                  id=1 @192.168.0.100 (mysql-5.1.56 ndb-7.1.15) 

                  [mysqld(API)] 3 node(s) 

                  id=4 @172.16.1.101 (mysql-5.1.56 ndb-7.1.15) 

                  id=5 @172.16.1.102 (mysql-5.1.56 ndb-7.1.15) 

                  ?非常重要: 

                  1.在建表的時(shí)候一定要用ENGINE=NDB或ENGINE=NDBCLUSTER指定使用NDB集群

                  存儲(chǔ)引擎,或用ALTER TABLE選項(xiàng)更改表的存儲(chǔ)引擎,否則數(shù)據(jù)節(jié)點(diǎn)無(wú)法進(jìn)行數(shù)據(jù)同步。 

                  2.NDB表必須有一個(gè)主鍵,因此創(chuàng)建表的時(shí)候必須定義主鍵,否則NDB存儲(chǔ)引擎將自動(dòng)

                  生成隱含的主鍵。 

                  6. 其他命令: 

                  1) 關(guān)閉管理節(jié)點(diǎn): 

                  ndb_mgm -e shutdown 

                  2) 啟動(dòng)管理并重新加載配置: 

                  ndb_mgm -f /var/lib/mysql-cluster/cluster.conf --reload 

                  


          MySQL參照完整性MySQL客戶工具和API
          MySQL用戶授權(quán)navicat與mysql詳解
          基于MySQL數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)查看MySQL連接數(shù)狀態(tài)
          PHP操作MySQL類無(wú)法遠(yuǎn)程連接MySQL服務(wù)器的幾種情況及解決方法
          CentOS系統(tǒng)MySQL優(yōu)化詳解通過(guò)數(shù)據(jù)庫(kù)引擎來(lái)加速M(fèi)ySQL數(shù)據(jù)庫(kù)
          提高M(jìn)ySQL性能的方法 優(yōu)化MySQL數(shù)據(jù)庫(kù)性能的八大妙手
          MySQL動(dòng)態(tài)參數(shù)MySQL分區(qū)介紹
          MySQL分區(qū)表測(cè)試MySQL數(shù)據(jù)庫(kù)遷移常用方法
          信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 2017大香蕉 | 日日干夜夜操夜夜爽i | 久久久久久久久久夜夜想 | 一区在线观看免费 | 国产色情性黄 片免费视频 | 色秘 乱码一区二区三区唱戏 | 99国产在线视频 | 视频久久小说网站 | 激情丁香月婷爱网 | 九九伊人大香蕉 |