程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 具有負載平衡功效的MySQL辦事器集群安排及完成

具有負載平衡功效的MySQL辦事器集群安排及完成

編輯:MySQL綜合教程

具有負載平衡功效的MySQL辦事器集群安排及完成。本站提示廣大學習愛好者:(具有負載平衡功效的MySQL辦事器集群安排及完成)文章只能為提供參考,不一定能成為您想要的結果。以下是具有負載平衡功效的MySQL辦事器集群安排及完成正文


在現實臨盆情況中,安排和完成具有必定負載平衡功效的 MySQL辦事器集群,關於進步用戶數據庫運用體系的機能、速度和穩固性具有顯著的感化。本文扼要引見了在 FreeBSD 7.0-Release體系上安排完成MySQL辦事器集群的計劃,並對能夠湧現的成績供給了響應的處理辦法。
1. 引言
MySQL是一個高速度、高機能、多線程、開放源代碼,樹立在客戶/辦事器(Client /Server)構造上的關系型數據庫治理體系(RDBMS)。它始於1979年,最後是Michael Widenius為瑞典TcX公司創立的UNIREG數據庫體系,其時的UNIREG沒有SQL(Structured Query Language構造化查詢說話)接口,限制了它的運用。1996年5月,Widenius開辟出了MySQL的最後版本,開端在Internet上地下刊行。MySQL的開辟人員從一開端就一向存眷它的機能,為此不吝特征集,直到明天,MySQL仍然堅持本質,以高速度高機能為重要准繩。跟著時光的推移,MySQL也參加了年夜型數據庫產物的高等特征,如存儲進程、視圖、觸發器等,使其在企業級數據庫體系中開端被安排運用[1]。2008年10 月,SUN公司收買了MySQL AB公司,開端進入開源范疇。跟著分量級操作體系Solaris的開源,SUN MySQL在數據庫市場占領的份額將會進一步進步。是以,在臨盆情況中安排具有負載平衡功效的MySQL辦事器集群,關於進步企業數據庫運用體系的速度、穩固性及可伸縮性具有很年夜的實際意義,也能夠有用下降運用體系的投資本錢。本文將以FreeBSD 7.0-Release操作體系為例,應用MySQL數據庫的復制(Replication)特征,扼要引見安排MySQL辦事器集群的完成辦法和相干留意事項。
2. 體系模子
本集群的構造為一個主MySQL辦事器(Master)辦事器與多個附屬 MySQL辦事器(Slave)樹立復制(replication)銜接,主辦事器與附屬辦事器完成必定水平上的數據同步,多個附屬辦事器存儲雷同的數據正本,完成數據冗余,供給容錯功效。安排開辟運用體系時,對數據庫操作代碼停止優化,將寫操作(如UPDATE、INSERT)定向到主辦事器,把年夜量的查詢操作(SELECT)定向到附屬辦事器,完成集群的負載平衡功效。假如主辦事器產生毛病,附屬辦事器將轉換腳色成為主辦事器,使運用體系為終端用戶供給不連續的收集辦事;主辦事器恢復運轉後,將其轉換為附屬辦事器,存儲數據庫正本,持續對終端用戶供給數據查詢檢索辦事。
3. 安排完成
本文以一台主辦事器帶三台附屬辦事器為例,扼要引見MySQL辦事器集群的完成計劃和詳細辦法步調。
3.1 體系安排
因為FreeBSD體系對機械硬件請求較低,出於下降體系安排本錢斟酌,主辦事器和附屬辦事器操作體系均采取FreeBSD 7.0-Release,並采取最小化定制裝置,完成今後體系占用磁盤空間僅為254M(不計swap分區所占空間,它隨詳細機械內存容量的變更而變更)。為充足施展體系硬件機能,MySQL數據庫采取源代碼編譯裝置。
3.1.1 裝置FreeBSD體系
在主辦事器和附屬辦事器上裝置FreeBSD 7.0-Release,詳細裝置辦法步調不是本文重要內容,在此略過,若有疑問可以參考FreeBSD體系手冊。須要解釋的是為便利用戶體系運轉時代的保護治理,要翻開體系的SSH辦事功效,體系裝置設置裝備擺設時代許可root用戶長途登錄,正常運轉今後要封閉root用戶的長途登錄功效。在/etc/ssh /sshd_config設置裝備擺設文件中對PermitRootLogin設置為yes為許可root用戶長途登錄到體系,設置為no即為不許可。修正保留文件後履行kill –HUP `cat /var/run/sshd.pid`敕令便可重啟sshd守護過程,使設置失效[2]。上述操作須要root用戶權限。
3.1.2 編譯裝置MySQL
到MySQL的官方網站http://www.mysql.com下載MySQL數據庫的裝置源代碼緊縮包,本例下載的是mysql-5.1.30.tar.gz,以root用戶身份登錄到體系,開端裝置MySQL數據庫體系。

因為在對MySQL停止源代碼編譯裝置時請求應用GNU的C編譯器,而FreeBSD體系自己供給的不是該編譯器,是以用戶必需下載裝置GNU C編譯器[3]。把下載的gnumake-3.81.tar.gz解壓裝置,按以下步調便可裝置GNU C編譯器:

[root@FreebsdMaster/softwares]# tar –zxvf gnumake-3.81.tar.gz
[root@FreebsdMaster /softwares]# cd make-3.81

[root@FreebsdMaster /softwares/make-3.81]# ./configure ; make; make install; make clean

GNU C編譯器默許裝置到/usr/local/bin,在裝置MySQL時按相對途徑挪用make敕令便可,如# /usr/local/bin/make。

MySQL的編譯裝置比擬龐雜,詳細操作及相干留意事項以下:

(1). 解壓mysql-5.1.30.tar.gz,並停止設置裝備擺設

[root@FreebsdMaster /softwares]# tar –zxvf mysql-5.1.30.tar.gz

[root@FreebsdMaster /softwares]# cd mysql-5.1.30

[root@FreebsdMaster /softwares/mysql-5.1.30]# ./configure \

-–prefix=/app/mysql5 -–with-charset=gb2312

解釋:MySQL默許的裝置目次是/usr/local/mysql,為了加強體系安排的靈巧性,緊貼用戶運用體系現實情形,可以用—-prefix 參數定制裝置目次。--with-charset參數是使MySQL數據庫支撐中文gb2312字符集,假如須要支撐其它字符集,應用--with- extra-charset參數,格局為—-with-extra-charset=CHARSET1,CHARSET2, … 。

(2). 編譯裝置MySQL

[root@FreebsdMaster /softwares/mysql-5.1.30]# /usr/local/bin/make

[root@FreebsdMaster /softwares/mysql-5.1.30]# /usr/local/bin/make install

[root@FreebsdMaster /softwares/ mysql-5.1.30]# /usr/local/bin/make clean

留意必定要按相對途徑挪用GNU C編譯器,不然編譯進程報錯加入。

(3). 為體系添加mysql用戶組和用戶

[root@FreebsdMaster /]# pw group add mysql

[root@FreebsdMaster /]# adduser

FreeBSD體系沒有groupadd敕令,其添加用戶組的敕令是pw,添加用戶敕令adduser按體系提醒操作便可完成。固然用 pw user add mysql敕令也能夠完成添加用戶mysql的功效,但不如adduser敕令功效完美。

(4). 更改/app/mysql5目次及文件屬性

[root@FreebsdMaster /app]# chmod –R mysql mysql5

[root@FreebsdMaster /app]# chgrp –R mysql mysql5

解釋:/app/mysql5為MySQL數據庫體系地點目次,假如用戶安排的運用體系數據量極年夜,可以將數據庫體系目次設在年夜容量磁盤陣列上。磁盤陣列設置與詳細機械硬件相干性很年夜,詳細操作設置參考詳細硬件體系解釋和FreeBSD操作手冊。不借助第三方軟件,FreeBSD 7.0-Release體系可以設置裝備擺設RAID0、RAID1磁盤陣列。

(5). 裝置MySQL體系初始數據庫

[root@FreebsdMaster /softwares/ mysql-5.1.30]# ./scripts/mysql_install_db.sh --basedir=/app/mysql5 –-data-dir=/app/mysql5/data

留意:必需斟酌Unix體系的文件權限特征,起首給mysql_install_db.sh劇本添加可履行屬性,不然裝置劇本沒法履行。履行 chmod +x ./scripts/mysql_install_db.sh敕令便可。參數--basedir=/app/mysql5和--datadir=/app /msyql5/data為必加參數,不然劇本運轉報錯加入,沒法裝置體系初始數據庫mysql和測試數據庫test,mysql數據庫包括體系權限設置表,沒有這些表數據庫辦事過程mysqld將沒法啟動。

(6). 再次更改/app/mysql5目次及其文件屬性

[root@FreebsdMaster /app]# chmod –R root mysql5

[root@FreebsdMaster /app]# chmod –R mysql mysql5/data

如許做是為了包管體系平安,避免經由過程MySQL體系破綻的入侵行動。MySQL以mysql用戶身份運轉,對/data目次具有完整拜訪權限,對其它目次則只要體系治理員依據須要設置的拜訪權限,確保FreeBSD體系的平安。這裡須要特殊提示用戶留意的是要確保mysqld文件(MySQL的守護過程,位於/app/mysql5/libexec目次下)沒有設置setuid標記位,假如設置了該標記位,入侵者對其它文件就具有其不該有的權限。詳細緣由參考關於Unix體系平安的手冊,本文對這個成績不再贅述。

(7). 啟動MySQL辦事器

上述操作全體完成今後,輸出以下敕令啟動MySQL數據庫辦事守護過程:
[root@FreebsdMaster /]# /app/mysql5/bin/mysqld_safe –user=mysql &
--user參數表現以mysql用戶身份運轉MySQL數據庫辦事守護過程,“&”符號表現今後台方法運轉。輸出 netstat –an|grep 3306敕令,假如看到上面的輸入則表現MySQL5.1.30已在用戶體系上編譯裝置勝利。個中,3306是MySQL數據庫體系默許的監聽端標語。
[root@FreebsdMaster /]# netstat –an|grep 3306
tcp4 0 0 *.3306 *.* LISTEN
依照異樣辦法與步調在其它三台機械上裝置FreeBSD 7.0-Release與MySQL5.1.30,為上面的MySQL辦事器集群設置裝備擺設預備好體系平台基本。
3.2 體系設置裝備擺設
一切體系裝置終了以後,須要對它們做一些需要的設置裝備擺設方可依照用戶事後設計的構造模子完成具有負載平衡功效的MySQL辦事器集群。
3.2.1 FreeBSD操作體系設置裝備擺設
(1). 調劑內核參數,優化操作體系機能
由於是處於臨盆情況的辦事器,投入正常運轉之前必定要對內核參數停止需要的調劑,晉升體系機能,增強穩固性。扼要說就是去失落不用要的硬件支撐選項,使新內核占用更少的內存,加速啟動速度。分歧機械硬件體系差別很年夜,用戶可依據詳細體系的硬件情形赓續調劑實驗,終究定制出最優化、最平安的FreeBSD 體系。必定要屏障失落組合鍵Ctrl+Alt+Del的熱重啟功效,避免用戶誤按Ctrl+Alt+Del重啟體系,惹起數據庫體系辦事不測中止。在內核設置裝備擺設文件如MYKERNEL中參加:
options SC_DISABLE_REBOOT
從新編譯體系內核,重啟後便可屏障Ctrl+Alt+Del組合鍵的熱重啟功效。若何定制新內核及從新編譯FreeBSD體系,用於可參考FreeBSD體系手冊,此不贅述。
(2). 停止其它設置,加強體系平安性
用戶可依據以下普通平安原則設置本身的FreeBSD體系。
·選擇一個好的暗碼並予以妥當掩護。
·關於敏感文件采取恰當平安品級的加密算法停止加密。關於敏感級別不是很高的文件采取體系自帶的crypt對象加密;關於敏感度極高的文件則應用公用加密對象,如PGP、GPG停止纰謬稱加密,進步加密文件的防進擊才能。
·細心設置文件拜訪權限,到達掩護文件目標。
·掩護好本身的.profile文件。適當設置.profile文件的拜訪權限,確保只要本身能拜訪。
·細心保護已設置setuid或setgid標記位的任何法式。
·制止不加防備地分開已注冊終端。任什麼時候候都必需按慣例正常加入體系,先履行clear清屏敕令,避免其它用戶看到操作陳跡,再履行exit敕令加入終端。
·防備特洛伊木馬法式。准確設置PATH變量的檢索次序,確保體系目次位於以後目次的後面。
·防備病毒的入侵。
·監控比來一次注冊時光,確保沒有別人盜用本身的帳號。
特殊提醒:關於臨盆情況的辦事器,必定要包管辦事器的物理平安,平安辦法再完美的體系,一旦被入侵者物理接觸,一切的平安辦法將形同虛設!
Unix體系平安是一個很年夜的課題,本文只是說起了一些最浮淺的知識,詳細內容用戶可以參考相干書本或網上資本。為確保Unix體系的設置裝備擺設具有高度的平安性,可使用Internet平安中間(Center for Internet Security,CIS)供給的平安測試對象Benchmarks或評價對象Scoring Tools,磨練和監控體系設置裝備擺設的平安性 [4]。
3.2.2 MySQL數據庫體系設置裝備擺設
為了能使上述體系完成一對多的主從復制(replication)和冗余機制,還須要對以上四個MySQL辦事器停止一些需要的設置裝備擺設。
(1). 設置裝備擺設主機名和IP地址
本完成計劃中把MySQL辦事器Master主機名設為FreebsdMaster,IP地址設置裝備擺設為192.168.1.100,其它三台Slave 順次設為 FreebsdSlave1,192.168.1.101;FreebsdSlave2,192.168.1.102;FreebsdSlave3,IP 地址192.168.1.103。
(2). 設置root用戶暗碼
MySQL的root用戶初始暗碼為空,為包管體系平安必需為root用戶設置暗碼:
[root@FreebsdMaster /]# /app/mysql5/bin/mysql –uroot –p
Enter password:
mysql>SET PASSWORD=PASSWORD(‘secret');
同Unix體系一樣,輸出暗碼時屏幕沒有任何回顯,進入體系後履行SET PASSWORD SQL語句設置或修正MySQL root用戶暗碼。為使運用體系辦事器長途銜接到MySQL數據庫辦事器,除當地root用戶之外,還要設置一個能從用戶外部收集其它終端登錄的root 用戶。詳細操作以下:
  mysql>USE mysql;
  mysql>UPDATE user SET Host='%' WHERE Host='hostname.yourdomain' AND User='root';
  mysql>flush privileges;
  完成上述操作後運用體系辦事器便可以銜接到MySQL數據庫辦事器停止各類操作了,這個長途root用戶的初始暗碼為空,用戶須要從長途終端登錄,為其設置暗碼。
  (3). 開啟MySQL辦事器的二進制更新日記功效
  上述MySQL辦事器裝置完成後,裝置法式沒有生成my.cnf設置裝備擺設文件,為此用戶須要手工添加/etc/my.cnf文件。MySQL辦事是由 /app/myql5/libexec/mysqld供給的,其尋覓my.cnf設置裝備擺設文件的默許次序為/etc/my.cnf,~/.my.cnf, /usr/local/mysql/etc/my.cnf。啟動ee編纂器,# ee /etc/my.cnf,在Master機械的設置裝備擺設文件寫入以下內容:
  [mysqld]
  log-bin=mysql-master-bin
  server-id=1
  在其它三台Slave機械的設置裝備擺設文件/etc/my.cnf文件寫入以下內容:
  [mysqld]
  server-id=int
  個中,int為一年夜於1且互不相等的正整數,如2,3,4等。務需要准確設置每一個機械上的/etc/my.cnf設置裝備擺設文件,特別是server-id不克不及有反復,這是一對多半據庫復制可否勝利的症結[5]!
  設定好上述/etc/my.cnf文件後啟動Master上的MySQL數據庫辦事時就主動開啟了二進制更新日記功效。在Slave上啟動MySQL時要加上—log-bin參數,便可開啟二進制更新日記功效。在Slave機械上啟動MySQL辦事的敕令以下:
  # /app/mysql5/bin/mysqld_safe --user=mysql --log-bin &
  如許做的目標為了完成冗余容錯功效。當主辦事器Master湧現毛病停滯辦事時,在預轉換腳色成為Master的Slave上履行STOP SLAVE; RESET MASTER SQL語句,在其它兩台Slave上履行CHANGE MASTER TO SQL語句,履行STOP SLAVE; RESET MASTER SQL語句的Slave辦事器即轉換成新的Master,其他兩台機械則重新的Master復制數據庫數據(復制的是更新UPDATE、INSERT等操作,其實不是簡略的copy),從而完成冗余容錯。
 3.3 體系完成
  完成上述預備後可以開端完成MySQL數據庫的一對多復制,對運用體系的數據庫拜訪代碼停止優化,使更新操作UPDATE、INSERT等SQL語句定向到Master辦事器,查詢檢索SELECT語句定向到Slave辦事器,從而完成負載平衡; 當主辦事器Master湧現毛病停滯辦事時,經由過程辦事器腳色轉換完成冗余容錯;上述一切辦事器經由過程高速焦點交流機銜接在一路,協同任務,供給集群 (Cluster)機能。上面,本文就此舉一簡例,詳細解釋完成(Implementation)步調。
3.3.1 預備主辦事器
  (1). 在主辦事器上創立示例數據庫repl_db
 從當地或長途終端登錄到Master辦事器,履行CREATE DATABASE repl_db;語句,創立示例數據庫repl_db。樹立表repl_table:
  mysql>CREATE TABLE repl_table (f1 INT, f2 VARCHAR(20)) ;
  向表中添加數據:
  mysql>INSERT INTO repl_table (f1, f2) VALUES(1, ‘first');
  (2). 授與Slave復制(Replication)權限
  授與附屬辦事器Slave停止復制的權限。假定附屬辦事器銜接到主辦事器復制的用戶名為“repl”,暗碼為“g00r002b”:
  mysql>GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY ‘g00r002b';
  刷新體系權限表,鎖定寫入語句操作:
  mysql>FLUSH TABLES WITH READ LOCK;
  這時候一切寫入操作都被鎖定,包含支撐事務(Transaction)特征的InnoDB類型表的提交(COMMIT)操作也被鎖定,為數據庫初始復制(copy)做好預備。
  (3). 簡略備份repl_db
  在此,經由過程tar敕令把數據庫初始數據備份到/tmp目次。
  # tar –cvf /tmp/mysql-data.tar /app/mysql5/data/repl_db
  (4). 記載主辦事器狀況
  履行SHOW MASTER STATUS 語句:
  mysql> SHOW MASTER STATUS;

  -------------------------------------+------------------+-----------------------+---------------------------+

  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

  +------------------------------------+------------------+-----------------------+--------------------------+

  | mysql-master-bin.000001 | 1027 | | |

  +------------------------------------+------------------+----------------------+---------------------------+
  記下File和Position兩個參數的值,附屬辦事器Slave為了復制(replication)銜接到主辦事器Master時要用到這兩個參數,假如參數與此不符將招致復制(replication)掉敗!
  (5). 釋放主辦事器表級寫入鎖定
  mysql>UNLOCK TABLES;
  至此,主辦事器消除寫入鎖定,一對多復制預備任務已全體完成,預備接收Slave的復制(replication)銜接。
3.3.2 預備附屬辦事器
  (1). 停滯附屬辦事器的MySQL數據庫辦事
  # /app/mysql5/bin/mysqladmin –uroot –p shutdown
  Enter password:
  輸出MySQL體系root用戶暗碼,MySQL辦事停滯。
  (2). 簡略copy數據庫初始數據
  在附屬辦事器上履行ftp操作,拜訪主辦事器,下載/tmp/mysql-data.tar文件,在/app/mysql5/data目次下履行以下操作,把初始數據copy到Slave辦事器:
  [root@FreebsdSlave1 /app/mysql5/data]# tar –xvf /tmp/msyql-data.tar
  其它兩台Slave辦事器履行異樣操作,完成數據庫初始數據的簡略copy。
  (3). 重啟附屬辦事器上的MySQL數據庫辦事
  # /app/mysql5/bin/mysqld_safe –-user=mysql –-log-bin &
  附屬辦事器已啟動,同時啟動二進制更新日記功效,為腳色轉換做好預備。
  (4). 登錄到附屬辦事器Slave的MySQL客戶端
  # /app/mysql/bin/msyql –uroot -p
  (5). 啟動附屬辦事器上的復制(replication)線程
  mysql> CHANGE MASTER TO
  -> MASTER_HOST='192.168.1.100',
  -> MASTER_USER='repl',
  -> MASTER_PASSWORD='g00r002b',
  -> MASTER_LOG_FILE=' mysql-master-bin.000001',
  -> MASTER_LOG_POS=1027;
  Query OK, 0 rows affected (0.00 sec)
  mysql> START SLAVE;
  Query OK, 0 rows affected (0.00 sec)
在一切附屬辦事器上履行雷同的操作,自此附屬辦事器已銜接到主辦事器,開端真正意義上的replication任務。測試附屬辦事器的復制任務能否正常:
  mysql>show slave status\G

  ************************** 1. row ***************************

  Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.1.100
  Master_User: repl
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-master-bin.000001
  Read_Master_Log_Pos: 1027
  Relay_Log_File: FreebsdSlave1-relay-bin.000005
  Relay_Log_Pos: 251
  Relay_Master_Log_File: mysql-master-bin.000001
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  看到上述信息解釋附屬辦事器已啟動了與replication相干的線程I/O和SQL,一對多的replication曾經開端任務。
  (6). 功效測試
  在主辦事器上寫入新的數據:
  mysql>INSERT INTO repl_table (f1, f2) VALUES(2, ‘second');
  mysql>SELECT * FROM repl_table;
  +--------+---------+

  | f1 | f2 |

  +--------+----------+

  | 1 | first |

  | 2 | second |

  +-----=--+----------+

  2 rows in set (0.01 sec)
  在slave上履行雷同的查詢操作:
  mysql>SELECT * FROM repl_table;
  +--------+---------+

  | f1 | f2 |

  +--------+----------+

  | 1 | first |

  | 2 | second |

  +--------+----------+

2 rows in set (0.01 sec)
獲得雷同的查詢成果,解釋復制(replication)機制已勝利開端任務!
3.3.3 設置裝備擺設收集DNS辦事器
在BIND DNS辦事器中,為上述三台附屬辦事器Slave設置裝備擺設統一個名字,客戶真個查詢檢索操作將由DNS辦事器定向到個中的一台Slave。是以,關於統一名字,分歧的客戶端會定向到分歧的地址,拜訪分歧的MySQL辦事器,從而到達負載平衡的目標。假定用戶為三台Slave分派的DNS名字為 mysqlslave.yourdomain,DNS辦事器區域文件/var/named/yourdomain.zone中應包括以下數據項[6]:
  sqlmaster.yourdomain. IN A 192.168.1.100

  sqlslave1.yourdomain. IN A 192.168.1.101

  sqlslave2.yourdomain. IN A 192.168.1.102

  sqlslave3.yourdomain. IN A 192.168.1.103

  sqlslave IN CNAME sqlslave1

  sqlslave IN CNAME sqlslave2

  sqlslave IN CNAME sqlslave3
當客戶端停止查詢操作時,提交給主機sqlslave.yourdomain的要求將由DNS辦事器隨機定向到三台Slave中的一台,由其履行查詢功課,前往成果。從而在三台Slave之間完成查詢級其余負載平衡。
3.3.4 運用體系法式代碼優化
  現實運用中,對數據庫的寫入操作絕對查詢操作少很多,是以,優化運用法式的數據庫銜接代碼,把寫入操作定向到Master辦事器,查詢操作定向到 Slave辦事器,供給主辦事器和附屬辦事器之間更新、查詢的負載平衡功效。本文以PHP數據庫銜接代碼為例,扼要引見代碼優化辦法[7]。
(1). 預備分歧的數據庫銜接設置裝備擺設文件
預備兩個數據庫銜接文件mysql_connect_master.php和mysql_connect_slave.php,其文件內容以下:

  mysql_connect_master.php文件的內容:

  

  // Connect to the Database Server

  $linkID = @mysql_connect("sqlmaster.yourdomain", "user", "password") or die("Sorry, could not connect to the database!");

  // Select the Database

  @mysql_select_db("repl_db") or die("Sorry, Could not select database!");

  ?>

  mysql_connect_slave.php文件的內容:

  

  // Connect to the Database Server

  $linkID = @mysql_connect("sqlslave.yourdomain", "user", "password") or die("Sorry, could not connect to the database!");

  // Select the Database

  @mysql_select_db("repl_db") or die("Sorry, Could not select database!");

  ?>

  (2). 優化法式SQL語句代碼

  對運用法式中拜訪數據庫的代碼段做出以下優化:

  ...

  // $sql is the query string to be committed to MySQL server.

  if ( stripos( $sql, " SELECT" ) )

  {

  include_once("./mysql_connect_slave.php");

  ...

  mysql_close();

  }

  else

  {

  include_once("./mysql_connect_master.php");

  ...

  mysql_close();

  }

  ...

  ?>
解釋:每當向MySQL辦事器提交數據庫操作時,參加一個if-else斷定語句對變量$sql停止斷定定向,假如是SELECT查詢操作,將其定向到附屬辦事器Slave中的一個;假如是其它更新語句,則將其定向到主辦事器Master。此處代碼段是運用體系完成負載平衡的症結,用戶務必依據本身現實情形,寫出精確無誤的代碼。每次對數據庫操作終了都要實時釋放數據庫銜接,以避免更新、查詢操作分離定向掉敗,影響體系負載平衡功效。如許做固然在必定水平上增長Web辦事器或運用辦事器的開支,但與MySQL辦事器集群負載平衡功效帶來的年夜幅機能晉升及冗余容錯特征比擬,這個開支相對是物超所值!
3.4 留意事項
准確安排完成具有負載平衡功效的MySQL辦事器集群必需留意以下事項:

(1). MySQL數據庫復制(replication)特征是焦點

此處的復制不是簡略的copy,附屬辦事器啟動兩個線程(thread):I/O線程和SQL線程,I/O線程吸收主辦事器對介入復制數據庫的更新操作事宜(event),並記入本身的中繼二進制更新日記文件(hostname-relay-bin.00000n),由SQL線程將更新操作寫入本身的數據庫表項。主從辦事器之間復制的不是詳細的數據內容,而是詳細的以二進制格局記載的操作事宜,因此在必定水平上完成主從辦事器之間的數據同步。(這類復制相似於生物學意義上的按基因復制,在英語中replication的重要詞義就是指該種復制。)
(2). 復制的龐雜性
主從數據庫辦事器間的replication請求Master與Slave上的MySQL版本最好分歧,主從辦事器必需設置雷同的字符集,不然很輕易形成復制掉敗。主辦事器上更新權限表內容的FLUSH語句不會被復制[8]。
(3). 依照范式化請求設計數據庫
臨盆情況下基於MySQL辦事器的運用體系要想穩固運轉,按范式化設計體系數據庫是根本請求,詳細內容可參考相干書本。
(4). 翻開數據庫辦事器的長途用戶銜接功效
翻開主從辦事器的長途用戶銜接是完成更新、查詢操作分離定向的需要前提,不然,來自運用辦事器的銜接要求掉敗,影響體系運用正常運轉。
(5). 負載平衡功效的完成須要優越的團隊協作
BIND DNS辦事器完成了附屬辦事器Slave之間的負載平衡,Slave和Master之間的負載平衡則由運用體系開辟人員在法式代碼級完成。全部體系的機能晉升和冗余容錯須要收集治理和運用體系開辟團隊之間的優越協作,不然負載平衡功效的完成就會掉敗。
4. 罕見成績
(1). 若何預算MySQL辦事器集群的機能晉升量?
針對本文彩用的構造形式,可對運用體系全體機能晉升做出年夜致預算。假定運用體系寫操作占10%,讀操作占90%,寫操作耗時是讀操作的2倍,體系的吞吐量(throughput)為T(用reads/s讀操作次數/秒來權衡)。把寫操作線性轉換為讀操作,則有:
T= 2Xwrites + 9Xwrites ==>writes=T/11① (不采取主從復制形式,讀寫操作集中到一個辦事器上)
T= 2Xwrites + 9Xwrites/N ==> writes=T/(2+9/N)② (采取一對多的主從復制形式,讀操作在附屬辦事器,寫操作在主辦事器)
個中,writes為體系單元時光內所能蒙受的最年夜寫操作次數,N為附屬辦事器個數,N年夜於等於2。在不采取主從復制形式時,體系機能 writes=T/11;采取本文一對三的復制形式時,體系機能writes=T/5。采取負載平衡形式與不采取體系機能之比為11:5,即2.2:1,斟酌到運用辦事器的額定開支,體系全體機能晉升了整整1倍!從②式可以看出,體系全體機能實際極限為T/2,固然在現實臨盆情況中弗成能到達。詳細安排時用戶可以依據本身的現實情形預算出公道的附屬辦事器數目,重要影響身分是收集帶寬和機械全體機能[9]。
(2). 若何應對主從辦事器瓦解?
當某台附屬辦事器瓦解時,修復毛病重啟後從新銜接到主辦事器,依據其master.info文件更新其數據,堅持與主辦事器的數據同步。假如主辦事器瓦解,在某一附屬辦事器上履行STOP SLAVES; GRANT REPLICATION SLAVE ON *.* repl_db TO ‘repl'@'%' IDENTIFIED BY ‘g00r002b';RESET MASTER;這三個SQL語句,因為附屬辦事器已啟動了二進制更新日記功效,是以具有了腳色轉換的需要前提。更改其主機名、IP地址及server- id與Master一樣,重啟MySQL辦事器,體系開端正常對外供給辦事。其它兩台附屬辦事器則不需履行任何操作,持續履行replication進程。BIND DNS辦事器和運用法式也不需做任何調劑,持續對體系用戶供給不連續辦事。主辦事器消除毛病恢復正常後,將其收集設置裝備擺設改成與現有Master轉換腳色之前一樣的設置裝備擺設,重啟MySQL辦事,將其腳色轉換為附屬辦事器。也就是說,全部集群機械的腳色可以互相輪回轉換,進步體系的冗余性和靠得住性。在此須要留意的是,在運用體系調試運轉正常以後,在Slave腳色辦事器的/etc/my.cnf文件[mysqld]段參加slave-skip- errors=all,包管集群之間復制(replication)的正常運轉。
5. 停止語
安排與完成具有負載平衡功效的MySQL辦事器集群是一項龐雜的體系工程,須要多方面優越的協同協作能力做好。辦事器的搭建設置裝備擺設、BIND DNS辦事器的設置裝備擺設安排,和運用體系法式的開辟都要牢牢環繞完成MySQL辦事器集群負載平衡功效這個目的。必需對主辦事器的運轉狀況停止靜態監控,假如產生毛病,立刻履行腳色轉換進程,確保為終端用戶供給靠得住、不連續的辦事。可以針對詳細體系情況寫出監控劇本或法式,確保體系的靠得住性與穩固性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved