程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 配置高可用性的MySQL服務器負載均衡群集_MySQL教程

配置高可用性的MySQL服務器負載均衡群集_MySQL教程

編輯:關於MYSQL數據庫

 這篇論壇文章(賽迪網技術社區)主要介紹了配置一個高可用性的MySQL服務器負載均衡群集的具體過程,詳細內容請參考下文:
本文將告訴你如何配置一個三個節點的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_mgmd /usr/bin

chmod 755 /usr/bin/ndb_mg*

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

[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

DataDir= /var/lib/MySQL-cluster

[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/init.d/

chmod 755 /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 node

ndb-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 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>


如果你看到你的節點都已經連接上了。那麼一切都很順利!


輸入


quit;


退出 ndb_mgm 客戶端控制台。


現在我們在sql1.test.com節點上創建一個測試數據庫,並創建一個測試表,

填入一些測試數據:


MySQL -u root -p

CREATE DATABASE MySQLclustertest;

USE MySQLclustertest;

CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER;

INSERT INTO testtable () VALUES (1);

SELECT * FROM testtable;

quit;


(看看上面這個CREATE語句:我們想群集起來的所有數據庫的表,必須使用 ENGINE=NDBCLUSTER!

如果你使用其它的ENGINE,那麼群集將不會工作!)


SELECT出的結果應該是:


MySQL> SELECT * FROM testtable;

+——+

| i |

+——+

| 1 |

+——+

1 row in set (0.03 sec)


現在我們在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.0.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,已經群集管理服務器都已經關閉。

運行


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_FTP

modprobe ip_vs

modprobe ip_vs_lblc

modprobe ip_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 ip_vs_wrr


為了在啟動時IPVS模塊,我們在/etc/modules列舉了模塊:


loadb1.test.com / 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_wrr


現在我們編輯/etc/apt/sources.list,添加 Ultra Monkey 的下載點,然後我們安裝Ultra Monkey:


loadb1.test.com / 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 kernel is not compiled with sensors support. As a

| result, 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 http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0002.tar.gz

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


6.2 配置heartbeat(心跳)


我們通過創建三個文件(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/lib/heartbeat/ipfail

apiauth ipfail gid=haclIEnt uid=hacluster


請記住:你必須列出節點名稱(本例中是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 用來相互認證的兩個heartbeat守護進程的密碼。

這裡設置成你自己的密碼。你可以選擇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=yes

virtual = 192.168.0.105:3306

service = MySQL

real = 192.168.0.101:3306 gate

real = 192.168.0.102:3306 gate

checktype = negotiate

login = "ldirector"

passwd = "ldirectorpassWord"

database = "ldirectordb"

request = "SELECT * 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 ldirectordb;

CREATE TABLE connectioncheck (i INT) ENGINE=NDBCLUSTER;

INSERT INTO connectioncheck () VALUES (1);

quit;


sql2.test.com:


MySQL -u root -p

GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassWord';

FLUSH PRIVILEGES;

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

# configured on lo

net.ipv4.conf.eth0.arp_ignore = 1

# 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 ARP request sent through eth0 Always use 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 is required, then the address 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 this case as adresses on lo on the real-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 = 2


sysctl -p


將下面這段加入到/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.255.255

pre-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 global eth0

inet 192.168.0.105/24 brd 192.168.0.255 scope global secondary eth0


被動(熱備)的負載均衡器應該顯示如下:


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.0.104/24 brd 192.168.0.255 scope global eth0


loadb1.test.com / loadb2.test.com:


ldirectord ldirectord.cf status


主動負載均衡器上的輸出:


ldirectord for /etc/ha.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

-> 192.168.0.101:3306 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

-> RemoteAddress:Port Forward Weight ActiveConn InActConn


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群集。

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