ต่อจาก Juju #04 – วิธีทำให้ WordPress กระจายงานไปยัง MySQL Slave ด้วย HyperDB ซึ่งเป็นวิธีการกระจายงานให้ MySQL แบบ Master-Slave จะต้องอาศัยความสามารถของ HyperDB Plugin ของ WordPress ในการทำงาน ซึ่งถ้าเป็นการพัฒนา Application ทั่วไปที่ไม่ใช่ WordPress ก็จะทำด้วยวิธีดังกล่าวไม่ได้
ในบทความนี้จะกล่าวถึง การสร้าง Load-Balanced MySQL แบบ Master-Master ซึ่งทำให้สามารถกระจายการ Write ไปยัง MySQL หลายตัวได้ (ในเบื้องต้น 2 ตัว)
*** ในบทความต่อไป จะต่อด้วยการเชื่อมเข้ากับ haproxy ***
ขั้นตอนการติดตั้งมีดังนี้
- Deploy haproxy (ตั้งชื่อ haproxy-mysql) และ MySQL (ตั้งชื่อ mysql-master1 และ mysql-master2)
- ต่อไปนี้เป็นวิธีการติดตั้ง MySQL Master-Master Replication [1]
- บนเครื่อง mysql-master1
แก้ไขไฟล์ /etc/mysql/mysql.cnf
ค้นหาคำว่า server-id
จากนั้น Uncomment บรรทัดต่อไปนี้
server-id
log_bin
binlog_do_db
จากนั้น ในบรรทัด
– server_id = 1
– binlog_do_db ใส่เป็น Database Name ที่จะทำการ Replication
เมื่อเสร็จแล้ว ก็ Save แล้ว Restart Mysql
sudo service mysql restart
แล้วเข้าใช้งานด้วยคำสั่ง
mysql -u root -p$(cat /var/lib/mysql/mysql.passwd)
สร้าง User ที่จะทำหน้า Replicate ข้อมูล ด้วยคำสั่ง
mysql> create user ‘replicator’@’%’ identified by ‘password’;
และกำหนดสิทธิให้สามารถ Replicate ได้ ด้วยคำสั่ง
mysql> grant replication slave on *.* to ‘replicator’@’%’;
สุดท้ายใช้คำสั่งต่อไปนี้ เพื่อเรียกข้อมูลที่สำหรับการตั้งค่า mysql-master2
mysql> show master status;
ได้ผลดังนี้
จากนั้นใช้คำสั่งต่อไปนี้ แล้วเก็บค่า FILE และ POSITION ไว้ เพื่อใช้ในขั้นตอนต่อไป - บนเครื่อง mysql-master2
แก้ไขไฟล์ /etc/mysql/mysql.cnf เหมือนกับที่ทำบน mysql-master1 แต่เปลี่ยนค่า server_id เป็น 2
เมื่อเสร็จแล้ว ก็ Save แล้ว Restart Mysql
sudo service mysql restart
แล้วเข้าใช้งานด้วยคำสั่ง
mysql -u root -p$(cat /var/lib/mysql/mysql.passwd)
สร้าง User ที่จะทำหน้า Replicate ข้อมูล ด้วยคำสั่ง
mysql> create user ‘replicator’@’%’ identified by ‘password’;
และกำหนดสิทธิให้สามารถ Replicate ได้ ด้วยคำสั่ง
mysql> grant replication slave on *.* to ‘replicator’@’%’;
** ขั้นตอนต่อไปนี้ ทำที่ mysql-master2 (mysql-master1 ใช้ IP 10.107.107.35)
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST = ‘10.107.107.35’, MASTER_USER = ‘replicator’, MASTER_PASSWORD = ‘password’, MASTER_LOG_FILE = ‘mysql-bin.000003’, MASTER_LOG_POS = 344;
mysql> slave start;จากนั้นใช้คำสั่งต่อไปนี้ แล้วเก็บค่า FILE และ POSITION ไว้ เพื่อใช้ในขั้นตอนต่อไป
mysql> show master status;
- กลับมาที่ mysql-master1 อีกครั้ง แล้วใช้คำสั่งต่อไปนี้ (mysql-master2 ใช้ IP 10.107.107.83)
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST = ‘10.107.107.83’, MASTER_USER = ‘replicator’, MASTER_PASSWORD = ‘password’, MASTER_LOG_FILE = ‘mysql-bin.000003’, MASTER_LOG_POS = 344;
mysql> slave start; - ที่ mysql-master1 ทำการสร้าง Database ชื่อ wordpress
- ไปดูที่ mysql-master2 ก็จะพบว่า wordpress database ปรากฏขึ้นแล้วด้วย
Reference:
[1] https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication
[2] https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing–3