Hướng dẫn cài đặt và cấu hình cơ bản Mysql Replication
Để mở rộng một hệ thống cũng như để đảm bảo một cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố ta có hai phương pháp là Scale up và Scale out, trong đó: Scale up là với một máy chủ ta tìm cách để nó có thể đáp ứng nhiều hơn số lượng kết nối, truy vấn. Ví dụ: Tăng phần cứng lên cho ...
Để mở rộng một hệ thống cũng như để đảm bảo một cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố ta có hai phương pháp là Scale up và Scale out, trong đó:
Scale up là với một máy chủ ta tìm cách để nó có thể đáp ứng nhiều hơn số lượng kết nối, truy vấn. Ví dụ:
- Tăng phần cứng lên cho máy chủ
- Optimize các phần mềm, ứng dụng giúp tăng tốc độ truy vấn lấy, nhập dữ liệu.
Scale out là giải pháp tăng số lượng server hoặc dùng các giải pháp load-balancer để phân phối các kết nối, truy vấn ra nhiều server.
Mysql Replication là một giải pháp scale out, có thể dùng trong các trường hợp sau:
- Trường hợp các ứng dụng mà có số truy vấn đọc dữ liệu nhiều hơn ghi ( ví dụ như các trang báo, trang tin tức ).
- Trường hợp cần backup real-time.
Có 2 giải pháp cho việc replication:
- Master - Slave: Là dạng replication trong đó data được ghi trên Master server và đồng bộ sang Slave server
- Master - Master: Là dạng replication trong đó dữ liệu có thể ghi trên cả các Mysql server chạy replication.
1. Master - Slave:
Ở mô hình trên ta thấy có 1 Master database phục vụ cho việc ghi dữ liệu, còn có thể có một hoặc nhiều Slave database. Các ứng dụng sẽ được kết nối cả vào Master lẫn Slave, tuy nhiên với các tác vụ ghi dữ liệu thì sẽ được trỏ đến Master còn với tác vụ đọc dữ liệu thì trỏ đến Slave. Khi có một thay đổi trên Master server, thay đổi đó sẽ được ghi lại vào binlog và Slave server sẽ đọc binlog và ghi lại các thông tin thay đổi vào relay log, sau đó sẽ dựa vào relay log để cập nhật dữ liệu.
2. Master - Master:
Ở mô hình trên, toàn bộ dữ liệu được lưu trên 1 nhóm server và được cập nhật bởi bất kỳ server Master nào của nhóm. Tất cả Master server có nhiệm vụ phản hồi lại các truy vấn dữ liệu của người dùng và đồng bộ, cập nhật những thay đổi về dữ liệu từ các Master server khác trong nhóm.
Ở đây mình sẽ cài đặt trên hệ điều hành centos 6.5, sử dụng 2 server với ip: Master server: 192.168.2.159 Slave server: 192.168.2.231
1. Mysql replication Master - Slave:
step 1: Cài đặt mysql server
Trên server Master chạy các câu lệnh sau: [root@Viet-Centos-1 ~]# yum install -y mysql-server
Để chạy Mysql server [root@Viet-Centos-1 ~]# service mysql start
Cài đặt các thông số ban đầu cho Mysql [root@Viet-Centos-1 ~]# mysql_secure_installation
Thực hiện tương tự các bước trên đối với Mysql slave
step 2: Cấu hình Master-Slave Ở đây mình chỉ hướng dẫn cách cấu hình cơ bản nhất, chưa tối ưu cấu hình cho Mysql.
Trên Master server:
Cấu hình file my.cnf: [root@Viet-Centos-1 ~]# vim /etc/my.cnf
Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]:
server-id=1 log_bin=/var/log/mysql/mysql-bin.log binlog_do_db=replication_database`
Trong đó:
- server-id để xác định các mysql server, nếu không khai báo thông số này mysql server sẽ mặc định server-id là 0 hay nếu đặt server-id trên các mysql server giống nhau thì sẽ không nhận các kết nối từ các server mysql khác.
- log_bin để khai báo file log ghi lại các thay đổi dữ liệu
- binlog_do_db để xác định database sẽ được replication
Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-1 ~]# service mysqld restart
Giờ ta cần tạo user replication [root@Viet-Centos-1 ~]# mysql -uroot -ppassword
mysql> grant replication slave on *.* to mysql@'%' identified by 'mysql';
mysql> flush privileges;
Bước tiếp ta phải đồng bộ database giữa Master và Slave [root@Viet-Centos-1 ~]# mysqldump -u root -p replication_database > replication_database.sql
Copy database sang server Slave [root@Viet-Centos-1 ~]# scp replication_database.sql 192.168.2.231:/opt
Lấy giá trị Position - giá trị này sẽ được Slave sử dụng để xác định thời điểm đồng bộ dữ liệu với Master. mysql> show master status;
Trên Slave server:
Cấu hình file my.cnf: [root@Viet-Centos-2 ~]# vim /etc/my.cnf
Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]
server-id=2 relay-log=/var/log/mysql/mysql-relay-bin.log binlog_do_db=replication_database
Trong đó:
- relay-log là nơi ghi lại thông tin dữ liệu bị thay đổi được lấy từ Master server.
Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-2 ~]# service mysqld restart
Tạo database và đồng bộ dữ liệu với database của Master server
mysql> CREATE DATABASE replication_database;
mysql -u root -p replication_database < /opt/replication_database.sql
cấu hình replication trên slave bằng câu lệnh trong mysql như sau:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.159',MASTER_USER='mysql', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 106;
Start server Slave:
mysql> start slave;
step 3: Kiểm tra hoạt động Replication
Để kiểm tra, ta thử thay đổi dữ liệu trên Master bằng cách tạo 1 table mới
mysql> use replication_database;
mysql> create table test(job varchar(20), salary int(10));
mysql> show tables;
Trên Slave server ta chạy lệnh:
mysql> use replication_database;
mysql> show tables;
Ta thấy database trên Slave đã được cập nhật table "test", như vậy là Replication đã hoạt động tốt.
2. Mysql replication Master - Master:
step 1: Cài đặt mysql server Các bước cài đặt tương tự như step 1 của phần Master-Slave
step 2: Cấu hình Master - Master Trên Master server: Cấu hình file my.cnf: [root@Viet-Centos-1 ~]# vim /etc/my.cnf
Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]
server-id=1 log_bin=/var/log/mysql/mysql-bin.log relay-log=/var/log/mysql/mysql-relay-bin.log binlog_do_db=replication_database
Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-1 ~]# service mysqld restart
Giờ ta cần tạo user replication [root@Viet-Centos-1 ~]# mysql -uroot -ppassword
mysql> grant replication slave on *.* to mysql@'%' identified by 'mysql';
mysql> flush privileges;
Bước tiếp ta phải đồng bộ database giữa Master và Slave [root@Viet-Centos-1 ~]# mysqldump -u root -p replication_database > replication_database.sql
Copy database sang server Slave [root@Viet-Centos-1 ~]# scp replication_database.sql 192.168.2.231:/opt
Lấy giá trị Position - giá trị này sẽ được Slave sử dụng để xác định thời điểm đồng bộ dữ liệu với Master. mysql> show master status;
Trên Slave server: Cấu hình file my.cnf: [root@Viet-Centos-2 ~]# vim /etc/my.cnf
Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]
server-id=2 log_bin=/var/log/mysql/mysql-bin.log relay-log=/var/log/mysql/mysql-relay-bin.log binlog_do_db=replication_database
Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-2 ~]# service mysqld restart
Giờ ta cần tạo user replication [root@Viet-Centos-2 ~]# mysql -uroot -ppassword
mysql> grant replication slave on *.* to mysql@'%' identified by 'mysql';
mysql> flush privileges;
Lấy giá trị Position - giá trị này sẽ được Slave sử dụng để xác định thời điểm đồng bộ dữ liệu với Master. mysql> show master status;
Tạo database và đồng bộ dữ liệu với database của Master server
mysql> CREATE DATABASE replication_database;
mysql -u root -p replication_database < /opt/replication_database.sql
Cấu hình Replication trên 2 server Trên Master: Chạy lệnh sau trong mysql terminal: mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.231',MASTER_USER='mysql', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
mysql> start slave;
Trên Slave: Chạy lệnh sau trong mysql terminal: mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.159',MASTER_USER='mysql', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
mysql> start slave;