本文將告訴你如何設定一個三個節點的MySQL 5資料庫伺服器叢集:兩個儲存節點和一個
管理節點。這個群集是由用提供「heartbeat心跳」(用來檢查另外一個節點是否活動)和
「ldirectord」(將請求分發到MySQL群集的節點)的Ultra Monkey安裝包的兩個節點組成的
一個高可用性負載平衡器。
本文我們的每個節點使用Debian Sarge Linux系統。其它Linux發行版本的安裝可能一點點
區別。 MySQL的版本我們使用5.0.19。如果你不想使用MySQL 5,你也可以使用MySQL 4.1,
儘管
我還沒測試過。本文是一篇實踐應用指導;它沒有涉及太多的理論。關於群集的理論你可以在網路上找到很多。
一伺服器
我使用下面的Debian伺服器,它們都在同一個網段(本例如:192.168.0.x):
sql1.test.com: 192.168.0.101 MySQL 群集節點1
sql2.test.com: 192.168.0.102 MySQL群集節點2
loadb1.test.com: 192.168.0.103 負載平衡1 / MySQL 群集管理伺服器
loadb2.test.com: 192.168.0.104 負載平衡2
另外我們需要一個虛擬IP位址:192.168.0.105。它會安排給這個MySQL群集的負載平衡,以便於
應用程式透過統一單獨的IP位址來存取群集。
儘管我們想在MySQL群集中使用兩個節點,但是我們仍然需要第三個節點,MySQL群集管理伺服器
,主要的一個原因是:如果其中一個MySQL群集節點壞了,而MySQL群集管理伺服器沒有運行,那
麼兩個群集節點上的資料將會不一致(“split brain”)。我們需要它來配置MySQL群集.
因此我們的安裝一般需要五台機器:
2個MySQL群集節點+ 1個群集管理伺服器+ 2個負載平衡= 5
因為群集管理伺服器沒有使用多少資源,系統將會空著什麼都不做,所以我們可以把我們的第
一個
負載平衡和它一起放在同一台機器上,這樣可以節約我們一台伺服器,所以最好我們只需要四台機器。
二配置MySQL群集管理伺服器
首先我們要下載MySQL 5.0.19,並安裝群集管理伺服器(ndb_mgmd)和群集管理客戶端(ndb_mgm - 它
可以用來監控群集的運行情況). 下面的步驟是在loadb1.test .com (192.168.0.103)上進行的:
loadb1.test.com:
mkdir /usr/src/mysql-mgm
cd /usr/src/mysql-mgm
wget http://dev.mysql.com/get/Downloads/ MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql-max-5.0 .19-linux-i686-glibc23.tar.gz
cd mysql-max-5.0.19-linux-i686-glibc23
mv bin/ndb_mgm /usr/bin
mv bin/ndb_mgmdn /usr/binndb_mgm /usr/bin mv bin/ndb_mgmd /
usr/binbinmod 755 /bmg *
cd /usr/src
rm -rf /usr/src/mysql-mgm
下一步,我們必須建立群集的設定檔,/var/lib/mysql-cluster/config.ini:
loadb1.test.com:
mkdir /var /lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
———-
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT][NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Section for the cluster management node [FAULT] # Section for the cluster management node [FAULT] # Section for the cluster management node [FAULT] # Section for the cluster management node[FAULT] # Section for the cluster management node [FAULT] # Section for the cluster management node [FAULT] # Section for the cluster management node [
FAULT]
# Section for the cluster management node
[FAULT]NDB_MGMD]
# IP address of the management node (this system)
HostName=192.168.0.103
# Section for the storage nodes
[NDBD]
# IP address of the first storage node
HostName=192.168.0.101
DataDirst storage node HostName=
192.168.0.101 DataDirst storage node HostName=192.168.0.101 DataDirst[NDBD]
# IP address of the second storage node
HostName=192.168.0.102
DataDir=/var/lib/mysql-cluster
# one [MYSQLD] per storage node
[MYSQLD]
[MYSQLD]
———-
實際應用程式中請將檔案中的IP位址換成你對應的IP。
然後我們啟動群集管理伺服器:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
我們應該也需要在伺服器啟動時能夠自動啟動管理伺服器,所以我們建立了一個非常簡單的初始化
腳本和對應的啟動連線:
loadb1.test.com:
echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini' > /etc/init.d/ndb_mgmd
chmod 755 /etc/init.d/ ndb_mgmd
update-rc.d ndb_mgmd defaults
三配置MySQL群集節點(儲存節點)
現在我們將分別在sql1.test.com和sql2.test.com上安裝mysql-max-5.0.19:
sql1.example.com / sql2 .example.com:
groupadd mysql
useradd -g mysql mysql
cd /usr/local/
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz
ln -s mysql- max-5.0.19-linux-i686-glibc23 mysql
cd mysql
scripts/mysql_install_db –user=mysql
chown -R root:mysql .
chown -R mysql data
cp support-files/mysql.server /etc/modinit.d/sql data cp support-files/mysql.server /etc/
modinit
./etc/init.d/mysql.server
update-rc.d mysql.server defaults
cd /usr/local/mysql/bin
mv * /usr/bin
cd ../
rm -fr /usr/local/mysql/bin
ln -s /usr/bin /usr/local/mysql/bin
然後我們在每個節點上建立MySQL設定檔/etc/my.cnf :
vi /etc/my.cnf
–
[mysqld]
ndbcluster
# IP address of the cluster management node
ndb-connectstring=192.168.0.103
[mysql_cluster]
# IP address of the
cluster management nodendb-connectstring=192.168.0.103
–
確認你在群集管理伺服器中輸入的是正確的IP位址。
下一步我們分別在每個群集節點上建立資料目錄和啟動MySQL伺服器:
sql1.test.com / sql2.test.com:
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
ndbd – initial
/etc/init.d/mysql.server start
(請記住:我們只是在第一次啟動MySQL時或loadb1.test.com上面的
/var/lib/mysql-cluster/config.ini發生改變時,才使用ndbd –initial)
現在,是時候為MySQL root帳號設定密碼了:
sql1.test.com / sql2.test.com:
mysqladmin -u root password yourrootsqlpassword
我們需要在伺服器啟動時,啟動叢集節點,所以我們建立叢集節點,所以我們建立叢集節點一個ndbd初始化腳本和對應的
系統啟動連線:
sql1.test.com / sql2.test.com:
echo 'ndbd' > /etc/init.d/ndbd
chmod 755 /etc/init.d/ndbd
update-rc. d ndbd defaults
四測試MySQL叢集
我們的MySQL叢集設定工作已經完成,現在是測試它的時間了。在群集管理伺服器
(loadb1.test.com)上,執行群集管理客戶端ndb_mgm來檢查群集節點是否連接:
loadb1.test.com:
ndb_mgm
你將會看到這些:
– NDB Cluster — Management Client –
ndb_mgm>
在命令列輸入show;
show;
輸出的資訊應該是這樣的:
ndb_mgm> show;
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id= 2 @192.168.0.101 (Version: 5.0.19, Nodegroup: 0, Master)
id=
3 @192.168.0.102 (Version: 5.0.19, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 nodes)
@192.168.0.103 (Version: 5.0.19)
[mysqld(API)] 2 node(s)
id=4 @192.168.0.101 (Version: 5.0.19)
id=5 @192.168.0.102 (Version:9)
ndb_mgm>
如果你看到你的節點都已經連接上了。那麼一切都很順利!
輸入
quit;
退出ndb_mgm 用戶端控制台。
現在我們在sql1.test.com節點上建立一個測試資料庫,並建立一個測試表,
填入一些測試資料:
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTERSTER ;
INSERT INTO testtable () VALUES (1);
SELECT * FROM testtable;
quit;
(看看上面這個CREATE語句:我們想群集起來的所有資料庫的表,必須使用ENGINE=NDBCLUSTER!
如果你使用其它的ENGINE,那麼
群集
不會
工作
!
sql2.test.com節點上建立相同的資料庫(是,我們還是要建立它,但在testtable建立之後
資料將會複製到sql2.test.com,因為testtable就是使用ENGINE=NDBCLUSTER):
sql2.test. com:
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE mysqlclustertest;
SELECT * FROM testtable;
SELECT出的結果應該是跟上面的sql1.test.com的結果相同:
mysql> SELECT * FROM testtable;
+——+
| i |
+——+
| 1 |
+——+
1 row in set (0.04 sec)
我們看到資料已經從sql1.test.com節點複製到sql2.example.com節點了。現在我們
在testtable中插入另外一行:
sql2.test.com:
INSERT INTO testtable () VALUES (2);
quit;
現在讓我們回到sql1.example.com節點上,檢查是否能夠看見新插入的那一行:
sql1.example.com:
mysql -u root -p
USE mysqlclustertest;
SELECT * FROM testtable;
quit;
你應該看到像這樣的輸出:
mysql> SELECT * FROM testtable;
+——+
| i |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.05 sec)
所以每個群集節點都有相同的資料!
現在讓我們看看如果我們停止節點1(sql1.example.com):運行
sql1.example.com:
killall ndbd
並檢查
ps aux | grep ndbd | grep -iv grep
看看所有的ndbd進程已經結束了。如果你還是看見ndbd進程,再執行
killall ndbd
直到所有的ndbd進程都結束。
現在讓在我們的管理伺服器上,檢查群集的狀態(loadb1.example.com):
loadb1.example.com:
ndb_mgm
在ndb_mgm控制台上輸入
show;
你應該看到這些:
ndb_mgm> show;
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.0.101)
id=3 @192.168.0.102 (Version: 5.00 .19, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.103 (Version: 5.0.19)
[mysqld(API)] 2 node(s)
id=4 @192.168 .0.101 (Version: 5.0.19)
id=5 @192.168.0.102 (Version: 5.0.19)
ndb_mgm>
你看見,sql1.example.com節點沒有連接上了。
輸入:
quit;
退出ndb_mgm控制台。
讓我們檢查sql2.example.com節點:
sql2.example.com:
mysql -u root -p
USE mysqlclustertest;
SELECT * FROM testtable;
quit;
SELECT查詢的結果應該還是:
mysql> SELECT * FROM testtable;
+— —+
| i |
+——+
| 1 |
| 2 |
+——+
2 rows in set (0.17 sec)
Ok,所有的測試都正常,現在讓我們再次啟動sql1.test.com節點:
sql1.example .com:
ndbd
五如何重新啟動群集
現在讓我們設想你由於修改了loadb1.test.com節點上的/var/lib/mysql-cluster/config.ini
或者其它原因,需要重新啟動MySQL群集。為了這樣做,你要使用loadb1.example.com節點上的
ndb_mgm群集管理客戶端:
loadb1.test.com:
ndb_mgm
在ndb_mgm控制台上,你輸入
shutdown;
你將看到像這樣的資訊:
ndb_mgm> shutdown ;
Node 3: Cluster shutdown initiated
Node 2: Node shutdown completed.
2 NDB Cluster node(s) have shutdown.
NDB Cluster management server shutdown.
ndb_mgm>
這表示群集節點和sql1.test.com和sql2.test.com,已經sql2.test.com,已經sql群集管理伺服器都已經關閉。
運行
quit;
退出ndb_mgm 控制台。
要啟動群集管理伺服器,在loadb1.test.com上這樣做:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
並在sql1.test.com 和sql2.test.com上運行:
sql1.example.com / sql2.example.com:
ndbd
或者,你剛修改過loadb1.test.com上的/var/lib/mysql-cluster/config.ini檔:
ndbd –initial
在這之後,你可以在loadb1.test.com上檢查看看群集是否已經重啟:
loadb1.test.com:
ndb_mgm
在ndb_mgm控制台,輸入
show;
來查看目前群集的狀態。所有節點重啟後可能需要一點點時間來報告已經連接上。
輸入:
quit;
退出ndb_mgm控制台。
六配置負載平衡
我們的MySQL叢集已經現在完成了,你現在可以開始使用它了。然而,我們沒有一個訪問群集的
單獨的IP位址,這意味著你必須配置應用程式一部分使用MySQL群集節點1(sql1.test.com),
另外
的部分使用節點2(sql2.test.com).當然,所有的應用程式只是需要使用一個節點,但如果你
不想在群集節點之間分流負載,那你擁有一個群集的目的是什麼?另外一個問題是,如果一個群集
節點壞掉了怎麼辦?那麼使用這個群集節點的應用程式將根本無法運作了。
這裡的解決方案是在MySQL叢集前端配置一個負載平衡器來在每個MySQL叢集節點之間平衡負載。
負載平衡器在群集節點之間配置一個共享的虛擬IP位址,所有你的應用程式使用這個虛擬IP位址來
存取群集。如果其中一個節點壞掉,那麼你的應用程式將仍然可以工作,因為負載平衡器將請求轉移
到了另一個工作正常的節點。
現在在這個例子中負載平衡器成為了瓶頸。如果這個負載平衡器壞掉了怎麼辦呢?因此我們將以(active/passive)
主動/被動安裝方式來設定兩個負載平衡器。這意味著我們有一個負載平衡器是主動的,另外一個是
熱備的,當主動的那個壞掉了,它將會變成主動。每個負載平衡器都使用heartbeat(心跳)來檢查
另外一個負載平衡器的活動情況,同時負載平衡器也使用ldirectord,它負責將流量分配到群集節點。
heartbeat和ldirectord都在我們將要安裝的Ultra Monkey 安裝套件中。
loadb1.test.com 和loadb2.test.com 節點的系統核心支援IPVS(IP虛擬伺服器) 非常重要。
IPVS是在Linux核心的傳輸層執行負載平衡的。
6.1 安裝Ultra Monkey
好,現在讓我們開始: 首先我們啟用loadb1.test.com 和loadb2.test.com節點上IPVS:
loadb1.example.com / loadb2.example.com:
modprobe ip_vs_dh
modprobe
ip_vs_example.com
: modprobe ip_vs_dhmodprobe ip_vs_exampp
bemodprobe
modpro beip_vs_lblcr
modprobe ip_vs_lc
modprobe ip_vs_nq
modprobe ip_vs_rr
modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc modprobe modprobe ip_vs_sh modprobe ip_vs_wlc
modprobe
ip_vs_rrbe1b84bt. loadb2.test.com:
vi /etc/
modules
ip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_rr
ip_vs_sed
ip_vs_sh ip_vs_wlc
ip_vs_vs_sed ip_vs_ship_vs_wlc
ip_vs_wwd
現在我們編輯/c/c/c面.
/ loadb2.test.com:
vi / etc/apt/sources.list
deb http://www.ultramonkey.org/download/3/ sarge main
deb-src http://www.ultramonkey.org/download/3 sarge main
apt-get update
apt-get install ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev
現在Ultra Monkey已經安裝了,如果你看到下面這樣的警告:
|
libsensors3 not functional
|
| It appears that your keriled with sens compiled with sens compilport.
, libsensors3 will not be functional on your system.
|
| If you want to enable it, have a look at “I2C Hardware Sensors Chip
| support” in your kernel configuration.
你可以忽略它。
回答下面的問題:
Do you want to automatically load IPVS rules on boot?
<-- No
Select a daemon method.
<-- none
我剛安裝的libdbd-mysql-perl安裝包不能夠在MySQL 5(我們在MySQL群集上使用MySQL 5),
因此我們安裝最新的DBD::mysql Perl安裝包:
loadb1.test.com / loadb2.test.com:
cd /tmp
wget
tar xvfz DBD-mysql-3.0002.tar.gz
cd DBD-mysql -3.0002
perl Makefile.PL
make
make install
我們必須先啟用packet forwarding:
loadb1.example.com / loadb2.example.com:
vi /etc/sysctl.conf
# Enables packet forwardingnet.ipv4.ip_forward = 1
66. )
我們透過建立三個檔案(loadb1.test.com 和loadb2.test.com的檔案必須完全一樣)來設定heartbeat:
loadb1.test.com / loadb2.test.com:
vi /etc/ha.d/ha .cf
logfacility local0
bcast eth0
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node loadb1
node loadb2
respawn hacluster
/
usr
例子中是loadb1 和loadb2)
uname -n
除了這些,我們不需要對這個檔案做任何修改。
vi /etc/ha.d/haresources
loadb1
ldirectord::ldirectord.cf
LVSSyncDaemonSwap::master
IPaddr2::192.168.0.105/24/eth0/192.168.0.255
你必須列舉其中一個負載節點名稱(這裡是均衡負載節點: loadb1),並且列出
虛擬IP位址(192.168.0.105)和廣播位址(192.168.0.255).
vi /etc/ha.d/authkeys
auth 3
3 md5 somerandomstring
somerandomstring是loadb1 和loadb2 用來相互認證的兩個用來相互認證的兩個用來相互認證守護程式的密碼。
這裡設定成你自己的密碼。你可以選擇3種加密方式。我一般都用md5來加密。
/etc/ha.d/authkeys應該是root帳號唯讀,這裡我們這樣做:
loadb1.test.com / loadb2.test.com:
chmod 600 /etc/ha.d/authkeys
6.3 設定ldirectord
現在我們為ldirectord建立設定檔, 負載平衡器:
loadb1.example.com / loadb2.example.com:
vi /etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=10
checkinterval=2
autoreload=no
logfile="local0"
quiescent=yeseckinterval=2 autoreload=no logfile="local0"quiescent=yes
virtual = 192.168.0.105:3306
service = mysql
real = 192.168.0.101:3306 gate
real = 192.168.0.102:3306 gate
checktype = negoegotiate
login = "irector""lepter = Nirector"
.5
;
FROM connectioncheck"
scheduler = wrr
請填入正確的虛擬IP位址(192.168.0.105)和正確的MySQL群集節點的IP位址(192.168.0.101 和192.168.0.102)。
3306是MySQL運行時預設的連接埠。我們也指定了一個MySQL使用者(ldirector)和密碼(ldirectorpassword),一個資料庫(ldirectordb)和
一個SQL查詢。 ldirectord 使用這些資訊來測試MySQL叢集節點,以此來檢查它們的是否一直可用。下一步我們將用ldirector使用者來
建立ldirectordb資料庫。
現在我們為heartbeat建立系統必要的啟動連接,並移除ldirectord(因為ldirectord將由heartbeat來啟動):
loadb1.test.com / loadb2.test.com:
update-rc.d -f heartbeat remove
update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .
update-rc.d -f ldirectord remove
6.4 建立資料庫ldirector
下面我們在MySQL群集節點sql1.test.com 和sql2.test.com上建立資料庫ldirector資料庫。這個資料庫將會用於我們的負載平衡器來檢查
MySQL群集節點的可用性。
sql1.test.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';
FLUSH
PRIVILEGES;
CREATE DATABASE ldirectordb
; USE ldirector
=NDBCLUSTER;
INSERT INTO connectioncheck () VALUES (1);
quit;
sql2.test.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpass'7
;
CREATE DATABASE ldirectordb;
quit;
6.4 為負載平衡準備MySQL群集節點
最後我們必須設定MySQL群集節點sql1.test.com 和sql2.test.com來接受虛擬IP位址192.168.0.105。
sql1.test.com / sql2.test.com:
apt-get install iproute
在/etc/sysctl.conf裡面加入下面的內容:
vi /etc/sysctl.conf
# Enable configuration of arp_ignore option
net.ipv4.conf.all .arp_ignore = 1
#
When an arp request is received on eth0, only respond if that address is
# configured on eth0. In particular, do not respond if the address is
# configuredon lo
.# Ditto for eth1, add for all ARPing interfaces
#net.ipv4.conf.eth1.arp_ignore = 1
# Enable configuration of arp_announce option
net.ipv4.conf.all.arp_announce = 2
# When making an quest reeth 0. an address that
# is configured on eth0 as the source address of the ARP request. If this
# is not set, and packets are being sent out eth0 for an address that is on
# lo, and an arp request an quired, on lo will be used.
# As the source IP address of arp requests is entered into the ARP cache on
# the destination, it has the effect of announcing this address. This is
# not desirable in thisase case on this address。 -servers should
# be announced only by the linux-director.
net.ipv4.conf.eth0.arp_announce = 2
# Ditto for eth1,add
for all ARPing interfaces
#net.ipv4.conf.eth1.arp_announce
和
下面這段加入到/etc/network/interfaces:
sql1.test.com / sql2.test.com:
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.168.0.105
netmask 255.255
. -up sysctl -p > /dev/null
ifup lo:0
七.啟動負載平衡器並測試
現在我們啟動兩個負載平衡管理器:
loadb1.test.com / loadb2.test.com:
/etc/init.d /ldirectord stop
/etc/init.d/heartbeat start
如果你沒有看見錯誤,你需要現在重啟每個負載平衡器:
loadb1.test.com / loadb2.test.com:
shutdown -r now
重啟之後我們可以檢查是否兩個負載平衡器象期望一樣運作:
loadb1.test.com / loadb2.test.com:
ip addr sh eth0
主動的負載平衡器應該列出了虛擬IP位址(192.168.0.105):
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.0.103/24 brd 192.168.0.255 scope. glob
. 192.168.0.255 scope global secondary eth0
被動(熱備)的負載平衡器應該顯示如下:
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:16rd 1:4e :ff:ff:ff
inet 192.168.0.104/24 brd 192.168.0.255 scope global eth0
loadb1.test.com / loadb2.test.com:
ldirectord ldirectord.cf status.com / loadb2.test.com: ldirectord ldirectord.cf status.com / loadb2.test.com:
ldir
?
.d/ldirectord.cf is running with pid: 1603
被動負載平衡器上的輸出:
ldirectord is stopped for /etc/ha.d/ldirectord.cf
loadb1.example.com / loadb2.example.com:
ipvsadm -L - n
主動負載平衡器上的輸出:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.105:3306 wrr
> 1906 wrr.01919.10. Route 1 0 0
-> 192.168.0.102:3306 Route 1 0 0被動
負載平衡器上的輸出:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoightAddress Portal WeOward
loadb1.test.com / loadb2.test.com:
/etc/ha.d/resource.d/LVSSyncDaemonSwap master status
主動負載平衡器上的輸出:
master running
(ipvs_syncmaster pid: 1766)
被動負載平衡器上的輸出:
master stopped
(ipvs_syncbackup pid: 1440)
如果你的測試都是正常的,你現在可以從相同網路(192.168.0.x)中的其它伺服器用虛擬IP位址192.168.0.105來存取MySQL資料庫:
mysql -h 192.168 .0.105 -u ldirector -p
(請記住:你的MySQL客戶端必須至少是4.1版本的;舊的版本不能運行MySQL5。 )
你現在可以關掉一個MySQL群集節點來測試;你應該還是可以連接到MySQL資料庫。
八註解
運行一個MySQL群集時,這裡有一些重要的東西要記住:
–所有的資料都是存在記憶體! 因此你的群集節點上需要大容量的記憶體。這裡有每個節點需要記憶體
容量的計算公式:
(資料庫大小SizeofDatabase * 複製數量NumberOfReplicas * 1.1 ) / 資料節點數量NumberOfDataNodes
所以如果你有一個資料庫的大小是1GB,你應該為每個節點配備1.1GB記憶體!
–群集管理節點在監聽1186埠上的任意連線。所以這意味著不是很安全,所以你應該在一個獨立的網路上運行MySQL叢集。