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

DBA của tôi bị ốm - Mẹo chuyển đổi dự phòng cơ sở dữ liệu cho SysAdmins

Tình huống tốt nhất là, trong trường hợp cơ sở dữ liệu bị lỗi, bạn có Kế hoạch khôi phục sau thảm họa (DRP) tốt và một môi trường có tính khả dụng cao với quy trình chuyển đổi dự phòng tự động, nhưng… điều gì sẽ xảy ra nếu nó không thành công một số lý do bất ngờ? Điều gì sẽ xảy ra nếu bạn cần thực hiện chuyển đổi dự phòng thủ công? Trong blog này, chúng tôi sẽ chia sẻ một số khuyến nghị cần tuân theo trong trường hợp bạn cần chuyển đổi dự phòng cơ sở dữ liệu của mình.

Kiểm tra Xác minh

Trước khi thực hiện bất kỳ thay đổi nào, bạn cần xác minh một số điều cơ bản để tránh các vấn đề mới sau quá trình chuyển đổi dự phòng.

Trạng thái Sao chép

Có thể tại thời điểm lỗi, nút phụ không được cập nhật, do lỗi mạng, tải cao hoặc một vấn đề khác, vì vậy bạn cần đảm bảo nô lệ có tất cả (hoặc gần như tất cả) thông tin. Nếu bạn có nhiều hơn một nút phụ, bạn cũng nên kiểm tra xem nút nào là nút nâng cao nhất và chọn nó để chuyển đổi dự phòng.

ví dụ:Hãy kiểm tra trạng thái sao chép trong Máy chủ MariaDB.

MariaDB [(none)]> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.110

Master_User: rpl_user

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: binlog.000014

Read_Master_Log_Pos: 339

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 635

Relay_Master_Log_File: binlog.000014

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_Errno: 0

Skip_Counter: 0

Exec_Master_Log_Pos: 339

Relay_Log_Space: 938

Until_Condition: None

Until_Log_Pos: 0

Master_SSL_Allowed: No

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_SQL_Errno: 0

Replicate_Ignore_Server_Ids:

Master_Server_Id: 3001

Using_Gtid: Slave_Pos

Gtid_IO_Pos: 0-3001-20

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Slave_DDL_Groups: 0

Slave_Non_Transactional_Groups: 0

Slave_Transactional_Groups: 0

1 row in set (0.000 sec)

Trong trường hợp PostgreSQL, hơi khác một chút vì bạn cần kiểm tra trạng thái WAL và so sánh trạng thái được áp dụng với trạng thái đã tìm nạp.

postgres=# SELECT CASE WHEN pg_last_wal_receive_lsn()=pg_last_wal_replay_lsn()

postgres-# THEN 0

postgres-# ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())

postgres-# END AS log_delay;

 log_delay

-----------

         0

(1 row)

Thông tin đăng nhập

Trước khi chạy chuyển đổi dự phòng, bạn phải kiểm tra xem ứng dụng / người dùng của bạn có thể truy cập trang chủ mới của bạn bằng thông tin đăng nhập hiện tại hay không. Nếu bạn không sao chép người dùng cơ sở dữ liệu của mình, có thể thông tin đăng nhập đã bị thay đổi, vì vậy bạn cần cập nhật chúng trong các nút phụ trước khi có bất kỳ thay đổi nào.

ví dụ:Bạn có thể truy vấn bảng người dùng trong cơ sở dữ liệu mysql để kiểm tra thông tin đăng nhập của người dùng trong Máy chủ MariaDB / MySQL:

MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user;

+-----------------+--------------+-------------------------------------------+

| Host            | User | Password                                  |

+-----------------+--------------+-------------------------------------------+

| localhost       | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | mysql | invalid                                   |

| 127.0.0.1       | backupuser | *AC01ED53FA8443BFD3FC7C448F78A6F2C26C3C38 |

| 192.168.100.100 | cmon         | *F80B5EE41D1FB1FA67D83E96FCB1638ABCFB86E2 |

| 127.0.0.1       | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| ::1             | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | backupuser | *AC01ED53FA8443BFD3FC7C448F78A6F2C26C3C38 |

| 192.168.100.112 | user1        | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| 127.0.0.1       | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| ::1             | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| 192.168.100.110 | rpl_user     | *EEA7B018B16E0201270B3CDC0AF8FC335048DC63 |

+-----------------+--------------+-------------------------------------------+

12 rows in set (0.001 sec)

Trong trường hợp PostgreSQL, bạn có thể sử dụng lệnh ‘\ du’ để biết các vai trò và bạn cũng phải kiểm tra tệp cấu hình pg_hba.conf để quản lý quyền truy cập của người dùng (không phải thông tin đăng nhập). Vì vậy:

postgres=# \du

                                       List of roles

    Role name     |             Attributes         | Member of

------------------+------------------------------------------------------------+-----------

 admindb          | Superuser, Create role, Create DB                          | {}

 cmon_replication | Replication                                                | {}

 cmonexporter     |                                             | {}

 postgres         | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

 s9smysqlchk      | Superuser, Create role, Create DB                          | {}

Và pg_hba.conf:

# TYPE DATABASE USER ADDRESS METHOD

host replication  cmon_replication  localhost  md5

host  replication  cmon_replication  127.0.0.1/32  md5

host  all  s9smysqlchk  localhost  md5

host  all  s9smysqlchk  127.0.0.1/32  md5

local   all            all                   trust

host    all            all 127.0.0.1/32 trust

Truy cập Mạng / Tường lửa

Thông tin đăng nhập không phải là vấn đề duy nhất có thể xảy ra khi truy cập trang cái mới của bạn. Nếu nút nằm trong một trung tâm dữ liệu khác hoặc bạn có tường lửa cục bộ để lọc lưu lượng, bạn phải kiểm tra xem bạn có được phép truy cập nó hay không hoặc thậm chí nếu bạn có tuyến mạng để đến nút chính mới.

ví dụ:iptables. Hãy cho phép lưu lượng truy cập từ mạng 167.124.57.0/24 và kiểm tra các quy tắc hiện tại sau khi thêm nó:

$ iptables -A INPUT  -s 167.124.57.0/24 -m state --state NEW  -j ACCEPT

$ iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all -- 167.124.57.0/24      0.0.0.0/0 state NEW

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

ví dụ:các tuyến đường. Giả sử nút chính mới của bạn nằm trong mạng 10.0.0.0/24, máy chủ ứng dụng của bạn ở 192.168.100.0/24 và bạn có thể truy cập mạng từ xa bằng 192.168.100.100, vì vậy trong máy chủ ứng dụng của bạn, hãy thêm tuyến đường tương ứng:

$ route add -net 10.0.0.0/24 gw 192.168.100.100

$ route -n

Kernel IP routing table

Destination     Gateway Genmask         Flags Metric Ref Use Iface

0.0.0.0         192.168.100.1 0.0.0.0         UG 0 0 0 eth0

10.0.0.0        192.168.100.100 255.255.255.0   UG 0 0 0 eth0

169.254.0.0     0.0.0.0 255.255.0.0     U 1027 0 0 eth0

192.168.100.0   0.0.0.0 255.255.255.0   U 0 0 0 eth0

Điểm Hành động

Sau khi kiểm tra tất cả các điểm được đề cập, bạn nên sẵn sàng thực hiện các hành động để chuyển đổi dự phòng cơ sở dữ liệu của mình.

Địa chỉ IP mới

Khi bạn quảng bá nút phụ, địa chỉ IP chính sẽ thay đổi, vì vậy bạn cần thay đổi địa chỉ này trong quyền truy cập ứng dụng hoặc ứng dụng khách của mình.

Sử dụng Load Balancer là một cách tuyệt vời để tránh sự cố / thay đổi này. Sau quá trình chuyển đổi dự phòng, Load Balancer sẽ phát hiện bản chính cũ đang ngoại tuyến và (tùy thuộc vào cấu hình) gửi lưu lượng đến cái mới để ghi trên đó, vì vậy bạn không cần phải thay đổi bất kỳ điều gì trong ứng dụng của mình.

ví dụ:Hãy xem ví dụ về cấu hình HAProxy:

listen  haproxy_5433

        bind *:5433

        mode tcp

        timeout client  10800s

        timeout server  10800s

        balance leastconn

        option tcp-check

        server 192.168.100.119 192.168.100.119:5432 check

        server 192.168.100.120 192.168.100.120:5432 check

Trong trường hợp này, nếu một nút bị hỏng, HAProxy sẽ không gửi lưu lượng đến đó và chỉ gửi lưu lượng đến nút có sẵn.

Định cấu hình lại các nút Nô lệ

Nếu bạn có nhiều hơn một nút phụ, sau khi thăng cấp một trong số chúng, bạn phải định cấu hình lại các nút còn lại để kết nối với nút chính mới. Đây có thể là một công việc tốn nhiều thời gian, tùy thuộc vào số lượng nút.

Xác minh &Định cấu hình Bản sao lưu

Sau khi bạn đã có tất cả (thăng cấp chủ mới, cấu hình lại nô lệ, viết ứng dụng trong trang chủ mới), điều quan trọng là phải thực hiện các hành động cần thiết để ngăn chặn sự cố mới, do đó, sao lưu là điều cần thiết bước này. Hầu hết có thể bạn đã chạy chính sách sao lưu trước khi sự cố xảy ra (nếu không, bạn cần phải có nó chắc chắn), vì vậy bạn phải kiểm tra xem các bản sao lưu vẫn đang chạy hay chúng sẽ hoạt động trong cấu trúc liên kết mới. Có thể bạn đã chạy bản sao lưu trên nút chính cũ hoặc đang sử dụng nút phụ hiện là nút chính, vì vậy bạn cần kiểm tra nó để đảm bảo chính sách sao lưu của bạn vẫn hoạt động sau khi thay đổi.

Giám sát Cơ sở dữ liệu

Khi bạn thực hiện quá trình chuyển đổi dự phòng, việc giám sát là điều bắt buộc trước, trong và sau quá trình. Với điều này, bạn có thể ngăn chặn sự cố trước khi nó trở nên tồi tệ hơn, phát hiện ra sự cố không mong muốn trong quá trình chuyển đổi dự phòng hoặc thậm chí biết được liệu có vấn đề gì xảy ra sau đó hay không. Ví dụ:bạn phải theo dõi xem ứng dụng của mình có thể truy cập trang chủ mới hay không bằng cách kiểm tra số lượng kết nối đang hoạt động.

Các chỉ số chính cần theo dõi

Hãy xem một số chỉ số quan trọng nhất cần tính đến:

  • Trễ sao chép
  • Trạng thái sao chép
  • Số lượng kết nối
  • Sử dụng mạng / lỗi
  • Tải máy chủ (CPU, Bộ nhớ, Đĩa)
  • Nhật ký hệ thống và cơ sở dữ liệu

Khôi phục

Tất nhiên, nếu có sự cố xảy ra, bạn phải có khả năng quay trở lại. Chặn lưu lượng truy cập đến nút cũ và giữ nó càng cô lập càng tốt có thể là một chiến lược tốt cho việc này, vì vậy trong trường hợp bạn cần khôi phục, bạn sẽ có sẵn nút cũ. Nếu quá trình khôi phục diễn ra sau một vài phút, tùy thuộc vào lưu lượng truy cập, có thể bạn sẽ cần phải chèn dữ liệu của những phút này vào nút chính cũ, vì vậy hãy đảm bảo rằng bạn cũng có sẵn nút chính tạm thời và được cô lập để lấy thông tin này và áp dụng nó trở lại .

Tự động hóa quy trình chuyển đổi dự phòng với ClusterControl

Nhìn thấy tất cả các tác vụ cần thiết này để thực hiện chuyển đổi dự phòng, có lẽ hầu hết bạn muốn tự động hóa nó và tránh tất cả công việc thủ công này. Đối với điều này, bạn có thể tận dụng một số tính năng mà ClusterControl có thể cung cấp cho bạn cho các công nghệ cơ sở dữ liệu khác nhau, như tự động khôi phục, sao lưu, quản lý người dùng, giám sát, trong số các tính năng khác, tất cả từ cùng một hệ thống.

Với ClusterControl, bạn có thể xác minh trạng thái sao chép và độ trễ của nó, tạo hoặc sửa đổi thông tin đăng nhập, biết mạng và trạng thái máy chủ lưu trữ và thậm chí nhiều xác minh hơn nữa.

Sử dụng ClusterControl, bạn cũng có thể thực hiện các hành động cụm và nút khác nhau, chẳng hạn như quảng bá nô lệ , khởi động lại cơ sở dữ liệu và máy chủ, thêm hoặc xóa các nút cơ sở dữ liệu, thêm hoặc xóa các nút cân bằng tải, xây dựng lại nô lệ sao chép, v.v.

Bằng cách sử dụng các hành động này, bạn cũng có thể khôi phục dự phòng của mình nếu cần bằng cách xây dựng lại và quảng cáo cái trước.

ClusterControl có các dịch vụ giám sát và cảnh báo giúp bạn biết điều gì đang xảy ra hoặc thậm chí nếu điều gì đó đã xảy ra trước đó.

Bạn cũng có thể sử dụng phần trang tổng quan để có chế độ xem thân thiện hơn với người dùng về trạng thái hệ thống của bạn.

Kết luận

Trong trường hợp cơ sở dữ liệu chính bị lỗi, bạn sẽ muốn có tất cả thông tin tại chỗ để thực hiện các hành động cần thiết càng sớm càng tốt. Có một DRP tốt là chìa khóa để giữ cho hệ thống của bạn luôn hoạt động (hoặc gần như toàn bộ) thời gian. DRP này nên bao gồm một quy trình chuyển đổi dự phòng được ghi chép đầy đủ để có một RTO (Mục tiêu Thời gian Khôi phục) được chấp nhận cho công ty.


  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ác phương pháp hay nhất trong cơ sở dữ liệu chia tỷ lệ:Phần thứ hai

  2. Cách đặt MariaDB để sử dụng Đầu ra theo chiều dọc

  3. Giới thiệu về Tìm kiếm Toàn văn trong MariaDB

  4. MariaDB sắp đến một thành phố gần bạn!

  5. Xây dựng chế độ chờ nóng trên Amazon AWS bằng MariaDB Cluster