Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khám phá MySQL Binlog Server - Ripple

MySQL không giới hạn số lượng nô lệ mà bạn có thể kết nối với máy chủ chính trong cấu trúc liên kết sao chép. Tuy nhiên, khi số lượng nô lệ tăng lên, chúng sẽ ảnh hưởng đến tài nguyên chính vì các bản ghi nhị phân sẽ cần được cung cấp cho các nô lệ khác nhau làm việc ở các tốc độ khác nhau. Nếu dữ liệu bị xáo trộn trên cái chính cao, chỉ riêng việc phân phát nhật ký nhị phân có thể làm bão hòa giao diện mạng của cái chính.

Giải pháp cổ điển cho vấn đề này là triển khai máy chủ binlog - một máy chủ proxy trung gian nằm giữa máy chủ và máy chủ của nó. Máy chủ binlog được thiết lập như một nô lệ cho chủ và đến lượt nó, hoạt động như một chủ cho tập hợp nô lệ ban đầu. Nó nhận các sự kiện nhật ký nhị phân từ master, không áp dụng các sự kiện này, nhưng phục vụ chúng cho tất cả các nô lệ khác. Bằng cách này, tải trên máy chủ được giảm đáng kể và đồng thời, máy chủ binlog phục vụ các binlog hiệu quả hơn cho các nô lệ vì nó không phải thực hiện bất kỳ quá trình xử lý máy chủ cơ sở dữ liệu nào khác.

Ripple là một máy chủ binlog mã nguồn mở được phát triển bởi Pavel Ivanov. Một bài đăng trên blog từ Percona, có tiêu đề MySQL Ripple:Ấn tượng đầu tiên về máy chủ MySQL Binlog, giới thiệu rất tốt về việc triển khai và sử dụng Ripple. Tôi đã có cơ hội khám phá Ripple một cách chi tiết hơn và muốn chia sẻ những quan sát của mình thông qua bài đăng này.

1. Hỗ trợ sao chép dựa trên GTID

Ripple chỉ hỗ trợ chế độ GTID chứ không hỗ trợ sao chép dựa trên tệp và vị trí. Nếu trang chủ của bạn đang chạy ở chế độ không phải GTID, bạn sẽ gặp lỗi này từ Ripple:

Không thể đọc gói tin:Đã xảy ra lỗi khi đọc gói tin từ máy chủ:Chuỗi người gửi bản sao không thể bắt đầu ở chế độ AUTO_POSITION:máy chủ này có GTID_MODE =TẮT thay vì BẬT.

Bạn có thể chỉ định Server_id và UUID cho máy chủ ripple bằng cách sử dụng các tùy chọn dòng cmd:-ripple_server_id và -ripple_server_uuid

Cả hai đều là tham số tùy chọn và nếu không được chỉ định, Ripple sẽ sử dụng server_id =112211 mặc định và uuid sẽ được tạo tự động.

2. Kết nối với bản chính bằng người dùng và mật khẩu sao chép

Trong khi kết nối với bản chính, bạn có thể chỉ định người dùng và mật khẩu sao chép bằng các tùy chọn dòng lệnh:

-ripple_master_user và -ripple_master_password

3. Điểm cuối kết nối cho máy chủ Ripple

Bạn có thể sử dụng các tùy chọn dòng lệnh -ripple_server_ports và -ripple_server_address để chỉ định các điểm cuối kết nối cho máy chủ Ripple. Đảm bảo chỉ định tên máy chủ hoặc địa chỉ IP có thể truy cập mạng của máy chủ Ripple của bạn là -rippple_server_address. Nếu không, theo mặc định, Ripple sẽ liên kết với localhost và do đó bạn sẽ không thể kết nối với nó từ xa.

4. Thiết lập nô lệ cho máy chủ Ripple

Bạn có thể sử dụng lệnh CHANGE MASTER TO để kết nối các nô lệ của bạn để sao chép từ máy chủ Ripple.

Để đảm bảo rằng Ripple có thể xác thực mật khẩu mà bạn sử dụng để kết nối với nó, bạn cần khởi động Ripple bằng cách chỉ định tùy chọn -ripple_server_password_hash

Ví dụ:nếu bạn khởi động máy chủ ripple bằng lệnh:

rippled -ripple_datadir =. / binlog_server -ripple_master_address = -ripple_master_port =3306 -ripple_master_user =repl -ripple_master_password ='password' -ripple_server_ports =15000 -ripple_server_passdress ='172,31992Dhaserver_word_756' EFDA5995328326 EFDA5995326326 / code>

bạn có thể sử dụng lệnh CHANGE MASTER TO sau để kết nối từ máy chủ:

THAY ĐỔI MASTER TO master_host ='172.31.23.201', master_port =15000, master_password =’XpKWeZRNH5 # satCI’, master_user =’rep’

Lưu ý rằng mật khẩu băm được chỉ định cho máy chủ Ripple tương ứng với mật khẩu văn bản được sử dụng trong lệnh CHANGE MASTER TO. Hiện tại, Ripple không xác thực dựa trên tên người dùng và chấp nhận bất kỳ tên người dùng không trống nào miễn là mật khẩu khớp.

Khám phá MySQL Binlog Server - RippleNhấp vào Tweet

5. Quản lý máy chủ Ripple

Có thể giám sát và quản lý máy chủ Ripple bằng giao thức MySQL từ bất kỳ ứng dụng MySQL tiêu chuẩn nào. Có một số lệnh giới hạn được hỗ trợ mà bạn có thể xem trực tiếp trong mã nguồn trên trang GitHub mysql-ripple.

Một số lệnh hữu ích là:

  • SELECT @@ global.gtid_executed; - Để xem BỘ GTID của máy chủ Ripple dựa trên nhật ký nhị phân đã tải xuống của nó.
  • STOP SLAVE; - Để ngắt kết nối máy chủ Ripple khỏi máy chủ.
  • START SLAVE; - Để kết nối máy chủ Ripple với máy chủ.

Vấn đề đã biết &Đề xuất cải thiện

1. Tôi không thấy tùy chọn để thiết lập kênh sao chép SSL từ máy chủ Ripple đến máy chủ

Do đó, máy chủ Ripple sẽ không thể kết nối với một máy chủ yêu cầu các kết nối được mã hóa. Cố gắng kết nối sẽ dẫn đến lỗi:

0322 09:01:36.555124 14942 mysql_master_session.cc:164] Không kết nối được với máy chủ:, cổng:3306, lỗi:Không kết nối được:Các kết nối sử dụng phương tiện truyền tải không an toàn bị cấm trong khi --require_secure_transport =ON.

2. Tôi không thể làm cho máy chủ Ripple hoạt động với tùy chọn bán đồng bộ hóa

Tôi đã khởi động máy chủ Ripple bằng tùy chọn -ripple_semi_sync_slave_enabled =true

Khi kết nối nó, máy chủ có thể phát hiện máy chủ Ripple là máy chủ hỗ trợ bán đồng bộ hóa.

mysql> hiển thị trạng thái như 'rpl%';
--------------------------------- ---------------------
| Tên_biến | Giá trị |
-------------------------------------------- ----------
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_status | VÀO |
| Rpl_semi_sync_slave_status | TẮT |
-------------------------------------------- ----------

Tuy nhiên, việc cố gắng thực hiện một giao dịch ở chế độ bán đồng bộ đã đợi rpl_semi_sync_master_timeout là 180000

mysql> tạo cơ sở dữ liệu d12;
Truy vấn OK, 1 hàng bị ảnh hưởng (3 phút 0,01 giây)

Tôi có thể thấy rằng tính năng bán đồng bộ hóa đã bị tắt ở bản chính:

mysql> hiển thị trạng thái như 'rpl%';
+ -------------------------------- ------------ + ------- +
| Tên_biến | Giá trị |
+ ------------------------------------------- - + ------- +
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_status | TẮT |
| Rpl_semi_sync_slave_status | TẮT |
+ ------------------------------------------- - + ------- +

Đoạn mã tương ứng từ nhật ký lỗi mysql:

2020-03-21T10:05:56.000612Z 52 [Lưu ý] Bắt đầu binlog_dump đến master_thread_id (52) slave_server (112211), pos (, 4)
2020-03-21T10:05:56.000627Z 52 [ Lưu ý] Bắt đầu bán đồng bộ binlog_dump thành nô lệ (server_id:112211), pos (, 4)
20020-03-21T10:08:55.873990Z 2 [Cảnh báo] Hết thời gian chờ trả lời của binlog (tệp:mysql-bin .000010, pos:350), bán đồng bộ lên tệp, vị trí 4.
2020-03-21T10:08:55.874044Z 2 [Lưu ý] Sao chép bán đồng bộ đã TẮT.

>

Có một vấn đề được báo cáo dọc theo các dòng tương tự ở đây trên trang MySQL Ripple Github.

3. Sự cố khi sử dụng sao chép song song cho các nô lệ của máy chủ Ripple

Tôi thấy rằng chuỗi SQL trên máy nô lệ thường dừng lại với lỗi:

Last_SQL_Error:Không thể thực thi nhóm sự kiện hiện tại ở chế độ song song. Sự kiện đã gặp Gtid, tên log relay /mysql_data/relaylogs/relay-log.000005, vị trí 27023962 ngăn việc thực thi nhóm sự kiện này ở chế độ song song. Lý do:Sự kiện chính được đánh dấu thời gian không chính xác về mặt logic.

Phân tích nhật ký chuyển tiếp và vị trí ở trên cho thấy 'số thứ tự' của giao dịch tại thời điểm này đã được đặt lại thành 1. Tôi đã tìm ra nguyên nhân dẫn đến việc xoay binlog xảy ra trên chính chủ. Thông thường, đối với các nô lệ trực tiếp, có một sự kiện xoay vòng do đó các bản ghi chuyển tiếp cũng sẽ xoay vòng dựa trên sự xoay vòng bản ghi nhị phân chính. Đánh giá của tôi là các điều kiện như vậy có thể được phát hiện và thiết lập lại số thứ tự có thể được xử lý bằng các luồng song song. Nhưng khi số thứ tự thay đổi mà không có sự quay của nhật ký chuyển tiếp, chúng ta thấy các luồng song song không thành công.

Quan sát này được báo cáo là sự cố:lỗi luồng song song phụ trong khi đồng bộ hóa từ máy chủ binlog # 26

4. Tiện ích mysqlbinlog không hoạt động trên nhật ký nhị phân do máy chủ Ripple tạo ra

Cố gắng chạy tiện ích mysqlbinlog trên nhật ký nhị phân dẫn đến lỗi:

LỖI:Lỗi trong Log_event ::read_log_event ():'Đã tìm thấy sự kiện không hợp lệ trong nhật ký nhị phân', data_len:43, event_type:-106

Vấn đề này được nêu ra ở đây:Không thể mở tệp nhật ký nhị phân bằng tiện ích mysqlbinlog. # 25

Tác giả thừa nhận đây là một vấn đề đã biết. Tôi cảm thấy rằng sẽ rất hữu ích nếu hỗ trợ tiện ích này cho mục đích gỡ lỗi.

Đó là báo cáo hiện tại từ thử nghiệm nhanh của tôi. Tôi dự định cập nhật bài đăng trên blog này và khi tôi có thêm phát hiện về Ripple. Nhìn chung, tôi thấy nó đơn giản và dễ sử dụng và có tiềm năng trở thành tiêu chuẩn cho các máy chủ binlog trong môi trường MySQL.

Các mẹo khác dành cho bạn

Kiểm tra tình trạng máy chủ MySQL

Trong thiết lập tính khả dụng cao (HA) của MySQL master-slave, điều quan trọng là phải liên tục theo dõi tình trạng của máy chủ chính và máy chủ nô lệ để bạn có thể phát hiện các sự cố tiềm ẩn và thực hiện các hành động khắc phục . Tìm hiểu thêm

Bản dựng chỉ mục cuộn MySQL

Cách tối ưu hóa quy trình tạo chỉ mục MySQL sao cho khối lượng công việc thường xuyên của bạn không bị ảnh hưởng. Nếu bạn có tập hợp bản sao chính-nô lệ của MySQL, bạn có thể tạo chỉ mục từng nút một theo cách luân phiên. Tìm hiểu thêm

Tính khả dụng cao của MySQL

Tính khả dụng của hệ thống là phần trăm thời gian các dịch vụ của hệ thống đó hoạt động trong một khoảng thời gian. Nó thường được thể hiện dưới dạng một chuỗi 9 cái. Xem tính khả dụng và thời gian ngừng hoạt động tương ứng được đo trong một năm. Tìm hiểu thêm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách di chuyển Moodle độc ​​lập sang thiết lập có thể mở rộng cơ sở dữ liệu theo cụm

  2. Kết nối với Cơ sở dữ liệu MySQL trong .NET

  3. Tôi có thể tạo chế độ xem với tham số trong MySQL không?

  4. Cách định dạng số dưới dạng tiền tệ trong MySQL

  5. MySQL MariaDB - Truy vấn sử dụng bảng tạm thời