NDB節點配置
1.為ldirector創建數據庫
現在,我們來創建ldirectordb數據庫,並把該數據庫的權限賦予ldirector用戶。ldirector將使用該數據庫來檢查兩個數據庫節點的運行狀態。
在mysql-data1.mytest.com上,創建該數據庫:
$ mysql -u root -p
在MySQL命令行界面中,輸入如下命令:
mysql> GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassw ord';
mysql> FLUSH PRIVILEGES;
mysql> CREATE DATABASE ldirectordb;
mysql> USE ldirectordb;
mysql> CREATE TABLE connectioncheck (Status INT) ENGINE=NDBCLUSTER;
mysql> INSERT INTO connectioncheck () VALUES (1);
mysql> quit
然後,在mysql-data2.mytest.com上創建該數據庫,數據會自動從mysql-data1上復制過來:
$ mysql -u root -p
在MySQL命令行界面中,輸入如下命令:
mysql> GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassw ord';
mysql> FLUSH PRIVILEGES;
mysql> CREATE DATABASE ldirectordb;
mysql> quit
2.設置IP路由
我們需要讓兩台數據庫服務器mysql-data1.mytest.com和mysql-data2.mytest.com能夠通過虛擬IP地址192.168.1.15連接起來。
在mysql-data1和mysql-data2上分別執行下列操作。
首先,安裝iproute軟件包:
$ sudo apt-get install iproute
修改/etc/sysctl.conf:
$ sudo nano /etc/sysctl.conf
加入如下內容:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.arp_announce = 2
加入後,執行sysctl -p使之立即生效:
$ sudo sysctl -p
3.設置虛擬IP地址
在mysql-data1和mysql-data2上分別執行下列操作。
修改/etc/network/interfaces,添加虛擬IP地址:
$ sudo nano /etc/network/interfaces
在文件末尾添加如下內容:
auto lo:0
iface lo:0 inet static
address 192.168.1.15
netmask 255.255.255.255
pre-up sysctl -p > /dev/null
然後啟用它:
$ sudo ifup lo:0
現在,我們來啟動負載均衡服務。
在mysql-lb1.mytest.com 和mysql-lb2.mytest.com上,執行下列命令:
$ sudo /etc/init.d/ldirectord stop
$ sudo /etc/init.d/heartbeat start
如果沒有任何錯誤,則說明一切配置正確。
現在,重新啟動mysql-lb1 和mysql-lb2:
$ sudo reboot
重啟後,再做下面的測試。
1.ldirectord狀態檢查
在mysql-lb1和mysql-lb2上,執行下面的命令:
$ ldirectord ldirectord.cf status
在mysql-lb1上,其輸出應為:
ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 4584
在mysql-lb2上,其輸出應為:
ldirectord is stopped for /etc/ha.d/ldirectord.cf
2.虛擬IP狀態檢查
在mysql-lb1和mysql-lb2上,執行下面的命令:
$ ip addr sh eth0
在msyql-lb1(負載均衡“主服務器”)上,應該會列出虛擬IP地址192.168.1.15。其輸出結果應為:
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:45:fc:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.0.255 scope global eth0
inet 192.168.1.15/24 brd 192.168.0.255 scope global secondary eth0
在msyql-lb2(負載均衡“從服務器”)上,其輸出結果應為:
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:16:c1:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.12/24 brd 192.168.0.255 scope global eth0
3.IPVS狀態檢查
在mysql-lb1和mysql-lb2上,執行下面的命令:
$ sudo ipvsadm -L -n
在mysql-lb1上,其輸出應為:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.15:3306 wrr
-> 192.168.1.13:3306 Route 1 0 0
-> 192.168.1.14:3306 Route 1 0 0
在mysql-lb2上,其輸出應為:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
在mysql-lb1和mysql-lb2上,執行下面的命令:
$ sudo /etc/ha.d/resource.d/LVSSyncDaemonSwap master status
在mysql-lb1上,其輸出應為:
master running
(ipvs_syncmaster pid: 4704)
在mysql-lb2上,其輸出應為:
master stopped
(ipvs_syncbackup pid: 1440)
4.MySQL測試
在192.168.1.0網絡內的某台機器上,通過虛擬IP地址192.168.1.15連接我們的負載均衡服務器試試看:
$ mysql -h 192.168.1.15 -u ldirector -p
在正常情況下,你應該可以順利連接到MySQL。
5.故障模擬測試
現在,可以將負載均衡的“主服務器”停掉,看看“從服務器”能不能很快變成“主服務器”。
測試的方法有很多,我們使用簡單的ping命令。在某台機器上,ping負載均衡的虛擬IP地址192.168.1.15,觀察ping命令的輸出結果;然後將mysql-lb1服務器上的heartbeat服務停掉,這時從ping命令的輸出看,應該ping不到192.168.1.15,幾秒鐘後,又能夠重新ping到192.168.1.15(說明mysql-lb2成功地接替mysql-lb1,進入工作狀態了):
◆注意事項
數據庫引擎問題
如果你要將現有的數據庫轉移到MySQL集群中,那麼請將數據表的格式由MyISAM或InnoDB改為NDBCLUSTER。轉換的方法,請閱讀MySQL的官方文檔:
http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-multi-load-data-queries.html
否則,可能會遇到意想不到的問題,比如要添加MySQL用戶,就必須在每個NDB節點上添加,等等。
內存問題
NDB把所有數據存放在內存中,所以你需要為NDB節點配備較大的內存。
一般情況下,換算比例為1:1.1,也就是說,如果你有1GB數據庫,至少要配備1.1GB內存;如果你的數據庫會增長到8GB,就需要至少為服務器配備8.8GB內存。而且每個NDB節點都要做如此配置。
安全問題
該集群的MGM節點,其管理服務運行在1186端口上;NDB節點的MySQL運行在3306端口上。建議你使用防火牆將各個相關端口的訪問權限做一下限制。比如NDB節點的3306端口,只允許192.168.1.15訪問,等等。