การทำ MySQL Replication

สภาพแวดล้อมในการติดตั้ง
เครื่อง Master Server
ชื่อ mysql-a1.rujirapong.com
IP 192.168.15.18
เครื่อง Slave Server
ชื่อ mysql-a2.rujirapong.com
IP 192.168.15.32
เชื่อมต่อดังภาพ

เตรียมระบบทั้ง 2 เครื่อง
ติดตั้ง CentOS 5.5 ทั้ง 2 เครื่อง
ทำการอับเกรด MySQL เป็น version 5.1 ดังนี้
ตรวจสอบว่า หลังการติดตั้ง CentOS 5.5 มี MySQL ติดตั้งอยู่เดิม 
rpm -qa | grep -i ‘^mysql-‘
หากพบ version เก่าให้ลบออกโดย
rpm –nodeps -ev <package name>

ดาวน์โหลดและติดตั้ง MySQL 5.1 จากเว็บไซต์ www.mysql.com
โดยดาวน์โหลดและติดตั้ง 3 Package นี้
MySQL-shared-compat-5.1.58-1.rhel5
MySQL-server-community-5.1.58-1.rhel5
MySQL-client-community-5.1.58-1.rhel5
สำหรับเครื่องที่มีข้อมูล Database อยู่เดิมแล้ว จะต้อง dump database import ข้อมูลให้ตรงกันทั้ง 2 เครื่องก่อน

 เริ่มต้น
เครื่อง Master Server mysql-a1.rujirapong.com
1. แก้ไข Configure 
/etc/init.d/mysql stop
vi /etc/my.cnf
เขียนเข้าไป
[mysqld]
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1 
/etc/init.d/mysql start 
2. ทำการ Add User Replication
mysql -uroot -p

mysql> CREATE USER ‘repl’@’192.168.15.32′ IDENTIFIED BY ‘slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.15.32′;


ความหมายคือ add user ชื่อ repl และอนุญาติ Access จากกมายเลข IP 192.168.15.32
3. หาจุด Checkpoint เพื่อ Replication และดู Master Status
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

สมมุติโชว์
+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 |      356 |              |                  |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES;
เก็บข้อมูลตัวอักษรสีแดงไว้ เพื่อนำไปใส่ใน Configure ของ Slave Server

เครื่อง Slave Server ชื่อ mysql-a2.rujirapong.com
1. แก้ MySQL Configure
/etc/init.d/mysql stop
vi /etc/my.cnf
แก้ไขดังนี้

[mysqld]
server-id=2
/etc/init.d/mysql start
2. Change Master
mysql -uroot -p
ใส่ค่าดังนี้
mysql> CHANGE MASTER TO
  MASTER_HOST=’192.168.15.18′,
  MASTER_USER=’repl’,
  MASTER_PASSWORD=’slavepass’,
  MASTER_PORT=3306,
  MASTER_LOG_FILE=’mysql-bin.000001‘,  # ค่าที่ได้จาก Master Server
  MASTER_LOG_POS=356,  # ค่าที่ได้จาก Master Server
  MASTER_CONNECT_RETRY=10; 


3. เริ่ม Replicate
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS \G

สรุป
หากทุกอย่างถูกต้อง ที่เครื่อง Master มีการสร้าง database หรือมีการอับเดทข้อมูลอะไรก็ตาม ข้อมูลจะถูก Replicate มาที่ Slave Server อัตโนมัติ แต่ข้อจำกัดคือ การ Replication ของ MySQL จะเป็นแบบ 1-Way คือจาก Master ไป Slave แต่ข้อมูลหากมีการเปลี่ยนแปลงที่ Slave จะไม่ Replicate กลับมาที่ Master ดังนั้น ระบบนี้จึงเหมาะสำหรับการสำรองข้อมูลเท่านั้น แต่หากระบบหลักมีปัญหาก็อาจจะใช้วิธีสลับ IP หรือกำหนดให้ Application Server ชี้ Database มาที่เครื่อง Slave Server ขึ้นอยู่กับความยืดหยุ่นของแต่ละองค์กร

0 ความคิดเห็น:

แสดงความคิดเห็น