實踐:搭建基於Load Balancer的MySql Cluster

來源:互聯網
上載者:User

標籤:

伺服器規劃: 整套系統全部在rhel5u1 server 64位版本下,由基於xen的虛擬機器搭建,其中叢集管理節點*2、SQL節點*2、資料節點*4、Web服務節點*2組成,其中資料節點做成2個組,每組兩台的形式:

  1. 虛擬機器mysql_mgm-1, 192.168.20.5:叢集管理節點,id=1
  2. 虛擬機器mysql_mgm-2, 192.168.20.6:叢集管理節點,id=2
  3. 虛擬機器mysql_sql-1,192.168.20.7:SQL節點,mysql伺服器節點,id=3
  4. 虛擬機器mysql_sql-2,192.168.20.8:SQL節點,mysql伺服器節點,id=4
  5. 虛擬機器mysql_ndb-1:192.168.20.9:ndb資料節點,id=5
  6. 虛擬機器mysql_ndb-2:192.168.20.10:ndb資料節點,id=6
  7. 虛擬機器mysql_ndb-3:192.168.20.11:ndb資料節點,id=7
  8. 虛擬機器mysql_ndb-4:192.168.20.12:ndb資料節點,id=8
  9. 虛擬機器mysql_lb-1:192.168.20.15:LVS負載平衡節點1
  10. 虛擬機器mysql_lb-2:192.168.20.16:LVS負載平衡節點2
  11. 叢集的虛擬IP是:192.168.20.17
  12. 負載平衡使用rhel內建的軟體做。

-----------------------------------------------------------------------------------------------------------
安裝過程:
1. 在所有節點上安裝mysql: 我沒有下載mysql原始碼再編譯安裝,感覺機器太多編譯太麻煩。我去mysql.com上下載社區版本,並且是針對我的rhel 5.1 server 64位版本的mysql軟體,是: http://dev.mysql.com/downloads/m ... hel5-x86-64bit-rpms 下載這下面所有rpm包並安裝,其中Shared libraries和Shared compatibility libraries只能二選一安裝,裝好以後mysql服務、叢集相關工具等都有了,很方便。
2. (1) 在所有管理 Node上建立設定檔/etc/config.ini(註:這個檔案只有管理節點上需要,其它節點上是不需要的):

  1. [NDBD DEFAULT]
  2. NoOfReplicas=2
  3. DataMemory=600M
  4. IndexMemory=100M
  5. [NDB_MGMD]
  6. id=1
  7. hostname=192.168.20.5
  8. DataDir=/var/lib/mysql-cluster
  9. [NDB_MGMD]
  10. id=2
  11. hostname=192.168.20.6
  12. DataDir=/var/lib/mysql-cluster
  13. [MYSQLD]
  14. id=3
  15. HostName=192.168.20.7
  16. [MYSQLD]
  17. id=4
  18. HostName=192.168.20.8
  19. [NDBD]
  20. id=5
  21. HostName=192.168.20.9
  22. [NDBD]
  23. id=6
  24. HostName=192.168.20.10
  25. [NDBD]
  26. id=7
  27. HostName=192.168.20.11
  28. [NDBD]
  29. id=8
  30. HostName=192.168.20.12

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

(2) 分別開啟管理node上的管理程式ndb_mgmd(本地監聽1186連接埠),先啟動id=1的節點,再啟動id=2的節點,整個叢集以id=2的節點為主要管理節點(誰後啟動誰就是主要管理節點,關於這一點我還需要論證一下): ndb_mgmd -f  /etc/config.ini 註:本server上不需要啟動mysql服務(所以不需要配置/etc/my.cnf檔案)。必須在在開啟ndb node和sql node上的服務以前開啟ndb_mgmd。
3.(1) 在所有ndb node上原有的/etc/my.cnf檔案裡增加以下內容:

  1. [mysqld]
  2. ndbcluster
  3. # IP address of the cluster management node
  4. ndb-connectstring=192.168.20.5
  5. ndb-connectstring=192.168.20.6
  6. [mysql_cluster]
  7. # IP address of the cluster management node
  8. ndb-connectstring=192.168.20.5
  9. ndb-connectstring=192.168.20.6

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

註:ndb節點上不需要/etc/config.ini檔案。
(2) 在所有ndb node上第一次執行命令: mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster ndbd --initial
註:ndb node上不啟動mysql服務。正常情況下使用“ndbd”命令啟動ndb node,只有節點發生改變或者其它情況才需要帶--initial參數。
4. (1)在sql node上建立新的my.cnf檔案:

  1. [mysqld]
  2. port=3306
  3. ndbcluster
  4. ndb-connectstring=192.168.20.5
  5. ndb-connectstring=192.168.20.6
  6. [ndbd]
  7. connect-string=192.168.20.9
  8. [ndbd]
  9. connect-string=192.168.20.10
  10. [ndbd]
  11. connect-string=192.168.20.11
  12. [ndbd]
  13. connect-string=192.168.20.12
  14. [ndbd_mgm]
  15. connect-string=192.168.20.5
  16. connect-string=192.168.20.6
  17. [ndbd_mgmd]
  18. config-file=/etc/config.ini
  19. [mysql_cluster]
  20. ndb-connectstring=192.168.20.5
  21. ndb-connectstring=192.168.20.6

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

註:sql node上只需要啟動Mysql服務:/etc/init.d/mysql start,不需要配置/etc/my.cnf檔案。
5. (1) 在所有管理 node上運行叢集管理程式: ndb_mgm
在提示符這裡輸入命令“show”,命令的輸出結果中可以看到四個ndb node全部連到管理節點,兩個管理節點上的輸出是一樣的:

  1. Connected to Management Server at: 192.168.20.5:1186
  2. Cluster Configuration
  3. ---------------------
  4. [ndbd(NDB)]     4 node(s)
  5. id=5    @192.168.20.9  (Version: 5.1.22, Nodegroup: 0, Master)
  6. id=6    @192.168.20.10  (Version: 5.1.22, Nodegroup: 0)
  7. id=7    @192.168.20.11  (Version: 5.1.22, Nodegroup: 1)
  8. id=8    @192.168.20.12  (Version: 5.1.22, Nodegroup: 1)
  9. [ndb_mgmd(MGM)] 2 node(s)
  10. id=1    @192.168.20.5  (Version: 5.1.22)
  11. id=2    @192.168.20.6  (Version: 5.1.22)
  12. [mysqld(API)]   2 node(s)
  13. id=3    @192.168.20.7  (Version: 5.1.22)
  14. id=4    @192.168.20.8  (Version: 5.1.22)

可以看到,所有節點都已串連到管理節點上。如果出現“not connected, accepting connect from any host)”,表示某個節點還沒有連到管理節點上。
從netstat命令的輸出結果也可以看出所有節點都連到管理節點上:

  1. tcp        0      0 192.168.20.5:1186           192.168.20.7:48066          ESTABLISHED
  2. tcp        0      0 192.168.20.5:1186           192.168.20.7:48065          ESTABLISHED
  3. tcp        0      0 192.168.20.5:1186           192.168.20.12:48677         ESTABLISHED
  4. tcp        0      0 192.168.20.5:1186           192.168.20.9:37060          ESTABLISHED
  5. tcp        0      0 192.168.20.5:1186           192.168.20.9:37061          ESTABLISHED
  6. tcp        0      0 192.168.20.5:1186           192.168.20.9:37062          ESTABLISHED
  7. tcp        0      0 192.168.20.5:1186           192.168.20.9:50631          ESTABLISHED
  8. tcp        0      0 192.168.20.5:1186           192.168.20.11:33977         ESTABLISHED
  9. tcp        0      0 192.168.20.5:1186           192.168.20.10:55260         ESTABLISHED

(2) 在任一ndb node上看串連(以20.9為例),都可以看到本node和其他3個ndb node(10/11/12)、管理node(5/6)、sql node(7/8)都有串連,除了和管理node的串連是到1186連接埠,其它串連都是隨機連接埠。

  1. tcp        0      0 192.168.20.9:59318          192.168.20.11:49124         ESTABLISHED
  2. tcp        0      0 192.168.20.9:37593          192.168.20.7:33593          ESTABLISHED
  3. tcp        0      0 192.168.20.9:55146          192.168.20.10:46643         ESTABLISHED
  4. tcp        0      0 192.168.20.9:48657          192.168.20.12:46097         ESTABLISHED
  5. tcp        0      0 192.168.20.9:55780          192.168.20.8:41428          ESTABLISHED
  6. tcp        0      0 192.168.20.9:58185          192.168.20.5:1186           ESTABLISHED
  7. tcp        0      0 192.168.20.9:54535          192.168.20.6:1186           ESTABLISHED

(3) 在任一sql node上看串連(以20.7為例),可以看到兩個sql node都串連到管理node 20.6上(管理node中20.5先啟動,20.6後啟動):

  1. tcp        0      0 192.168.20.7:49726          192.168.20.6:1186           ESTABLISHED
  2. tcp        0      0 192.168.20.7:38498          192.168.20.10:58390         ESTABLISHED
  3. tcp        0      0 192.168.20.7:54636          192.168.20.12:40206         ESTABLISHED
  4. tcp        0      0 192.168.20.7:33593          192.168.20.9:37593          ESTABLISHED
  5. tcp        0      0 192.168.20.7:57676          192.168.20.11:37717         ESTABLISHED

7. mysql高可用性設定組群搭建完成,接下來用ipvs搭建負載平衡。
在所有mysql_sql節點上建立空庫: create database loadbalancing;
設定許可權,允許所有mysql_lb節點有select許可權(用於心跳測試): grant select on loadbalancing.* to [email protected] identified by ‘abcdefg‘; grant select on loadbalancing.* to [email protected] identified by ‘abcdefg‘;
8.(1) 在管理節點上載入IPVS模組:

  1. modprobe ip_vs_dh
  2. modprobe ip_vs_ftp
  3. modprobe ip_vs
  4. modprobe ip_vs_lblc
  5. modprobe ip_vs_lblcr
  6. modprobe ip_vs_lc
  7. modprobe ip_vs_nq
  8. modprobe ip_vs_rr
  9. modprobe ip_vs_sed
  10. modprobe ip_vs_sh
  11. modprobe ip_vs_wlc
  12. modprobe ip_vs_wrr

(2) 在管理節點上配置LVS(20.15和20.16是兩個負載平衡的節點,realserver是20.7和20.8,虛擬IP是20.17,連接埠是 3306)。可以啟動/etc/init.d/piranha-gui,然後在http://localhost:3636裡設定叢集,最終組建組態檔案 /etc/sysconfig/ha/lvs.cf,也可以直接產生這個檔案/etc/sysconfig/ha/lvs.cf:

  1. serial_no = 37
  2. primary = 192.168.20.15
  3. service = lvs
  4. backup_active = 1
  5. backup = 192.168.20.16
  6. heartbeat = 1
  7. heartbeat_port = 539
  8. keepalive = 6
  9. deadtime = 18
  10. network = direct
  11. debug_level = NONE
  12. monitor_links = 1
  13. virtual MySql {
  14.      active = 1
  15.      address = 192.168.20.17 eth0:1
  16.      vip_nmask = 255.255.255.0
  17.      port = 3306
  18.      expect = "OK"
  19.      use_regex = 0
  20.      send_program = "/usr/local/bin/mysql_running_test %h"
  21.      load_monitor = none
  22.      scheduler = wlc
  23.      protocol = tcp
  24.      timeout = 6
  25.      reentry = 15
  26.      quiesce_server = 0
  27.      server mysql_sql-1 {
  28.          address = 192.168.20.7
  29.          active = 1
  30.          weight = 1
  31.      }
  32.      server mysql_sql-2 {
  33.          address = 192.168.20.8
  34.          active = 1
  35.          weight = 1
  36.      }
  37. }

必須確保lvs.cf檔案在兩個負載平衡節點上都有,並且內容完全相同。
兩個負載平衡節點上的探測指令碼/usr/local/bin/mysql_running_test:

  1. #!/bin/sh
  2. # We use $1 as the argument in the TEST which will be the various IP‘s
  3. # of the real servers in the cluster.
  4. # Check for mysql service
  5. TEST=`echo ‘select "" as abcdefg‘ | mysql -uloadbalancing -pabcdefg -h $1 | grep abcdefg`
  6. if [ $TEST != ‘1‘ ]; then
  7.         echo "OK"
  8. else
  9.         echo "FAIL"
  10.         # /bin/echo | mail [email][email protected][/email] -s "NOTICE: $1 failed to provide email service"
  11. fi

註:兩個探測節點上需要裝mysql client。 原理說明:lvs.cf裡指定這個指令碼,其實是給負載平衡節點上的nanny程式調用,lvs.cf裡的%h參數表示調用這個指令碼的時候加上hostname/ip地址的參數。 這個指令碼的作用是串連到mysql server上執行select語句回顯一個字串abcdefg,通過判斷回顯是否正確來確認real server是否運行正常。
(3) 啟動LVS服務: /etc/init.d/pulse start
其中一個節點上的/var/log/messages裡的內容:

  1. Dec 27 14:57:15 mysql_lb-1 pulse[8606]: STARTING PULSE AS MASTER
  2. Dec 27 14:59:29 mysql_lb-1 pulse[8606]: Terminating due to signal 15
  3. Dec 27 14:59:30 mysql_lb-1 pulse: SIOCGIFADDR failed: Cannot assign requested address
  4. Dec 27 14:59:30 mysql_lb-1 pulse[8659]: STARTING PULSE AS MASTER

另一節點上/var/log/messages裡的內容:

  1. Dec 27 14:59:06 mysql_lb-2 pulse[16729]: STARTING PULSE AS BACKUP
  2. Dec 27 14:59:08 mysql_lb-2 pulse[16729]: primary inactive (link failure?): activating lvs
  3. Dec 27 14:59:08 mysql_lb-2 lvs[16731]: starting virtual service MySql active: 3306
  4. Dec 27 14:59:08 mysql_lb-2 nanny[16734]: starting LVS client monitor for 192.168.20.17:3306
  5. Dec 27 14:59:08 mysql_lb-2 lvs[16731]: create_monitor for MySql/mysql_sql-1 running as pid 16734
  6. Dec 27 14:59:08 mysql_lb-2 nanny[16737]: starting LVS client monitor for 192.168.20.17:3306
  7. Dec 27 14:59:08 mysql_lb-2 lvs[16731]: create_monitor for MySql/mysql_sql-2 running as pid 16737
  8. Dec 27 14:59:08 mysql_lb-2 nanny[16737]: making 192.168.20.8:3306 available
  9. Dec 27 14:59:08 mysql_lb-2 nanny[16734]: making 192.168.20.7:3306 available
  10. Dec 27 14:59:13 mysql_lb-2 pulse[16740]: gratuitous lvs arps finished

 

2007-12-27 11:33 上傳

下載次數: 26

 

 

實踐:搭建基於Load Balancer的MySql Cluster

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.