Wednesday, October 18, 2006

MySQL Master-Master Replication

Юунд хэрэглэх вэ?
Интернэт-д өдөрт л 2 сая орчим вебсайт шинээр мэндэлж байдаг гэж байгаа. Мөн том том мэдээллийн болон олон нийтийн сайтуудад нэр дор хэдэн мянган хэрэглэгчид ордог. Жишээ нь: Yahoo.com вебсайтаар өдөрт 2 сая гаруй хэрэглэгч үйлчилүүлдэг гэж хаа нэгтээгээс уншиж байсан санагдана. Тэгэхлээр ийм их ачаалал даахын тулд вебсерверүүдийг дэлхийгээр нэг тараан байрлуулаад тухайн хэрэглэгчид хамгийн ойр орших серверээс үйлчилгээг үзүүлдэг. Yahoo -д ийм 400 гаруй FreeBSD сервер байдаг гэж g0mb0 (Микомын инженер Ганболд) ахын нийтлэлээс харж байсан шүү.

За манай Монголд маань ч интернэт үйлчилгээ үзүүлдэг томоохон сайтууд олноор бий болох болжээ. Мөн Монголдоо хостинг хийгдсэн сайтууд руу гадаадаас ороход удаан ачаалдаг, эсрэгээр гадаадад хостинг хийгдсэн сайт руу Монголоос ороход удаад байдаг. Манай интернэт медиа үйлчилгээ үзүүлдэг on-air.mn сайтад ч яг ийм шаардлага гараад удаж байгаа юм.
Үүнийг шийдвэрлэхэд энэ мэдээллийн баазыг хувилах буюу mirror хийж болох юм.
Монгол дахь сервер нь дотоодын хэрэглэгчдэд, гадаад дахь сервер нь гадаадаас хандаж буй хэрэглэгчдэд үйлчилгээг үзүүлэх ба уг хоёр сервер өөрсдийн мэдээллийн тухайн агшин бүрт солилцож байхад л боллоо.

Үүнийг яаж хийх талаар энд товч бичиглэе!

MySQL Master-Master Replication

Эхлээд мэдээж Mysql сервер таны 2 сервер тус бүр дээр суусан байх ёстой.

1. Server Names

Master 1/Slave 2 ip: 202.131.2.131

Master 2/Slave 1 ip : 11.11.11.11

гэж бодъё.

2. Setup Master 1

Master1 серверийн /etc/my.cnf файлд дараах өөрчлөлтийг хийнэ.
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1

log-bin
binlog-do-db= # replication хийгдэх баазын нэр
binlog-ignore-db=mysql # хийгдэхгүй баазын нэрс
binlog-ignore-db=test

server-id=1

[mysql.server]
user=mysql
basedir=/var/lib


[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


3. Create replication slave1 user

Master1 серверийн mysql сервис руу ороод дараах коммандыг өгнө:

mysql> grant replication slave on *.* to 'replication'@11.11.11.11 identified by 'slave';

Mysql сервисыг дахин ачаална:

/etc/init.d/mysqld restart

4. Setup slave1 replication

Slave1 буюу Master2 серверийн /etc/my.cnf файлд дараах өөрчлөлтийг хийнэ:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1

server-id=2

master-host = 11.11.11.11
master-user = replication
master-password = slave
master-port = 3306

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

5. Starting slave1 replication

Slave1 буюу Master1 серверийн Mysql сервисыг дахин ачаална:

/etc/init.d/mysqld restart

Slave replication-ыг эхлүүлнэ:

mysql> start slave;
mysql> show slave status\G;

Үүний дараа дараахтай адил үр дүн дэлгэцэнд гарна:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 202.131.2.131
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: MASTERMYSQL01-bin.000009
Read_Master_Log_Pos: 4
Relay_Log_File: MASTERMYSQL02-relay-bin.000015
Relay_Log_Pos: 3630
Relay_Master_Log_File: MASTERMYSQL01-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 3630
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 1519187

1 row in set (0.00 sec)

Энд Slave_IO_Running болон Slave_SQL_Running гэсний ард Yes гэсэн байх ёстой.

6. Checking Master replication

Master1 сервер дээр дараах коммандыг өгнө:

mysql> show master status;
+------------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------+----------+--------------+------------------+
|MysqlMYSQL01-bin.000008 | 410 | adam | |
+------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Үүний дараа дээрхтэй адил үр дүн дэлгэц дээр харагдах ёстой.

7. Create Master2 Replication

Slave1 буюу Master2 серверийн /etc/my.cnf файлд дараах өөрчлөлтийг хийнэ:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
server-id=2

master-host = 11.11.11.11
master-user = replication
master-password = slave
master-port = 3306

log-bin
binlog-do-db= # replication хийгдэх баазын нэр

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

8. Create replication slave2

Slave1 буюу Master2 серверийн Mysql сервист дараах коммандыг өгнө:

mysql> grant replication slave on *.* to 'replication'@202.131.2.131 identified by 'slave2';

9. Setup Slave2 Replication

Slave2 буюу Master1 серверийн /etc/my.cnf файлд дараах өөрчлөлтыг хийнэ:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

log-bin
binlog-do-db= # replication хийгдэх баазын нэр
binlog-ignore-db=mysql # хийгдэхгүй баазын нэрс
binlog-ignore-db=test

server-id=1


# information for becoming slave.
master-host = 202.131.2.131
master-user = replication
master-password = slave2
master-port = 3306

[mysql.server]user=mysqlbasedir=/var/lib

10. Starting Slave2 Replication

Master1, Master2 серверүүдийн mysql сервисүүдийг дахин эхлүүлнэ.

Master1 сервер дээр дараах коммандыг өгнө:

mysql> start slave;

Master2 сервер дээр:

mysql > show master status;

Master1 сервер дээр:

mysql> show slave status\G;

гэсэн комманд өгсөний дараа Master1 дээр

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 11.11.11.11
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: Mysql1MYSQL02-bin.000008
Read_Master_Log_Pos: 410
Relay_Log_File: Mysql1MYSQL01-relay-bin.000008
Relay_Log_Pos: 445
Relay_Master_Log_File: Mysql1MYSQL02-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 410
Relay_Log_Space: 445
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 103799
1 row in set (0.00 sec)

ERROR:
No query specified

гэсэн үр дүн дэлгэц дээр харагдах болно.



Бичлэг таалагдсан бол сурталчилгаан дээр +1 дарж тус хүргээрэй ;)

1 Comment:

Anonymous said...

hey tnx shuu replication nii talar bichsend gehde redhat AS4 der ooriinh ni mysql uu esbel tar aar suulgadag mysql der ni replication hiideg uu bi tar aar suudag aar ni hiih geed boloogui

blogger templates | Make Money Online