Professional Documents
Culture Documents
Giới Thiệu MySQL Replication
Giới Thiệu MySQL Replication
kipalog.com/posts/Gioi-thieu-MySQL-Replication
1. Gii thiu
Right tool for right job. Trc tin phi hiu l MySQL Replication khng phi l gii php gii quyt mi bi ton v qu ti h thng c s d liu. m rng mt h thng ta c hai
phng php m rng l scale up v scale out. Bt u vi 1 my ch th hai phng php trn c din gii nh sau:
Scale up c ngha l vi mt my ch ta lm cch no n c th phc v nhiu hn s lng kt ni, truy vn. Ngha l gi tr 1/(s kt ni phc v) cng nh th cng tt. t
c mc ch ny th c 2 phng php:
Tng phn cng ln cho my ch. Ngha l vi CPU l 4 core, RAM l 8 GB phc v c 500 truy vn th gi ta tng CPU ln 24 core, RAM tng ln 32GB -> my ch c th
phc v c s lng kt ni truy vn nhiu hn.
Optimize ng dng, cu truy vn. V d vi cu truy vn ly d liu tn 5s ly c d liu, sau mi tr li ti nguyn cho h thng phc v cc truy vn khc. My ch c
th ng thi phc v 500 truy vn dng nh vy th nu ta ti u truy vn ly d liu ch tn 1s => My ch c th phc v ng thi nhiu truy vn hn
Scale out l gii php tng s lng server v dng cc gii php load-balacer phn phi truy vn ra nhiu server. V d bn c 1 server c kh nng phc v 500 truy vn. Nu ta
dng thm 5 server na c cu hnh tng t, t thm mt LB pha trc phn phi th c kh nng h thng c th phc v c 5x500 truy vn ng thi.
MySQL Replication l mt gii php scale out (tng s lng instance MySQL) nhng khng phi bi ton no cng dng c. Cc bi ton m MySQL Replication s gii quyt tt:
Scale Read
Data Report
Real time backup
Vi scale read ta s ch c mt Master instance phc v cho vic c/ghi d liu. C th c mt hoc nhiu Slave instance ch phc v cho vic c d liu
Mt s ng dng write nhiu (thng mi in t) cng c s dng MySQL Replication scale out h thng
Vic setup mt my ch lm data report (application cng s khng kt ni ti server ny) lm gim thiu 2 ri ro trn
2. Hot ng nh th no?
2.1 Mt s m hnh
Vi c hai m hnh ta lun ch c 1 Master database phc v cho Write d liu, c th c mt hoc nhiu Slave database. Ty tng m hnh ta c th cu hnh mi web node connect vo
mt Slave DB tng ng hoc c th dng mt LB t trc cm Slave LB t ng phn phi connection vo tng Slave DB theo thut ton ca LB
1/6
2.2 Cch hot ng
Trn Master:
Cc kt ni t web app ti Master DB s m mt Session_Thread khi c nhu cu ghi d liu. Session_Thread s ghi cc statement SQL vo mt file binlog (v d vi format
ca binlog l statement-based hoc mix). Binlog c lu tr trong data_dir (cu hnh my.cnf) v c th c cu hnh cc thng s nh kch thc ti a bao nhiu, lu li
trn server bao nhiu ngy.
Master DB s m mt Dump_Thread v gi binlog ti cho I/O_Thread mi khi I/O_Thread t Slave DB yu cu d liu
Trn Slave:
Trn mi Slave DB s m mt I/O_Thread kt ni ti Master DB thng qua network, giao thc TCP (vi MySQL 5.5 replication ch h tr Single_Thread nn mi Slave DB s
ch m duy nht mt kt ni ti Master DB, cc phin bn sau 5.6, 5.7 h tr m ng thi nhiu kt ni hn) yu cu binlog.
Sau khi Dump_Thread gi binlog ti I/O_Thead, I/O_Thread s c nhim v c binlog ny v ghi vo relaylog.
ng thi trn Slave s m mt SQL_Thread, SQL_Thread c nhim v c cc event t relaylog v apply cc event vo Slave => qu trnh replication hon thnh.
V logic mi Slave DB s ch nhn d liu t Master DB, mi hnh ng cp nht d liu BT BUC phi c thc hin trn Master. V nguyn tc nu ghi d liu trc tip ln Slave
DB => hng replication. Nhng thc cht ta hon ton c th ghi d liu trn Slave min sao khi Slave c binlog v apply khng ng g ti nhng trng d liu m ta mi ghi vo th
s khng b li (mc ny s ni thm cc phn sau)
Vi MySQL 5.5 th mi slave s ch c mt slave_thread connect ti Master, tuy nhin t phin bn 5.6 chng ta c th cu hnh nhiu slave_thread vic apply bin log ti cc
slave nhanh hn.
3. Hng dn ci t v cu hnh
M hnh:
Trn Master DB
Cu hnh my.cnf
event-scheduler = on
2/6
bind-address = 172.17.0.1
server-id = 1
log-bin
binlog-format=row
binlog-do-db=dwh_prod
binlog-ignore-db=mysql
binlog-ignore-db=test
sync_binlog=0
expire_logs_days=2
To user replication
SHOW TABLES;
Trn Slave DB
Cu hnh my.cnf
event_scheduler=off
bind-address = 172.17.0.2
server-id=2
log-bin
binlog-format=row
binlog-do-db=dwh_prod
binlog-ignore-db=mysql
binlog-ignore-db=test
transaction-isolation=read-committed
sync_binlog=0
expire_logs_days=2
Nguyn tc khi to replication l phi LOCK tt c cc table trn Master DB, d liu khng thay i, sau xc nh binlog v position, 2 thng s dng cu hnh trn Slave xc
nh on d liu bt u ng b
Trn Master DB
+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+
| m01-bin.000001 | 827 | dwh_prod | mysql,test |
+
Gi tr cn quan tm l
m01-bin.000001
827
Sau ta s dump d liu t Master DB v y qua Slave DB (sau khi dump xong c th UNLOCK TABLES; Master DB c th hot ng li).
Trn Slave
3/6
> SHOW SLAVE STATUS\G
Cc thng s cn quan tm l
Last_Error: 0
Last_SQL_Error
Seconds_Behind_Master: 0
Hai thng s u tin l li khi Slave DB thc thi cc event c t relay log. Thng s Seconds_Behind_Master cho ta bit d liu ca Slave DB ang b tr (delay, lag) bao nhiu giy
so vi Master DB. Cc phn sau ta s ni k hn v replication lag ny.
Trn Master
Trn Slave
Gi gi s ta s to mt table vi tn l tb00 trn Slave v kim tra xem c ng l khi ghi d liu ln Slave DB th replication c b hng hay khng.
4/6
+
| Tables_in_dwh_prod |
+
| tb00 |
| tb1 |
| tb2 |
| tb3 |
| tb4 |
+
5 rows in set (0.00 sec)
=> Nh ta thy r rng l d liu trn Slave v Master khc nhau (Slave c tb00 nhng Master th khng) nhng trng thi ca replication vn hon ton n.
Gi chng ta s th thm mt trng hp na l trn Master ta s to mt table tn l tb6 kim tra xem chuyn g s xy ra
=> bng tb6 c ng b t Master qua, kim tra trng thi replication
=> Mi th vn n, ngha l d ta c ghi d liu vo Slave, nhng nu Master thc thi cc cu truy vn khng ng g ti d liu c ghi mi Slave th trng thi ca replication vn
n.
Gi ta s thc hin thm mt th nghim na l trn Master ta to mt table tn l tb00, trng vi table to lc trc Slave pha trn v kim tra li trng thi ca replication
5/6
Last_SQL_Error: Error 'Table 'tb00' already exists' on query. Default database: 'dwh_prod'. Query: 'CREATE TABLE tb00 (
=> nh ta thy h thng bo li do trn Slave khng th thc thi hnh ng to table tb00 t Master y xung (do table ny tn ti trc )
Kt Lun: Vic ghi d liu vo Slave l c th thc hin c, nhng s gy ra ri ro hng replication mt lc no . Nht l cc cu truy vn dng SELECT ... UPDATE. Tt nht l
nn trnh ghi d liu vo Slave
Vn ca replication lag nh hng ti cc truy vn va write d liu xung l read d liu ln lin. V d
Mt trang thng mi in t c tnh nng add vo gi hng mt sn phm. Sau khi sn phm c add vo gi hng s tr s lng trong tn kho. 2 user thc hin mua sn phm
(sn phm c s lng tn kho l 1). C 2 u thy sn phm trn website hin th trng thi CN HNG. Khi mt user mua sn phm v thanh ton thnh cng. Do tr d
liu (v d 5s) nn d liu cha c cp nht tn kho xung Slave l sn phm ht hng. Khi user add gi hng v thanh ton th lc ny d liu mi cp nht v tr v m li l
thanh ton khng thnh cng do s lng tn kho khng p ng => nh hng ti tri nghim ca user trn h thng.
Thng vi nhng trng hp ny (truy vn write xong l read lin) th nn s dng cu hnh truy vn trn Master (y l l do Master c th va write va read ch khng nht thit l
ch c write)
Vi m hnh 1 nhc im l nu MySQL instance b delay qu lu, server qu ti hoc ri ro nht l instace b down th ta khng c cch no check hoc remove instance ra
c.
Vi m hnh 2 nhc im l ta mt thm 1 layer (haproxy) na mi c th kt ni ti MySQL (tn thi gian, x l nhiu lp) nhng li im l c th cu hnh healthchk, hoc remove
instance theo mt s iu kin.
5. Troubleshoot
6. Mt s lu
Vi a cng
Nn s dng RAID 5, 6, 10
Nn s dng SSD (Enterprise th cng tt) IOPS cng cao cng tt
a cng nn c dung lng t nht l x2 ln dung lng ca CSDL (s cn thit trong trng hp dump, backup d liu fix replication)
Khc vi cc ng dng khc nh web, static (thng CPU khng cn nhiu core, a cng khng cn nhiu v nhanh), my ch CSDL s cn nhiu cc thng s trn
Ngoi ra cc yu t v a cng (SSD, tc c ghi) cng nh hng nhiu n vic import hoc apply cc binlog t Master
Di y l mt m t thc t:
6/6