[mySQL] Replication, cluster mySQL database

1. Replication
Replication là kỹ thuật đồng bộ các database với nhau.
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 - binlog). 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.
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.
Cơ bản, replication được chia ra làm 2 loại chính: Master - Slave và Master - Master.
- Master - Slave: dữ liệu ở server Master sẽ được server Slave định kỳ cập nhật, dữ liệu sẽ không được cập nhật ngược từ Slave trở về Master. Do đó user read&write trên Master và Readonly trên Slave.
- Master - Master: khi database có sự thay đổi, ngay lập tức nó sẽ được đồng bộ trên cả 2 server master. Với cách triển khai này, user có thể read&write trên cả 2 server.
Triển khai:
Master-Slave:
* Cấu hình trên master :
B1. Kiểm tra skip_networking , nếu giá trị này là ON thì master và slave sẽ không connect với nhau được, thêm vào /etc/my.cnf dòng "skip_networking=Off" để tắt nó đi
mysql> show variables like "skip_networking";
B2. Khai báo server-id và binlog : thêm các dòng sau vào /etc/my.cnf dưới tag [mysqld] :
server-id=1
log-bin=/var/lib/mysql/mysql-bin
B3. Tạo user để slave dùng user này kết nối vào server replicate dữ liệu :
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.2.239' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
=> User : replication , Pass : 123456 có quyền REPLICATION SLAVE . IP của slaver (source IP cho phép truy cập vào mysql server.

B4. Restart mySQL
/etc/init.d/mysqld restart
B5. Kiểm tra status của master server :
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
* Cấu hình trên slade:
B1. Khai báo slave : thêm dòng sau vào file /etc/my.cnf dưới tag [mysqld] :
server-id=2
B2. Khai báo thông tin của master server để slave có thể kết nối :
mysql> change master to master_host='192.168.2.240', master_user='replication', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=98;
B3. Start slave :
mysql> start slave;
2. Cluster
a. Các khái niệm, thuật ngữ
Cluster: Là một mô hình được đưa ra nhằm đáp ứng được các nhu cầu ngày càng gia tăng trong việc truy xuất các ứng dụng có tính chất quan trọng như thương mại điện tử, database… Các ứng dụng này phải có khả năng chịu được lỗi cao, luôn đáp ứng được tính sẵn sàng và khả năng có thể mở rộng hệ thống khi cần thiết. Các khả năng của Cluster giúp cho hệ thống có thể tiếp tục được hoạt động và cung cấp dịch vụ luôn luôn được sẵn sàng ngay cả khi hệ thống có thể xảy ra lỗi như hỏng ổ đĩa hay server bị down.
Mô hình Server Cluster bao gồm nhiều server riêng lẻ được liên kết và hoạt động cùng với nhau trong một hệ thống. Các server này giao tiếp với nhau để trao đổi thông tin lẫn nhau và giao tiếp với bên ngoài để thực hiện các yêu cầu. Khi có lỗi xảy ra, các service trong Cluster hoạt động tương tác với nhau để duy trì tính ổn định và tính sẵn sàng cao cho Cluster.
Admin tools: Một hệ thống cluster sẽ có một Cluster Administrator tools dùng để quản lý, cho phép di chuyển, thêm bớt, giám sát trạng thái của tất cả các node trong cluster đó.
Node: Các thành phần tham gia vào cluster được gọi là các node, các server này đã được cài đặt cluster service và chúng ta có thể thêm, bớt dễ dàng các node này để phù hợp hơn với yêu cầu sử dụng.
Failover: Đây là quá trình tự động chuyển đổi server khi server primary không thể hoạt động. Failover yêu cầu xác định các resource group nào đang chạy trên node bị hỏng và các node nào nên giữ quyền sở hữu các resource group đó. Tất cả các node trong Cluster mà có khả năng giữ các resource group đó tiến hành đàm phán với nhau để lấy quyền sở hữu. Quá trình đàm phán dựa trên khả năng của node, tải hiện hành, khả năng phản hồi ứng dụng hay danh sách node ưu tiên. Danh sách node ưu tiên là một phần của các thuộc tính trong resource group và được dùng để chỉ định một resource group tới một node. Khi việc đàm phán quyền sở hữu resource group được hoàn tất, tất cả các node trong Cluster cập nhật database của chúng và tiếp tục theo dõi node sở hữu resource group đó.
Failback: Khi một node trở lại hoạt động, cluster trả lại quyền sở hữu tài nguyên cho nó và nó sẵn sàng để thực hiện yêu cầu.
Quorum resource: Trong mỗi Cluster, Quorum resource chứa đựng và duy trì những thông tin cấu hình cần thiết cho việc phục hồi Cluster.
Resource: các Cluster resource bao gồm các phần cứng vật lý như là các ổ đĩa, các network card và các thực thể logic như là các địa chỉ IP, các ứng dụng và cơ sở dữ liệu của ứng dụng. Mỗi node trong Cluster sẽ có quyền sở hữu các resource cục bộ. Tuy nhiên, Cluster cũng có các resource chung như các thiết bị lưu trữ chung và private network card. Mỗi node trong Cluster đều có khả năng truy cập tới các resource chung này. Một resource chung đặc biệt được biết như là Quorum resource – là một ổ đĩa vật lý trong dãy các ổ đĩa chung của Cluster đóng một vai trò quan trọng trong các hoạt động của Cluster. Nó phải được dành riêng cho hoạt động của các node như tạo một Cluster hay thêm node.
Resource group: Resource group là một tập hợp logic của các resource trong một Cluster. Một resource group tiêu biểu được tạo ra bởi các resource liên kết logic với nhau như là các ứng dụng và các thiết bị ngoại vi và dữ liệu kết hợp với các ứng dụng đó. Resource group cũng có thể chứa đựng các thực thể của cluster và chỉ được liên kết khi cần như là các server ảo và địa chỉ IP. Một resource group tại một thời điểm chỉ được sở hữu bởi một node và các resource riêng lẻ bên trong group đó phải tồn tại trên node đó. Các node khác trong Cluster không thể sở hữu các resource group khác nhau trong cùng một resource group.
b. Cài đặt và triển khai:
Tham khảo bài viết: Setup and Clustering mySQL with MariaDB-Galera

3. Thiết lập khác
Reset password for user root
B1: Stop mysql service
/etc/init.d/mysqld stop
B2: Start to MySQL server w/o password:
mysqld_safe --skip-grant-tables &
B3: Connect to mysql server using mysql client:
mysql -u root
B4: Setup new MySQL root user password (password moi la`:NEW-ROOT-PASSWORD)
mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
B5: Stop MySQL Server:
/etc/init.d/mysql stop
B6: Start MySQL server and test it
/etc/init.d/mysqld start