MySQL+負載均衡群集_第1頁
MySQL+負載均衡群集_第2頁
MySQL+負載均衡群集_第3頁
MySQL+負載均衡群集_第4頁
MySQL+負載均衡群集_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

[練習(xí)]MySQL負載均衡群集本文將告訴你如何配置一個三個節(jié)點的MySQL5數(shù)據(jù)庫服務(wù)器群集:兩個存儲節(jié)點和一個管理節(jié)點。這個群集是由用提供“heartbeat心跳”(用來檢查另外一個節(jié)點是否活動)和“l(fā)directord”(將請求分發(fā)到MySQL群集的節(jié)點)的UltraMonkey安裝包的兩個節(jié)點組成的一個高可用性負載均衡器。本文我們的每個節(jié)點使用DebianSargeLinux系統(tǒng)。其它Linux發(fā)行版本的安裝可能一點點區(qū)別。MySQL的版本我們使用5.0.19。如果你不想使用MySQL5,你也可以使用MySQL4.1,盡管我還沒有測試過。本文是一篇實踐應(yīng)用指導(dǎo);它沒有涉及太多的理論。關(guān)于群集的理論你可以在網(wǎng)上找到很多。一服務(wù)器我使用下面的Debian服務(wù)器,它們都在同一個網(wǎng)段(本例如:192.168.0.x)::01MySQL群集節(jié)點1:02MySQL群集節(jié)點2:03負載均衡1/MySQL群集管理服務(wù)器:04負載均衡2另外我們需要一個虛擬IP地址:05。它會安排給這個MySQL群集的以便于負載均衡,應(yīng)用程序通過統(tǒng)一單獨的IP地址來訪問群集。盡管我們想在MySQL群集中使用兩個節(jié)點,但是我們?nèi)匀恍枰谌齻€節(jié)點,MySQL群集管理服務(wù)器,主要的一個原因是:如果其中一個MySQL群集節(jié)點壞了,而MySQL群集管理服務(wù)器沒有運行,那么兩個群集節(jié)點上的數(shù)據(jù)將會不一致(“splitbrain”)。我們需要它來配置MySQL群集.因此我們的安裝一般需要五臺機器:2個MySQL群集節(jié)點+1個群集管理服務(wù)器+2個負載均衡二5因為群集管理服務(wù)器沒有使用多少資源,系統(tǒng)將會空著什么都不做,所以我們可以把我們的第一個負載均衡和它一起放在同一臺機器上,這樣可以節(jié)約我們一臺服務(wù)器,所以最好我們只需要四臺機器。二配置MySQL群集管理服務(wù)器首先我們要下載MySQL5.0.19,并安裝群集管理服務(wù)器(ndb_mgmd)和群集管理客戶端(ndb_mgm-它可以用來監(jiān)控群集的運行情況).下面的步驟是在(03)上進行的::mkdir/usr/src/mysql-mgmcd/usr/src/mysql-mgmwget\ites/glibc23.tar.gz/from/cdmysql-max-5.0.19-linux-i686-glibc23mvbin/ndb_mgm/usr/binmvbin/ndb_mgmd/usr/binchmod755/usr/bin/ndb_mg*cd/usr/srcrm-rf/usr/src/mysql-mgm下一步,我們必須創(chuàng)建群集的配置文件,/var/lib/mysql-cluster/config.ini::mkdir/var/lib/mysql-clustercd/var/lib/mysql-clusterviconfig.ini—[NDBDDEFAULT]NoOfReplicas=2[MYSQLDDEFAULT][NDB_MGMDDEFAULT][TCPDEFAULT]Sectionfortheclustermanagementnode[NDB_MGMD]IPaddressofthemanagementnode(thissystem)HostName=03Sectionforthestoragenodes[NDBD]IPaddressofthefirststoragenodeHostName=01DataDir=/var/lib/mysql-cluster[NDBD]IPaddressofthesecondstoragenodeHostName=02DataDir=/var/lib/mysql-clusterone[MYSQLD]perstoragenode[MYSQLD][MYSQLD]實際應(yīng)用中請將文件中的IP地址換成你相應(yīng)的IP。然后我們啟動群集管理服務(wù)器::ndb_mgmd-f/var/lib/mysql-cluster/config.ini我們應(yīng)該也需要在服務(wù)器啟動時能夠自動啟動管理服務(wù)器,所以我們創(chuàng)建了一個非常簡單的初始化腳本和相應(yīng)的啟動連接::echo‘ndb_mgmd-f/var/lib/mysql-cluster/config.ini’>/etc/init.d/ndb_mgmdchmod755/etc/init.d/ndb_mgmdupdate-rc.dndb_mgmddefaults三配置MySQL群集節(jié)點(存儲節(jié)點)現(xiàn)在我們將分別在和上安裝mysql-max-5.0.19:/:groupaddmysqluseradd-gmysqlmysqlcd/usr/local/wget686-\glibc23.tar.gz/from/tarxvfzmysql-max-5.0.19-linux-i686-glibc23.tar.gzIn-smysql-max-5.0.19-linux-i686-glibc23mysqlcdmysqlscripts/mysql_install_db-user=mysqlchown-Rroot:mysql.chown-Rmysqldatacpsupport-files/mysql.server/etc/init.d/chmod755/etc/init.d/mysql.serverupdate-rc.dmysql.serverdefaultscd/usr/local/mysql/binmv*/usr/bincd../rm-fr/usr/local/mysql/binln-s/usr/bin/usr/local/mysql/bin然后我們在每個節(jié)點上創(chuàng)建MySQL配置文件/etc/f:vi/etc/f-[mysqld]ndbclusterIPaddressoftheclustermanagementnodendb-connectstring=03[mysql_cluster]IPaddressoftheclustermanagementnodendb-connectstring=03-確認你在群集管理服務(wù)器中輸入的是正確的IP地址。下一步我們分別在每個群集節(jié)點上創(chuàng)建數(shù)據(jù)目錄和啟動MySQL服務(wù)器:/:mkdir/var/lib/mysql-clustercd/var/lib/mysql-clusterndbd-initial/etc/init.d/mysql.serverstart(請記住:我們只是在第一次啟動MySQL時或上面的/var/lib/mysql-cluster/config.ini發(fā)生改變時,才使用ndbd-initial)現(xiàn)在,是時候給MySQLroot帳號設(shè)置密碼了:/:mysqladmin-urootpasswordyourrootsqlpassword我們需要在服務(wù)器啟動時,啟動群集節(jié)點,所以我們創(chuàng)建一個ndbd初始化腳本和相應(yīng)的系統(tǒng)啟動連接:/:echo‘ndbd’>/etc/init.d/ndbdchmod755/etc/init.d/ndbdupdate-rc.dndbddefaults四測試MySQL群集我們的MySQL群集配置工作已經(jīng)完成,現(xiàn)在是測試它的時間了。在群集管理服務(wù)器()上,運行群集管理客戶端ndb_mgm來檢查群集節(jié)點是否連接::ndb_mgm你將會看到這些:-NDBCluster一ManagementClient-ndb_mgm>在命令行輸入show;show;輸出的信息應(yīng)該是這樣的:ndb_mgm>show;ConnectedtoManagementServerat:localhost:1186ClusterConfiguration[ndbd(NDB)]2node(s)id=2@01(Version:5.0.19,Nodegroup:0,Master)id=3@02(Version:5.0.19,Nodegroup:0)[ndb_mgmd(MGM)]1node(s)id=1@03(Version:5.0.19)[mysqld(API)]2node(s)id=4@01(Version:5.0.19)id=5@02(Version:5.0.19)ndb_mgm>如果你看到你的節(jié)點都已經(jīng)連接上了。那么一切都很順利?輸入quit;退出ndb_mgm客戶端控制臺。現(xiàn)在我們在節(jié)點上創(chuàng)建一個測試數(shù)據(jù)庫,并創(chuàng)建一個測試表,填入一些測試數(shù)據(jù):mysql-uroot-pCREATEDATABASEmysqlclustertest;USEmysqlclustertest;CREATETABLEtesttable(iINT)ENGINE=NDBCLUSTER;INSERTINTOtesttable()VALUES(1);SELECT*FROMtesttable;quit;(看看上面這個CREATE語句:我們想群集起來的所有數(shù)據(jù)庫的表,必須使用ENGINE二NDBCLUSTER?如果你使用其它的ENGINE,那么群集將不會工作?)SELECT出的結(jié)果應(yīng)該是:mysql>SELECT*FROMtesttable;+ +IiI ++I1I1rowinset(0.03sec)現(xiàn)在我們在節(jié)點上創(chuàng)建相同的數(shù)據(jù)庫(是,我們?nèi)匀灰獎?chuàng)建它,但是在testtable創(chuàng)建之后數(shù)據(jù)將會被復(fù)制到,因為testtable是使用ENGINE=NDBCLUSTER)::mysql-uroot-pCREATEDATABASEmysqlclustertest;USEmysqlclustertest;SELECT*FROMtesttable;SELECT出的結(jié)果應(yīng)該是和上面的的結(jié)果相同:mysql>SELECT*FROMtesttable;+ +IiI1rowinset(0.04sec)我們看到數(shù)據(jù)已經(jīng)從節(jié)點復(fù)制到節(jié)點了?,F(xiàn)在我們向testtable中插入另外一行::INSERTINTOtesttable()VALUES(2);quit;現(xiàn)在讓我們回到節(jié)點上,檢查是否能夠看見新插入的那一行::mysql-uroot-pUSEmysqlclustertest;SELECT*FROMtesttable;quit;你應(yīng)該看到像這樣的輸出:mysql>SELECT*FROMtesttable;+——+|i| ++|1||2|2rowsinset(0.05sec)所以每個群集節(jié)點都有著相同的數(shù)據(jù)?現(xiàn)在讓我們看看如果我們停止節(jié)點1():運彳亍:killallndbd并檢查psaux|grepndbd|grep-ivgrep看看所有的ndbd進程已經(jīng)結(jié)束了。如果你仍然看見ndbd進程,再運行killallndbd直到所有的ndbd進程都結(jié)束?,F(xiàn)在讓在我們的管理服務(wù)器上,檢查群集的狀態(tài)()::ndb_mgm在ndb_mgm控制臺上輸入show;你應(yīng)該看到這些:ndb_mgm>show;ConnectedtoManagementServerat:localhost:1186ClusterConfiguration[ndbd(NDB)]2node(s)id=2(notconnected,acceptingconnectfrom01)id=3@02(Version:5.0.19,Nodegroup:0,Master)[ndb_mgmd(MGM)]1node(s)id=1@03(Version:5.0.19)[mysqld(API)]2node(s)id=4@01(Version:5.0.19)id=5@02(Version:5.0.19)ndb_mgm>你看見,節(jié)點沒有連接上了。輸入:quit;退出ndb_mgm控制臺。讓我們檢查節(jié)點::mysql-uroot-pUSEmysqlclustertest;SELECT*FROMtesttable;quit;SELECT查詢出的結(jié)果應(yīng)該依然是:mysql>SELECT*FROMtesttable;2rowsinset(0.17sec)Ok,所有的測試都正常,現(xiàn)在讓我們再次啟動節(jié)點::ndbd五如何重新啟動群集現(xiàn)在讓我們設(shè)想你由于修改了節(jié)點上的/var/lib/mysql-cluster/config.ini或者其它原因,需要重新啟動MySQL群集。為了這樣做,你要使用節(jié)點上的ndb_mgm群集管理客戶端::ndb_mgm在ndb_mgm控制臺上,你輸入shutdown;你將看到像這樣的信息:ndb_mgm>shutdown;Node3:ClustershutdowninitiatedNode2:Nodeshutdowncompleted.2NDBClusternode(s)haveshutdown.NDBClustermanagementservershutdown.ndb_mgm>這意味著群集節(jié)點和,已經(jīng)群集管理服務(wù)器都已經(jīng)關(guān)閉。運行quit;退出ndb_mgm控制臺。為啟動群集管理服務(wù)器,在上這樣做::ndb_mgmd-f/var/lib/mysql-cluster/config.ini并在和上運行:/:ndbd或者,你剛修改過上的/var/lib/mysql-cluster/config.ini文件:ndbd-initial在這之后,你可以在上檢查看看群集是否已經(jīng)重啟::ndb_mgm在ndb_mgm控制臺,輸入show;來查看當前群集的狀態(tài)。所有節(jié)點重啟后可能需要一點點時間來報告已經(jīng)連接上。輸入:quit;退出ndb_mgm控制臺。六配置負載均衡我們的MySQL群集已經(jīng)現(xiàn)在完成了,你現(xiàn)在可以開始使用它了。然而,我們沒有一個訪問群集的單獨的IP地址,這意味著你必須配置應(yīng)用程序一部分使用MySQL群集節(jié)點1(),另外的部分使用節(jié)點2().當然,所有的應(yīng)用程序只是需要使用一個節(jié)點,但如果你不想在群集節(jié)點之間分流負載,那你擁有一個群集的目的是什么?另外一個問題是,如果一個群集節(jié)點壞掉了怎么辦,那么使用這個群集節(jié)點的應(yīng)用程序?qū)⒏静荒軌蚬ぷ髁?。這里的解決方案是在MySQL群集前端配置一個負載均衡器來在每個MySQL群集節(jié)點之間平衡負載。負載均衡器在群集節(jié)點之間配置一個共享的虛擬IP地址,所有你的應(yīng)用程序使用這個虛擬IP地址來訪問群集。如果其中一個節(jié)點壞掉,那么你的應(yīng)用程序?qū)⑷匀豢梢怨ぷ鳎驗樨撦d均衡器將請求轉(zhuǎn)移到了工作正常的另外一個節(jié)點?,F(xiàn)在在這個例子中負載均衡器成為了瓶頸。如果這個負載均衡器壞掉了怎么辦呢,因此我們將以(active/passive)主動/被動安裝方式來配置兩個負載均衡器。這意味著我們有一個負載均衡器是主動的,另外一個是熱備的,當主動的那個壞掉了,它將會變?yōu)橹鲃?。每個負載均衡器都使用heartbeat(心跳)來檢查另外一個負載均衡器的活動情況,同時負載均衡器也使用ldirectord,它負責將流量分配到群集節(jié)點。heartbeat和ldirectord都在我們將要安裝的UltraMonkey安裝包中。和節(jié)點的系統(tǒng)內(nèi)核支持IPVS(IP虛擬服務(wù)器)非常重要。IPVS是在Linux內(nèi)核的傳輸層執(zhí)行負載均衡的。6.1安裝UltraMonkey好,現(xiàn)在讓我們開始:首先我們啟用和節(jié)點上IPVS:/:modprobeip_vs_dhmodprobeip_vs_ftpmodprobeip_vsmodprobeip_vs_lblcmodprobeip_vs_lblcrmodprobeip_vs_lcmodprobeip_vs_nqmodprobeip_vs_rrmodprobeip_vs_sedmodprobeip_vs_shmodprobeip_vs_wlcmodprobeip_vs_wrr為了在啟動時IPVS模塊,我們在/etc/modules列舉了模塊:/:vi/etc/modulesip_vs_dhip_vs_ftpip_vsip_vs_lblcip_vs_lblcrip_vs_lcip_vs_nqip_vs_rrip_vs_sedip_vs_ship_vs_wlcip_vs_wrr現(xiàn)在我們編輯/etc/apt/sources.list,添加UltraMonkey的下載點,然后我們安裝UltraMonkey:/:vi/etc/apt/sources.listdeb:///download/3sargemainapt-getupdateapt-getinstallultramonkeylibdbi-perllibdbd-mysql-perl-devlibmysqlclient14現(xiàn)在UltraMonkey已經(jīng)安裝了,如果你看到下面這樣的警告:|libsensors3notfunctional||Itappearsthatyourkernelisnotcompiledwithsensorssupport.Asa|result,libsensors3willnotbefunctionalonyoursystem.||Ifyouwanttoenableit,havealookat“I2CHardwareSensorsChip|support”inyourkernelconfiguration.你可以忽略它?;卮鹣旅娴膯栴}:DoyouwanttoautomaticallyloadIPVSrulesonboot?<--NoSelectadaemonmethod.<--none我剛安裝的libdbd-mysql-perl安裝包不能夠在MySQL5(我們在MySQL群集上使用MySQL5),因此我們安裝最新的DBD::mysqlPerl安裝包:/:cd/tmpwget.tar.gztarxvfzDBD-mysql-3.0002.tar.gzcdDBD-mysql-3.0002perlMakefile.PLmakemakeinstall我們必須先啟用packetforwarding:/:vi/etc/sysctl.conf#Enablespacketforwardingnet.ipv4.ip_forward=16.2配置heartbeat(心跳)我們通過創(chuàng)建三個文件(和的文件必須完全一樣)來配置heartbeat:/:vi/etc/ha.d/ha.cflogfacilitylocal0bcasteth0mcasteth069410auto_failbackoffnodeloadb1nodeloadb2respawnhacluster/usr/lib/heartbeat/ipfailapiauthipfailgid=haclientuid=hacluster請記住:你必須列出節(jié)點名稱(本例中是loadb1和loadb2)uname-n除了這些,我們不需要對這個文件做任何修改。vi/etc/ha.d/haresourcesloadb1\ldirectord::ldirectord.cf\LVSSyncDaemonSwap::master\IPaddr2::05/24/eth0/55你必須列舉其中一個負載均衡節(jié)點名稱(這里是:loadb1),并且列出虛擬IP地址(05)和廣播地址(55).vi/etc/ha.d/authkeysauth33md5somerandomstringsomerandomstring是loadbl和loadb2用來相互認證的兩個heartbeat守護進程的密碼。這里設(shè)置成你自己的密碼。你可以選擇3種加密方式。我一般使用md5來加密。/etc/ha.d/authkeys應(yīng)該是root帳號只讀,這里我們這樣做:/:chmod600/etc/ha.d/authkeys6.3配置ldirectord現(xiàn)在我們?yōu)閘directord創(chuàng)建配置文件,負載均衡器:/:vi/etc/ha.d/ldirectord.cf#GlobalDirectiveschecktimeout=10checkinterval=2autoreload=nologfile=〃local0〃quiescent=yesvirtual=05:3306service=mysqlreal=01:3306gatereal=02:3306gatechecktype=negotiatelogin="ldirector"passwd="ldirectorpassword"database="ldirectordb"request=SELECT*FROMconnectioncheckscheduler=wrr請?zhí)钊胝_的虛擬IP地址(05)和正確的MySQL群集節(jié)點的IP地址(01和02)。3306是MySQL運行時默認的端口。我們也指定了一個MySQL用戶(ldirector)和密碼(ldirectorpassword),一個數(shù)據(jù)庫(ldirectordb)和一條SQL查詢。ldirectord使用這些信息來測試MySQL群集節(jié)點,以此來檢查它們的是否一直可用。下一步我們將用ldirector用戶來創(chuàng)建ldirectordb數(shù)據(jù)庫?,F(xiàn)在我們?yōu)閔eartbeat創(chuàng)建系統(tǒng)必需的啟動連接,并移除ldirectord(因為ldirectord將由heartbeat來啟動):/:update-rc.d-fheartbeatremoveupdate-rc.dheartbeatstart752345.stop05016.update-rc.d-fldirectordremove6.4創(chuàng)建數(shù)據(jù)庫ldirector下面我們在MySQL群集節(jié)點和上創(chuàng)建ldirector數(shù)據(jù)庫。這個數(shù)據(jù)庫將會用于我們的負載均衡器來檢查MySQL群集節(jié)點的可用性。:mysql-uroot-pGRANTALLONldirectordb.*TOTdirector'@'%'IDENTIFIEDBY,ldirectorpassword';FLUSHPRIVILEGES;CREATEDATABASEIdirectordb;USEIdirectordb;CREATETABLEconnectioncheck(iINT)ENGINE=NDBCLUSTER;INSERTINTOconnectioncheck()VALUES(1);quit;:mysql-uroot-pGRANTALLONldirectordb.*TOTdirector'@'%'IDENTIFIEDBY'ldirectorpassword';FLUSHPRIVILEGES;CREATEDATABASEldirectordb;quit;6.5為負載均衡準備MySQL群集節(jié)點最后我們必須配置MySQL群集節(jié)點和來接受虛擬IP地址05。/:apt-getinstalliproute在/etc/sysctl.conf里面添加下面的內(nèi)容:vi/etc/sysctl.confEnableconfigurationofarp_ignoreoptionnet.ipv4.conf.all.arp_ignore=1Whenanarprequestisreceivedoneth0,onlyrespondifthataddressisconfiguredoneth0.Inparticular,donotrespondiftheaddressis#configuredonlonet.ipv4.conf.eth0.arp_ignore=1#Dittoforethl,addforallARPinginterfaces#net.ipv4.conf.eth1.arp_ignore=1Enableconfigurationofarp_announceoptionnet.ipv4.conf.all.arp_announce=2WhenmakinganARPrequestsentthrougheth0Alwaysuseanaddressthat#isconfiguredoneth0asthesourceaddressoftheARPrequest.Ifthis#isnotset,andpacketsarebeingsentouteth0foranaddressthatisonlo,andanarprequestisrequired,thentheaddressonlowillbeused.#AsthesourceIPaddressofarprequestsisenteredintotheARPcacheonthedestination,ithastheeffectofannouncingthisaddress.Thisis#notdesirableinthiscaseasadressesonloonthereal-serversshould#beannouncedonlybythe.ipv4.conf.eth0.arp_announce=2Dittoforeth1,addforallARPinginterfaces#net.ipv4.conf.eth1.arp_announce=2sysctl-p將下面這段加入到/etc/network/interfaces:/:vi/etc/network/interfacesautolo:0ifacelo:0inetstaticaddress05netmask55pre-upsysctl-p>/dev/nullifuplo:0七.啟動負載均衡器并測試現(xiàn)在我們啟動兩個負載均衡管理器:/:/etc/init.d/ldirectordstop/etc/init.d/heartbeatstart如果你沒有看見錯誤,你需要現(xiàn)在重啟每個負載均衡器:/:shutdown-rnow重啟之后我們可以檢查是否兩個負載均衡器象期望一樣工作:/:ipaddrsheth0主動的負載均衡器應(yīng)該列出了虛擬IP地址(05):2:eth0:mtu1500qdiscpfifo_fastqlen1000link/ether00:16:3e:45:fc:f8brdff:ff:ff:ff:ff:ffinet03/24brd55scopeglobaleth0inet05/24brd55scopeglobalsecondaryet

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論