Download as pdf or txt
Download as pdf or txt
You are on page 1of 94

I HC QUC GIA H NI

TRNG I HC CNG NGH

Trn Th Giang

NGHIN CU TH NGHIM GII PHP CN


BNG TI CHO H QUN TR CSDL MYSQL VI
MYSQL PROXY

KHA LUN TT NGHIP I HC CHNH QUY


Ngnh: Cng ngh Thng tin

H NI 2012

I HC QUC GIA H NI
TRNG I HC CNG NGH

Trn Th Giang

NGHIN CU TH NGHIM GII PHP CN


BNG TI CHO H QUN TR CSDL MYSQL VI
MYSQL PROXY

KHA LUN TT NGHIP I HC CHNH QUY


Ngnh: Cng ngh Thng tin

Cn b hng dn: TS Nguyn Hi Chu

H NI 2012

VIETNAM NATIONAL UNIVERSITY, HANOI


UNIVERSITY OF ENGINEERING AND TECHNOLOGY

Tran Thi Giang

RESEARCH INTO EXPERIMENT OF LOAD


BALANCING SOLUTION FOR MYSQL DATABASE
MANAGEMENT SYSTEM WITH MYSQL PROXY

Major: Information technology

Supervisor: Nguyen Hai Chau, PhD

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

NGHIN CU TH NGHIM GII PHP CN BNG TI CHO H QUN


TR CSDL MYSQL VI MYSQL PROXY
Trn Th Giang
Kha QH-2008-I/CQ, ngnh Cng ngh thng tin
Tm tt Kha lun tt nghip:
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 gii php cn bng ti c cc nh nghin cu a ra cho cc h qun tr
CSDL. Tuy nhin nhiu gii php khng gii quyt c y c ba yu t trn cho h thng
my ch. V vy, kha lun la chn gii php s dng MySQL proxy cn bng ti cho cc
my ch c s d liu MySQL. MySQL proxy nhn cc truy vn t pha client, lc ra cc truy
vn gi n cc my ch ph hp da trn thut ton cn bng ti, sau nhn d liu t cc
my ch tr li cho khch hng. Khng ch p ng c yu cu cn bng ti, gii php ny
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.
Thc nghim c tin hnh vi hai m hnh, mt m hnh ch c hai my ch - m hnh
vi mt master v mt slave, v mt m hnh m rng hn vi ba my ch m hnh mt
master v hai slave. Kt qu thu c t cc tham s nh gi ti v hiu nng ca server cho
thy rng, gii php c kim nghim l kh quan v p dng c trong thc t.
T kha: MySQL Proxy, cn bng ti

RESEARCH INTO EXPERIMENT OF LOAD BALANCING SOLUTION


FOR MYSQL DATABASE MANAGEMENT SYSTEM WITH MYSQL PROXY
Tran Thi Giang
QH-2008-I/CQ course, Information Technology major
Abstract of thesis:
In recent years, the boost of internet cause the number of user who access to database
server through Internet increase rapidly. With millions of clients access every day, this require
server system powerfull, otherwise the system will be overload. A powerfull server system is
system can be satisfy all clients requests within the shortest possible time the system is capable
of load balancing. In addition, the system also need scalability and high availability. These three
factors combine together closely to ensure stable system operation. If the system is lacks of one
factor, disater will happen any time. This cause an extremely heavy loss for businesses.
Therefore, load balancing, scalability and high availability factors determine survival of
businesses.
The researchers in over the world gave a lot of load balancing solutions for database
mannagement systems. However, there are some solutions do not satisfy fully three factors
above. So the thesis chooses a load balancing solution for MySQL database management system
that uses a load balancer, called MySQL Proxy. MySQL Proxy is a program that sits between
clients and MySQL servers. All of MySQL Proxys activities based on the Lua scripting
language and Load Balancing Algorithms. It receives queries from clients, monitors, analyzes
them, passes them to the MySQL server and returns the responses from the MySQL Server to the
appropriate client. Not only load balancing, this solution also solves the scalability and high
availability problem base on the Replication MySQL method.
The experiment based on three models of Replication, the first model there is only one
MySQL server, the second model is the simple replication model (one master and one slave), and
last model is the master multi slaves replication model (one master and two slaves). The load
parameters assessment and the performance of the servers show that the results is satisfactory
and this solution can apply in fact.
Keywords: MySQL Proxy, Load balancing

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

2.2.2. Gii php s dng Partitioning c s d liu - Cn bng ti cc truy vn ghi


vi PL/Proxy.............................................................................................................. 17
2.3. GII PHP CN BNG TI CHO H QUN TR CSDL ORACLE .............. 18
2.3.1. Gii php cn bng ti pha client ................................................................... 18
2.3.2. Gii php cn bng ti pha server .................................................................. 19
2.3.3. Gii php Oracle Real Application Cluster ..................................................... 19
2.4. GII PHP CN BNG TI CHO H QUN TR CSDL SQL ....................... 21
2.4.1. Gii php s dng Replication c s d liu .................................................. 21
2.4.2. Gii php Database mirroring ......................................................................... 26
2.4.3. Gii php Network Load Balancing ................................................................ 27
2.5. Cc thut ton cn bng ti .................................................................................... 29
2.5.1. Gii thut thut Roun-robin ........................................................................... 29
2.5.2. Hm bm ........................................................................................................ 30
2.5.3. Gii thut xc nh tng s kt ni nh nht ................................................. 32
CHNG 3: BI TON CN BNG TI READ CHO H QUN TR CSDL
MYSQL VI MYSQL PROXY. ...................................................................................... 33
3.1. GII THIU V MYSQL PROXY V NGN NG KCH BN LUA............ 33
3.1.1. Gii thiu v mysql proxy ............................................................................... 33
3.1.2. Gii thiu v ngn ng kch bn Lua .............................................................. 34
3.1.3. Nguyn l hot ng ca MySQL Proxy vi ngn ng kch bn Lua [25] .... 35
3.2. GII THIU V GII PHP REPLICATION TRONG H QUN TR CSDL
MYSQL ............................................................................................................................. 37
3.3. GII THIU V CNG C MYSQLSLAP ........................................................ 42
3.4. PHT BIU BI TON ....................................................................................... 43
3.5. M HNH GII QUYT BI TON .................................................................. 44
3.4.1. M hnh MySQL Proxy mt master mt slave ......................................... 44

3.4.2. M hnh MySQL Proxy mt master multi slave ....................................... 44


CHNG 4: THC NGHIM V NH GI ............................................................. 46
4.1. MI TRNG THC NGHIM ......................................................................... 46
4.2. TIN HNH THC NGHIM ............................................................................. 46
4.2.1. Ci t MySQL Proxy ..................................................................................... 46
4.2.2. Cu hnh cho gii php replication trong h qun tr CSDL MySQL [7] ....... 49
4.2.3. Kch bn Lua ................................................................................................... 51
4.2.4. Th nghim...................................................................................................... 53
4.3. PHN TCH, NH GI KT QU THC NGHIM ..................................... 55
4.3.1. Client gi truy vn trc tip n my ch MySQL ......................................... 55
4.3.2. M hnh MySQL Proxy mt master mt slave ......................................... 56
4.3.3. M hnh MySQL Proxy mt master hai slave ........................................... 64
4.4. NHN XT ........................................................................................................... 74
4.4.1. Kh nng chu ti ca server .......................................................................... 74
4.4.2. Kh nng m rng .......................................................................................... 74
4.4.3. Tnh sn sng cao ........................................................................................... 75
KT LUN ....................................................................................................................... 76

DANH SCH CC BNG


Bng 1: Cu hnh cc my ................................................................................................. 46
Bng 2: Kt qu thi gian chy cc truy vn trong m hnh ch c mt MySQL server .. 56
Bng 3: Kt qu thi gian chy cc truy vn trong m hnh MySQL Proxy-master-slave
........................................................................................................................................... 64
Bng 4: Kt qu thi gian chy cc truy vn trong m hnh MySQL Proxy-master-multi
slave ................................................................................................................................... 72

DANH SCH CC HNH V

Hnh 1: M hnh PGCluster trong gii php cn bng ti ................................................. 12


Hnh 2: M hnh ca Slony-I trong cn bng ti ............................................................... 14
Hnh 3: M hnh pgpool-II trong cn bng ti .................................................................. 15
Hnh 4: Gii php cn bng ti h qun tr CSDL PostgreSQL vi PL/Proxy ................. 17
Hnh 5: Gii php cn bng ti cho h qun tr CSDL Oracle pha client ........................ 18
Hnh 6: Gii php cn bng ti pha server cho h qun tr CSDL Oracle ....................... 19
Hnh 7: Gii php cn bng ti cho h qun tr CSDL Oracle Real Application Cluster . 20
Hnh 8: Gii php Merge replication cn bng ti cho h qun tr CSDL SQL................ 22
Hnh 9: Gii php Transaction replication cn bng ti cho h qun tr CSDL SQL ....... 24
Hnh 10: Gii php Log shipping cn bng ti cho h qun tr CSDL SQL ................ 25
Hnh 11: Gii php Database Mirroring cn bng ti cho h qun tr CSDL SQL ........... 27
Hnh 12: Gii php Network load balancing cn bng ti cho h qun tr CSDL SQL .... 29
Hnh 13: Cc th tc cn thc hin khi client gi mt truy vn n server qua MySQL
Proxy.................................................................................................................................. 36
Hnh 14: M hnh replication n gin master slave trong MySQL .............................. 39
Hnh 15: M hnh replication master multi slave trong MySQL ................................... 39
Hnh 16: M hnh master relay slave trong MySQL ...................................................... 40
Hnh 17: M hnh replication master master trong MySQL .......................................... 41

Hnh 18: M hnh master-slave replication vi MySQL Proxy ........................................ 44


Hnh 19: M hnh master multi salve replication vi MySQL Proxy ............................ 45
Hnh 20: Hiu nng ca server trong m hnh ch c duy nht MySQL server ................ 56
Hnh 21: Hiu nng CPU ca master ................................................................................ 73
Hnh 22: Hiu nng v Processes ...................................................................................... 73
Hnh 23: Hiu nng trung bnh ti ..................................................................................... 74

DANH SCH CC T VIT TT

STT

T vit tt

T ting anh

T Ting Vit

CPU

Central Processing Unit

n v x l trung tm

RAM

Random Access Memory

B nh truy cp ngu nhin

RAC

Real Application Cluster

Cm ng dng thc

CSDL

Database

C s d liu

DANH SCH CC THUT NG

STT

Thut ng Ting Anh

Thut ng Ting Vit

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

Real Application Cluster

16

Merge replication

Nhn rng hp nht

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

Nhn rng giao dch

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

Log Reader Agent

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

hot standby server

My ch ch nng

39

Binary log

Bn ghi nh phn

Bn ghi giao dch

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.

Chng 3: Trnh by bi ton cn bng ti cho h qun tr CSDL MySQL vi Load


Balancer l MySQL Proxy. Chng ny tm hiu v gii php replication trong h qun
tr CSDL MySQL, nguyn l hot ng ca MySQL Proxy, ngn ng kch bn Lua c
s dng iu khin cc hnh ng ca MySQL Proxy v cng c mysqlslap gi lp
cc client, sinh truy vn n cc my ch.
Chng 4: Thc nghim v nh gi. Tin hnh thc nghim cn bng ti cc truy
c cho cc my ch vi hai m hnh MySQL Proxy mt master mt slave v m
hnh MySQL Proxy mt master multi slave. Cng c c s dng sinh ra cc truy
vn l mysqlslap.
Phn kt lun v hng pht trin kha lun: Tm lc nhng im chnh ca kha
lun. Ch ra nhng im cn khc phc, ng thi a ra hng nghin cu trong thi
gian tip theo.

CHNG 1: S CN THIT CA VIC CN BNG TI TRUY VN


C CHO H QUN TR CSDL MYSQL
1.1. CC KIU QU TI MY CH [8]
1.1.1. S lng truy cp hp l n my ch qu ln
Trong mt khong thi gian ngn c th c n hng nghn hoc thm ch l hnh
triu client kt ni n server. Do vy, nu h thng server khng mnh th vic qu ti
server l khng th trnh khi.
Nhng yu cu truy cp t client n server c phn chia thnh hai loi:
- Truy vn ghi: cc client gi yu cu ghi vo c s d liu ca server. Cc yu cu
ghi ny l: CREATE (c s d liu, bng,..), UPDATE (d liu), INSERT (d liu
vo bng) v DELETE (hng, trng d liu) hay DROP (bng, c s d liu,...)
- Truy vn c: cc client gi yu cu c mt hoc nhiu i tng trong c s d
liu ca server. Cc yu cu c ny l: SELECT.
Trong s cc truy vn t client n server th phn ln l cc truy vn c. Bi v
i vi cc ng dng web th ngi dng thng yu cu hin th d liu nhiu hn l
cp nht d liu.
Bn cnh , nu server c bo dng, hoc nng cp mt phn cng hay mt
phn mm b tht bi th mt ti nguyn no ca server khng c sn. Khi client kt
ni n server v cn dng ti nguyn ny th n s phi ch v vi mt lng truy cp
ln server s b qu ti.
1.1.2. My ch b tn cng
a) Tn cng t chi phn tn dch v (Distributed Denial of Service attacks)
Mt tn cng t chi dch v (DoS attack) hay tn cng t chi phn tn dch v
(DDoS attack) l mt xm phm lm cho mt ti nguyn my tnh hoc ti nguyn
mng khng c sn i vi ngi s dng.
Th phm ca cuc tn cng DoS thng nhm n mc tiu l cc website hoc
cc dch v lu tr trn web server cu hnh cao nh ngn hng, cng thanh ton th tn
dng hay thm ch l c root namserver.

Mt phng php ph bin ca cuc tn cng lin quan n bo ha server vi cc


yu cu thng tin lin lc bn ngoi. N buc server phi thit lp li hoc tiu th ti
nguyn ca server server khng th cung cp dch v d nh ca mnh, cn tr cc
phng tin truyn thng giao tip gia client vi server. Do vy, server khng th p
ng c cc truy vn hp l ca client hoc p ng rt chm. Cc cuc tn cng nh
vy thng dn n tnh trng qu ti ca server.
b) Su my tnh (computer worms):
Mt con su my tnh l mt phn mm dc hi, mt chng trnh c hi m n
c th t ti to ly lan ra cc my tnh khc. Thng thng, su my tnh s dng mt
mng li my tnh ly lan. V th, mng li y b nhim su v c kim sot bi
tc gi su. Su my tnh gy ra s gin on ln bng cch lm tng lu lng mng v
cc hiu ng khng mong mun khc, n cn c th xa cc tp tin trn server.
c) Viruss XSS
Mt virus my tnh l mt chng trnh my tnh c th t ti to v ly lan t mt
my tnh khc. Virus c th lm tng nguy c ly lan sang my tnh khc bng cch ly
nhim cc tp tin trn mt h thng tp tin mng hoc mt h thng tp tin c truy cp
bi cc my tnh khc.
Virus XSS c th gy ra lng truy cp cao c th n hng triu truy cp trong mt
khong thi gian rt ngn, v hng triu cc trnh duyt b nhim bnh v/hoc ngay c
cc server cng b nhim bnh. Do vy, n gy ra tnh trng qu ti ca server.
1.1.3. Internet
a) Internet bots
Internet bots (Botnet) cn c gi l web robots, WWW robots hay n gin l
bots, l ng dng phn mm t ng thc thi cc nhim v trn mng Internet. Thng
thng Bot thc hin cc nhim v n gin c lp trnh sn v c cu trc lp i lp
li vi tc cao hn mt ngi bnh thng.
Mt Botnet c nh ngha l mt mng gm rt nhiu my tnh b xm nhp v
c th c k tn cng iu khin t xa. My tnh b xm nhp l my tnh b ly
nhim phn mm c hi (Bot). Nh vy, Botnet l tp hp cc Bot c s dng vi
mc ch xu. Botmaster l mt ngi hoc mt nhm ngi iu khin Botnet.

Mc ch kim sot Botnets ca tin tc l mt s hnh thc hot ng bt hp php.


Nhng hot ng ny bao gm, tn cng t chi dch v phn tn (DDoS), pht tn th
gic (spamming), theo di lu lng d liu trn h thng mng (sniffing network
traffic), theo di bn phm (keylogging), pht tn m c (spreading malware), v.v.. [2]
Nu lu lng khng c lc hoc gii hn trn cc web site ln vi rt t ti
nguyn (nh bng thng, v.v) th s gy ra tnh trng qu ti cho server.
b) Mng chm
Khi mng chm th cc yu cu ca khch hng c phc v chm hn v s
lng kt ni tng ln rt nhiu vt qu gii hn server t c. Do vy, nguy c my
ch b qu ti l rt cao.
1.2. S CN THIT CA VIC CN BNG TI CHO CC H QUN TR
CSDL NI CHUNG V MYSQL NI RING
1.2.1. S cn thit ca vic cn bng ti cho cc h qun tr ni chung
S pht trin ca internet khin cho s lng ngi dng truy cp n cc web
server ngy cng tng mnh, c bit l cc mng x hi hoc cc website chia s trc
tuyn. Cc website ny khng ch cho php ngi dng trao i v chia s thng tin, giao
lu v kt bn m cn cho php ngi dng lu tr ti liu vi dung lng kh ln. u
nm 2012, hng nghin cu th trng Nielsen1 cng b 10 website c truy cp
nhiu nht vo nm 2011, trong , ng u l Google2 trung bnh c khong 153,44
triu ngi dng M truy cp mi thng; ng th hai trn bng xp hng l Facebook3
vi 137,64 triu ngi dng; Apple4 l 61,6 triu ngi dng [9]. Vi hng triu lt truy
cp mi ngy i hi h thng my ch phi cc k mnh m, nu khng my ch s b
qu ti. Mt h thng hot ng tt khin ngi dng hi lng, t s lng ngi
dng ngy cng tng ln, gy qu ti my ch, dn n yu cu nng cp h thng. C
nh vy, h thng c nng cp v ngi dng ngy cng tng. Vng tun hon ny dn
n nhu cu phi xy dng mt h thng c kh nng p ng c s lng ln ngi
dng trong thi gian di, v khi ngi dng tng ln th c th m rng h thng mt
cch d dng m khng nh hng n hot ng ca h [1].
Bn cnh s bng n ca cc website chia s trc tuyn, mt s n v nh cc
hng hng khng, ngn hng, cc doanh nghip ln th mng my tnh c th v nh h
thn kinh iu khin hot ng ca ton doanh nghip v my ch l tri tm ca mng
5

my tnh. S ngng hot ng ca my ch lm t lit ton b cc hot ng chnh ca


doanh nghip, v thit hi kh c th lng trc c. Ngoi ra, nh gii thiu
trn, k xu li dng khi cc my ch ca doanh nghip qu ti s tn cng doanh nghip,
ly i nhng ti liu quan trng hay nhng khon tin ln v d nh trong ngn hng.
Nu iu ny xy ra th tn tht cho doanh nghip l rt ln, c th b ph sn.
Vi cc tnh trng trn, nhu cu cn bng ti h thng my ch, c bit l cn bng
ti cho cc my ch c s d liu l iu kin tt yu. Ngoi nhu cu cn bng ti, nhu
cu m rng h thng v tnh sn sng cao ca cc my ch cng rt cn thit. Cn bng
ti l kh nng chia ti cho cc database server ca h thng p ng c tt c cc
yu cu ca ngi dng mt cch nhanh nht, khng b bt k mt thi gian tr no. Khi
ngi dng tng v phm vi ngi dng m rng ra, do vy h thng phi c trin
khai trn quy m rng ln nh trn mt quc gia hay ton cu. Vi kh nng cn bng ti
v kh nng m rng quy m nh vy lm tnh sn sng ca h thng cao hn rt nhiu.
Khi mt database server b li, th mt server khc thay th server b li ngay tc khc.
Ba yu t ny lin h mt thit vi nhau, h tr nhau m bo h thng hot ng tt,
n nh trong thi gian di.
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
H qun tr CSDL MySQL tr thnh h qun tr CSDL m ngun m ph bin
nht th gii. Bi v MySQL c hiu sut cao, tin cy cao v d s dng. MySQL
chy trn hn 20 nn tng bao gm c Linux, Windows, Mac OS, Solaris, IBM AIX, to
ra s linh hot kim sot. Bn cnh , MySQL cung cp mt lot cc cng c c s
d liu, h tr, o to v cc dch v t vn qun tr c s d liu thnh cng. N
cng l h qun tr CSDL ca s la chn cho mt th h ng dng mi c xy dng
trn LAMP (Linux, Apache, MySQL / Perl / Python). Nhiu t chc ln nht th gii v
pht trin nhanh nht bao gm Facebook, Google, Adobe, Alcatel Lucent, Youtube, v
Zappos u da trn MySQL tit kim thi gian, tin bc v cung cp nng lng cao
cho cc Website, cc h thng kinh doanh quan trng v cc phn mm ng gi [9].
Cng nh cc h qun tr CSDL khc, vi s ph bin ca mnh, h qun tr CSDL
MySQL cn thit phi c cn bng ti. Ban u khi trin khai h thng Website cc
doanh nghip, t chc thng hay chn gii php Webserver v Database Server trn
cng mt server. Gii php ny gip cc doanh nghip tit kim c kh nhiu chi ph
6

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.

1.3.2. Memory usage


Memory b nh - l mt thnh phn quan trng ca my tnh, c s dng
lu tr cc chng trnh v d liu trc khi chng trnh c thi hnh. Cc c trng
c bn ca b nh l thi gian truy cp d liu v dung lng b nh. Thi gian truy cp
l khong thi gian cn thit k t khi pht tn hiu iu khin c/ghi n khi vic
c/ghi hon thnh. Tc truy cp l mt yu t quyt nh n tc chung ca my
tnh. Dung lng b nh ch khi lng d liu m b nh c th lu tr ng thi.
Trong linux, yu t quan trng trong vic xc nh hiu sut l dung lng b nh sn c
trong RAM b nh vt l v b nh o SWAP space.
RAM b nh truy cp ngu nhin l mt loi b nh chnh ca my tnh lu
tr m chng trnh v d liu trong sut thi gian thc thi, chng s b xa khi mt
ngun in. y l loi b nh c th ghi v c d liu v thi gian truy cp n bt k
nh no cng nh nhau.
B nh o l mt khng gian trong a cng, c s dng khi dung lng ca
RAM y. B nh o l mt k thut cho php x l mt chng trnh khng c
np ton b vo RAM. Trong RAM ch lu tr cc lnh v d liu phc v cho hot ng
ca chng trnh ti mt thi im nht nh. Khi cn ti cc lnh hoc d liu mi h
thng s np chng vo b nh ti v tr trc b chim gi bi cc lnh khng dng
vo thi im ny. Cc lnh v d liu khng dng n c chuyn vo b nh o.
Thng s free trong RAM v swap trong b nh o cho bit dung lng b nh
c sn trong l bao nhiu, t c th nh gi hiu sut ca my ch. Nu dung lng
b nh cng ln th hiu sut ca my ch cng cao v ngc li.
1.3.3. Thi gian phn hi
Thi gian phn hi cc truy vn ca client gi n server chnh l mt yu t
nh gi ti v hiu nng ca my ch. Nu thi gian phn hi cc truy vn l thp th
hiu sut ca my ch cao, cc truy vn ca client c p ng nhanh m khng c s
chm ch. Ngc li, nu thi gian phn hi cc truy vn l ln th hiu sut ca my ch
gim, client s phi i mt thi gian lu c kt qu tr v t my ch.
1.4. XC NH MC TIU NGHIN CU CA KHA LUN L CC NG
DNG QU TI TRUY VN C

Trong hu ht cc ng dng web nh cc website bo in t (dantri,


vnexpress,), website chia s trc tuyn (Youtube,) hay cc mng x hi th yu cu
truy vn d liu ca ngi dng ch yu l truy vn c (c tin tc, xem video,). Gi
s cc truy vn c xy ra hng giy th truy vn ghi xy ra hng pht hoc c th l hng
gi. V th, tn sut cc truy vn c xy ra l ln hn rt nhiu so vi cc truy vn ghi.
Do nhu cu trn, nn kha lun tp trung nghin cu v th nghim gii php cn
bng ti cho cc truy vn c.

CHNG 2: CC GII PHP CN BNG TI CHO CC H QUN


TR CSDL.
2.1. CC GII PHP CN BNG TI CHO H QUN TR CSDL MYSQL
2.1.1. Gii php s dng Replication c s d liu vi MySQL Proxy
Gii php ny l mc tiu nghin cu ca kha lun, chi tit c trnh by trong
chng 3 v chng 4.
2.1.2. Gii php s dng Clustering [3]
Clustering l mt kin trc nhm m bo nng cao kh nng sn sng cho cc h
thng mng my tnh. Clustering cho php s dng nhiu my ch kt hp vi nhau to
thnh mt cm v c kh nng chu c li nhm nng cao sn sng cho h thng.
N c th bao gm nhiu my ch kt ni vi nhau theo dng song song hoc phn tn,
nu mt my ch ngng hot ng do b s c hoc nng cp bo tr th lun lun c
mt bn sao d phng tng t ca my ch s m nhim cng vic gip.
MySQL Cluster l mt cng c lu tr d liu da trn gii php clustering, c
thit k cho kh nng chu li, d phng, kh nng sn sng, kh nng m rng v hiu
sut cao. D liu c lu tr v nhn rng trn cc nt d liu ring bit, mi nt d
liu ci t trn mt my ch v lun lun c cha mt bn sao d liu ging ht n
trong h thng. Mi cm cha cc nt qun l, gip qun l, kim tra, gim st ton h
thng. Cc phin bn ban u ca MySQL Cluster lu tr tt c cc thng tin trong b
nh chnh vi kh nng lu tr khng n nh. Nhng cc phin bn sau ny khc
phc c nhc im ny ca MySQL Cluster cho php lu tr d liu trn a gip
MySQL Cluster c th lm vic vi lng d liu lu tr rt ln, ln hn b nh chnh
ca my. S quan trng ca MySQL Cluster cn kh nng s dng my ch MySQL
nh l mt cng c truy vn truy vn n c s d liu nm trn cc nt cha d liu.
V th, c th di chuyn cc ng dng thit k tng tc vi MySQL sang MySQL
Cluster tt. Ngoi ra khi nim nt ngang hng cho php mt cp nht c thc hin
trn mt my ch s c nhn thy ngay lp tc trn cc my ch khc. V vic truyn
ti cc thay i s dng mt c ch thng tin lin lc tinh vi c thit k cho vic truyn
thng qua mng hiu qu rt cao. Mc ch ca tt c cc vic l MySQL Cluster
t c mt hiu sut cao nht c th, phn phi ti, v tha mn kh nng sn sng
cao v tnh d phng.
10

M hnh MySQL Cluster trong bi ton cn bng ti


Trn my 192.168.1.50 s ci t Load balancer m c th l cc chng trnh
ldirectord v ipvsadm. Chng trnh ipvsadm c nhim v phn ti khi c yu cu
truy vn n my ch c s d liu th s phn phi u n cc my ch thnh vin
x l. Chng trnh ldirectord c nhim v gim st v kim tra tn hiu ca cc
my ch c s d liu thnh vin thng qua cc truy vn kim tra. Trong trng hp
dch v ca mt my ch c s d liu b li th my ch s b loi ra khi danh
sch v cc truy vn s c dn n cc my ch cn li.
My Load balancer s to ra mt da ch ip o 192.168.1.100 v cc ng dng s
truy cp ti a ch ny, Load balancer sau s t ng gi yu cu ca ng dng ti
cc MySQLD (192.168.1.70 v 192.168.1.80) tht. MySQLD nhn truy vn, x l v
gi li kt qu cho ng dng.

11

2.2. GII PHP CN BNG TI CHO H QUN TR CSDL POSTGRESQL


PostgreSQL l h qun tr CSDL i tng - quan h mnh m v m ngun m.
N c pht trin 15 nm, v c chng mnh l h qun tr CSDL c bn
mnh, tnh ton vn d liu v tnh ng n [11]. PostgreSQL cng a ra mt s gii
php cn bng ti cho h thng:
2.2.1. Gii php s dng Replication c s d liu
Bn phng php replication ph bin trong h qun tr CSDL PostgreSQL i din
cho bn phng thc hot ng ca replication: multi-master ng b, multi-master
khng ng b, master to multi-salve khng ng b v statement-based middelware l:
a) PGCluster
PGCluster l h thng replication ng b ca cc thnh phn multi-master cho
PostgreSQL. PGCluster bao gm ba kiu server, mt Load Balancer, Cluster DB v mt
Replication server.

Hnh 1: M hnh PGCluster trong gii php cn bng ti


Chc nng ca PGCluster: PGCluster c hai chc nng chnh:

12

- Chc nng cn bng ti


Cc yu cu tham chiu ca client c Load Balancer phn phi n cc
Cluster DB. N hiu qu vi cc ng dng Web vi yu cu tham chiu
ln.
Mt i tng replication c th c ch nh cho mi bng. Khi cc bng
nhn c mt yu cu cp nht v cc yu cu tham chiu l khc nhau,
PGCluster c th phn phi cc bng nhn cc yu cu cp nht v c
th ch sao chp cc bng m nhn yu cu tham chiu.
- Tnh sn sng cao
Khi tht bi xy ra trong c s d liu Cluster, Load Balancer v
Replication server tch c s d liu b li t h thng v tip tc dch v
vi vic s dng cc c s d liu cn li.
D liu c sao chp t ng vo c s d liu phc hi hoc b sung t
c s d liu khc. Trong qu trnh phc hi, cc truy vn nhn c s
c thc thi t Replication server. [12]
b) Bucardo
Bucardo l mt h thng replication khng ng b, cho php c hai phng php
multi-master v multi-slave. N c pht trin Backcountry.com bi Jon Jensen v
Greg Sabino Mullane ca End Point Corporation, v hin ti n c s dng nhiu t
thc khc nhau. Bucardo l phn mm m ngun m v min ph [13].
Bucardo l khng ng b. Thay vo , hy vng rng cc nt thng xuyn lin
lc vi nhau nh hu ht cc gii php replication trong cc h qun tr CSDL, Bucardo
cho php mt master ngt kt ni thc hin mt s lng cng vic ty v sau ti
ng b khi master kt ni li vi cc server cn li. iu ny lm cho n thch hp vi
kch bn m c s d liu lu tr trn mt h thng in thoi di ng. Mt my tnh
xch tay c th chy cc server c s d liu, trc khi bt u chuyn i, cng vic ng
b ha c thc hin, sau cp nht theo c hai hng vi tt c cc thay i c
thc hin khi quay tr li vn phng.
Bucardo khng phi l mt gii php replication thch hp cho hu ht cc yu cu
chuyn i d phng v tnh sn sng cao. Nhng n c th ph hp vi vic phn chia
13

ti gia cc my ch trong nhiu a im, c bit l nu lin cc lin kt gia chng


khng ng tin cy mt tnh hung m Slony khng x l c tt [5].
c) Slony-I
Slony-I l mt h thng replication master - multiple slaves khng ng b, n h
tr phn tng v failover.

Hnh 2: M hnh ca Slony-I trong cn bng ti


Slony-I c nhng tnh nng sau:
- Replication: Slony-I c trang b vi mt h thng khng ng b, master c
th thc hin truy vn m khng i cho qu trnh ng b din ra slave, thm
ch t mt slave mt v tr t xa trong mt mng chm, nh mng WAN, th
hiu sut x l ca master khng h gim xung. iu ny rt hu ch khi s
dng replication cho cc mc ch sao lu.
- Phn tng: trong Slony-I c th kt ni gia slave vi cc slave khc. Khi ,
mt slave c th va l mt master ca mt s slave v va l mt slave ca mt
master khc. Nu ch c mt master th ti trng trn master l rt ln. Gii php
Slony-I vi c ch phn tng s gim ti cho master, lm tng hiu sut ca
master ni ring v ca ton b h thng ni chung. Tuy nhin, khi d liu c
cp nht, thng tin v d liu phi thng qua nhiu server nn s khc bit v
c s d liu ti mt s im tr nn ln hn.

14

- Chuyn i d phng: l kh nng chuyn vai tr t master sang slave. Master c


c cc hnh vi tng ng nh slave sau khi qu trnh failover din ra. Chc
nng Switchover l rt hu ch trong trng hp khi master server bo tr hay b
li. Do vy, khng lm gin on cc dch v cung cp cho client.
- Cn bng ti: Vi tt c cc tnh nng trn, th Slony-I c mt c tnh quan trng
l cn bng ti. Cc truy vn t ng dng ca client s c phn phi n cc
server: truy vn ghi c gi n master v truy vn c c gi n cc slave.
Do vy, s qu ti h thng l khng cn v hiu sut ca h thng c nng
cao[14].
d) Pgpool-II
pgpool-II l mt trung gian gia PostgreSQL server v mt PostgreSQL client.

Hnh 3: M hnh pgpool-II trong cn bng ti


pgpool-II cung cp cc tnh nng sau:
- Kt ni Pooling: pgpool-II duy tr cc kt ni c thit lp n PostgreSQL
server, v s dng li chng bt c khi no m mt kt ni mi vi cng mt
thuc tnh kt ni n (v d nh cng thuc tnh username, database, protocol
version). N lm gim chi ph kt ni v ci thin thng lng tng th ca h
thng.

15

- Replication: pgpool-II c th qun l nhiu PostgreSQL server. Kch hot tnh


nng replication lm cho n c th to ra mt bn sao lu thi gian thc trn hai
hay nhiu hn PostgreSQL cluster, dch v c th tip tc m khng b gin
on nu mt trong s cc cluster b li.
- Load Balancing: Khi mt c s d liu c nhn rng, thc hin mt truy vn
SELECT trn bt k server no cng s tr li cng mt kt qu. pgpool-II mang
li nhng li th ca tnh nng replication gim ti trn mi PostgreSQL
server. N thc hin iu bng cch phn phi cc truy vn SELECT gia cc
server c sn, do ci thin hiu sut tng th ca h thng. Trong mt kch
bn l tng, hiu sut c c th nng cao t l thun vi s lng PostgreSQL
server. Cn bng ti hot ng tt nht trong mt kch bn m c rt nhiu ngi
dng thc hin nhiu truy vn c cng mt lc.
- Hn ch kt ni khi qu nhiu kt ni: c mt gii hn v s lng ti a cc kt
ni ng thi ti PostgreSQL server, v cc kt ni mi b t chi khi m s
lng ny t c. C th nng cao s lng ti a cc kt ni ny, tuy nhin,
iu ny s lm tng tiu th ti nguyn v c tc ng tiu cc n hiu sut
tng th. pgpool-II cng c mt gii hn kt ni v s lng ti a cc kt ni,
nhng cc kt ni mi s c thm vo hng i thay v tr li mt li ngay lp
tc.
- Truy vn song song: s dng tnh nng truy vn song song, d liu c th c
phn chia gia nhiu server, do mt truy vn c th c thc thi ng thi
trn tt c cc server, iu ny lm gim thi gian thc hin tng th. Truy vn
song song hot ng tt nht khi tm kim d liu vi quy m ln. pgpool-II cho
bit giao thc ca PostgreSQL back-end v front-end v tip nhn cc thng ip
gia mt back-end v mt front-end. V vy, mt ng dng c s d liu (frontend) ngh rng pgpool-II l mt PostgreSQL tht s v server (back-end) nhn
pgpool-II nh mt trong s cc client ca mnh. Bi v pgpool-II l minh bch
cho c server v client, mt ng dng c s d liu hin c c th c s dng
vi pgpool-II m gn nh khng c mt s thay i v m ngun ca n [15].
Nh vy, pgpool-II khng ch l mt phng php replication ca h qun tr CSDL
PostgreSQL m n cn ng vai tr l mt Load Balancer.

16

2.2.2. Gii php s dng Partitioning c s d liu - Cn bng ti cc truy vn ghi


vi PL/Proxy
PL/Proxy l mt ngn ng th tc c thit k c bit ph hp vi nhu cu m
rng quy m c s d liu ca Skype, trong bao gm mt mc tiu l phc v mt t
ngi s dng cng mt lc.
PL/Proxy c thit k phn phi cc cuc gi stored procedure. N t ng
phn phi d liu v m bo rng mt phn nht nh ca d liu kt thc ti mt nt
nht nh. Khi mt yu cu n, PL/Proxy s t ng tm cc phn mnh, ni m cha d
liu cn cho yu cu t client v n s ly d liu tr v cho client. Thut ton c
PL/Proxy s dng tm cc phn mnh l thut ton Hm bm, da trn hastext ca
trng ang chia tch, ci m cho php chia tch cng bng gia mt vi cc nt m
khng cn bit trc s phn b ca d liu. Hastext cung cp hm ni b m ly bt k
u vo l text v to ra u ra l mt s nguyn nh mt m bm. Mt u im chnh l
cc ng dng khng bit c d liu thc s n t u - iu ny c x l bi
PL/Proxy n ch cn gi mt stored procedure v ch i cu tr li [5].

Hnh 4: Gii php cn bng ti h qun tr CSDL PostgreSQL vi PL/Proxy

17

2.3. GII PHP CN BNG TI CHO H QUN TR CSDL ORACLE


Oracle l mt h qun tr CSDL i tng quan h c cung cp v pht trin
bi tp on Oracle . y l mt h qun tr CSDL c tnh an ton, bo mt cao, tnh nht
qun v ton vn d liu, cho php ngi dng truy cp ti c s d liu phn tn nh
mt khi thng nht [16].
2.3.1. Gii php cn bng ti pha client
Phng php cn bng ti ny c sn t Oracle 8i. Khi mt phin ngi dng c
gng kt ni vi c s d liu, c s d liu ca ngi nghe s ch nh phin ngu
nhin n mt trong s nhiu thit b u cui c lit k lng nghe.

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

Mt phn cm c s d liu RAC bao gm t nht l hai nt (v thng l nhiu


hn), mi khi chy mt th hin ring ca c s d liu phn cm. Ngoi ra, mt c s
d liu RAC cn cung cp mt s lng ti thiu ca cc kt ni v ti nguyn cho
mt vi ng dng, v vy vic ti ng dng c t trn mi th hin trong c s d
liu phn cm. Cui cng mt c s d liu phn cm RAC s cn phi m bo mt
cardinality ti thiu (tc l s lng nt m trn cc ng dng cn chy tt c cc
ln) cho mt hoc nhiu ng dng quan trng [18].

Hnh 7: Gii php cn bng ti cho h qun tr CSDL Oracle Real Application Cluster

20

2.4. GII PHP CN BNG TI CHO H QUN TR CSDL SQL


H qun tr CSDL SQL l mt h qun tr CSDL quan h, c pht trin bi tp
on Microsoft.
2.4.1. Gii php s dng Replication c s d liu
a) Merge replication
Merge replication c thc hin bi SQL Server Snapshot Agent v Merge Agent.
Nu publication (publication c nh ngha trong mt hoc nhiu c s d liu trong
Publisher, publication thit lp cc bng, ct v cc b lc) khng c lc hoc s dng
b lc tnh, Snapshot Agent to ra mt nh chp duy nht. Nu publication s dng b
lc tham s, Snapshot Agent to ra mt nh chp cho mi phn mnh ca d liu. Merge
Agent p dng cho cc nh chp ban u n cc Subscriber. Khi d liu thay i v
lc c sa i Publisher th Subscriber c theo di vi cc thay i .
Subscriber ng b vi Publisher khi kt ni mng v trao i tt c nhng thay i gia
Publisher v Subcriber k t khi ng b ha xy ra thi im gn nht [19].
Merge replication thng c s dng trong mi trng server-client. Merger
replication thch hp trong bt k tnh hung sau:
- Subscriber c th c nhiu cp nht cng mt d liu cc thi im khc nhau

v sau lan truyn nhng thay i n Publisher v n cc Subscriber khc.


- Subscriber cn nhn d liu, lm thay i ngoi tuyn, v sau ng b cc

thay i vi Publisher v cc Subscriber khc.


- Mi Subscriber yu cu cc phn mnh khc nhau ca d liu.
- Xung t c th xy ra, khi cn c kh nng pht hin v gii quyt chng.
- ng dng yu cu d liu

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

- ng dng yu cu tr ti thiu gia thi gian truyn thay i c to ra

Publisher n Subscriber.
- ng dng yu cu truy cp n trng thi d liu trung gian. V d, nu mt

dng thay i nm ln, transactional replication cho php mt ng dng tr li


cho mi thay i.
- Publisher c khi lng cc hot ng insert, update v delete rt ln.
- My ch c s d liu ca Publisher hoc Subscriber khng phi l my ch c

s d liu SQL, chng hn nh Oracle.


Mc nh, cc Subscriber c coi l read-only, bi v cc thay i khng c
truyn li cho Publisher. Transactional replication khng cung cp cc ty chn cho php
cp nht Subscriber.
Transaction replication c thc hin bi SQL Server Snapshot Agent, Log
Reader Agent v Distribution Agent. Snapshot Agent chun b cc file nh chp bao gm
s v d liu ca cc bng published v cc i tng c s d liu, lu tr cc file
trong mt th mc nh chp, v ng b ha cc bn ghi trong c s d liu distributor
trn Distributor server.
Log Reader Agent gim st cc transaction log ca mi c s d liu c cu hnh
cho transaction replication v sao lu cc giao dch c nh du cho replication t bn
ghi transaction trong c s d liu distributor, ng vai tr nh mt hng i lu tr v
chuyn tip. Distribution Agent sao chp cc file nh chp ban u t th mc nh chp
v cc giao dch lu gi trong cc bng ca c s d liu distribution n Subscriber.
Cc thay i tng ln s to ra Publisher mt lung n Subscriber theo lch trnh
ca Distribution Agent, ci m c th chy lin tip cho tr ti thiu, hoc trong
khong thi gian theo lch trnh. Bi v cc thay i t d liu phi c to ra
Publisher (khi transation replication c s dng m khng cp nht ngay tc khc hoc
ty chn cp nht theo hng i), trnh khi xung t cp nht. Cui cng, tt c
Subscriber s nhn c cng mt gi tr nh Publisher. Nu cp nht ngay tc khc
hoc ty chn cp nht theo hng i c s dng vi transaction replication, cp nht
c th c to ra Subscriber v vi cp nht theo hng i th xung t c th xy ra.

23

Cc Subscriber s tr li cc truy vn ch c t client gi n v Publisher s chu


trch nhim tr li cc truy vn ghi vi cc lnh cp nht d liu nh : CREATE,
UPDATE, INSERT, DELETE, DROP, Cng vic phn phi cc truy vn n cc
Subscriber v Publisher c giao cho mt Load Balancer. Load Balancer phi lc ra cc
truy vn ch c gi n Subsriber v cc truy vn cn li gi v Publisher. Nu c nhiu
Subscriber th Load Balancer s s dng mt thut ton phn ti u cho cc
Subscriber [20].

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

gian gia cc cng vic khi phc).


- Cho php mt mt s chm ch gia thi gian khi primary server sao lu bn ghi

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

2.4.2. Gii php Database mirroring


Database mirroring l phn mm gii php chnh cho vic tng tnh sn sng ca c
s d liu. Mirroring c thc hin trn mi mt c s d liu c bn v ch lm vic
vi c s d liu m s dng m hnh phc hi y . Cc m hnh phc hi n gin
v s lng ln ng nhp khng h tr database mirroring. Database mirroring c h
tr trong SQL Server Standard v Enterprise.
Database mirroring phn nh tnh sn sng quan trng v cung cp mt cch qun l
thay i d dng v b sung n failover clustering hoc log shipping. Khi mt phin
database mirroring c ng b ha, database mirroring cung cp mt hot standby
server m h tr failover nhanh chng m khng mt d liu t commit giao dch. Trong
mt phin mirrioring thng thng, sau khi mt production server b li, ng dng client
c th phc hi rt nhaanh bng cch ti kt ni n standby server.
Li ch ca database mirroring
- Tng tnh sn sng ca c s d liu. Trng trng hp xy ra thm ha, ch
an ton cao vi failover t ng, failover nhanh chng mang n mt bn sao
s phng ca c s d liu trc tuyn (khng mt d liu). Trong ch hot
ng khc, ngi qun tr c s d liu c th thay th dch v bt buc (vi s
mt mt d liu c th xy ra) n cc bn sao d phng ca c s d liu.
- Tng tnh bo v d liu. Database mirroring cung cp s d tha hon ton hoc
gn nh hon ton ca d, ph thuc vo ch hot ng l an ton cao hay
hiu nng cao.
- Ci thin s sn sng ca production database trong qu trnh nng cp.
gim thiu thi gian cht cho c s d liu nhn rng, nng cp tun t cc th
hin ca SQL server l hosting i tc failover. iu ny s b thi gian ch ch
mt failover [22].

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

Cc chng trnh my ch mng h tr cc ng dng quan trng nh giao dch ti


chnh, truy cp c s d liu, mng ni b ca cng ty v cc chc nng quan trng khc
phi chy lin tc sut 24h/24h. V mng li cn phi c kh nng m rng hiu sut
x l khi ln cc yu cu ca client m khng c s chm ch. Vi l do ny, clustering
c s quan tm rng ri ca cc doanh nghip. Clustering cho php mt nhm cc my
ch c lp c qun l nh mt h thng duy nht cho tnh sn sng cao, qun l d
dng hn v kh nng m rng ln hn.
My ch Network Load Balancing (cn c gi l hosts) trong mt cluster giao
tip cc cluster vi nhau cung cp cc li ch quan trng sau:
- Kh nng m rng: Network Load Balancing m rng hiu sut ca mt chng

trnh da trn server, nh Web server, bng cch phn phi cc yu cu ca


khch hng n nhiu server trong cluster. Khi lu lng tng ln, b sung server
c th c thm trong cluster, vi 32 my ch c th trong bt k mt cluster.
- Tnh sn sng cao: Network Load Balancing cung cp tnh sn sng cao bng

cch t ng pht hin server b li v phn phi li truy cp ca client n cc


server cn li trong cluster, do vy cung cp cho ngi dng vi dch v lin tc
[23].
Network Load Balancing phn phi lu lng IP n nhiu bn sao (hay cn gi l
instance) ca mt dch v TCP/IP, nh Web server, mi web server chy trn mt hosts
trong cluster. Network Load Balancing phn chia cc yu cu ca client mt cch minh
bch gia cc hosts v cho php client truy cp vo cluster bng cch s dng mt hoc
nhiu a ch IP o. T quan im ca client, cluster xut hin l mt server duy nht tr
li cc yu cu ca client. Khi tng lu lng truy cp doanh nghip, qun tr mng c
th ch cn thm mt my ch khc vo cluster.

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

Input: C N s lng truy vn n server


K database server
Output: mi server nhn c N/K s truy vn
Cch thc hin:
Vng 1

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

C tip tc quay vng cc server cho n khi tt c cc truy vn ca client c p


ng.
int roundRobin(int N, int K) {
for (i=0; i<N; i++)
for(j=0; j<K; j++)
send query[i] to server[j];
}
nh gi thut ton:
Thut ton c ci t n gin, do , thi gian ch nh server tr li truy vn
l rt nhanh, khng lm tng thi gian ch ca client. c bit, i vi thut ton ny th
cc server nhn c ng u cc truy vn ca cc client
2.5.2. Hm bm
Hm bm l gii thut nhm sinh ra cc gi tr bm tng ng vi mi
database server. Gi tr bm ng vai gn nh mt kha phn bit cc database server.

30

Input: N truy vn t client


K database server c cc server-id tng ng
gi tr kha u vo: x
output: h(x) = gi tr bm server-id
Cch thc hin: Gi s gi tr kha x l xu k t
bm cc xu k t, trc ht chng ta chuyn i cc xu k t thnh cc s
nguyn. Cc k t trong bng m ASCII gm 128 k t c nh s t 0 n 127, o
mt xu k t c th xem nh mt s trong h m c s 128. p dng phng php
chuyn i mt s trong h m bt k sang mt s trong h m c s 10, chng ta s
chuyn i c mt xu k t thnh mt s nguyn. Chng hn, xu NOTE c
chuyn thnh mt s nguyn nh sau:
NOTE N.1283 + O.1282 + T.128 + E =
= 78.1283 + 79.1282 + 84.128 + 69
Vn ny sinh vi cch chuyn i ny l, chng ta cn tnh cc lu tha ca 128,
vi cc xu k t tng i di, kt qu nhn c s l mt s nguyn cc ln vt qu
kh nng biu din ca my tnh.
Trong thc t, thng thng mt xu k t c to thnh t 26 ch ci v 10 ch
s, v mt vi k t khc. Do chng ta thay 128 bi 37 v tnh s nguyn ng vi xu
k t theo lut Horner. Chng hn, s nguyn ng vi xu k t NOTE c tnh nh
sau:
NOTE 78.373 + 79.372 + 84.37 + 69=
= ((78.37 + 79).37 +84).37 +69
Sau khi chuyn i xu k t thnh s nguyn bng phng php trn, chng ta s
p dng phng php chia tnh gi tr bm. Hm bm cc xu k t c ci t nh
sau:
unsigned int hash(const string &k, int K)
{
unsigned int value = 0;

31

for (int i=0; i< k.length(); i++)


value = 37 * value + k[i];
return value % K;
} [4]
nh gi thut ton: hm bm trn c th sinh ra gi tr bm b trng lp, tc l s
truy vn trn mt server c th l khng ging nhau. Tuy nhin, thi gian thc hin bi
ton ny l rt nhanh O(n) do vy khng lm tng thi gian ch ca client. Bn cnh ,
cng ging vi gii thut Round-robin, hm bm ch nh server tr li truy vn cho
client m khng quan tm n trng thi hin ti ca server (c t hay nhiu truy vn).
2.5.3. Gii thut xc nh tng s kt ni nh nht

Gii thut ny xc nh tng s kt ni hin ti trn cc database server, nu server


no c tng kt ni nh nht th server s c ch nh l tr li truy vn tip theo
ca client. Trong gii thut ny c quan tm n trng thi ca server. y l mt gii
thut ti u cn bng ti cho cc database server. Tuy nhin, thi gian thc hin bi
ton l lu hn hai gii thut trn, bi v n phi ghi li v tnh s kt ni n cc server
hin thi.

32

CHNG 3: BI TON CN BNG TI READ CHO H QUN TR


CSDL MYSQL VI MYSQL PROXY.
3.1. GII THIU V MYSQL PROXY V NGN NG KCH BN LUA
3.1.1. Gii thiu v mysql proxy
MySQL Proxy l mt ng dng giao tip qua mng s dng giao thc mng
MySQL v cung cp thng tin lin lc gia mt hoc nhiu MySQL server v mt hoc
nhiu client.
Trong cu hnh c bn nht, MySQL Proxy ch n gin l t n gia client v
server, chuyn cc truy vn t client n MySQL server v tr li nhng phn hi t
MySQL server cho client thch hp. Ngoi ra, MySQL Proxy cng c kh nng gim st
v thay i cc thng tin lin lc gia client v server bng cch s dng ngn ng kch
bn Lua. Bng cch chn cc truy vn t client, MySQL proxy c th sa thng tin cho
c truy vn ph hp vi nh dng m n s dng. MySQL Proxy c th b sung hay
loi b nhng thng tin khng cn thit, sau t truy vn vo danh sch cc truy vn
gi n cc server. Khi cc server tr kt qu v cho client, MySQL Proxy s ly cc
kt qu ny li, loi b hay b sung cc thng tin m cc truy vn tng ng vi kt qu
c b sung hay loi b thng tin trc khi gi ln server, tr li kt qu cho
client. V vy, cc client khng bit c s c mt ca MySQL Proxy.
Mt chc nng quan trng ca MySQL Proxy l n c cc truy vn t client gi
n v lc ra cc truy vn c gi n cc slave, lc ra cc truy vn ghi gi n
master. Nu c nhiu server th mc nh MySQL Proxy s s dng gii thut rounrobin chuyn cc truy vn n cc server ny.
Khi ch nh nhiu server theo cch ny th MySQL Proxy t ng xc nh cc server
ang ri hay bn. Nu server bn th n s ch nh server khc thay th [25].
MySQL Proxy c th chy trn nhiu nn tng khc nhau nh:
Linux (bao gm Red Hat, Fedora, Debian, OpenSuSe, Ubuntu)
Mac OS X
FreeBSD
IBM AIX

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

3.1.3. Nguyn l hot ng ca MySQL Proxy vi ngn ng kch bn Lua [25]


S tng tc chnh gia Proxy MySQL v MySQL server c cung cp bi vic
xc nh mt hoc nhiu hm trong ngn ng kch bn Lua. Mt s hm c h tr cho
cc s kin khc nhau v cc hot ng khc nhau trong th t giao tip gia client v
mt hoc nhiu MySQL server:
connect_server() : Hm ny c gi mi khi c mt kt ni n MySQL
Proxy t mt client. MySQL Proxy s dng chc nng ny trong qu trnh cn bng
ti chn cc kt ni t mt client v quyt nh my ch no s giao tip vi
client . Nu khng xc nh mt gii php c bit, th MySQL Proxy mc nh
s phn phi cc truy vn theo gii thut round-robin.
read_handshake (): Hm ny c gi l khi nhng thng tin bt tay u
tin c tr v bi server. Proxy c th nm bt nhng thng tin bt tay c tr
li ny v kim tra, b sung trc khi trao i din ra.
read_auth (): Hm ny c gi khi cc gi tin xc nhn (tn ngi dng,
mt khu, c s d liu mc nh) ca client gi n server xc thc.
read_auth_result (): Hm ny c gi l khi server tr v mt gi tin xc
nhn cho client nu r vic xc thc thnh cng.
read_query (): Hm ny c gi mi ln truy vn c gi bi client n
server. Proxy c th chnh sa v thao tc truy vn gc, bao gm thm cc cu truy
vn mi trc v sau cu lnh gc. Ngoi ra cng c th s dng hm ny tr v
thng tin trc tip n client. S dng hm ny, proxy c th lc cc truy vn khng
mong mun hoc cc truy vn vt qu gii hn c bit n.
read_query_result (): Hm ny c gi l mi khi mt kt qu c tr v
t server, proxy t ng xen cc truy vn vo hng i truy vn. Proxy th chnh
sa cc tp hp kt qu, hoc loi b hoc chn lc cc b kt qu.
Th t truy vn

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

connect_server() gi yu cu kt ni ny n server. Server nhn c yu cu


kt ni ca client s gi li thng ip l n c chp nhn yu cu ny hay khng.
Nu server khng chp nhn th client ngng kt ni, nu server chp nhn th thc
hin bc th hai
2. Client gi truy vn n server. MySQL Proxy s dng hm read_query()

c truy vn ny, n xc nh y l loi truy vn no gi n server thch


hp.
3. Sau khi server chp nhn truy vn t client, server gi kt qu li cho

client. Kt qu ny i qua MySQL Proxy, MySQP Proxy c kt qu bng cch s


dng hm read_query_result() v tr v kt qu ny cho client.
Cu trc ni b
Ngoi cc hm trn, mt s cu trc c xy dng cung cp vic kim sot ca
MySQL Proxy chuyn cc truy vn v tr v cc kt qu bng cch cung cp mt giao
din n gin ha cc yu t nh danh sch cc truy vn v nhm cc tp kt qu c
tr v.

36

3.2. GII THIU V GII PHP REPLICATION TRONG H QUN TR CSDL


MYSQL
Replication c s dng sao lu tt c cc cu lnh thc thi hoc tp d liu
thay i c to ra trn mt my ch (c gi l master server hay ngn gn l master)
n cc server khc, cc server ny c gi l slave server (hay ngn gn l slave).
i vi MySQLD th mt slave c duy nht mt master. Tuy nhin, mt master c
th c nhiu slave. Thm vo , mt master c th l mt slave ca mt master khc.
iu ny ph thuc vo cc m hnh replication c xp t nh th no.
Trong MySQL, qu trnh to bn sao l qu trnh mt chiu v khng ng b. Bi
v qu trnh ng b d liu khng xy ra trong thi gian thc. Khi c s thay i d liu
trn master th master ghi cc s kin vo file Binary log, v lp tc gi file Binary log
n slave ng b d liu vi slave. Master khng quan tm n trng thi ca bt k
slave no, n khng bit c slave c ng b d liu hay cha. iu ny lm
gim c trn gia master v cc slave do khng cn mt thi gian cc slave bin
nhn vic ng b d liu trn chng thnh cng hay cha gi n master.
3.2.1. Mt s file log c s dng trong MySQLD
Binary log
Binary log l mt file log c MySQLD s dng trong my ch master ghi li
nhng thay i v nhng cu lnh lm thay i c s d liu, t c th s dng n
phc hi c s d liu. Ni dung ca binary log cha bt k cc cu lnh no m xy ra
trong khi my ch ang sa cha c s d liu: CREATE, INSERT, UPDATE, DROP,
DELETE. Cc cu lnh khng lm thay i c s d liu nh cu lnh SELECT th
khng c ghi vo file Binary log. Tuy nhin, mt cu lnh khng lm thay i c s
d liu s c ghi vo Binary log, nu n l mt phn ca giao dch nh giao dch sa
d liu, bi v giao dch s c ghi vo file Binary log.
kch hot binary log, s dng ty chn : log-bin. File binary-log-index l mt
file text n gin m theo gii cc file Binary log hin hnh. Mc nh, n c tn l
mysql-bin.index. thit lp tn file v ng dn ca binary log v binary log index
file, lm theo ty chn sau:
# log-bin - /data/logs/binary/changelog

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

M hnh n gin: master slave

Hnh 14: M hnh replication n gin master slave trong MySQL


M hnh master salve bao gm mt master v mt slave. Tt c nhng thay i v
c s d liu trn master c gi n slave ng b d liu. Khi client truy sut n
c s d liu, vi nhng truy vn ghi th master s m nhn, tt c cc truy vn c s
c slave tr li. MySQL proxy chu trch nhim lc cc truy vn ghi hay c gi
n master hay slave.
M hnh master multi slave

Hnh 15: M hnh replication master multi slave trong MySQL


M hnh master multi slave l m hnh m mt master kt ni vi nhiu slave.
Khc vi m hnh master slave th m hnh ny master khng ch ng b d liu vi

39

mt slave m master phi gi tt c nhng d liu thay i trn n n ton b slave. Cc


slave c phn bit vi nhau bng cc server-id duy nht (server-id l mt s nguyn,
mi slave c duy nht mt server-id). server-id c ch nh trong file cu hnh ca
MySQLD. Trong m hnh ny th master s tr li tt c cc truy vn ghi t client v cc
truy vn c s c MySQL Proxy gi u n tt c slave.
M hnh master relay server

Hnh 16: M hnh master relay slave trong MySQL


Trong hai m hnh trn, master va m nhn cng vic l tr li cc truy vn ghi
t client va phi ghi cc s kin vo file Binary log ng b d liu n cc slave.
Khi s lng truy cp ca client ln, nhu cu thm cc slave l cn thit p ng c
tt c cc truy vn ca client. Nhng iu ny cng lm tng cng vic ca master ln rt
nhiu. gim ti cng vic cho master th mt relay slave c s dng. relay slave
khng chu trch nhim tr li cc truy vn t client. Khi c s thay i v c s d liu
trn master, thay v master phi ng b n tt c slave th master ch gi file Binary log
n relay server. Cng vic ng b d liu cho cc slave by gi c giao cho relay
server. Ngoi nhim v ng b d liu, relay slave c coi nh mt my ch hotstandby my ch ch nng. iu ny c ngha l, khi master gp s c, khng th tip
tc hot ng th relay slave c MySQL proxy ch nh ngay tc khc thay th cho
master. Lc ny, relay slave c coi nh l master mi. Tt c cc truy vn ghi t client
c MySQL proxy gi n master mi ny. Sau khi master c khc phc c s c, n
tip tc hot ng vi vai tr ca mnh v relay slave quay v v tr l hot-standby.

40

M hnh master master

Hnh 17: M hnh replication master master trong MySQL


M hnh ny c hai master, server A va l master ca server v ng thi cng l
slave ca server B, tng t cho server B. C hai my ch A v B nhn c cc truy vn
c v truy vn ghi. C hai my ch c kh nng nhn ng thi cc truy vn INSERT
mt hng vo mt bng vi mt trng l auto-increment. iu ny thc hin c l do
c hai my ch A v B u c cu hnh vi:
auto_increment_increment = integer
auto_increment_offset = integer
Gi tr ca auto_increment_increment xc nh khong tng gia cc gi tr
auto_increment v nn ging nhau mi my ch. Gi tr ny t nht phi l s my ch
trong mng vng nu mng vng c 2 my ch th gi tr ca
auto_increment_increment nh nht l 2. Gi tr ca auto_increment_offset nn khc
nhau gia cc my ch.
V d: thit lp gi tr ca auto_increment cho hai my ch A v B nh sau:
# Server A
auto_increment_increment = 10
auto_increment_offset = 1
# Server B
auto_increment_increment = 10
41

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

Trong v d ny, vi ty chn --auto-generate-sql mysqlslap t ng sinh ra lc


, bng v d liu m khng phi l chng ta ch nh. Mc nh, lc c sinh ra
c tn l mysqlslap, vi mt bng tn l t1(id serial,intcol1 INT(32),charcol1
VARCHAR(128)) v t ng chn d liu vo bng. Ty chn --auto-generate-sql-sqlload-type c s dng sinh ra kiu truy vn nhm kim tra ti, vi cc gi tr l:
write, read, mixed, update v key. Trong trng hp ny, kiu truy vn kim tra ti l
write. S client c sinh ra kt ni n my ch l 500, c lp li 50 ln v s
lng truy vn sinh ra cho mi client kt ni n l 100 [27].
3.4. PHT BIU BI TON
Bi ton cn bng ti c s d liu MySQL s dng MySQL Proxy c pht biu
nh sau:
Vi N l s lng truy cp ca ngi dng n server, K l s lng slave server
c Replication t mt master server v mt MySQL Proxy. S dng cc m hnh
Replication hy cu hnh MySQL Proxy cho tng m hnh m MySQL Proxy c th
thc hin cn bng ti cho K slave server v master server, sau nh gi hiu nng v
ti ca tng server trn mi m hnh v a ra m hnh tt nht.
43

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

Hnh 18: M hnh master-slave replication vi MySQL Proxy

3.4.2. M hnh MySQL Proxy mt master multi slave


Trong m hnh ny, mt master c kt ni vi nhiu slave. Proxy c t gia
client vi cc server. Master qun l trc tip cc slave, khi c s thay i d liu trn

44

master th n s ng b d liu n tt c cc 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
theo gii thut round-robin v cc truy vn ghi c gi n master

Hnh 19: M hnh master multi salve replication vi MySQL Proxy

45

CHNG 4: THC NGHIM V NH GI


Da vo m hnh xut chng 3, ti tin hnh thc nghim nh gi kh
nng cn bng ti cho h qun tr CSDL MySQL vi MySQL proxy.
4.1. MI TRNG THC NGHIM
Mi trng thc nghim cn t nht ba my tnh: trong hai hoc ba my l
MySQL server mt master v mt slave, mt my l MySQL Proxy, client c th mt
trong ba my. Ba my c kt ni mng vi nhau sao cho cc my c th giao tip
c vi nhau. Trong kha lun, ti s dng mng LAN kt ni ba my, mi my c
mt a ch IP c nh v ring bit.
Bng 1: Cu hnh cc my
Tn my

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

4.2. TIN HNH THC NGHIM


4.2.1. Ci t MySQL Proxy
MySQL Proxy c th ci t theo ba cch khc nhau:
-

Ci t MySQL Proxy t phn phi nh phn

Ci t MySQL Proxy t m ngun (nu mun ci t trn cc mi trng m


khng c h tr bi phn phi nh phn).

Ci t t kho Bazaar: phin bn mi nht ca MySQL Proxy c sn trong kho


Bazaar ny, y l cch ci t tt nht c th cp nht phin bn mi nht
cho MySQL Proxy.
46

Trong kha lun, ti ci t MySQL Proxy theo cch th ba: ci t t kho


Bazaar. ci t MySQL Proxy theo cch ny th cn phi lm theo cc bc sau:
Bc 1: Ci t cc gi phn mm sau:
bzr 1.10.0 tr ln
autoconf 2.56 tr ln
automake 1.10 tr ln
libevent 1.3 tr ln
lua 5.1 tr ln
glib2 2.4.0 tr ln
pkg-config
mysql 5.0 tr ln
Ngoi ra, ty theo tng h iu hnh m c th cn phi ci cc gi sau: lua-devel,
glib2-devel, mysql-devel, libffi46, libffi46-devel, libreadline6, readline5-devel
Bc 2: Bin dch cc gi phn mm:
-

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

# bzr branch lp:mysql-proxy


# tar xvfz mysql-proxy-0.8.2.tar.gz
# cd mysql-proxy-0.8.2/
# sh ./autogen.sh
# ./configure
# make
# make install
# /sbin/ldconfig
Bc 3: Chy th MySQL Proxy
# mysql-proxy V
mysql-proxy 0.9.0
chassis: mysql-proxy 0.9.0
glib2: 2.30.2
libevent: 2.0.10-stable
LUA: Lua 5.1.4

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;

mysql> UNLOCK TABLES;


49

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

b) Gii php replication master multi slave


Trong gii php ny, cc bc thc hin cu hnh master v cc slave cng tng
t nh trong m hnh trn. Tuy nhin, nu c bao nhiu slave th trn master phi to ra
by nhiu ngi dng replication cho cc slave, v mi slave phi c mt server-id ring
bit.
4.2.3. Kch bn Lua
MySQL Proxy hot ng nh ngn ng kch bn Lua, mi hot ng ca MySQL
Proxy nh kt ni n my ch MySQL, nhn cc truy vn t client, nhn truy vn tr v
t my ch MySQL, lc ra cc truy vn c v ghi, c thc hin do cc kch bn ca
ngn ng Lua.
Kch bn quan trng nht ca MySQL Proxy trong bi ton cn bng ti l readwrite-splitting.lua lc ra cc truy vn c/ghi c thc hin trong hm
read_query(). Cc truy vn c SELECT gi n my ch slave, cc truy vn ghi cn
li CREATE, INSERT, UPDATE, DROP, DELETE gi v master. Sau y l trch
on trong kch bn read-write-splitting.lua:

proxy.queries:append(1, packet, { resultset_is_needed = true })


-- read/write splitting
-- send all non-transactional SELECTs to a slave
if not is_in_transaction and
cmd.type == proxy.COM_QUERY then

51

tokens = tokens or assert(tokenizer.tokenize(cmd.query))


local stmt = tokenizer.first_stmt_token(tokens)
if stmt.token_name == "TK_SQL_SELECT" then
is_in_select_calc_found_rows = false
local is_insert_id = false
for i = 1, #tokens do
local token = tokens[i]
if not is_in_select_calc_found_rows
and (token.token_name ==
"TK_SQL_SQL_CALC_FOUND_ROWS"
or (token.token_name == "TK_FUNCTION"
and token.text:upper() == "FOUND_ROWS"))
then
is_in_select_calc_found_rows = true
elseif not is_insert_id and token.token_name ==
"TK_FUNCTION"
and token.text:upper() ==
"LAST_INSERT_ID" then
is_insert_id = true
elseif not is_insert_id and token.token_name ==
"TK_LITERAL" then
local utext = token.text:upper()
if utext == "@@INSERT_ID" then
is_insert_id = true
end

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

cc client kt ni n cc my ch ny c MySQL Proxy ch nh theo thut ton cn


bng ti.
--admin-lua-script=file_name l ty chn xc nh file kch bn Lua s dng cho
modul qun tr proxy.
--proxy-lua-script=file_name l ty chn xc nh file kch bn Lua c np vo
hnh ng ca MySQL Proxy. Trong trng hp ny, file kch bn c s dng cn
bng ti n cc my ch MySQL Proxy: read-write-splitting.lua.
b) Client kt ni n MySQL Proxy
Chy lnh mysqlslap vi cc tham s nh di y:
# mysqlslap --auto-generate-sql \
> --auto-generate-sql-load-type=read \
> --host=10.10.17.100 --port=4040 \
> --concurrency=100 \
> --number-of-queries=100
Trong qu trnh kim tra, cc ty chn --concurrency, --number-of-queries c gi tr
tng dn.
Khi kt ni n my ch MySQL, client khng bit s c mt ca MySQL proxy.
Client ch bit n mt a ch IP duy nht l a ch IP ca MySQL Proxy
10.10.17.100 v cng lng nghe l 4040. Client ngh rng my ch MySQL ang trc
tip lng nghe truy vn ca mnh.
4.3. PHN TCH, NH GI KT QU THC NGHIM
4.3.1. Client gi truy vn trc tip n my ch MySQL
Trong m hnh thc nghim ny, ch c duy nht mt MySQL server. Client trc
tip gi truy vn n server. Ln lt tng s truy vn v s client kt ni n server, thu
c kt qu nh sau:

55

Bng 2: Kt qu thi gian chy cc truy vn trong m hnh ch c mt MySQL server


--number-of-queries

--concurrency

Average number of seconds to run queries

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

4.3.2. M hnh MySQL Proxy mt master mt slave


M hnh ny bao gm mt gii php replication vi mt master v mt slave.
My ch master c a ch IP v cng l 10.10.17.40:3306.
My ch slave c a ch IP v cng l: 10.10.17.5:3306
MySQL Proxy c a ch IP l 10.10.17.100, lng nghe trn cng 4040.
S dng my c a ch IP l 10.10.17.40 lm client kt ni n cc my ch.
a) Kt qu chy ca MySQL Proxy:

56

Giai on 1 ca qu trnh cng c mysqlslap chy:


T ng sinh ra lc mysqlslap,
Bng t1 vi ba trng l: id serial, intcol1 INT(32),charcol1 VARCHAR(128)
Sinh d liu ngu nhin v chn vo bng t1
Ton b cc truy vn t client gi n c MySQL Proxy gi v master:
sending to backend : 10.10.17.40:3306
is_slave : false
# mysql-proxy --admin-username=root \
> --admin-password=giang \
> --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
2012-05-15 16:47:32: [global] (*) mysql-proxy 0.9.0 started
[connect_server] 10.10.17.40:36443
[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
[read_query] 10.10.17.40:36443

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

query = INSERT INTO t1 VALUES


(NULL,1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekb
WtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw
1KQ1lT4zg9rdxBL')
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_result) staying on the same backend
in_trans : false
in_calc_found : false
have_insert_id : true

60

Giai on 2 ca chy cng c mysqlslap: t ng sinh ra cc truy vn c:


query = SELECT intcol1,charcol1 FROM t1
kim tra ti ca hai my ch master v slave.
Ton b cc truy vn ny c gi v slave:
sending to backend : 10.10.17.5:3306
is_slave : true
[read_query] 10.10.17.40:36471
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:36471
current backend = 0
client default db = mysqlslap
client username = root
(QUIT) current backend = 0
[disconnect_client] 10.10.17.40:36471
[read_query] 10.10.17.40:36472

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

Giai on 3 ca qu trnh chy cng c mysqlslap:


mysqlslap lm sch qu trnh kim tra bng vic xa d liu v lc c to ra
giai on 1 khng lm nh hng n c s d liu sn c ca my ch:
query = DROP SCHEMA IF EXISTS `mysqlslap`
sending to backend : 10.10.17.40:3306
is_slave : false
Truy vn ny c gi v master.
ng thi mysqlslap ngt kt ni n my ch.
[read_query] 10.10.17.40:47303
current backend = 0
client default db = mysqlslap
client username = root
(QUIT) current backend = 0
[read_query] 10.10.17.40:40536
current backend = 0
client default db = mysqlslap
client username = root
query = DROP SCHEMA IF EXISTS `mysqlslap`
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

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

b) Kt qu thi gian tr v t cng c mysqlslap


Kt qu thc nghim thi gian chy cc truy vn trong m hnh ny nh bng sau:
Bng 3: Kt qu thi gian chy cc truy vn trong m hnh MySQL Proxy-master-slave
--number-of-queries

--concurrency

Average number of seconds to run queries

100

100

3.691

600

600

9.348

1500

700

9.599

2000

800

10.470

4.3.3. M hnh MySQL Proxy mt master hai slave


M hnh ny bao gm MySQL Proxy v mt gii php replication vi mt master
v hai slave.
My ch master c a ch IP v cng l 10.10.17.40:3306.
My ch slave th nht c a ch IP v cng l: 10.10.17.5:3306
My ch slave th hai c a ch IP v cng l: 10.10.17.100:3306
MySQL Proxy c a ch IP l 10.10.17.100, lng nghe trn cng 4040.
64

S dng my c a ch IP l 10.10.17.40 lm client kt ni n cc my ch.


a) Kt qu chy ca MySQL Proxy:
Kt qu chy ca MySQL Proxy trong m hnh ny hai giai on 1 v giai on 3
ca qu trnh chy cng c mysqlslap c kt qu tng t trong giai on 1 v giai on
3 m hnh MySQL Proxy mt master mt slave:
Giai on 1 ca qu trnh chy cng c mysqlslap
# mysql-proxy --admin-username=root \
> --admin-password=giang \
> --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 \
> --proxy-read-only-backend-addresses=10.10.17.100:3306 \
> --admin-lua-script=/home/giangvit/workspace/proxy/admin-script.lua \
> --proxy-lua-script=/home/giangvit/workspace/mysqlProxy/rw4.lua
2012-05-15 16:47:32: [global] (*) mysql-proxy 0.9.0 started

[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

client username = root


query = INSERT INTO t1 VALUES
(NULL,1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekb
WtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw
1KQ1lT4zg9rdxBL')
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_result) staying on the same backend
in_trans : false
in_calc_found : false
have_insert_id : true

68

Giai on 3 ca qu trnh chy cng c mysqlslap:


[read_query] 10.10.17.40:47303
current backend = 0
client default db = mysqlslap
client username = root
(QUIT) current backend = 0
[read_query] 10.10.17.40:40536
current backend = 0
client default db = mysqlslap
client username = root
query = DROP SCHEMA IF EXISTS `mysqlslap`
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
[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

69

S khc nhau chnh l giai on 2 ca qu trnh chy cng c mysqlslap:


M hnh trc, cc cu lnh SELECT ch c gi n mt my ch slave. Cn
trong m hnh ny, cc cu lnh SELECT c MySQL Proxy gi u v hai slave theo
thut ton round-robin:
sending to backend : 10.10.17.5:3306
is_slave : true
v
sending to backend : 10.10.17.100:3306
is_slave : true
Giai on 2:
[read_query] 10.10.17.40:38844
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:38850
current backend = 0

70

client default db = mysqlslap


client username = root
query = SELECT intcol1,charcol1 FROM t1
sending to backend : 10.10.17.100: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:38864
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
[disconnect_client] 10.10.17.40:38745
[read_query] 10.10.17.40:38856
current backend = 0

71

client default db = mysqlslap


client username = root
query = SELECT intcol1,charcol1 FROM t1
sending to backend : 10.10.17.100:3306
is_slave : true
server default db: mysqlslap
server username : root
in_trans : false
in_calc_found : false
COM_QUERY : true

b) Kt qu thi gian tr v t cng c mysqlslap


Kt qu thc nghim thi gian chy cc truy vn trong m hnh ny nh bng sau:
Bng 4: Kt qu thi gian chy cc truy vn trong m hnh MySQL Proxy-master-multi
slave
--number-of-queries

--concurrency

Average number of seconds to run queries

100

100

2.550

600

600

9.170

1500

700

9.256

2000

800

9.983

c) Hiu nng ca my ch master

72

Hnh 211: Hiu nng CPU ca master

Hnh 222: Hiu nng v Processes

73

Hnh 233: Hiu nng trung bnh ti

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

TI LIU THAM KHO


Ting Vit
[1] V Duy Pho, Cn bng ti cho cc h Webserver ln v m bo Scalability,
Kha lun tt nghip, i hc Bch Khoa H Ni, 2006
[2] inh Th Thu Dung, Nghin cu, xy dng v phng chng Botnet, Kha lun
tt nghip, i hc Cng ngh - i hc Quc gia H Ni, 2012
[3] Thanh An, Tm hiu MySQL Cluster v ng dng, Kha lun tt nghip, i
hc Cng ngh - i hc Quc gia H Ni, 2012
[4] inh Mnh Tng, Cu trc d liu v gii thut, Khoa Cng ngh Thng tin,
i hc Cng ngh - i hc Quc gia H Ni, tr. 246-247
Ting Anh
[5] Gregory Smith, PostgreSQL 9.0 High Performance, 2010, pp. 370-393
[6] Sheeri Cabral, Keith Murphy, MySQL Administrators Bible, Wiley Publishing,
Inc., Indianapolis, Indiana, 2009, pp.
[7] Charles Bell, Mats Kindahl, and Lars Thalmann, MySQL High Availability,
2010, OReilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA
95472, pp. 12-16
Trang web
[8] http://en.wikipedia.org/wiki/Web_server
[9] http://www.thanhnien.com.vn/pages/20111231/google-va-facebook-duoc-truycap-nhieu-nhat-nam-2011.aspx
[9] http://www.mysql.com/why-mysql/
[11] http://www.postgresql.org/about/
[12] http://pgcluster.projects.postgresql.org/feature.html
[13] http://bucardo.org/wiki/Bucardo
[14] http://ossipedia.ipa.go.jp/capacity/EV0612230251/
[15] http://www.pgpool.net/docs/latest/doc/pgpool-en.html

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

You might also like