Professional Documents
Culture Documents
Phan Tai CSDL Mysql GiangTT - 53 - DH PDF
Phan Tai CSDL Mysql GiangTT - 53 - DH PDF
Trn Th Giang
H NI 2012
I HC QUC GIA H NI
TRNG I HC CNG NGH
Trn Th Giang
H NI 2012
HA NOI 2012
LI CM N
Li u tin, ti xin gi li cm n v lng bit n su sc nht ti Tin s Nguyn
Hi Chu, ngi tn tnh hng dn v ch bo ti trong sut qu trnh thc hin kha
lun tt nghip.
Ti chn thnh cm n cc thy, c trong b mn H thng thng tin to iu
kin thun li ti tin hnh thc nghim kha lun ca mnh. Ti cng xin gi li cm
n n tt c cc thy c trong trng i hc Cng ngh cho ti mt mi trng rt
tt hc tp v nghin cu. Cc thy c ging dy v cho ti nhng kin thc qu
bu, lm nn tng ti hon thnh kha lun cng nh cng vic trong tng lai.
Ti cng xin gi li tri n ti cc bn trong lp K53CC v K53CLC lun bn
cnh, ng h v gip ti trong sut qu trnh hc tp ti trng.
Cui cng, ti mun gi li cm n v hn ti gia nh v bn b nhng ngi
thn yu lun bn, khuyn khch v ng vin ti trong cuc sng cng nh trong hc
tp.
Ti xin chn thnh cm n.
H ni, thng 5 nm 2012
Sinh vin
Trn Th Giang
LI CAM OAN
Ti xin cam oan gii php cn bng ti h qun tr CSDL MySQL s dng
MySQL Proxy v thc nghim c trnh by trong kha lun ny l do ti thc hin
di s hng dn v ch bo ca Tin s Nguyn Hi Chu.
Tt c cc ti liu tham kho t cc nghin cu lin quan u c nu ngun gc
mt cch r rng t danh mc Ti liu tham kho trong kha lun. trong kha lun,
khng c vic sao chp ti liu, cng trnh nghin cu ca ngi khc m khng ch r v
ti liu tham kho
H ni, thng 5 nm 2012
Sinh vin
Trn Th Giang
MC LC
M U ............................................................................................................................. 1
CHNG 1: S CN THIT CA VIC CN BNG TI TRUY VN C CHO
H QUN TR CSDL MYSQL.......................................................................................... 3
1.1. CC KIU QU TI MY CH [8] .................................................................... 3
1.1.1. S lng truy cp hp l n my ch qu ln................................................ 3
1.1.2. My ch b tn cng ......................................................................................... 3
1.1.3. Internet ............................................................................................................. 4
1.2. S CN THIT CA VIC CN BNG TI CHO CC H QUN TR
CSDL NI CHUNG V MYSQL NI RING ................................................................ 5
1.2.1. S cn thit ca vic cn bng ti cho cc h qun tr ni chung .................... 5
1.2.2. S cn thit ca vic cn bng ti h qun tr CSDL MySQL vi vic s
dng b cn bng ti l MySQL Proxy ....................................................................... 6
1.3. MT S TIU CH NH GI TI V HIU NNG CA MY CH ......... 7
1.3.1. CPU Utilization ................................................................................................. 7
1.3.2. Memory usage ................................................................................................... 8
1.3.3. Thi gian phn hi ............................................................................................. 8
1.4. XC NH MC TIU NGHIN CU CA KHA LUN L CC NG
DNG QU TI TRUY VN C ................................................................................. 8
CHNG 2: CC GII PHP CN BNG TI CHO CC H QUN TR CSDL. . 10
2.1. CC GII PHP CN BNG TI CHO H QUN TR CSDL MYSQL ....... 10
2.1.1. Gii php s dng Replication c s d liu vi MySQL Proxy ................... 10
2.1.2. Gii php s dng Clustering [3] .................................................................... 10
2.2. GII PHP CN BNG TI CHO H QUN TR CSDL POSTGRESQL ..... 12
2.2.1. Gii php s dng Replication c s d liu .................................................. 12
STT
T vit tt
T ting anh
T Ting Vit
CPU
n v x l trung tm
RAM
RAC
Cm ng dng thc
CSDL
Database
C s d liu
STT
Load balance
Cn bng ti
Load balancer
B cn bng ti
Replication
Nhn rng
Database Server
My ch c s d liu
Web server
My ch web
Server
My ch
Client
Khch hng
Website
Trang web
CPU Utilization
S dng CPU
10
Memory usage
S dng b nh
11
Cluster
Cm
12
failover
Chuyn i d phng
13
Partitioning
Phn mnh
14
Stored procedure
Th tc lu tr
15
16
Merge replication
17
Snapshot Agent
i l chp nh
18
Merge Agent
i l hp nht
19
Publication
S xut bn
20
Subscriber
Ngi mua
21
Publisher
Nh xut bn
22
Transactional replication
23
Distribution Agent
i l phn phi
24
CREATE
To
25
UPDATE
Cp nht
26
INSERT
Chn
27
DELETE / DROP
Xa
28
SELECT
Chn
29
30
transaction log
31
Log shipping
32
primary server
My ch chnh
33
secondary server
My ch th
34
monitor server
My ch theo di
35
primary database
C s d liu chnh
36
secondary databases
C s d liu th
37
Database mirroring
C s d liu phn nh
38
My ch ch nng
39
Binary log
Bn ghi nh phn
M U
S bng n ca internet trong nhng nm gn y khin s lng ngi dng truy
cp qua internet n cc my ch c s d liu ngy cng tng mnh. Vi hng triu lt
truy cp mi ngy th i hi h thng my ch c s d liu phi cc k mnh m, nu
khng my ch s b qu ti. Mt h thng my ch mnh m l h thng c kh nng
p ng c tt c cc truy vn ca client trong khong thi gian nhanh nht h thng
c kh nng cn bng ti. Bn cnh kh nng cn bng ti, th h thng cng cn c kh
nng m rng v tnh sn sng cao. Ba yu t ny lin h mt thit vi nhau m bo
h thng hot ng n nh. Nu mt h thng m khng p ng c mt trong ba yu
cu trn th thm ha c th xy ra bt c lc no. iu ny gy ra mt tn tht v cng
nng n cho doanh nghip. Do vy, cn bng ti, kh nng m rng v tnh sn sng cao
quyt nh n yu t sng cn ca mt doanh nghip.
c rt nhiu phng php cn bng ti c a ra cho cc h qun tr CSDL.
Tuy nhin nhiu phng php khng gii quyt c y c ba yu t trn cho h
thng my ch. V vy, kha lun a ra phng php s dng MySQL proxy cn
bng ti cho cc my ch c s d liu MySQL. MySQL proxy khng ch p ng c
yu cu cn bng ti m cn p ng c nhu cu m rng v m bo tnh sn sng
cao ca h thng nh vic s dng phng php Replication cho MySQL. Do vy,
ngha thc tin ca gii php ny l rt ln. Ngoi ra, n cn c ngha trong vic nghin
cu v pht trin cc gii php cn bng ti tt hn khi s lng ngi dng truy cp
tng ln rt nhiu. Do cc truy cp n my ch c s d liu ch yu l c d liu, nn
kha lun tp trung nghin cu v gii php cn bng ti cho my ch c s d liu
MySQL s dng MySQL Proxy cho cc truy vn c.
Chng 1: Trnh by v cc nguyn nhn gy qu ti my ch, t xc nh tnh
cn thit ca vic cn bng ti cho cc h qun tr CSDL ni chung v cho h qun tr
CSDL MySQL. Chng 1 cng gii thiu v cc tiu ch nh gi ti v hiu nng ca
my ch.
Chng 2: Gii thiu mt s gii php cn bng ti cho cc h qun tr CSDL:
MySQL, PostgreSQL, Oracle v SQL. Trnh by mt s thut ton c s dng trong
cc gii php cn bng ti.
u t thit b phn cng, nhng sau thi gian a vo vn hnh th server hin ti khng
th p ng c nhu cu truy cp rt ln ca ngi dng hoc qu trnh truy cp rt
chm. Ngoi ra, khi server gp s c th tt c cc hot ng ca n b ngng li lm cho
cc hot ng ca doanh nghip cng b nh hng nghim trng v c th gy ra tn
tht rt ln n uy tn v ti chnh ca doanh nghip.
Doanh nghip ngh n gii php sao lu v phc hi d liu. Mt phn hay
ton b c s d liu ca doanh nghip c sao lu, hay ch sao lu cc thng tin biu
din cu trc c s d liu nh to c s d liu (CREAT DATABASE), to bng
(CREAT TABLE) v ni dung ca cc cu lnh lm thay i c s d liu nh cu lnh
INSERT. Nu cc s kin nh ngun in, hng thit b c th lm cho hng hoc mt
d liu, th gii php ny trnh c tnh trng bng cch phc hi d liu c
sao lu. Tuy nhin, gii php ny cha gii quyt c vn cn bng ti cho server.
Hai gii php trn u khng kh thi khi th gii php replication c s d liu vi
b cn bng ti MySQL Proxy c a ra cho h qun tr CSDL MySQL. Gii php
ny ang c cc doanh nghip u tin hng u v n gii quyt c cc vn m
hai gii php trn cha lm c: cn bng ti, kh nng m rng v tnh sn sng cao.
1.3. MT S TIU CH NH GI TI V HIU NNG CA MY CH
1.3.1. CPU Utilization
CPU n v x l trung tm c xem nh l b no ca my tnh, n l ti
nguyn quan trng nht v n lin quan trc tip n kh nng x l, tnh ton ca h
thng. Tc x l ca CPU thng c tnh theo s xung nhp ng h hoc s lng
php tnh c bn c thc hin trong mt giy. n v tc c tnh theo MHz (tn
s xung nhp ca ng h trong mt giy) hoc MIPS (Million Instruction Per Second
triu php tnh c bn trong mt giy).
CPU Utilization (hay cn c gi l CPU usage) l tng thi gian m CPU c
s dng cho qu trnh tnh ton v x l mt chng trnh my tnh. CPU Utilization l
mt trong nhng yu t nh gi hiu nng ca my ch. Nu t l phn trm ca CPU l
cao th thi gian x l mt chng trnh my tnh l ln, nhng chng trnh khc mun
thc thi th phi ch cho n khi CPU c gii phng, do vy hiu sut ca my ch l
thp. Nu t l phn trm ca CPU thp, th thi gian x l mt chng trnh my tnh l
nh, hiu sut ca my tnh l cao.
11
12
14
15
16
17
Hnh 5: Gii php cn bng ti cho h qun tr CSDL Oracle pha client
Phng php cn bng ti ny d dng c thc hin, tuy nhin n cng c mt
gii hn r rng: ngi lng nghe khng c tng nu phin ngi dng khng c
giao cho mt thit b u cui tng ng vi c s d liu khi my ch qu ti. Hn
na, khi ngi nghe ch yu c chn cc kt ni hon ton ngu nhin th khng c
m bo rng kt ni chn ang sn sng thi im . iu ny c th buc cc
phin ngi dng ch i trong mt thi gian tng i di thm ch l vi pht - cho
18
n khi h iu hnh ch ra cho ngi nghe rng kt ni khng sn sng, lm cho phin
ngi dng tht bi vi li ORA-01034ORACLE not available[17].
2.3.2. Gii php cn bng ti pha server
Do hn ch ca phng php trn nn r rng, mt gii php tt hn l cn thit, v
t Oracle 9i cung cp mt cn bng ti pha server. Phng php cn bng ti pha ny
chia u ti kt ni gia tt c cc server c sn bng cch xc nh tng s cc kt ni
trn mi server, v sau phn b cc yu cu kt ni phin ngi dng n server c ti
t nht da trn tng s phin c kt ni [17].
Hnh 6: Gii php cn bng ti pha server cho h qun tr CSDL Oracle
2.3.3. Gii php Oracle Real Application Cluster
Oracle Real Application Cluster (RAC) cung cp cc ty chn cho cc ng dng
m rng quy m vt qu kh nng ca mt server. iu ny cho php khch hng tn
dng li th ca chi ph phn cng thp gim tng chi ph s hu ca h v cung cp
mi trng c kh nng m rng tnh ton m h tr khi lng cng vic ng dng ca
h.
19
Hnh 7: Gii php cn bng ti cho h qun tr CSDL Oracle Real Application Cluster
20
21
Hnh 8: Gii php Merge replication cn bng ti cho h qun tr CSDL SQL
y l mt loi cu hnh l tng, k t khi Subscriber c truy vn/cp nht sut
c ngy, trong khi kho cung cp thng tin c th c cp nht hng trm hoc hng ngn
ln trc khi mt cp nht c thng qua Publisher. Mt h thng nh vy s gi cho
tr mng mc ti thiu cng nh gim ti mng cn thit cho mt h thng chc
nng.
b) Transactional replication
Transactional replication thng bt u vi mt nh chp ca cc i tng v d
liu t publication. Ngay sau khi nh chp ban u c thc hin, nhng thay i d
liu v sa i biu c thc hin ti Publisher s thng xuyn c phn phi n
Subscriber khi chng xy ra (gn thi gian thc). Nhng thay i d liu c p dng
cho Subscriber trong cng mt th t v trong phm vi giao dch gii hn khi chng xy
ra Publisher; v vy, trong mt publication, thng nht giao dch c m bo.
Transactional replication thng c s dng trong mi trng server-to-server v
thch hp trong mi trng hp sau:
- Cc thay i tng nhanh cn c truyn n Subcriber ngay khi chng xy ra.
22
Publisher n Subscriber.
- ng dng yu cu truy cp n trng thi d liu trung gian. V d, nu mt
23
Hnh 9: Gii php Transaction replication cn bng ti cho h qun tr CSDL SQL
c) Log shipping
24
SQL server Log shipping cho php t ng gi cc bn ghi sao lu giao dch t
primary database trn mt th hin ca primary server n mt hoc nhiu secondary
database trn cc th hin ring bit ca secondary server. Cc bn ghi sao lu giao dch
c p dng cho mi secondary database ring. Mt ty chn th hin server th ba,
c gi l monitor server, ghi li lch s v trng thi ca sao lu v khi phc li cc
hot ng v, ty chn, a ra cnh bo nu cc hot ng tht bi khng xy ra nh
d kin.
Li ch ca Log shipping:
- Cung cp mt gii php phc hi thm ha cho mt primary database v mt
hoc nhiu secondary database, trn mi mt th hin ring bit ca SQL server.
- H tr gii hn truy cp read-only n secondary database (trong khong thi
ca primary database v khi secondary server phi khi phc li bn khi sao lu.
Mt s chm ch lu hn c th l hu ch, v d, nu d liu v tnh thay i
trn primary database, nu pht hin ra iu ny mt cch nhanh chng th thi
gian chm ch c th ly li c d liu cha b thay i t secondary database
trc khi thay i c din ra secondary database [21].
Hnh 10: Gii php Log shipping cn bng ti cho h qun tr CSDL SQL
25
26
Hnh 11: Gii php Database Mirroring cn bng ti cho h qun tr CSDL SQL
Database mirroring trong SQL Server yu cu ba th hin: mt th hin chnh
(principal role) qun l c s d liu, mt th hin ph (mirror) m bo vic sao lu c
s d liu, mt th hin gim st (witness) kt ni vi hai th hin chnh v ph gim
st v m bo tnh sn sng ca c s d liu. Trong trng hp my ch chnh gp s
c, my ch witness s t ng chuyn my ch mirror thnh my ch chnh. Nu sau ,
my ch chnh hot ng tr li, my ch chnh s m nhn vai tr l my ch mirror
(hai my ch gi i vai tr cho nhau) cho n khi c s can thip ca nh qun tr (Hnh
11).
2.4.3. Gii php Network Load Balancing
Network load balancing, mt cng ngh clustering c trong cc h iu hnh
Microsoft Windows 2000 Advanced Server v Datacenter Service, tng cng kh nng
m rng v tnh sn sng ca nhim v quan trng, cc dch v da trn TCP/IP, nh
Web, Terminal Services v mng ring o. Thnh phn ny chy trong cluster host nh
mt phn ca h iu hnh Windows 2000 v khng yu cu phi h tr phn cng
chuyn dng. thc hin quy m, Network Load Balancing phn phi lu lng IP qua
nhiu cluster host. N cng m bo tnh sn sng cao bng cch pht hin li ca my
ch v t ng phn phi li lu lng truy cp n cc my ch cn li. Network Load
Balancing cung cp kh nng iu khin t xa v h tr rolling nng cp t h iu hnh
Windows NT 4.0.
27
28
V d:
Hnh 12: Gii php Network load balancing cn bng ti cho h qun tr CSDL SQL
Network Load Balancing c a ch IP l 111.111.111.10, y c coi l a ch IP
o. Cc server trong cluster c cc a ch IP l 111.111.111.1, 111.111.111.2 v
111.111.111.3. Khi client gi yu cu n th n s gi n a ch IP ca Network Load
Balancing ch khng phi l n a ch ca server, nhng client khng h bit iu ny.
Network Load Balancing c nhim v phn phi u cc truy vn ca client n ba
server trong cluster theo thut ton Round robin [24].
2.5. Cc thut ton cn bng ti
Trong bi ton cn bng ti, ch nh mt trong s nhiu server nhn mt truy
vn ca client v cc server phi nhn c s truy vn u nhau ng thi vic ch nh
din ra nhanh nht th cn phi c mt thut ton xc nh server . Trong kha lun
la chn ba thut ton sau s dng cho bi ton cn bng ti.
2.5.1. Gii thut thut Roun-robin
Gii thut Roun-robin l gii thut xoay vng, c pht biu nh sau:
29
Vng 2
query1 gi v server1
queryk+1 gi v server1
query2 gi v server2
queryk+2 gi v server2
query3 gi v server3
queryk+3 gi v server3
queryk gi v serverk
query2k gi v serverk
30
31
32
33
Sun Solaris
Microsoft Windows (bao gm: Microsoft Windows XP, Microsoft
Windows Vista, Microsoft Windows 2007, Microsoft Windows Server 2003,
Microsoft Windows Server 2008)
3.1.2. Gii thiu v ngn ng kch bn Lua
Lua l mt ngn ng lp trnh thng dch vi c im nh gn, thng c dng
vit cc file cu hnh trong nhng phn mm ln.
Lua c mt s u im ni bt sau
- Tnh m rng: Ngi ta khng ch quan tm n Lua nh mt ngn ng m cn
l mt cng c xy dng mt ngn ng. Lua d dng giao tip vi ngn ng
C/C++ v nhng ngn ng khc nh Fortran, Java, Smalltalk, Ada, v thm ch
vi nhng ngn ng scripting khc.
- Tnh n gin: Lua l mt ngn ng n gin v nh. N c rt t cc khi nim,
kiu d liu nhng li rt mnh. Lua rt d hc v d tch hp vo nhng chng
trnh ln.
- Tnh hiu qu: chng trnh c vit bng Lua thc thi kh nhanh, n c
nh gi l mt trong nhng ngn ng nhanh nht trong nhng ngn ng kch
bn.
- Tnh kh chuyn: Lua khng ch chy tt trn Windows v Unix m n cn chy
tt trn mi platforms nh NextStep, OS/2,
- Tnh a dng thc: Lua c cu trc a dng nhng gii quyt c nhiu vn
phc tp khc nhau. Lua khng c tnh k tha nhng cho php to ra mi quan
h i vi metatable.
- Th vin d thay i: Lua c th m rng cc kiu d liu v cc hm ca th
vin.
- Tnh tch hp: s dng Lua tch hp vo cc chng trnh ng dng ca mnh
[26].
34
35
Hnh 13: Cc th tc cn thc hin khi client gi mt truy vn n server qua MySQL
Proxy
1. Khi client gi mt kt ni n server, MySQL Proxy gi hm
36
37
# log-bin-index - /data/logs/relay/binarylog.index
D liu ca binary log c cha trong nh dng nh phn. Do vy, khng th m
file vi mt trnh son tho vn bn v c n. hin th binary log trong nh dng vn
bn hoc c kh nng c c th bn phi s dng cng c mysqlbinlog.Thao tc ca
cng c mysqlbinlog kh n gin.
Trong v d di y, ni dung ghi trong binary log: mysql-bin.00001 c chuyn
sang nh dng vn bn v sao chp trong file mi l output.sql:
# mysqlbinlog mysql-bin.00001 > output.sql
Nu l > output.sql th ni dung s c gi n giao din iu khin.
Relay log
Relay log c s dng bi slave sao lu cc s kin nhn c t my ch
master trc khi thc thi trn my ch slave. Chng dng nh dng nh phn ging nh
file Binary log v chng c th c hin th nh vic s dng cng c mysqlbinlog. Mc
nh mt my ch slave lu tr relay logs trong datadir. Ngoi file Relay log, trn my
ch slave cn c file relay-log.index, v relay-log.info. Relay-log.index c s dng
theo di cc relay log ang c s dng hin hnh. Relay-log.info ngoi vic cung cp
ti liu v vic s dng file log hin hnh, n cn cung cp v tr ca n, v v tr ca file
Binary log trong master.
3.2.2. Cc m hnh replication:
M hnh replication cp n nhng cch khc nhau kt ni cc my s dng
replication.
38
39
40
auto_increment_offset = 2
Trong v d ny th khong tng l 10, cu lnh INSERT u tin n mt bng s
bt u vi gi tr 1 ti my ch A, ti my ch B s c gi tr l 2 trong lnh INSERT
tip theo. Cu lnh tip theo c gi tr l 11 ti my ch A v 12 ti my ch B.
M hnh master-master c kh nng chuyn i d phng cao. Nu my ch A b
li th my ch B s thay th ngay lp tc, do vy tnh sn sng ca m hnh ny rt cao.
Tuy nhin, do c hai my ch u thc thi tt c cc cu lnh ghi nn hiu sut khng cao
[6].
3.3. GII THIU V CNG C MYSQLSLAP
mysqlslap l cng c trong mysql-client c thit k gi lp cc client nhm
kim tra ti cho my ch MySQL, ng thi bo co thi gian my ch MySQL tr v
kt qu truy vn cho client.
mysqlslap chy trong ba giai on:
Giai on 1: to lc , bng v ty chn bt k cc chng trnh lu tr hoc d
liu s dng cho vic kim tra. Trong giai on ny ch s dng kt ni t mt
client.
Giai on 2: Chy kim tra ti. Giai on ny c th s dng nhiu client kt
ni.
Giai on 3: Lm sch (ngt kt ni t client, xa d liu, bng v lc nu
c ch nh). Trong giai on ny cng ch s dng mt client kt ni.
V d 1:
mysqlslap --delimiter=";"
--create="CREATE TABLE a (b int); INSERT INTO a VALUES (23)"
--query="SELECT * FROM a"
--concurrency=50 --iterations=200
Trong v d ny, cng c mysqlslap to bng a, chn d liu vo bng a v sinh truy
hin th tt c d liu trong bng a n my ch MySQL; vi s client kt ni n l 50
v c lp li 200 ln.
V d 2:
42
mysqlslap --concurrency=5
--iterations=5
--query=query.sql --create=create.sql
--delimiter=";"
Trong v d ny, cc cu lnh to bng, chn d liu khng hin th trc tip trong
cu lnh ca mysqlslap m c ghi trong file create.sql, cc cu lnh c phn bit vi
nhau bng du ;. File query.sql cha nhiu cu lnh truy vn n my ch MySQL, cc
cu lnh c phn bit vi nhau bng du ;. S client kt ni l 5 v c lp li 5
ln.
V d 3:
mysqlslap --auto-generate-sql
--auto-generate-sql-load-type=write
--concurrency=200 --iterations=50
--number-of-queries=100
Vic MySQL Proxy thc hin cn bng ti cho K slave server v master serve tc
l:
- MySQL Proxy c th chuyn tt c M (M<N) truy vn l c ca ngi dng
n tt c K slave server m khng c xung t v hp l nht, v
- Chuyn N-M truy vn l ghi ca ngi dng n master server. (Sau khi chp
nhn truy vn ghi th c s d liu trn master server c s thay i, khi n
lp tc ng b c s d liu n tt c K slave server bng vic s dng gii
php Replication
3.5. M HNH GII QUYT BI TON
3.4.1. M hnh MySQL Proxy mt master mt slave
Trong m hnh ny, mt master c kt ni vi mt slave. Proxy c t gia
client vi cc server. Master qun l trc tip slave, khi c s thay i d liu trn master
th n s ng b d liu n slave. Cc truy vn client gi n server i qua MySQL
Proxy, c MySQL Proxy x l, lc ra cc truy vn c gi n cc slave v cc truy
vn ghi c gi n master
44
45
Cu hnh
a ch IP
Cng
H iu
hnh
Master
10.10.17.40
3306
Debian
Slave 1
10.10.17.5
3306
CentOS
Salve 2
10.10.17.100
3306
OpenSUSE
MySQL Proxy
10.10.17.100
4040
OpenSUSE
i vi libevent:
# wget https://github.com/downloads/libevent/libevent/libevent-2.0.17-stable.tar.gz
# tar zvfx libevent-2.0.17-stable.tar.gz
# cd libevent-2.0.17-stable
# ./configure
# make
# make install
- i vi glib2
# wget http://fossies.org/unix/misc/glib-2.30.2.tar.gz
# tar zvfx glib-2.30.2.tar.gz
# cd glib-2.30.2/
# ./configure
47
# make
# make install
-
i vi lua
# wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
# tar xvfz lua-5.1.5.tar.gz
# cd lua-5.1.5/
# make linux
# make install
# cp /etc/lua.pc /usr/local/lib64/pkgconfig/
-
i vi mysql-proxy
48
package.path: /usr/local/lib/mysql-proxy/lua/?.lua
package.cpath: /usr/local/lib/mysql-proxy/lua/?.so
-- modules
admin: 0.9.0
proxy: 0.9.0
4.2.2. Cu hnh cho gii php replication trong h qun tr CSDL MySQL [7]
a) Gii php replication n gin: mt master mt slave
Cu hnh bn master:
Bc 1: Sa file cu hnh ca my.cnf ca MySQL:
[mysqld]
server-id = 1
log-bin = mysql-bin
log-bin-index = mysql-bin.index
Bc 2: Khi ng li MySQLD
# /etc/init.d/mysql restart
Bc 3: To ngi dng cho replication:
mysql> CREATE UER replication_user_name@domain.com/IP address
IDENTIFIED BY replication_password;
mysql>GRANT
REPLICATION
SLAVE
replication_user_name@domain.com/IP address;
mysql>FLUSH PRIVILEGES;
Bc 4: Xem thng tin trng thi ca master
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
ON
*.*
TO
Cu hnh bn slave:
Bc 1: sa file cu hnh my.cnf:
[mysqld]
server-id = 2
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
Gi tr ca server-id c th l mt s nguyn khc, min l gi tr ny khng c
trng vi gi tr ca server-id bn master.
Bc 2: Kt ni slave n master:
kt ni slave n master, c th sa trong file cu hnh my.cnf hoc chy lnh
nh sau:
mysql > CHANGE MASTER TO
> MASTER_HOST = master_host_name,
> MASTER_USER = replication_user_name,
> MASTER_PASSWORD = replication_password,
> MASTER_LOG_FILE = mysql-bin.xxxxx,
> MASTER_LOG_POS = mysql-bin-position;
mysql-bin.xxxxx l tn file mysql-bin v mysql-bin-possition l v tr ca file mysqlbin c hin th trong lnh SHOW MASTER STATUS bn master.
Bc 3: Chy slave v kim tra trng thi ca slave
mysql > START SLAVE;
mysql > SHOW SLAVE STATUS \G
Slave_IO_State: Connecting to master
Master_Host : 10.10.17.40
Master_User : slave2
Master_Port : 3306
Connect_Retry : 60
50
Master_Log_File
Read_Master_Log_Pos
Relay_Log_File
Relay_Log_Pos
Relay_Master_Log_File
Slave_IO_Running
Slave_SQL_Running
:
:
:
:
:
:
:
mysql-bin.000054
480815
slave-relay-bin.000050
4
mysql-bin.000054
Connecting
Yes
51
52
end
-- we found the two special token, we can't find more
if is_insert_id and is_in_select_calc_found_rows then
break
end
end
-- if we ask for the last-insert-id we have to ask it on the original
-- connection
if is_insert_id then
print(" found a SELECT LAST_INSERT_ID(), going to master")
elseif is_in_select_calc_found_rows then
print(" need to calculate the rows, going to master")
else -- neither of these two, pick an idle slave
local backend_ndx = lb.idle_ro()
if backend_ndx > 0 then
proxy.connection.backend_ndx = backend_ndx
end
end
end
end
4.2.4. Th nghim
a) Chy MySQL Proxy
Chy MySQL Proxy vi dng lnh sau:
# mysql-proxy --admin-username=root \
> --admin-password=giang \
53
> --admin-address=10.10.17.100:4041 \
> --proxy- address=10.10.17.100:4040\
> --proxy-backend-addresses=10.10.17.40:3306 \
> --proxy-read-only-backend-addresses=10.10.17.5:3306 \
> --admin-lua-script=/home/giangvit/workspace/proxy/admin-script.lua \
> --proxy-lua-script=/home/giangvit/workspace/mysqlProxy/rw4.lua
Trong :
--admin-username=user_name l ty chn xc thc ngi dng cho modul qun tr
--admin-password=password l ty chn xc thc mt khu cho modul qun tr
--admin-address=host:port l ty chn xc nh modul qun tr lng nghe trn tn
min (hoc a ch IP) no v cng no (mc nh cng c lng nghe l 4041)
--proxy-address=host:port l ty chn xc nh tn min (hoc a ch IP) v cng
(mc nh cng c lng nghe l 4040) ca MySQL Proxt
--proxy-backend-addresses=host:port l ty chn xc nh tn min (hoc a ch
IP) v cng ca my ch MySQL master m MySQL Proxy kt ni ti. Trong trng
hp c nhiu master, c th ch nh nhiu ty chn ny, khi cc client kt ni n
mi master theo gii thut round-robin. V d, nu c hai my ch MySQL l master A
v B th xc nh hai ty chn:
--proxy-backend-addresses=hostA:portA \
--proxy-backend-addresses=hostB:portB
Khi , client th nht kt ni n my ch A, client th hai kt ni n my ch B,
sau li quay v my ch A cho kt ni t client th ba
--proxy-read-only-backend-addresses=host:port l ty chn xc nh tn min
(hoc a ch IP) v cng ca my ch MySQL ch tr li cc truy vn c t client
my ch slave m MySQL Proxy kt ni ti. Trong trng hp c nhiu my ch slave
th c th ch nh nhiu ty chn ny, mi ty chn xc nh mt my ch slave. Khi ,
54
55
--concurrency
100
100
600
600
35.710
1400
700
45.252
1600
800
Qu ti
b) Hiu nng ca my
Hnh 200: Hiu nng ca server trong m hnh ch c duy nht MySQL server
56
57
current backend = 0
client default db =
client username = root
query = DROP SCHEMA IF EXISTS `mysqlslap`
sending to backend : 10.10.17.40:3306
is_slave : false
server default db:
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:36443
current backend = 0
client default db =
client username = root
query = CREATE SCHEMA `mysqlslap`
sending to backend : 10.10.17.40:3306
is_slave : false
server default db:
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:36443
current backend = 0
58
client default db =
client username = root
sending to backend : 10.10.17.40:3306
is_slave : false
server default db:
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : false
[read_query] 10.10.17.40:36443
current backend = 0
client default db = mysqlslap
client username = root
query = CREATE TABLE `t1` (id serial,intcol1 INT(32),charcol1 VARCHAR(128))
sending to backend : 10.10.17.40:3306
is_slave : false
server default db: mysqlslap
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:36443
current backend = 0
client default db = mysqlslap
client username = root
59
60
61
current backend = 0
client default db = mysqlslap
client username = root
query = SELECT intcol1,charcol1 FROM t1
sending to backend : 10.10.17.5:3306
is_slave : true
server default db: mysqlslap
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:36472
current backend = 0
client default db = mysqlslap
client username = root
(QUIT) current backend = 0
[disconnect_client] 10.10.17.40:36472
62
63
[disconnect_client] 10.10.17.40:47303
[read_query] 10.10.17.40:40536
current backend = 0
client default db = mysqlslap
client username = root
(QUIT) current backend = 0
[disconnect_client] 10.10.17.40:40536
--concurrency
100
100
3.691
600
600
9.348
1500
700
9.599
2000
800
10.470
[connect_server] 10.10.17.40:38453
[1].connected_clients = 0
[1].pool.cur_idle = 0
[1].pool.max_idle = 1000000
[1].pool.min_idle = 1
[1].type = 1
[1].state = 0
[1] idle-conns below min-idle
65
[read_query] 10.10.17.40:38453
current backend = 0
client default db =
client username = root
query = DROP SCHEMA IF EXISTS `mysqlslap`
sending to backend : 10.10.17.40:3306
is_slave : false
server default db:
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:38453
current backend = 0
client default db =
client username = root
query = CREATE SCHEMA `mysqlslap`
sending to backend : 10.10.17.40:3306
is_slave : false
server default db:
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:38453
66
current backend = 0
client default db =
client username = root
sending to backend : 10.10.17.40:3306
is_slave : false
server default db:
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : false
[read_query] 10.10.17.40:38453
current backend = 0
client default db = mysqlslap
client username = root
query = CREATE TABLE `t1` (id serial,intcol1 INT(32),charcol1 VARCHAR(128))
sending to backend : 10.10.17.40:3306
is_slave : false
server default db: mysqlslap
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true
[read_query] 10.10.17.40:38453
current backend = 0
client default db = mysqlslap
67
68
69
70
71
--concurrency
100
100
2.550
600
600
9.170
1500
700
9.256
2000
800
9.983
72
73
4.4. NHN XT
Da vo kt qu thc nghim trong ba m hnh trn, rt ra nhn xt l:
4.4.1. Kh nng chu ti ca server
Khi s client tng ln th thi gian tr chy cc truy vn cng tng ln.
Trong m hnh ch c mt MySQL server, th thi gian chy cc truy vn tng ln
rt nhiu. Khi s client kt ni n l 800 client th my ch b qu ti.
Trong hai m hnh m c mt ca MySQL Proxy, khi client tng ln th thi gian
chy cc truy vn tng ln l khng ng k. Thi gian ny cng gim khi c thm slave
m hnh MySQL Proxy master multi slave. Hn na, hai m hnh ny c th p
ng c s lng client truy sut n l rt ln.
Nh vy, MySQL Proxy kt hp vi gii php replication gii quyt rt tt bi
ton cn bng ti cc truy vn c cho h qun tr CSDL MySQL.
4.4.2. Kh nng m rng
Khng ch c kh nng cn bng ti cc truy vn c cho h qun tr CSDL
MySQL, khi quy m ca h thng c m rng, s client tng ln th c th thm slave
vo m hnh, ging nh m hnh MySQL Proxy master multi slave hoc s dng gii
php relay slave replication kt hp vi MySQL Proxy p ng tt hn nhu cu ca
74
client. Khi thm slave vo m hnh, vic cu hnh replication l rt n gin, khng mt
nhiu thi gian v khng nh hng n h thng (Xem phn cu hnh trong phn 4.2.2.).
c bit, MySQL Proxy bit c s c mt ca mt server mi thm vo th ch cn
thm mt dng lnh trong cu hnh ca MySQL Proxy:
--proxy-read-only-backend-addresses = host:port
4.4.3. Tnh sn sng cao
Khi master b li khng th tip tc hot ng hoc master c bo tr v nng cp
th mt slave c th m nhim vai tr ca master trong thi gian master vng mt.
lm c iu ny, th n gin ch cn thay i trong cu lnh ca MySQL Proxy:
Cu hnh c khi master vn hot ng:
--proxy-backend-addresses = master-host:port
--proxy-read-only-backend-addresses = slave1-host:port
--proxy-read-only-backend-addresses = slave2-host:port
Khi master ngng hot ng, gi s dng slave1 thay th v tr ca master:
--proxy-backend-addresses = slave1-host:port
--proxy-read-only-backend-addresses = slave2-host:port
Sau khi master c phc hi, th da vo file Binary log ca slave1, master c th
bit c s thay i din ra trong c s d liu ca mnh, t , n ng b d liu
vi slave1 m thay th n. Lc ny cu hnh trong MySQL Proxy li quay v nh c.
Do vy, cc server ca h thng lun sn sng hot ng, lun sn sng p ng
c tt c cc truy vn ca client, khng xy ra mt s chm ch no.
75
KT LUN
Kha lun tp trung nghin cu bi ton cn bng ti cho h qun tr CSDL
MySQL vi MySQL Proxy trong hai m hnh: m hnh MySQL Proxy master slave
v m hnh MySQL Proxy master multi slave.
V mt ni dung, kha lun t c nhng kt qu sau:
Tm hiu v phn tch cc bi ton cn bng ti cho cc h qun tr CSDL
MySQL, PostgreSQL, Oracle v SQL.
Tm hiu v cc tiu ch nh gi ti v hiu nng ca my ch.
Tm hiu v gii php replication trong h qun tr CSDL MySQL, tm hiu v
MySQL Proxy, cc gii thut trong bi ton cn bng ti, nguyn l hot ng
MySQL Proxy nh ngn ng kch bn Lua. T , la chn hai m hnh
MySQL Proxy master slave v MySQL Proxy master multi slave gii
quyt bi ton cn bng ti cc truy vn c, nh gi ti v hiu nng ca
MySQL server trong mi m hnh.
Do hn ch v mt thi gian, kin thc, s lng v cu hnh ca my tnh thc
nghim nn kha lun vn cn nhng im hn ch sau:
Ch dng li bi ton cn bng ti cc truy vn c cho h qun tr CSDL
MySQL.
Cha th nghim c vi s lng client truy cp ln v s lng cc MySQL
server cha ln.
Gii php cn bng ti cho h qun tr CSDL MySQL s dng MySQL Proxy bc
u c nhng kt qu tt, kh quan. Trong thi gian ti, ti s nghin cu v pht trin
bi ton cn bng ti theo nhng hng sau:
Cn bng ti cc truy vn ghi da vo phng php Sharding c s d liu
MySQL vi MySQL Proxy.
Th nghim trn nhiu MySQL server nh gi chnh xc ti v hiu nng
ca cc server.
To caeching cho MySQL Proxy t hiu sut tt hn
76
77
[16] http://www.oracle.com
[17] http://networksandservers.blogspot.com/2011/03/load-balancing-ii.html
[18] http://everac99.wordpress.com/2008/03/31/the-oracle-rac-what-is-it-an-howdoes-it-work/
[19] http://msdn.microsoft.com/en-us/library/ms152746.aspx
[20] http://msdn.microsoft.com/en-us/library/ms151176.aspx
[21] http://msdn.microsoft.com/en-us/library/ms187103.aspx
[22] http://msdn.microsoft.com/en-us/library/ms189852.aspx
[23] http://technet.microsoft.com/en-us/library/bb742455.aspx
[24] http://quantrimaychu.com/showthread.php?t=3355
[25] http://dev.mysql.com/doc/refman/5.5/en/mysql-proxy.html
[26] http://lieuclub.forumvi.com/t119-topic
[27] http://dev.mysql.com/doc/refman/5.5/en/mysqlslap.html
78