Chia Sẽ Kinh Nghiệm Về IT



Tìm Kiếm Với Google
-


MySQL Master, Slave, Cluster, Replication.. Database Availability... MySQL Database Replication và Failover

Gởi Ðề Tài Mới  Gửi trả lời
 
Công Cụ Xếp Bài
Tuổi 02-08-2009, 11:42 PM   #1
hoctinhoc
Guest
 
Trả Lời: n/a
MySQL Master, slave
1. Replication là gì?
  • Replication có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản đang tồn tại, đang sử dụng.
  • Với cơ sở dữ liệu, nhu cầu lưu trữ lớn, đòi hỏi cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố ngoài dự đoán là rất cao. Vì vậy, người ta nghĩ ra khái niệm “nhân bản”, tạo một phiên bản cơ sở dữ liệu giống hệt cơ sở dữ liệu đang tồn tại, và lưu trữ ở một nơi khác, đề phòng có sự cố.
  • Phiên bản cơ sở dữ liệu phục vụ ứng dụng được lưu trữ trên server master. Phiên bản cơ sở dữ liệu “nhân bản” được lưu trữ trên server slave. Quá trình nhân bản từ master sang slave gọi là replication.
  • Khi có một thay đổi trên cơ sở dữ liệu master, master sẽ ghi xuống log file (log ở dạng binary). Slave đọc log file, thực hiện những thao tác trong log file. Việc ghi, đọc log theo dạng binary được thực hiện rất nhanh.
2. Mô hình MySQL replication gồm có 2 thành phần:
a. MySQL master
b. MySQL slave


3. Cách thức hoạt động:
  • Tại thời điểm hoạt động bình thường mọi request sẽ được đưa đến vào MySQL master. Khi MySQL master gặp sự cố, request sẽ được đẩy qua cho MySQL slave xử lí. Khi MySQL master up lại bình thường, request sẽ được trả về cho MySQL master.
  • Quá trình chuyển đổi vai trò giữa MySQL master và MySQL slave sẽ được giới thiệu ở bài hướng dẫn sau.
  • Bài hướng dẫn đầu tiên chỉ nêu các bước để cấu hình MySQL master và MySQL slave replicate cho nhau.
4. Mục đích của bài hướng dẫn này:
a. Cấu hình MySQL master.
b. Cấu hình MySQL slave.
c. Mọi thay đổi trên MySQL master đều được thực hiện trên MySQL slave, luôn luôn đảm bảo dữ liệu trên MySQL master và MySQL slave là giống nhau.

5. Các bước cấu hình:
a. Giả sử máy tính MySQL master có hostname là master.mydomain.com. Máy tính MySQL slave có hostname là slave.mydomain.com.
b. Cài đặt mysql bằng các gói rpm trên MySQL master và MySQL slave.
c. Start mysql trên MySQL master và MySQL slave.

d. Cấu hình master:
- Tạo user cho phép MySQL slave được quyền REPLICATE
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

- Sửa trong file /etc/my.cnf những option sau:
[mysqld]
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1

- Start mysql trên MySQL master

e. Cấu hình slave:
- Sửa trong file /etc/my.cnf option sau:
server-id=2

- Start mysql trên MySQL slave.

- Để replication, cần xem tình trạng ghi log hiện tại của MySQL master, để điều khiển slave bắt đầu replicate như thế nào.

- Ngưng mọi tác động trên cơ sở dữ liệu MySQL master
sql> FLUSH TABLES WITH READ LOCK;

- Xem tình trạng của MySQL master

mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+

- Cấu hình những thông tin cần thiết, để slave giao tiếp được với master:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master.mydomain.com',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;

- Ghi chú: giá trị MASTER_LOG_FILE ở đây là file name [mysql-bin.003] và MASTER_LOG_POS là giá trị [Position] của câu lệnh SHOW MASTER STATUS;

- Nếu trước khi thực hiện replication, master không ghi thành log file, thì giá trị tương ứng ở đây là: chuỗi rỗng (“”) và 4.

- Giải phóng các table trên master:
mysql> UNLOCK TABLES;

- Hoàn tất quá trình cấu hình, test thử.

f. Master đã có dữ liệu:
- Giả sử trước khi thực hiện mô hình replication, master đã có dữ liệu. Vậy ta cần migrate dữ liệu qua slave trước, trước khi thực hiện các bước replication như ở trên.

- Trên master, ngưng những tác động làm thay đổi cơ sở dữ liệu, dump database:
sql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbdump.db

- Import cơ sở dữ liệu này vào MySQL slave.

- Tương tự phần trên, nếu trước khi thực hiện replication, MySQL master có ghi log, cần xem tình trạng log tại thời điểm đó, để cấu hình cho MySQL slave bắt đầu replication tại điểm nào

mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+

- Cấu hình những thông tin cần thiết, để slave giao tiếp được với master:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master.mydomain.com',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;

- Giải phóng các table trên master, start mysql trên MySQL slave
mysql> UNLOCK TABLES;

- Hoàn tất quá trình cấu hình, test thử.




1/ Mô hình master-master replication:
  • Theo mô hình MySQL master-slave replication mình đã trình bày, dữ liệu sẽ được replicate như sau:


  • Khi dữ liệu thay đổi trên master, dữ liệu sẽ được tự động replicate sang slave server. Tuy nhiên, nếu dữ liệu thay đổi trên slave, thì sẽ không được replicate sang master.
  • Điều này có nghĩa là, mô hình master-slave replication chỉ có tính dự phòng, không có khả năng load balacing (share tải giữa 2 máy master và slave).
  • Theo câu hỏi của miss_Van, mình trình bày thêm mô hình master-master replication.


  • Khi dữ liệu thay đổi trên master, dữ liệu sẽ được tự động replicate sang slave, đồng thời khi dữ liệu thay đổi trên slave, thì cũng sẽ được tự động replicate sang master.
2/ Cơ sở cấu hình:
Để cấu hình replication hai chiều, ta tiến hành cấu hình 2 mô hình master-slave replication lồng vào nhau.

Bước 1: ServerA là master, ServerB là slave.

Bước 2: ServerB là master, ServerA là slave.

Như vậy, kết hợp 2 lần cấu hình, ta sẽ được:
+ Khi dữ liệu thay đổi trên ServerA, dữ liệu sẽ replicate qua ServerB (theo cấu hình replication của bước 1)
+ Đồng thời, khi dữ liệu thay đổi trên ServerB, dữ liệu sẽ replicate qua ServerA (theo cấu hình replication của bước 2).

3/ Chi tiết cấu hình:

Bước 1: ServerA là master, ServerB là slave: cấu hình như bài lab 1 đã hướng dẫn.

Bước 2: Chia làm các bước nhỏ như sau:

a. ServerB là master, sửa những nội dung sau trong file /etc/my.cnf
master-host = [IP ServerA]
master-user = repl
master-password = slavepass
master-port = 3306

log-bin
binlog-do-db=adam

b. Tạo quyền replication trên ServeB cho ServerA:
grant replication slave on *.* to 'repl'@[IP ServerA] identified by 'slavepass2';

c. Để đưa ServerA thành slave của ServerB, sửa nội dung file /etc/my.cnf
log-bin
binlog-do-db=adam
binlog-ignore-db=mysql
binlog-ignore-db=test

server-id=1
#information for becoming slave.
master-host = [IP ServerB]
master-user = repl
master-password = slavepass2
master-port = 3306

d. Tiếp tục, làm lại các bước SHOW MASTER STATUS trên ServerB và START SLAVE trên ServerA như đã làm ở bước 1.

Vậy là bạn đã có mô hình master-master replication hai chiều. Hoàn tất, test thử.
__________________
Kết thúc để lại được bắt đầu



Theo: kimchipt
(NN)

  Trả lời ngay kèm theo trích dẫn này
Gửi trả lời


Công Cụ
Xếp Bài

Quyền Hạn Của Bạn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Hình Cảm xúc đang Mở
[IMG] đang Mở
Mã HTML đang Tắt




Bây giờ là 01:31 AM. Giờ GMT +7



Diễn đàn tin học QuantriNet
quantrinet.com | quantrimang.co.cc
Founded by Trương Văn Phương | Developed by QuantriNet's members.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.