歡迎您光臨本站 註冊首頁

詳解MySQL+Apache集群模式的實現

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

環境:RedHat  AS3 U5

說明:如果不做說明,一般安裝命令均使用ROOT許可權,用 # 表示;一般命令用$表示。

特別說明:無 

以下文章介紹Liunx 環境下的MySQL+Apache安全備份模式的實現方法

一、前言

目前,Linux系統+MySQL資料庫已成為眾多中小企業及個人搭建網站環境的首選,因為它是完全免費的,而且性能相當不錯。不過我見過的很多網站都是在單機上搭建此環境,然後購買價格相對較貴的備份產品及設備,其實如果我們熟悉一下apache和MySQL,把購買備份產品及設備的錢省下再買幾台伺服器的話,完全可以解決問題。(伺服器只是個代詞,也可以根據你網站的規模選購性能好一點的PC機,都是沒有問題的)

二、MySQL+Apache安全備份模式圖

見圖1

從上圖我們可以看出,用戶通過訪問http LVS伺服器,獲取Web服務,其實這個LVS伺服器是個虛擬機,真正的Web服務是由這個虛擬機底下的兩個http伺服器提供的,這樣,如果這兩個http伺服器有一個有問題,那麼可以改變Lvs模式,只讓好的那台提供服務,為我們恢復故障節省了很多時間;而MySQL資料庫採用Master及Slave模式,避免由於單點故障而全盤皆輸的窘迫局面,建議訪問量較大的網站採用全伺服器配置或至少LVS及MySQL伺服器採用全伺服器配置,而訪問量屬於中等偏下網站全部採用PC機都是沒有問題的。LVS伺服器使用雙網卡(eth0和eth1)。eth0為 虛擬伺服器的IP地址(公網IP),eth1為內網IP地址,其他均為內網地址,這樣可以更安全。

 

 

 

 

我們假定MySQL及http伺服器均已安裝完成,並且在http伺服器上跑的站點可以調用MySQL資料庫,MySQL主資料庫(Master)為192.168.1.4,從資料庫(slave)為192.168.1.5,站點調用的資料庫名稱為hello。如果你不知道怎麼安裝apache及MySQL,請參閱我寫的《MySQL環境下安裝PHP504及apache2054》

三、實現方法

(1)下載RedHat_Cluster_Suite.tgz軟體包,地址如下:

http://www.d-1701.com/tools/RedHat_Cluster_Suite.tgz

這個其實是redhat AS3自帶的拓展服務包,用RPM安裝也可以,但我們一般都只有前四張,后七張很少有人有,那我就把我手頭上這個安裝包給大家共享一下 :)

(2)開啟系統vnc 服務並安裝

  1. # vncserver 

連入linux系統,開一個終端

  1. # cd /home/xuchen  
  2. # tar xzvf RedHat_Cluster_Suite.tgz  
  3. # cd RedHat_Cluster_Suite  
  4. # ./autorun 

這將開啟安裝界面,沒什麼好說,直接安裝就是了。

(3)配置前的準備

修改集群伺服器的IP轉發設置

  1. # /sbin/sysctl -w net.ipv4.ip_forward=1   

修改當前會話的值

  1. # vi /etc/sysctl.conf   
  2. net.ipv4.ip_forward = 1  

這樣下次重啟時設置可以自動生效

系統安裝上Red hat cluster suite 集群軟體后,使用一個名為Piranha的配置工具配置集群伺服器,此配置工具使用 apache 作web Server 來提供基於web頁面的配置介面。此配置介面的web頁面站點的配置文件網頁文件及其他相關文件存放在/etc/sysconfig/ha/  目錄中。

  1. # vi /etc/sysconfig/ha/conf/httpd.conf  

配置介面頁面站點的相關參數。預設的監聽埠是3636,你可以改成其他的埠

Listen 3636

訪問Piranha配置介面頁面需要有帳號和密碼,

帳號默認為piranha,用以下命令配置密碼

  1. # /usr/sbin/piranha-passwd   //設置 piranha 的登錄口令。  
  2. # /sbin/service piranha-gui start   //啟動Piranha配置介面頁面站點 

訪問http://Your’s IP:3636/ 登錄 Piranha。利用此頁面直接配置介面配置集群服務。

配置之前要明白的幾個概念:

虛擬伺服器:用戶訪問http伺服器(LVS伺服器IP),感覺上就是訪問一台高效的伺服器。此台“高效的伺服器”,我們稱之為“虛擬伺服器”,實際上就是這裡的集群伺服器。

真實伺服器:即真實提供服務的伺服器,此類伺服器可以有多台,而且可以增加。

(4)配置LVS

選擇GLOBAL SETTINGS 選項卡。進行全局設置。

Primary server public IP: 211.100.1.1   集群伺服器的外網ip

Primary server private IP::為空

本例中採用LVS NAT模式的集群,以下是集群的不同模式區別:

1.        Virtual Server via Network Address Translation(VS/NAT)

通過網路地址轉換,調度器重寫請求報文的目標地址,根據預設的調度演算法,將請求分派給後端的真實伺服器;真實伺服器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

2.        Virtual Server via IP Tunneling(VS/TUN)

採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為了解決這個問題,調度器把請求報文通過IP隧道轉發至真實伺服器,而真實伺服器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網路服務應答比請求報文大許多,採用VS/TUN技術后,集群系統的最大吞吐量可以提高10倍。

3.        Virtual Server via Direct Routing(VS/DR)

VS/DR通過改寫請求報文的MAC地址,將請求發送到真實伺服器,而真實伺服器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集群系統的伸縮性。這種方法沒有IP隧道的開銷,對集群中的真實伺服器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實伺服器都有一塊網卡連在同一物理網段上。

點擊NAT按鈕,出現NAT網路設置:

NAT Router IP:192.168.1.2 NAT路徑名稱

NAT Router netmask:255.255.255.0  NAT掩碼

NAT Router device:eth1  NAT 路徑裝置

選擇VIRTUAL SERVERS 選項卡。

點擊ADD按鈕,添加虛擬伺服器:

點擊EDIT按鈕,配置該虛擬伺服器:

Name:http  此虛擬伺服器的名,可以隨意,建議以提供的服務命名。

Application port:80   應用監聽埠。Web服務為80埠

Protocol:tcp   採用tcp協議通信

Virtual IP Address:211.100.1.1  此虛擬伺服器的有效外網ip地址,供用戶訪問

Virtual IP Network Mask:255.255.255.0  此虛擬伺服器的子網掩碼,請查看網卡設置。

Firewall Mask:(空)

Device:eth0    外網通信網卡

Re-entry timeout:15  重入時間(S)

Service timeoute:6   服務延時(S)

Quiesce server:NO

Load monitoring tool:none  不載入監控工具

Scheduling:Weighted least-connections  調度策略(權重最小連接)

Persistence:1440  持續性(S)

Persistence Network Mask:255.255.255.0  持續性屏蔽

配置完畢,點擊ACCEPT將配置寫入配置文檔 /etc/sysconfig/ha/lvs.cf

如果想要讓同一個IP在一段時間內只訪問同一個真實伺服器,就要設置Persistence 值,在這指定時間內,無論採用何種負載均衡演算法,同一個IP都會訪問同一個真實伺服器。

虛擬伺服器配置完后,為此虛擬伺服器添加真實伺服器。

點擊子選項卡REAL SERVER:

點擊ADD按鈕添加真實伺服器:

點擊EDIT按鈕配置此真實伺服器:

Weight 為該真實伺服器的權重。虛擬伺服器按調度策略根據此設置值進行調度。

配置完點擊ACCEPT按鈕將配置寫入配置文檔 /etc/sysconfig/ha/lvs.cf 。

重新點擊子選項卡REAL SERVER可添加多個真實伺服器。

點擊(DE)ACTIVATE按鈕可使真實伺服器生效(UP)。不過建議在完成所有配置后再啟動。

點擊子選項卡MONITORING SCRIPTS :

配置發送和接收字元串,讓lvs確定real server是否存在。因為當前lvs模式有弊端,確定包文在網路流量大的時候,會丟包,從而造成real server掉線的假象,所以現在採取腳本send.sh發送和確認,保證每次都能返回確認字元串。

/root/send.sh 的內容很簡單:

  1. #!/bin/sh  
  2. echo "http" 

echo 的內容就是期待的內容。

至此,已經為虛擬伺服器添加完畢真實伺服器。啟動真實伺服器的apache服務。進入LVS配置的相關界面,點擊(DE)ACTIVATE按鈕使設備UP起來。

  以上所有的配置結果都ACCEPT后,將寫入配置文件/etc/sysconfig/ha/lvs.cf 中。如果你熟悉了LVS 的配置,可以直接修改此配置文件,而不需要使用piranha配置工具。

  1. # /sbin/service piranha-gui stop  //關閉配置界面,增強安全性  
  2. # /sbin/service pulse start  //啟動lvs服務,此時進程列表裡應含用 pulse 和 lvs 的進程名。  
  3. # ipvsadm  //查看當前的路由表  
  4. IP Virtual Server version 1.0.8 (size=65536)  
  5. Prot LocalAddressort Scheduler Flags  
  6.   ->; RemoteAddressort           Forward Weight ActiveConn InActConn  
  7. TCP  211.100.1.1:http wlc persistent 1440 mask 255.255.255.0  
  8.   ->; 192.168.1.2:http           Masq    100    128        24929       
  9.   ->; 192.168.1.3:http           Masq    100    137        21351      

如果上述的192.168.1.2:http真實伺服器顯示的是主機名而不是ip地址,為了加快路由轉發,把它們的主機名對應的ip解析加在了負載均衡器的/etc/hosts中。最好把每一個真實伺服器的域名解析都放到此文件中。

當然你要把所有機器的apache都起來,如果有一個沒有起來,上面的列表中就會少一行。Lvs每隔一段時間會檢測一下真實伺服器(即上述的發包監控)。

  

注意!!!

如果修改了/etc/sysconfig/ha/lvs.cf(無論是手工編輯還是通過Piranha)只有重新啟動pulse服務才會起作用。

實踐操作中,pulse服務起來之後如果被停止掉,它會把外網和內網的兩個網卡全部down掉,只好通過控制台再啟動兩個網卡和pulse服務。

所以在遠程控制lvs集群負載機的時候,如果要重新啟動pulse,應該直接reboot機器,以防止網卡down掉,無法訪問遠程機器。

改動當前的配置,還可以使用 ipvsadm直接修改內核路由表,相關操作命令請查閱ipvsadm的命令行幫助。

例如:假設當前已經有了websvr1(192.168.1.2)和websvr2(192.168.1.3)兩個真實伺服器,擴容需要新增另外一台websvr3(192.168.1.6)真實伺服器。直接在/etc/sysconfig/ha/lvs.cf 中加入了websvr3的信息,但是無法立即生效,這時可以用以下命令:

ipvsadm -a -t 211.100.1.1:http -r 192.168.1.3:http -m -w 100

這樣就可以加入到內核路由表並立即生效。

以上就是一個典型的集群伺服器的安裝和配置過程,大家可以參考配置自己的集群伺服器。

(5)配置MySQL資料庫的Master-Slave 模式

MySQL資料庫的Master-Slave機制

MySQL資料庫支持Master-Slave主從資料庫的集群模式。Slave (從)資料庫根據Master(主)資料庫的日誌文件(master_log_file)及日誌位置(master_log_pos)實時從Master資料庫讀取數據,自動實現數據同步。

MySQL資料庫Master-Slave實現

①Slave資料庫伺服器要擁有訪問Master資源的許可權,因此首先要在Master上為Slave創建訪問帳號並賦予文檔複製許可權。

  1. #MySQL -h192.168.1.4 –uroot –p –D hello  
  2. MySQL>;GRANT REPLICATION SLAVE ON *.* TO 'testbak'@'%' IDENTIFIED BY 'testbak';  

②根據MySQL資料庫的Master-Slave機制,Slave資料庫實施數據同步操作的依據是Master資料庫的日誌文件及該日誌文件的日誌位置。因此,在為Master新增一台Slave伺服器的時候要確保為Slave配置的參數(master_log_file及master_log_pos)就是Master當前使用的日誌文件及當前的操作節點。如果Master資料庫的數據一直處於運營狀態(即有插入、修改、刪除等操作),將不能滿足上述要求。所以目前的維護操作是:系統擴容為Master增加一台Slave的時候,要停止整個業務系統,以停止對Master資料庫數據的讀寫操作,然後查看Master當前的日誌文件及日誌位置。

  1. #MySQL -h192.168.1.4 –uroot –p –D hello  
  2. MySQL>; show master status; 

有個改進的操作,可以將Master資料庫鎖住為只讀,防止數據的更新。此時不用停止業務系統,但用戶將不能進行信息修改、註冊等操作。(待測試驗證)

③將與當前Master資料庫master_log_file、master_log_pos的值匹配的數據從Master拷貝到Slave上。可以採用MySQLdump方法,也可以直接拷貝數據文件。注意,拷貝數據之前要用

  1. # MySQLadmin –u root –p shutdown 

關閉主資料庫。這裡我們直接把數據文件壓縮為MySQL.tar.gz

④修改Master資料庫的配置文件

一般在/etc/my.cnf

以192.168.1.4 Master資料庫的配置文件為例:

修改/etc/my.cnf ,在[MySQLd]區段內加入參數

  1. # vi /etc/my.cnf  
  2. log-bin  
  3. server-id=1 
  4. sql-bin-update-same  
  5. binlog-do-db=hello 
  6. ******************************************************************************  
  7. # Example MySQL config file for very large systems.  
  8. #  
  9. # This is for large system with memory of 1G-2G where the system runs mainly  
  10. # MySQL.  
  11. #  
  12. # You can copy this file to  
  13. # /etc/my.cnf to set global options,  
  14. # MySQL-data-dir/my.cnf to set server-specific options (in this  
  15. # installation this directory is /usr/local/MySQL/var) or  
  16. # ~/.my.cnf to set user-specific options.  
  17. #  
  18. # One can in this file use all long options that the program supports.  
  19. # If you want to know which options a program support, run the program  
  20. # with --help option.  
  21.  
  22. # The following options will be passed to all MySQL clients  
  23. [client]  
  24. #password       = your_password 
  25. port            = 3306 
  26. socket          = /tmp/MySQL.sock  
  27.  
  28. # Here follows entries for some specific programs  
  29.  
  30. # The MySQL server  
  31. [MySQLd]  
  32. port            = 3306 
  33. socket          = /tmp/MySQL.sock  
  34. skip-locking  
  35. set-variable    = key_buffer=384M  
  36. set-variable    = max_allowed_packet=1M  
  37. set-variable    = table_cache=512  
  38. set-variable    = sort_buffer=2M  
  39. set-variable    = 


[火星人 ] 詳解MySQL+Apache集群模式的實現已經有447次圍觀

http://coctec.com/docs/linux/show-post-68668.html