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

Thiết lập một cụm cơ sở dữ liệu phân tán theo địa lý bằng cách sử dụng MySQL Replication

Một điểm lỗi (SPOF) là lý do phổ biến tại sao các tổ chức đang làm việc để phân phối sự hiện diện của môi trường cơ sở dữ liệu của họ đến một vị trí địa lý khác. Đây là một phần của kế hoạch chiến lược Phục hồi sau thảm họa và Tiếp tục kinh doanh.

Lập kế hoạch khôi phục sau thảm họa (DR) bao gồm các quy trình kỹ thuật bao gồm việc chuẩn bị cho các vấn đề không lường trước như thiên tai, tai nạn (chẳng hạn như lỗi của con người) hoặc sự cố (chẳng hạn như hành vi phạm tội).

Trong thập kỷ qua, phân phối môi trường cơ sở dữ liệu của bạn trên nhiều vị trí địa lý là một thiết lập khá phổ biến, vì các đám mây công cộng cung cấp nhiều cách để giải quyết vấn đề này. Thách thức đến trong việc thiết lập môi trường cơ sở dữ liệu. Nó tạo ra những thách thức khi bạn cố gắng quản lý (các) cơ sở dữ liệu, di chuyển dữ liệu của bạn đến một vị trí địa lý khác hoặc áp dụng bảo mật với mức độ quan sát cao.

Trong blog này, chúng tôi sẽ giới thiệu cách bạn có thể thực hiện việc này bằng MySQL Replication. Chúng tôi sẽ trình bày cách bạn có thể sao chép dữ liệu của mình sang một nút cơ sở dữ liệu khác nằm ở một quốc gia khác xa vị trí địa lý hiện tại của cụm MySQL. Đối với ví dụ này, khu vực mục tiêu của chúng tôi dựa trên phía đông chúng tôi, trong khi cơ sở của tôi là ở châu Á, ở Philippines.

Tại sao tôi cần Cụm cơ sở dữ liệu vị trí địa lý?

Ngay cả Amazon AWS, nhà cung cấp dịch vụ đám mây công cộng hàng đầu, cũng tuyên bố rằng họ gặp phải tình trạng ngừng hoạt động hoặc ngừng hoạt động ngoài ý muốn (như trường hợp đã xảy ra vào năm 2017). Giả sử bạn đang sử dụng AWS làm trung tâm dữ liệu phụ của mình ngoài việc sử dụng tại chỗ. Bạn không thể có bất kỳ quyền truy cập nội bộ nào vào phần cứng cơ bản của nó hoặc vào các mạng nội bộ đang quản lý các nút máy tính của bạn. Đây là những dịch vụ được quản lý hoàn toàn mà bạn đã trả tiền, nhưng bạn không thể tránh khỏi thực tế là nó có thể bị ngừng hoạt động bất cứ lúc nào. Nếu một vị trí địa lý như vậy bị gián đoạn thì bạn có thể có một thời gian ngừng hoạt động dài.

Loại vấn đề này phải được lường trước trong quá trình lập kế hoạch liên tục kinh doanh của bạn. Nó phải được phân tích và thực hiện dựa trên những gì đã được xác định. Tính liên tục kinh doanh cho cơ sở dữ liệu MySQL của bạn nên bao gồm thời gian hoạt động cao. Một số môi trường đang thực hiện các điểm chuẩn và đặt ra một thanh cao của các bài kiểm tra nghiêm ngặt bao gồm cả mặt yếu để lộ ra bất kỳ lỗ hổng nào, khả năng phục hồi của nó và khả năng mở rộng kiến ​​trúc công nghệ của bạn bao gồm cả cơ sở hạ tầng cơ sở dữ liệu. Đối với kinh doanh, đặc biệt là những người xử lý các giao dịch cao, điều bắt buộc là phải đảm bảo rằng cơ sở dữ liệu sản xuất luôn sẵn sàng cho các ứng dụng ngay cả khi thảm họa xảy ra. Nếu không, bạn có thể gặp phải thời gian chết và có thể khiến bạn mất một số tiền lớn.

Với các tình huống đã xác định này, các tổ chức bắt đầu mở rộng cơ sở hạ tầng của mình cho các nhà cung cấp đám mây khác nhau và đặt các nút đến các vị trí địa lý khác nhau để có thời gian hoạt động cao hơn (nếu có thể là 99,99999999999), RPO thấp hơn và không có SPOF.

Để đảm bảo cơ sở dữ liệu sản xuất tồn tại sau thảm họa, trang Khôi phục sau thảm họa (DR) phải được định cấu hình. Các địa điểm sản xuất và DR phải là một phần của hai trung tâm dữ liệu cách xa nhau về mặt địa lý. Điều này có nghĩa là, cơ sở dữ liệu dự phòng phải được cấu hình tại DR site cho mọi cơ sở dữ liệu sản xuất để các thay đổi dữ liệu xảy ra trên cơ sở dữ liệu sản xuất ngay lập tức được đồng bộ hóa với cơ sở dữ liệu dự phòng thông qua nhật ký giao dịch. Một số thiết lập cũng sử dụng các nút DR của chúng để xử lý các lần đọc nhằm cung cấp cân bằng tải giữa ứng dụng và lớp dữ liệu.

Thiết lập Kiến trúc Mong muốn

Trong blog này, thiết lập mong muốn rất đơn giản và được thực hiện rất phổ biến hiện nay. Xem bên dưới về thiết lập kiến ​​trúc mong muốn cho blog này:

Trong blog này, tôi chọn Google Cloud Platform (GCP) là công khai nhà cung cấp đám mây và sử dụng mạng cục bộ của tôi làm môi trường cơ sở dữ liệu tại chỗ.

Điều bắt buộc là khi sử dụng kiểu thiết kế này, bạn luôn cần cả môi trường hoặc nền tảng để giao tiếp một cách rất an toàn. Sử dụng VPN hoặc sử dụng các lựa chọn thay thế như AWS Direct Connect. Mặc dù các đám mây công cộng này ngày nay cung cấp các dịch vụ VPN được quản lý mà bạn có thể sử dụng. Nhưng đối với thiết lập này, chúng tôi sẽ sử dụng OpenVPN vì tôi không cần phần cứng hoặc dịch vụ phức tạp cho blog này.

Cách tốt nhất và hiệu quả nhất

Đối với môi trường cơ sở dữ liệu MySQL / Percona / MariaDB, cách tốt nhất và hiệu quả là tạo một bản sao lưu cơ sở dữ liệu của bạn, gửi đến nút đích để triển khai hoặc khởi tạo. Có nhiều cách khác nhau để sử dụng phương pháp này, bạn có thể sử dụng mysqldump, mydumper, rsync hoặc sử dụng Percona XtraBackup / Mariabackup và truyền dữ liệu đến nút đích của bạn.

Sử dụng mysqldump

mysqldump tạo một bản sao lưu hợp lý cho toàn bộ cơ sở dữ liệu của bạn hoặc bạn có thể chọn một cách có chọn lọc danh sách cơ sở dữ liệu, bảng hoặc thậm chí các bản ghi cụ thể mà bạn muốn kết xuất.

Một lệnh đơn giản mà bạn có thể sử dụng để sao lưu toàn bộ có thể là,

$ mysqldump --single-transaction --all-databases --triggers --routines --events --master-data | mysql -h <target-host-db-node -u<user> -p<password> -vvv --show-warnings

Với lệnh đơn giản này, nó sẽ chạy trực tiếp các câu lệnh MySQL tới nút cơ sở dữ liệu đích, ví dụ:nút cơ sở dữ liệu đích của bạn trên Google Compute Engine. Điều này có thể hiệu quả khi dữ liệu nhỏ hơn hoặc bạn có băng thông nhanh. Nếu không, đóng gói cơ sở dữ liệu của bạn thành một tệp, sau đó gửi nó đến nút đích có thể là tùy chọn của bạn.

$ mysqldump --single-transaction --all-databases --triggers --routines --events --master-data | gzip > mydata.db

$ scp mydata.db <target-host>:/some/path

Sau đó chạy mysqldump tới nút cơ sở dữ liệu đích,

zcat mydata.db | mysql

Nhược điểm của việc sử dụng sao lưu hợp lý bằng mysqldump là nó chậm hơn và tốn dung lượng đĩa. Nó cũng sử dụng một luồng duy nhất nên bạn không thể chạy song song. Theo tùy chọn, bạn có thể sử dụng bộ đệm tôi, đặc biệt khi dữ liệu của bạn quá lớn. mydumper có thể chạy song song nhưng nó không linh hoạt bằng mysqldump.

Sử dụng xtrabackup

xtrabackup là một bản sao lưu vật lý nơi bạn có thể gửi các luồng hoặc tệp nhị phân đến nút đích. Điều này rất hiệu quả và chủ yếu được sử dụng khi phát trực tuyến một bản sao lưu qua mạng, đặc biệt là khi nút đích có vị trí địa lý khác nhau hoặc khu vực khác nhau. ClusterControl sử dụng xtrabackup khi cấp phép hoặc khởi tạo máy chủ mới bất kể nó nằm ở đâu miễn là quyền truy cập và quyền đã được thiết lập trước khi hành động.

Nếu bạn đang sử dụng xtrabackup để chạy nó theo cách thủ công, bạn có thể chạy lệnh như vậy,

## Nút đích

$  socat -u tcp-listen:9999,reuseaddr stdout 2>/tmp/netcat.log | xbstream -x -C /var/lib/mysql

## Nút nguồn

$ innobackupex --defaults-file=/etc/my.cnf --stream=xbstream --socket=/var/lib/mysql/mysql.sock  --host=localhost --tmpdir=/tmp /tmp | socat -u stdio TCP:192.168.10.70:9999

Để xây dựng hai lệnh đó, lệnh đầu tiên phải được thực hiện hoặc chạy trước trên nút đích. Lệnh nút đích không lắng nghe trên cổng 9999 và sẽ ghi bất kỳ luồng nào nhận được từ cổng 9999 trong nút đích. Nó phụ thuộc vào các lệnh socat và xbstream, có nghĩa là bạn phải đảm bảo rằng bạn đã cài đặt các gói này.

Trên nút nguồn, nó thực thi tập lệnh innobackupex perl gọi xtrabackup trong nền và sử dụng xbstream để truyền dữ liệu sẽ được gửi qua mạng. Lệnh socat mở cổng 9999 và gửi dữ liệu của nó đến máy chủ lưu trữ mong muốn, trong ví dụ này là 192.168.10.70. Tuy nhiên, hãy đảm bảo rằng bạn đã cài đặt socat và xbstream khi sử dụng lệnh này. Cách khác để sử dụng socat là nc nhưng socat cung cấp nhiều tính năng nâng cao hơn so với nc như tuần tự hóa như nhiều máy khách có thể nghe trên một cổng.

ClusterControl sử dụng lệnh này khi xây dựng lại một nô lệ hoặc xây dựng một nô lệ mới. Nó nhanh chóng và đảm bảo bản sao chính xác của dữ liệu nguồn của bạn sẽ được sao chép vào nút mục tiêu của bạn. Khi cung cấp cơ sở dữ liệu mới vào một vị trí địa lý riêng biệt, việc sử dụng cách tiếp cận này mang lại hiệu quả cao hơn và giúp bạn hoàn thành công việc nhanh hơn. Mặc dù có thể có những ưu và nhược điểm khi sử dụng sao lưu lôgic hoặc nhị phân khi truyền qua dây. Sử dụng phương pháp này là một cách tiếp cận rất phổ biến khi thiết lập một cụm cơ sở dữ liệu vị trí địa lý mới cho một khu vực khác và tạo một bản sao chính xác của môi trường cơ sở dữ liệu của bạn.

Hiệu quả, Khả năng quan sát và Tốc độ

Những câu hỏi được đặt ra bởi hầu hết những người không quen thuộc với cách tiếp cận này luôn bao hàm các vấn đề "LÀM THẾ NÀO, CÁI GÌ, Ở ĐÂU". Trong phần này, chúng tôi sẽ đề cập đến cách bạn có thể thiết lập cơ sở dữ liệu vị trí địa lý của mình một cách hiệu quả với ít công việc phải giải quyết hơn và khả năng quan sát được tại sao nó không thành công. Sử dụng ClusterControl rất hiệu quả. Trong thiết lập hiện tại tôi có, môi trường sau như được triển khai ban đầu:

Mở rộng Nút thành GCP

Bắt đầu thiết lập cụm cơ sở dữ liệu Vị trí địa lý của bạn, để mở rộng cụm của bạn và tạo bản sao chụp nhanh của cụm, bạn có thể thêm một nô lệ mới. Như đã đề cập trước đó, ClusterControl sẽ sử dụng xtrabackup (mariabackup cho MariaDB 10.2 trở đi) và triển khai một nút mới trong cụm của bạn. Trước khi có thể đăng ký các nút tính toán GCP làm nút đích, trước tiên bạn cần thiết lập người dùng hệ thống thích hợp giống như người dùng hệ thống mà bạn đã đăng ký trong ClusterControl. Bạn có thể xác minh điều này trong /etc/cmon.d/cmon_X.cnf của mình, trong đó X là cluster_id. Ví dụ, hãy xem bên dưới:

# grep 'ssh_user' /etc/cmon.d/cmon_27.cnf 

ssh_user=maximus

maximus (trong ví dụ này) phải có trong các nút tính toán GCP của bạn. Người dùng trong các nút GCP của bạn phải có đặc quyền sudo hoặc quản trị viên cấp cao. Nó cũng phải được thiết lập với quyền truy cập SSH không cần mật khẩu. Vui lòng đọc tài liệu của chúng tôi thêm về người dùng hệ thống và đó là các đặc quyền bắt buộc.

Hãy xem danh sách ví dụ về các máy chủ bên dưới (từ bảng điều khiển GCP:Bảng điều khiển Compute Engine):

Trong ảnh chụp màn hình ở trên, khu vực mục tiêu của chúng tôi dựa trên phía đông của chúng tôi vùng đất. Như đã lưu ý trước đó, mạng cục bộ của tôi được thiết lập trên một lớp bảo mật thông qua GCP (ngược lại) bằng OpenVPN. Vì vậy, giao tiếp từ GCP đến mạng cục bộ của tôi cũng được gói gọn qua đường hầm VPN.

Thêm nút nô lệ vào GCP

Ảnh chụp màn hình bên dưới cho biết cách bạn có thể thực hiện việc này. Xem hình ảnh bên dưới:

Như đã thấy trong ảnh chụp màn hình thứ hai, chúng tôi đang nhắm mục tiêu nút 10.142.0.12 và nguồn gốc của nó là 192.168.70.10. ClusterControl đủ thông minh để xác định tường lửa, mô-đun bảo mật, gói, cấu hình và thiết lập cần được thực hiện. Xem ví dụ dưới đây về nhật ký hoạt động công việc:

Một nhiệm vụ khá đơn giản phải không?

Hoàn thành Cụm GCP MySQL

Chúng ta cần thêm hai nút nữa vào cụm GCP để có cấu trúc liên kết cân bằng như chúng ta đã có trong mạng cục bộ. Đối với nút thứ hai và thứ ba, hãy đảm bảo rằng nút chính phải trỏ đến nút GCP của bạn. Trong ví dụ này, cái chính là 10.142.0.12. Xem bên dưới cách thực hiện việc này,

Như đã thấy trong ảnh chụp màn hình ở trên, tôi đã chọn 10.142.0.12 (nô lệ ) là nút đầu tiên chúng tôi đã thêm vào cụm. Kết quả đầy đủ hiển thị như sau,

Thiết lập cuối cùng của bạn cho Cụm cơ sở dữ liệu vị trí địa lý

Từ ảnh chụp màn hình cuối cùng, loại cấu trúc liên kết này có thể không phải là thiết lập lý tưởng của bạn. Hầu hết, nó phải là một thiết lập đa tổng thể, trong đó cụm DR của bạn đóng vai trò là cụm dự phòng, trong đó tại chỗ của bạn đóng vai trò là cụm hoạt động chính. Để làm điều này, nó khá đơn giản trong ClusterControl. Xem ảnh chụp màn hình sau để đạt được mục tiêu này.

Bạn chỉ có thể kéo trang cái hiện tại của mình đến trang cái đích cần phải thiết lập như một người viết dự phòng chính để đề phòng trường hợp bị hại tại chỗ của bạn. Trong ví dụ này, chúng tôi kéo máy chủ nhắm mục tiêu 10.142.0.12 (nút tính toán GCP). Kết quả cuối cùng được hiển thị bên dưới:

Sau đó, nó đạt được kết quả mong muốn. Dễ dàng và rất nhanh chóng để tạo ra cụm Cơ sở dữ liệu vị trí địa lý của bạn bằng cách sử dụng MySQL Replication.

Kết luận

Có Cụm Cơ sở dữ liệu Vị trí Địa lý không phải là mới. Đây là một thiết lập mong muốn cho các công ty và tổ chức tránh SPOF, những người muốn có khả năng phục hồi và RPO thấp hơn.

Những điểm cần rút ra chính cho thiết lập này là bảo mật, dự phòng và khả năng phục hồi. Nó cũng bao gồm mức độ khả thi và hiệu quả mà bạn có thể triển khai cụm mới của mình đến một khu vực địa lý khác. Mặc dù ClusterControl có thể cung cấp điều này, nhưng chúng tôi hy vọng chúng tôi có thể cải thiện điều này sớm hơn, nơi bạn có thể tạo hiệu quả từ bản sao lưu và tạo ra cụm khác mới của bạn trong ClusterControl, vì vậy hãy chú ý theo dõi.


  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 khắc phục việc xóa dữ liệu ngẫu nhiên trong MySQL &MariaDB

  2. Triển khai MySQL Galera Cluster 4.0 trên Amazon AWS EC2

  3. Có gì mới trong MariaDB Cluster 10.4

  4. Cách DATE_SUB () hoạt động trong MariaDB

  5. MariaDB JSON_ARRAY () Giải thích